Skip to content

Commit

Permalink
do not sync face status if user bypassed face cuz of no queue slots (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-cronus authored Jun 27, 2024
1 parent 20c831b commit 13d6569
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions kyc/face/face.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func New(ctx context.Context, usersRep UserRepository) Client {
return cl
}

//nolint:funlen,gocognit,revive // .
//nolint:funlen,gocognit,revive,gocyclo,cyclop // .
func (c *client) CheckStatus(ctx context.Context, user *users.User, nextKYCStep users.KYCStep) (bool, error) {
kycFaceAvailable := false
if errs := c.unexpectedErrors.Load(); errs >= c.cfg.UnexpectedErrorsAllowed {
Expand All @@ -43,31 +43,38 @@ func (c *client) CheckStatus(ctx context.Context, user *users.User, nextKYCStep
return false, errors.Wrapf(err, "failed to check if user id %v was forwarded to face kyc before", user.ID)
}
hasResult := false
if userWasPreviouslyForwardedToFaceKYC {
now := time.Now()
if userWasPreviouslyForwardedToFaceKYC && user.LastMiningStartedAt.Before(*now.Time) {
if hasResult, err = c.client.CheckAndUpdateStatus(ctx, user); err != nil {
c.unexpectedErrors.Add(1)
log.Error(errors.Wrapf(err, "[unexpected]failed to update face auth status for user ID %s", user.ID))

return false, nil
}
if hasResult {
if dErr := c.deleteUserForwarded(ctx, user.ID); dErr != nil {
return false, errors.Wrapf(err, "failed to delete user forwarded to face kyc for user id %v", user.ID)
}
}
if hasResult || user.LastMiningStartedAt.After(*now.Time) { // User canceled and started mining when there were no slots.
if dErr := c.deleteUserForwarded(ctx, user.ID); dErr != nil {
return false, errors.Wrapf(err, "failed to delete user forwarded to face kyc for user id %v", user.ID)
}
}
if !hasResult || nextKYCStep == users.LivenessDetectionKYCStep {
availabilityErr := c.client.Available(ctx, userWasPreviouslyForwardedToFaceKYC)
if availabilityErr == nil {
kycFaceAvailable = true
if fErr := c.saveUserForwarded(ctx, user.ID); fErr != nil {
if fErr := c.saveUserForwarded(ctx, user.ID, now); fErr != nil {
return false, errors.Wrapf(fErr, "failed ")
}
} else if !errors.Is(availabilityErr, internal.ErrNotAvailable) {
c.unexpectedErrors.Add(1)
log.Error(errors.Wrapf(availabilityErr, "[unexpected]face auth is unavailable for userID %v KYCStep %v", user.ID, nextKYCStep))
}
}
if !kycFaceAvailable && userWasPreviouslyForwardedToFaceKYC {
// User will bypass face (no slots) and mine, will recreate forward next time not to sync state next time.
if dErr := c.deleteUserForwarded(ctx, user.ID); dErr != nil {
return false, errors.Wrapf(err, "failed to delete user forwarded to face kyc for user id %v", user.ID)
}
}

return kycFaceAvailable, nil
}
Expand All @@ -78,8 +85,7 @@ func (c *client) deleteUserForwarded(ctx context.Context, userID string) error {
return errors.Wrapf(err, "failed to delete user forwarded to face kyc for userID %v", userID)
}

func (c *client) saveUserForwarded(ctx context.Context, userID string) error {
now := time.Now()
func (c *client) saveUserForwarded(ctx context.Context, userID string, now *time.Time) error {
_, err := storage.Exec(ctx, c.db, "INSERT INTO users_forwarded_to_face_kyc(forwarded_at, user_id) values ($1, $2) ON CONFLICT DO NOTHING;", now.Time, userID)

return errors.Wrapf(err, "failed to save user forwarded to face kyc for userID %v", userID)
Expand Down

0 comments on commit 13d6569

Please sign in to comment.