feat: add form response submition endpoint and forms filtering
Docker Build and Push / Build and Push Docker Image (push) Successful in 13m18s

This commit is contained in:
2026-02-22 14:13:59 +07:00
parent fc98b94867
commit ffab4f22ad
7 changed files with 478 additions and 0 deletions
@@ -0,0 +1,143 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.30.0
// source: responses.sql
package repository
import (
"context"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
)
const createFormResponse = `-- name: CreateFormResponse :one
INSERT INTO form_responses (form_id, user_id)
VALUES ($1, $2)
RETURNING id, form_id, user_id, submitted_at
`
type CreateFormResponseParams struct {
FormID uuid.UUID
UserID *uuid.UUID
}
func (q *Queries) CreateFormResponse(ctx context.Context, arg CreateFormResponseParams) (FormResponse, error) {
row := q.db.QueryRow(ctx, createFormResponse, arg.FormID, arg.UserID)
var i FormResponse
err := row.Scan(
&i.ID,
&i.FormID,
&i.UserID,
&i.SubmittedAt,
)
return i, err
}
const createResponseAnswer = `-- name: CreateResponseAnswer :one
INSERT INTO response_answers (response_id, question_id, form_id, answer_text)
VALUES ($1, $2, $3, $4)
RETURNING id, response_id, question_id, form_id, answer_text
`
type CreateResponseAnswerParams struct {
ResponseID uuid.UUID
QuestionID uuid.UUID
FormID uuid.UUID
AnswerText pgtype.Text
}
func (q *Queries) CreateResponseAnswer(ctx context.Context, arg CreateResponseAnswerParams) (ResponseAnswer, error) {
row := q.db.QueryRow(ctx, createResponseAnswer,
arg.ResponseID,
arg.QuestionID,
arg.FormID,
arg.AnswerText,
)
var i ResponseAnswer
err := row.Scan(
&i.ID,
&i.ResponseID,
&i.QuestionID,
&i.FormID,
&i.AnswerText,
)
return i, err
}
const formHasResponses = `-- name: FormHasResponses :one
SELECT EXISTS (
SELECT 1 FROM form_responses WHERE form_id = $1
) AS has_responses
`
func (q *Queries) FormHasResponses(ctx context.Context, formID uuid.UUID) (bool, error) {
row := q.db.QueryRow(ctx, formHasResponses, formID)
var has_responses bool
err := row.Scan(&has_responses)
return has_responses, err
}
const getAnswersByResponseID = `-- name: GetAnswersByResponseID :many
SELECT id, response_id, question_id, form_id, answer_text FROM response_answers
WHERE response_id = $1
ORDER BY id ASC
`
func (q *Queries) GetAnswersByResponseID(ctx context.Context, responseID uuid.UUID) ([]ResponseAnswer, error) {
rows, err := q.db.Query(ctx, getAnswersByResponseID, responseID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ResponseAnswer
for rows.Next() {
var i ResponseAnswer
if err := rows.Scan(
&i.ID,
&i.ResponseID,
&i.QuestionID,
&i.FormID,
&i.AnswerText,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const getFormResponsesByFormID = `-- name: GetFormResponsesByFormID :many
SELECT id, form_id, user_id, submitted_at FROM form_responses
WHERE form_id = $1
ORDER BY submitted_at DESC
`
func (q *Queries) GetFormResponsesByFormID(ctx context.Context, formID uuid.UUID) ([]FormResponse, error) {
rows, err := q.db.Query(ctx, getFormResponsesByFormID, formID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []FormResponse
for rows.Next() {
var i FormResponse
if err := rows.Scan(
&i.ID,
&i.FormID,
&i.UserID,
&i.SubmittedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}