99 lines
2.8 KiB
Go
99 lines
2.8 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.30.0
|
|
// source: practice_progress.sql
|
|
|
|
package dbgen
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
const GetFirstIncompletePreviousPractice = `-- name: GetFirstIncompletePreviousPractice :one
|
|
WITH target AS (
|
|
SELECT id, owner_type, owner_id, COALESCE(display_order, 0) AS display_order
|
|
FROM question_sets
|
|
WHERE id = $2::BIGINT
|
|
AND set_type = 'PRACTICE'
|
|
AND status = 'PUBLISHED'
|
|
),
|
|
candidates AS (
|
|
SELECT qs.id, qs.title, COALESCE(qs.display_order, 0) AS display_order
|
|
FROM question_sets qs
|
|
JOIN target t
|
|
ON qs.owner_type = t.owner_type
|
|
AND qs.owner_id = t.owner_id
|
|
WHERE qs.set_type = 'PRACTICE'
|
|
AND qs.status = 'PUBLISHED'
|
|
AND COALESCE(qs.display_order, 0) < t.display_order
|
|
)
|
|
SELECT c.id, c.title, c.display_order
|
|
FROM candidates c
|
|
LEFT JOIN user_practice_progress upp
|
|
ON upp.question_set_id = c.id
|
|
AND upp.user_id = $1::BIGINT
|
|
AND upp.completed_at IS NOT NULL
|
|
WHERE upp.id IS NULL
|
|
ORDER BY c.display_order ASC, c.id ASC
|
|
LIMIT 1
|
|
`
|
|
|
|
type GetFirstIncompletePreviousPracticeParams struct {
|
|
UserID int64 `json:"user_id"`
|
|
QuestionSetID int64 `json:"question_set_id"`
|
|
}
|
|
|
|
type GetFirstIncompletePreviousPracticeRow struct {
|
|
ID int64 `json:"id"`
|
|
Title string `json:"title"`
|
|
DisplayOrder int32 `json:"display_order"`
|
|
}
|
|
|
|
func (q *Queries) GetFirstIncompletePreviousPractice(ctx context.Context, arg GetFirstIncompletePreviousPracticeParams) (GetFirstIncompletePreviousPracticeRow, error) {
|
|
row := q.db.QueryRow(ctx, GetFirstIncompletePreviousPractice, arg.UserID, arg.QuestionSetID)
|
|
var i GetFirstIncompletePreviousPracticeRow
|
|
err := row.Scan(&i.ID, &i.Title, &i.DisplayOrder)
|
|
return i, err
|
|
}
|
|
|
|
const MarkPracticeCompleted = `-- name: MarkPracticeCompleted :execrows
|
|
INSERT INTO user_practice_progress (
|
|
user_id,
|
|
sub_course_id,
|
|
question_set_id,
|
|
completed_at,
|
|
updated_at
|
|
)
|
|
SELECT
|
|
$1::BIGINT,
|
|
CASE
|
|
WHEN qs.owner_type = 'SUB_COURSE' THEN qs.owner_id
|
|
WHEN qs.owner_type = 'SUB_MODULE' THEN sm.legacy_sub_course_id
|
|
ELSE NULL
|
|
END,
|
|
qs.id,
|
|
CURRENT_TIMESTAMP,
|
|
CURRENT_TIMESTAMP
|
|
FROM question_sets qs
|
|
LEFT JOIN sub_modules sm
|
|
ON qs.owner_type = 'SUB_MODULE'
|
|
AND qs.owner_id = sm.id
|
|
WHERE qs.id = $2::BIGINT
|
|
ON CONFLICT (user_id, question_set_id) DO UPDATE
|
|
SET completed_at = EXCLUDED.completed_at,
|
|
updated_at = EXCLUDED.updated_at
|
|
`
|
|
|
|
type MarkPracticeCompletedParams struct {
|
|
UserID int64 `json:"user_id"`
|
|
QuestionSetID int64 `json:"question_set_id"`
|
|
}
|
|
|
|
func (q *Queries) MarkPracticeCompleted(ctx context.Context, arg MarkPracticeCompletedParams) (int64, error) {
|
|
result, err := q.db.Exec(ctx, MarkPracticeCompleted, arg.UserID, arg.QuestionSetID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected(), nil
|
|
}
|