Skip to content

Commit

Permalink
review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-dionysos committed Jan 15, 2024
1 parent 7a30ad3 commit 25386db
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 28 deletions.
4 changes: 2 additions & 2 deletions cmd/eskimo-hut/kyc.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func (s *service) StartOrContinueKYCStep4Session( //nolint:gocritic,funlen // .
case errors.Is(err, kycquiz.ErrUnknownUser) || errors.Is(err, kycquiz.ErrUnknownSession):
return nil, server.NotFound(err, userNotFoundErrorCode)

case errors.Is(err, kycquiz.ErrSessionExpired), errors.Is(err, kycquiz.ErrSessionFinished), errors.Is(err, kycquiz.ErrSessionFinishedWithError), errors.Is(err, kycquiz.ErrInvalidKYCState): //nolint:lll // .
case errors.Is(err, kycquiz.ErrSessionFinished), errors.Is(err, kycquiz.ErrSessionFinishedWithError), errors.Is(err, kycquiz.ErrInvalidKYCState): //nolint:lll // .
return nil, server.BadRequest(err, raceConditionErrorCode)

case errors.Is(err, kycquiz.ErrUnknownQuestionNumber):
Expand Down Expand Up @@ -244,7 +244,7 @@ func (s *service) TryResetKYCSteps( //nolint:gocritic,funlen,gocognit,revive,cyc
}
case users.QuizKYCStep:
if err := s.quizRepository.SkipQuizSession(ctx, req.Data.UserID); err != nil {
if errors.Is(err, kycquiz.ErrInvalidKYCState) || errors.Is(err, kycquiz.ErrSessionFinished) || errors.Is(err, kycquiz.ErrSessionFinishedWithError) || errors.Is(err, kycquiz.ErrSessionExpired) { //nolint:lll // .
if errors.Is(err, kycquiz.ErrInvalidKYCState) || errors.Is(err, kycquiz.ErrSessionFinished) || errors.Is(err, kycquiz.ErrSessionFinishedWithError) { //nolint:lll // .
log.Error(errors.Wrapf(err, "skipQuizSession failed unexpectedly during tryResetKYCSteps for userID:%v", req.Data.UserID))
err = nil
}
Expand Down
5 changes: 3 additions & 2 deletions kyc/quiz/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ var (
ErrSessionIsAlreadyRunning = newError("another session is already running")
ErrSessionFinished = newError("session closed")
ErrSessionFinishedWithError = newError("session closed with error")
ErrSessionExpired = newError("session expired")
ErrUnknownQuestionNumber = newError("unknown question number")
ErrUnknownSession = newError("unknown session and/or user")
)
Expand All @@ -78,9 +77,11 @@ const (
applicationYamlKey = "kyc/quiz"
)

var ( //nolint:gofumpt //.
var (
//go:embed DDL.sql
ddl string

errSessionExpired = newError("session expired")
)

type (
Expand Down
34 changes: 11 additions & 23 deletions kyc/quiz/quiz.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,8 @@ func (r *repositoryImpl) validateKycStep(user *users.User) error {

func (r *repositoryImpl) SkipQuizSession(ctx context.Context, userID UserID) error { //nolint:funlen //.
// $1: user_id.
// $2: max session duration (seconds).
const stmt = `
select
started_at,
started_at + make_interval(secs => $2) as deadline,
ended_at is not null as finished,
ended_successfully
from
Expand All @@ -121,11 +118,9 @@ func (r *repositoryImpl) SkipQuizSession(ctx context.Context, userID UserID) err
now := time.Now()

data, err := storage.ExecOne[struct {
StartedAt *time.Time `db:"started_at"`
Deadline *time.Time `db:"deadline"`
Finished bool `db:"finished"`
Success bool `db:"ended_successfully"`
}](ctx, tx, stmt, userID, r.config.MaxSessionDurationSeconds)
Finished bool `db:"finished"`
Success bool `db:"ended_successfully"`
}](ctx, tx, stmt, userID)
if err != nil {
if errors.Is(err, storage.ErrNotFound) {
return wrapErrorInTx(ErrUnknownSession)
Expand All @@ -134,14 +129,7 @@ func (r *repositoryImpl) SkipQuizSession(ctx context.Context, userID UserID) err
return errors.Wrap(wrapErrorInTx(err), "failed to get session data")
}

switch {
case data.StartedAt == nil:
return wrapErrorInTx(ErrUnknownSession)

case data.Deadline.Before(*now.Time):
return wrapErrorInTx(ErrSessionExpired)

case data.Finished:
if data.Finished {
if data.Success {
return wrapErrorInTx(ErrSessionFinished)
}
Expand Down Expand Up @@ -384,11 +372,6 @@ func (r *repositoryImpl) startNewSession( //nolint:funlen,revive //.
}

func (r *repositoryImpl) StartQuizSession(ctx context.Context, userID UserID, lang string) (quiz *Quiz, err error) {
err = r.CheckUserKYC(ctx, userID)
if err != nil {
return nil, err
}

questions, err := r.SelectQuestions(ctx, r.DB, lang)
if err != nil {
return nil, err
Expand All @@ -403,6 +386,11 @@ func (r *repositoryImpl) StartQuizSession(ctx context.Context, userID UserID, la
return wrapErrorInTx(errors.Wrapf(ErrSessionFinishedWithError, "wait until %v", cooldown))
}

err = r.CheckUserKYC(ctx, userID)
if err != nil {
return wrapErrorInTx(err)
}

quiz, err = r.startNewSession(ctx, userID, now, tx, lang, questions)

return wrapErrorInTx(err)
Expand Down Expand Up @@ -488,7 +476,7 @@ group by

deadline := data.StartedAt.Add(stdlibtime.Duration(r.config.MaxSessionDurationSeconds) * stdlibtime.Second)
if deadline.Before(now) {
return userProgress{}, ErrSessionExpired
return userProgress{}, errSessionExpired
}

return data.userProgress, nil
Expand Down Expand Up @@ -640,7 +628,7 @@ func (r *repositoryImpl) ContinueQuizSession( //nolint:funlen,revive,gocognit //
now := stdlibtime.Now().Truncate(stdlibtime.Second).UTC()
progress, pErr := r.CheckUserRunningSession(ctx, userID, now, tx)
if pErr != nil {
if errors.Is(pErr, ErrSessionExpired) {
if errors.Is(pErr, errSessionExpired) {
quiz = &Quiz{Result: FailureResult}
pErr = r.UserMarkSessionAsFinished(ctx, userID, now, tx, false, false)
}
Expand Down
2 changes: 1 addition & 1 deletion kyc/quiz/quiz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ func testManagerSessionSkip(ctx context.Context, t *testing.T, r *repositoryImpl
helperForceResetSessionStartedAt(t, r, "bogus")

err = r.SkipQuizSession(ctx, "bogus")
require.ErrorIs(t, err, ErrSessionExpired)
require.NoError(t, err)
})
t.Run("Finished", func(t *testing.T) {
t.Run("Success", func(t *testing.T) {
Expand Down

0 comments on commit 25386db

Please sign in to comment.