for excel export use only last not empty answer

This commit is contained in:
skeris 2025-05-13 17:52:18 +03:00
parent ed9a10dbcc
commit f474cc4ae3

@ -117,12 +117,19 @@ func (r *ResultRepository) UpdateAnswersStatus(ctx context.Context, accountID st
func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, reqExport GetQuizResDeps) ([]model.Answer, error) { func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64, reqExport GetQuizResDeps) ([]model.Answer, error) {
var results []model.Answer var results []model.Answer
mainQuery := `SELECT DISTINCT ON (a.question_id, a.session, a.created_at, a.result) mainQuery := `WITH ordered_content AS (
a.id, a.content, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted,a.version SELECT a.id, a.question_id, a.quiz_id, a.fingerprint, a.session, a.result, a.created_at, a.new, a.deleted,a.version,
FROM COALESCE(NULLIF(a.content, ''),MAX(NULLIF(a.content, '')) OVER (
answer a PARTITION BY a.session, a.question_id ORDER BY a.created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS last_not_empty
WHERE FROM answer a
a.quiz_id = $1 AND a.deleted = FALSE` WHERE a.quiz_id = $1 AND a.deleted = FALSE
)
SELECT DISTINCT ON (a.question_id, a.session)
a.id, COALESCE(a.last_not_empty,''), a.question_id, a.quiz_id, a.fingerprint,
a.session, a.result, a.created_at, a.new, a.deleted, a.version
FROM ordered_content a WHERE EXISTS (
SELECT 1 FROM answer as a2
WHERE a2.session = a.session AND a2.result = TRUE AND a2.quiz_id = a.quiz_id)`
queryParams := []interface{}{quizID} queryParams := []interface{}{quizID}
@ -136,11 +143,6 @@ func (r *ResultRepository) GetQuizResultsCSV(ctx context.Context, quizID uint64,
queryParams = append(queryParams, reqExport.New) queryParams = append(queryParams, reqExport.New)
} }
mainQuery += ` AND EXISTS (
SELECT 1 FROM answer as a2
WHERE a2.session = a.session AND a2.result = TRUE AND a2.quiz_id = a.quiz_id
)`
mainQuery += ` ORDER BY a.session, a.question_id ASC, a.created_at DESC, a.result DESC` mainQuery += ` ORDER BY a.session, a.question_id ASC, a.created_at DESC, a.result DESC`
rows, err := r.pool.QueryContext(ctx, mainQuery, queryParams...) rows, err := r.pool.QueryContext(ctx, mainQuery, queryParams...)