feat: add user blocking functionality and related database changes#2598
feat: add user blocking functionality and related database changes#2598
Conversation
📝 WalkthroughWalkthroughIntroduces user blocking functionality by adding an Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant API as Block User API
participant UserRepo as UserRepository
participant DB as Database
participant JobQueue as JobQueueService
Client->>API: POST /users/{userId}/block
API->>UserRepo: blockUser(userId)
UserRepo->>DB: UPDATE userSetting SET is_blocked=true
DB-->>UserRepo: Updated User
UserRepo-->>API: UserOutput
API->>JobQueue: enqueue(CloseBlockedUserDeployments)
JobQueue-->>API: Job scheduled
API-->>Client: {id, isBlocked: true}
sequenceDiagram
participant Client
participant BlockedUserInterceptor
participant ExecutionContextService
participant NextHandler
Client->>BlockedUserInterceptor: Request (POST/DELETE/etc.)
BlockedUserInterceptor->>ExecutionContextService: Get CURRENT_USER
ExecutionContextService-->>BlockedUserInterceptor: currentUser with isBlocked flag
alt User is blocked & method is not safe
BlockedUserInterceptor-->>Client: 403 Forbidden (User is blocked)
else User is not blocked OR method is safe (GET/HEAD/OPTIONS)
BlockedUserInterceptor->>NextHandler: pass to next middleware
NextHandler-->>Client: Process request normally
end
sequenceDiagram
participant JobQueue
participant CloseBlockedUserDeploymentsHandler
participant UserWalletRepo as UserWalletRepository
participant DeploymentReader
participant DeploymentWriter
participant Logger
JobQueue->>CloseBlockedUserDeploymentsHandler: handle(payload: userId)
CloseBlockedUserDeploymentsHandler->>UserWalletRepo: findByUserId(userId)
alt Wallet not found
UserWalletRepo-->>CloseBlockedUserDeploymentsHandler: undefined
CloseBlockedUserDeploymentsHandler->>Logger: Skip - no wallet
else Wallet found but no address
UserWalletRepo-->>CloseBlockedUserDeploymentsHandler: Wallet (no address)
CloseBlockedUserDeploymentsHandler->>Logger: Skip - no address
else Wallet with address
UserWalletRepo-->>CloseBlockedUserDeploymentsHandler: Wallet
CloseBlockedUserDeploymentsHandler->>DeploymentReader: list(userId)
DeploymentReader-->>CloseBlockedUserDeploymentsHandler: deployments[]
loop For each deployment
CloseBlockedUserDeploymentsHandler->>DeploymentWriter: close(wallet, dseq)
alt Success
DeploymentWriter-->>CloseBlockedUserDeploymentsHandler: closed
CloseBlockedUserDeploymentsHandler->>Logger: Log success
else Failure
DeploymentWriter-->>CloseBlockedUserDeploymentsHandler: error
CloseBlockedUserDeploymentsHandler->>Logger: Log error (continue)
end
end
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Comment |
❌ 1 Tests Failed:
View the top 1 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
Summary by CodeRabbit
Release Notes
✏️ Tip: You can customize this high-level summary in your review settings.