Architecture AS-IS
OTP Sign In
Braze
Proposal
Solution 1 - Add isBlocked field in User DynamoDB item
Workflow:
Support agent blocks the user
Blocked user attempts login
User is blocked while logged in WL → Add getMe query when user goes to cart page
User is blocked while logged in WL → Validate blocked user on gateway
Task breakdown
Changes in intl-whitelabel-cms
Create email template for blocked user notification
Templates should use the Liquid syntax
Create email template for unblocked user notification
Templates should use the Liquid syntax
Changes in intl-notifications-service
Create send block notification endpoint
POST /api/v1/email/send-block
Create block TemplateType
Receive SendEmailRequestDto as payload
Create send unblock notification endpoint
POST /api/v1/email/send-unblock
Create unblock TemplateType
Receive SendEmailRequestDto as payload
Changes in intl-users-service
Create block user endpoint
Endpoint: POST /api/v1/users/block-user/{cognitoId}
Add isBlocked field to user details base interface
The field should be returned in GET user endpoint
Use UpdateService to set is blocked to true
user notification-service to send email
remove user from braze campaings
Create unblock user endpoint
Endpoint: POST /api/v1/users/unblock-user/{cognitoId}
Use UpdateService to set is blocked to false
user notification-service to send email
return user to braze campaings
Prevent blocked users from signing in
Create UserBlockedError apollo error
Add isBlocked validation in the listed resolvers:
createOTP
createLoginOTP
signInJWT
socialLogin
User not found validation for reference
Changes in intl-packages
Add isBlocked to userDetails type
Create method to block user
Should use axios to trigger a request to user service
Create method to unblock user
Should use axios to trigger a request to user service
Changes in intl-whitelable-graphql
Changes in intl-admin-app
Changes in intl-whitelable-app
Solution 2 - Disable user in cognito