fix: return sample_answer_voice_prompt and audio_correct_answer_text in question set items list
Extend GetQuestionSetItems and GetPublishedQuestionsInSet queries to match paginated fields; map audio answer join in repository instead of nils. Made-with: Cursor
This commit is contained in:
parent
33d34f0dd2
commit
bc68326a66
|
|
@ -21,10 +21,13 @@ SELECT
|
||||||
q.explanation,
|
q.explanation,
|
||||||
q.tips,
|
q.tips,
|
||||||
q.voice_prompt,
|
q.voice_prompt,
|
||||||
|
q.sample_answer_voice_prompt,
|
||||||
q.image_url,
|
q.image_url,
|
||||||
q.status as question_status
|
q.status as question_status,
|
||||||
|
qaa.correct_answer_text AS audio_correct_answer_text
|
||||||
FROM question_set_items qsi
|
FROM question_set_items qsi
|
||||||
JOIN questions q ON q.id = qsi.question_id
|
JOIN questions q ON q.id = qsi.question_id
|
||||||
|
LEFT JOIN question_audio_answers qaa ON qaa.question_id = q.id
|
||||||
WHERE qsi.set_id = $1
|
WHERE qsi.set_id = $1
|
||||||
AND q.status != 'ARCHIVED'
|
AND q.status != 'ARCHIVED'
|
||||||
ORDER BY qsi.display_order;
|
ORDER BY qsi.display_order;
|
||||||
|
|
@ -70,9 +73,12 @@ SELECT
|
||||||
q.explanation,
|
q.explanation,
|
||||||
q.tips,
|
q.tips,
|
||||||
q.voice_prompt,
|
q.voice_prompt,
|
||||||
q.image_url
|
q.sample_answer_voice_prompt,
|
||||||
|
q.image_url,
|
||||||
|
qaa.correct_answer_text AS audio_correct_answer_text
|
||||||
FROM question_set_items qsi
|
FROM question_set_items qsi
|
||||||
JOIN questions q ON q.id = qsi.question_id
|
JOIN questions q ON q.id = qsi.question_id
|
||||||
|
LEFT JOIN question_audio_answers qaa ON qaa.question_id = q.id
|
||||||
WHERE qsi.set_id = $1
|
WHERE qsi.set_id = $1
|
||||||
AND q.status = 'PUBLISHED'
|
AND q.status = 'PUBLISHED'
|
||||||
ORDER BY qsi.display_order;
|
ORDER BY qsi.display_order;
|
||||||
|
|
|
||||||
|
|
@ -69,27 +69,32 @@ SELECT
|
||||||
q.explanation,
|
q.explanation,
|
||||||
q.tips,
|
q.tips,
|
||||||
q.voice_prompt,
|
q.voice_prompt,
|
||||||
q.image_url
|
q.sample_answer_voice_prompt,
|
||||||
|
q.image_url,
|
||||||
|
qaa.correct_answer_text AS audio_correct_answer_text
|
||||||
FROM question_set_items qsi
|
FROM question_set_items qsi
|
||||||
JOIN questions q ON q.id = qsi.question_id
|
JOIN questions q ON q.id = qsi.question_id
|
||||||
|
LEFT JOIN question_audio_answers qaa ON qaa.question_id = q.id
|
||||||
WHERE qsi.set_id = $1
|
WHERE qsi.set_id = $1
|
||||||
AND q.status = 'PUBLISHED'
|
AND q.status = 'PUBLISHED'
|
||||||
ORDER BY qsi.display_order
|
ORDER BY qsi.display_order
|
||||||
`
|
`
|
||||||
|
|
||||||
type GetPublishedQuestionsInSetRow struct {
|
type GetPublishedQuestionsInSetRow struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
SetID int64 `json:"set_id"`
|
SetID int64 `json:"set_id"`
|
||||||
QuestionID int64 `json:"question_id"`
|
QuestionID int64 `json:"question_id"`
|
||||||
DisplayOrder int32 `json:"display_order"`
|
DisplayOrder int32 `json:"display_order"`
|
||||||
QuestionText string `json:"question_text"`
|
QuestionText string `json:"question_text"`
|
||||||
QuestionType string `json:"question_type"`
|
QuestionType string `json:"question_type"`
|
||||||
DifficultyLevel pgtype.Text `json:"difficulty_level"`
|
DifficultyLevel pgtype.Text `json:"difficulty_level"`
|
||||||
Points int32 `json:"points"`
|
Points int32 `json:"points"`
|
||||||
Explanation pgtype.Text `json:"explanation"`
|
Explanation pgtype.Text `json:"explanation"`
|
||||||
Tips pgtype.Text `json:"tips"`
|
Tips pgtype.Text `json:"tips"`
|
||||||
VoicePrompt pgtype.Text `json:"voice_prompt"`
|
VoicePrompt pgtype.Text `json:"voice_prompt"`
|
||||||
ImageUrl pgtype.Text `json:"image_url"`
|
SampleAnswerVoicePrompt pgtype.Text `json:"sample_answer_voice_prompt"`
|
||||||
|
ImageUrl pgtype.Text `json:"image_url"`
|
||||||
|
AudioCorrectAnswerText pgtype.Text `json:"audio_correct_answer_text"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) GetPublishedQuestionsInSet(ctx context.Context, setID int64) ([]GetPublishedQuestionsInSetRow, error) {
|
func (q *Queries) GetPublishedQuestionsInSet(ctx context.Context, setID int64) ([]GetPublishedQuestionsInSetRow, error) {
|
||||||
|
|
@ -113,7 +118,9 @@ func (q *Queries) GetPublishedQuestionsInSet(ctx context.Context, setID int64) (
|
||||||
&i.Explanation,
|
&i.Explanation,
|
||||||
&i.Tips,
|
&i.Tips,
|
||||||
&i.VoicePrompt,
|
&i.VoicePrompt,
|
||||||
|
&i.SampleAnswerVoicePrompt,
|
||||||
&i.ImageUrl,
|
&i.ImageUrl,
|
||||||
|
&i.AudioCorrectAnswerText,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -138,29 +145,34 @@ SELECT
|
||||||
q.explanation,
|
q.explanation,
|
||||||
q.tips,
|
q.tips,
|
||||||
q.voice_prompt,
|
q.voice_prompt,
|
||||||
|
q.sample_answer_voice_prompt,
|
||||||
q.image_url,
|
q.image_url,
|
||||||
q.status as question_status
|
q.status as question_status,
|
||||||
|
qaa.correct_answer_text AS audio_correct_answer_text
|
||||||
FROM question_set_items qsi
|
FROM question_set_items qsi
|
||||||
JOIN questions q ON q.id = qsi.question_id
|
JOIN questions q ON q.id = qsi.question_id
|
||||||
|
LEFT JOIN question_audio_answers qaa ON qaa.question_id = q.id
|
||||||
WHERE qsi.set_id = $1
|
WHERE qsi.set_id = $1
|
||||||
AND q.status != 'ARCHIVED'
|
AND q.status != 'ARCHIVED'
|
||||||
ORDER BY qsi.display_order
|
ORDER BY qsi.display_order
|
||||||
`
|
`
|
||||||
|
|
||||||
type GetQuestionSetItemsRow struct {
|
type GetQuestionSetItemsRow struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
SetID int64 `json:"set_id"`
|
SetID int64 `json:"set_id"`
|
||||||
QuestionID int64 `json:"question_id"`
|
QuestionID int64 `json:"question_id"`
|
||||||
DisplayOrder int32 `json:"display_order"`
|
DisplayOrder int32 `json:"display_order"`
|
||||||
QuestionText string `json:"question_text"`
|
QuestionText string `json:"question_text"`
|
||||||
QuestionType string `json:"question_type"`
|
QuestionType string `json:"question_type"`
|
||||||
DifficultyLevel pgtype.Text `json:"difficulty_level"`
|
DifficultyLevel pgtype.Text `json:"difficulty_level"`
|
||||||
Points int32 `json:"points"`
|
Points int32 `json:"points"`
|
||||||
Explanation pgtype.Text `json:"explanation"`
|
Explanation pgtype.Text `json:"explanation"`
|
||||||
Tips pgtype.Text `json:"tips"`
|
Tips pgtype.Text `json:"tips"`
|
||||||
VoicePrompt pgtype.Text `json:"voice_prompt"`
|
VoicePrompt pgtype.Text `json:"voice_prompt"`
|
||||||
ImageUrl pgtype.Text `json:"image_url"`
|
SampleAnswerVoicePrompt pgtype.Text `json:"sample_answer_voice_prompt"`
|
||||||
QuestionStatus string `json:"question_status"`
|
ImageUrl pgtype.Text `json:"image_url"`
|
||||||
|
QuestionStatus string `json:"question_status"`
|
||||||
|
AudioCorrectAnswerText pgtype.Text `json:"audio_correct_answer_text"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) GetQuestionSetItems(ctx context.Context, setID int64) ([]GetQuestionSetItemsRow, error) {
|
func (q *Queries) GetQuestionSetItems(ctx context.Context, setID int64) ([]GetQuestionSetItemsRow, error) {
|
||||||
|
|
@ -184,8 +196,10 @@ func (q *Queries) GetQuestionSetItems(ctx context.Context, setID int64) ([]GetQu
|
||||||
&i.Explanation,
|
&i.Explanation,
|
||||||
&i.Tips,
|
&i.Tips,
|
||||||
&i.VoicePrompt,
|
&i.VoicePrompt,
|
||||||
|
&i.SampleAnswerVoicePrompt,
|
||||||
&i.ImageUrl,
|
&i.ImageUrl,
|
||||||
&i.QuestionStatus,
|
&i.QuestionStatus,
|
||||||
|
&i.AudioCorrectAnswerText,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -724,17 +724,17 @@ func (s *Store) GetQuestionSetItems(ctx context.Context, setID int64) ([]domain.
|
||||||
QuestionID: r.QuestionID,
|
QuestionID: r.QuestionID,
|
||||||
DisplayOrder: r.DisplayOrder,
|
DisplayOrder: r.DisplayOrder,
|
||||||
},
|
},
|
||||||
QuestionText: r.QuestionText,
|
QuestionText: r.QuestionText,
|
||||||
QuestionType: r.QuestionType,
|
QuestionType: r.QuestionType,
|
||||||
DifficultyLevel: fromPgText(r.DifficultyLevel),
|
DifficultyLevel: fromPgText(r.DifficultyLevel),
|
||||||
Points: r.Points,
|
Points: r.Points,
|
||||||
Explanation: fromPgText(r.Explanation),
|
Explanation: fromPgText(r.Explanation),
|
||||||
Tips: fromPgText(r.Tips),
|
Tips: fromPgText(r.Tips),
|
||||||
VoicePrompt: fromPgText(r.VoicePrompt),
|
VoicePrompt: fromPgText(r.VoicePrompt),
|
||||||
SampleAnswerVoicePrompt: nil,
|
SampleAnswerVoicePrompt: fromPgText(r.SampleAnswerVoicePrompt),
|
||||||
ImageURL: fromPgText(r.ImageUrl),
|
ImageURL: fromPgText(r.ImageUrl),
|
||||||
AudioCorrectAnswerText: nil,
|
AudioCorrectAnswerText: fromPgText(r.AudioCorrectAnswerText),
|
||||||
QuestionStatus: r.QuestionStatus,
|
QuestionStatus: r.QuestionStatus,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
|
|
@ -799,15 +799,17 @@ func (s *Store) GetPublishedQuestionsInSet(ctx context.Context, setID int64) ([]
|
||||||
QuestionID: r.QuestionID,
|
QuestionID: r.QuestionID,
|
||||||
DisplayOrder: r.DisplayOrder,
|
DisplayOrder: r.DisplayOrder,
|
||||||
},
|
},
|
||||||
QuestionText: r.QuestionText,
|
QuestionText: r.QuestionText,
|
||||||
QuestionType: r.QuestionType,
|
QuestionType: r.QuestionType,
|
||||||
DifficultyLevel: fromPgText(r.DifficultyLevel),
|
DifficultyLevel: fromPgText(r.DifficultyLevel),
|
||||||
Points: r.Points,
|
Points: r.Points,
|
||||||
Explanation: fromPgText(r.Explanation),
|
Explanation: fromPgText(r.Explanation),
|
||||||
Tips: fromPgText(r.Tips),
|
Tips: fromPgText(r.Tips),
|
||||||
VoicePrompt: fromPgText(r.VoicePrompt),
|
VoicePrompt: fromPgText(r.VoicePrompt),
|
||||||
ImageURL: fromPgText(r.ImageUrl),
|
SampleAnswerVoicePrompt: fromPgText(r.SampleAnswerVoicePrompt),
|
||||||
QuestionStatus: "PUBLISHED",
|
ImageURL: fromPgText(r.ImageUrl),
|
||||||
|
AudioCorrectAnswerText: fromPgText(r.AudioCorrectAnswerText),
|
||||||
|
QuestionStatus: "PUBLISHED",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user