Skip to content

Commit

Permalink
new logic for verified badge: have to complete quiz (#116)
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-cronus authored Feb 5, 2024
1 parent dc902f4 commit 17aedf4
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 11 deletions.
1 change: 1 addition & 0 deletions users/contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ type (
HiddenProfileElements *Enum[HiddenProfileElement] `json:"hiddenProfileElements,omitempty" swaggertype:"array,string" example:"level" enums:"globalRank,referralCount,level,role,badges" db:"hidden_profile_elements"` //nolint:lll // .
RandomReferredBy *bool `json:"randomReferredBy,omitempty" example:"true" swaggerignore:"true" db:"random_referred_by"`
Verified *bool `json:"verified,omitempty" example:"true" db:"-"`
QuizCompleted *bool `json:"-" db:"quiz_completed"`
KYCStepsLastUpdatedAt *[]*time.Time `json:"kycStepsLastUpdatedAt,omitempty" swaggertype:"array,string" example:"2022-01-03T16:20:52.156534Z" db:"kyc_steps_last_updated_at"` //nolint:lll // .
KYCStepsCreatedAt *[]*time.Time `json:"kycStepsCreatedAt,omitempty" swaggertype:"array,string" example:"2022-01-03T16:20:52.156534Z" db:"kyc_steps_created_at"` //nolint:lll // .
KYCStepPassed *KYCStep `json:"kycStepPassed,omitempty" example:"0" db:"kyc_step_passed"`
Expand Down
3 changes: 2 additions & 1 deletion users/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,8 @@ func (u *User) SetVerified() {
}

func (u *User) IsVerified() bool {
return u != nil && u.KYCStepPassed != nil && *u.KYCStepPassed >= QuizKYCStep
return u != nil && u.KYCStepPassed != nil && *u.KYCStepPassed >= QuizKYCStep &&
u.QuizCompleted != nil && *u.QuizCompleted
}

func (r *repository) sanitizeUserForUI(usr *User) {
Expand Down
37 changes: 28 additions & 9 deletions users/users_get.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@ func (r *repository) getUserByID(ctx context.Context, id UserID) (*User, error)
return nil, errors.Wrap(ctx.Err(), "get user failed because context failed")
}
result, err := storage.Get[User](ctx, r.db, `
SELECT *
SELECT users.*,
qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true AS quiz_completed
FROM users
LEFT JOIN quiz_sessions qs
ON qs.user_id = users.id
WHERE id = $1`, id)
if err != nil {
return nil, errors.Wrapf(err, "failed to get user by id %v", id)
Expand All @@ -38,11 +41,14 @@ func (r *repository) GetUserByID(ctx context.Context, userID string) (*UserProfi
sql := `
SELECT
u.*,
(qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true) AS quiz_completed,
COALESCE(refs.t1, 0) as t1_referral_count,
COALESCE(refs.t2, 0) as t2_referral_count
FROM users u
LEFT JOIN referral_acquisition_history refs
ON refs.user_id = u.id
LEFT JOIN quiz_sessions qs
ON qs.user_id = u.id
WHERE u.id = $1`
res, err := storage.Get[UserProfile](ctx, r.db, sql, userID)
if err != nil {
Expand Down Expand Up @@ -113,7 +119,13 @@ func (r *repository) GetUserByUsername(ctx context.Context, username string) (*U
if ctx.Err() != nil {
return nil, errors.Wrap(ctx.Err(), "get user failed because context failed")
}
result, err := storage.Get[User](ctx, r.db, `SELECT * FROM users WHERE username = $1`, username)
result, err := storage.Get[User](ctx, r.db, `
SELECT users.*,
(qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true) AS quiz_completed
FROM users
LEFT JOIN quiz_sessions qs
ON qs.user_id = users.id
WHERE username = $1`, username)
if err != nil {
return nil, errors.Wrapf(err, "failed to get user by username %v", username)
}
Expand All @@ -127,7 +139,11 @@ func (r *repository) GetUserByUsername(ctx context.Context, username string) (*U
}

func (r *repository) GetUserByPhoneNumber(ctx context.Context, phoneNumber string) (*User, error) {
sql := `SELECT * FROM users WHERE phone_number = $1 AND phone_number != id`
sql := `SELECT users.*, (qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true) AS quiz_completed
FROM users
LEFT JOIN quiz_sessions qs
ON qs.user_id = users.id
WHERE phone_number = $1 AND phone_number != id`
usr, err := storage.Get[User](ctx, r.db, sql, phoneNumber)
if err != nil {
if errors.Is(err, ErrNotFound) {
Expand Down Expand Up @@ -166,7 +182,7 @@ func (r *repository) GetUsers(ctx context.Context, keyword string, limit, offset
}
sql := fmt.Sprintf(`
SELECT
u.kyc_step_passed >= %[2]v AS verified,
(u.kyc_step_passed >= %[2]v AND u.quiz_completed) AS verified,
u.last_mining_ended_at AS active,
u.last_ping_cooldown_ended_at AS pinged,
u.phone_number_ AS phone_number,
Expand Down Expand Up @@ -218,11 +234,12 @@ func (r *repository) GetUsers(ctx context.Context, keyword string, limit, offset
WHEN t0.referred_by = user_requesting_this.id and t0.id != t0.referred_by
THEN 'T2'
ELSE ''
END) AS referral_type,
user_requesting_this.id AS user_requesting_this_id,
user_requesting_this.referred_by AS user_requesting_this_referred_by,
t0.referred_by AS t0_referred_by,
t0.id AS t0_id
END) AS referral_type,
user_requesting_this.id AS user_requesting_this_id,
user_requesting_this.referred_by AS user_requesting_this_referred_by,
t0.referred_by AS t0_referred_by,
t0.id AS t0_id,
qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true AS quiz_completed
FROM users u
JOIN USERS t0
ON t0.id = u.referred_by
Expand All @@ -232,6 +249,8 @@ func (r *repository) GetUsers(ctx context.Context, keyword string, limit, offset
ON user_requesting_this.id = $5
AND user_requesting_this.username != user_requesting_this.id
AND user_requesting_this.referred_by != user_requesting_this.id
LEFT JOIN quiz_sessions qs
ON qs.user_id = u.id
WHERE
u.lookup @@ $2::tsquery
) u
Expand Down
4 changes: 3 additions & 1 deletion users/users_referrals.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (r *repository) GetReferrals(ctx context.Context, userID string, referralTy
'' AS city,
$2 AS referral_type
FROM (SELECT
referrals.kyc_step_passed >= %[5]v AS verified,
(referrals.kyc_step_passed >= %[5]v AND qs.user_id IS NOT NULL AND qs.ended_at is not null AND qs.ended_successfully = true) AS verified,
COALESCE(referrals.last_mining_ended_at, to_timestamp(0)) AS last_mining_ended_at,
(CASE
WHEN u.id = referrals.referred_by OR u.referred_by = referrals.id
Expand All @@ -124,6 +124,8 @@ func (r *repository) GetReferrals(ctx context.Context, userID string, referralTy
referrals.created_at AS created_at
FROM USERS u
%[2]v
LEFT JOIN quiz_sessions qs
ON qs.user_id = referrals.id
WHERE u.id = $1
ORDER BY ((CASE WHEN NULLIF(referrals.phone_number_hash,'') IS NOT NULL AND referrals.id = ANY(u.agenda_contact_user_ids)
THEN referrals.phone_number
Expand Down

0 comments on commit 17aedf4

Please sign in to comment.