quiz grouping
This commit is contained in:
@@ -35,6 +35,7 @@ type QuizInput struct {
|
||||
TargetKind string
|
||||
TargetPath *string
|
||||
TargetTitle string
|
||||
TargetYear *int
|
||||
Questions []QuestionInput
|
||||
}
|
||||
|
||||
@@ -51,12 +52,12 @@ type OptionInput struct {
|
||||
}
|
||||
|
||||
const quizColumns = `q.id, q.title, q.description, q.target_kind, q.target_path,
|
||||
q.target_title, q.published_at, q.created_at, q.updated_at,
|
||||
q.target_title, q.target_year, q.published_at, q.created_at, q.updated_at,
|
||||
(SELECT count(*) FROM quiz_questions qq WHERE qq.quiz_id = q.id)`
|
||||
|
||||
func scanQuiz(row pgx.Row, q *model.Quiz, extra ...any) error {
|
||||
dest := []any{&q.ID, &q.Title, &q.Description, &q.TargetKind, &q.TargetPath,
|
||||
&q.TargetTitle, &q.PublishedAt, &q.CreatedAt, &q.UpdatedAt, &q.QuestionCount}
|
||||
&q.TargetTitle, &q.TargetYear, &q.PublishedAt, &q.CreatedAt, &q.UpdatedAt, &q.QuestionCount}
|
||||
return row.Scan(append(dest, extra...)...)
|
||||
}
|
||||
|
||||
@@ -147,9 +148,9 @@ func (r *QuizRepo) Create(ctx context.Context, in QuizInput, createdBy string) (
|
||||
defer tx.Rollback(ctx) //nolint:errcheck
|
||||
var id string
|
||||
if err := tx.QueryRow(ctx, `
|
||||
INSERT INTO quizzes (title, description, target_kind, target_path, target_title, created_by)
|
||||
VALUES ($1, $2, $3, $4, $5, $6) RETURNING id`,
|
||||
in.Title, in.Description, in.TargetKind, in.TargetPath, in.TargetTitle, createdBy,
|
||||
INSERT INTO quizzes (title, description, target_kind, target_path, target_title, target_year, created_by)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id`,
|
||||
in.Title, in.Description, in.TargetKind, in.TargetPath, in.TargetTitle, in.TargetYear, createdBy,
|
||||
).Scan(&id); err != nil {
|
||||
if isUniqueViolation(err, "quizzes_one_per_target") {
|
||||
return "", ErrQuizTargetTaken
|
||||
@@ -173,9 +174,9 @@ func (r *QuizRepo) Update(ctx context.Context, id string, in QuizInput, replaceQ
|
||||
defer tx.Rollback(ctx) //nolint:errcheck
|
||||
tag, err := tx.Exec(ctx, `
|
||||
UPDATE quizzes SET title = $2, description = $3, target_kind = $4,
|
||||
target_path = $5, target_title = $6, updated_at = now()
|
||||
target_path = $5, target_title = $6, target_year = $7, updated_at = now()
|
||||
WHERE id = $1 AND deleted_at IS NULL`,
|
||||
id, in.Title, in.Description, in.TargetKind, in.TargetPath, in.TargetTitle)
|
||||
id, in.Title, in.Description, in.TargetKind, in.TargetPath, in.TargetTitle, in.TargetYear)
|
||||
if err != nil {
|
||||
if isUniqueViolation(err, "quizzes_one_per_target") {
|
||||
return ErrQuizTargetTaken
|
||||
|
||||
Reference in New Issue
Block a user