diff --git a/apps/api/internal/db/migrations/20251022032904_submitted_by_column_applications.sql b/apps/api/internal/db/migrations/20251022032904_submitted_by_column_applications.sql new file mode 100644 index 00000000..2451b3fc --- /dev/null +++ b/apps/api/internal/db/migrations/20251022032904_submitted_by_column_applications.sql @@ -0,0 +1,11 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE applications +ADD COLUMN submitted_at TIMESTAMPTZ; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE applications +DROP COLUMN submitted_at; +-- +goose StatementEnd diff --git a/apps/api/internal/db/queries/applications.sql b/apps/api/internal/db/queries/applications.sql index da42da78..9af2896c 100644 --- a/apps/api/internal/db/queries/applications.sql +++ b/apps/api/internal/db/queries/applications.sql @@ -14,7 +14,8 @@ WHERE user_id = $1 AND event_id = $2; UPDATE applications SET status = CASE WHEN @status_do_update::boolean THEN @status::application_status ELSE status END, - application = CASE WHEN @application_do_update::boolean THEN @application::JSONB ELSE application END + application = CASE WHEN @application_do_update::boolean THEN @application::JSONB ELSE application END, + submitted_at = CASE WHEN @submitted_at_do_update::boolean THEN @submitted_at::timestamptz ELSE submitted_at END WHERE user_id = @user_id AND event_id = @event_id; diff --git a/apps/api/internal/db/repository/application.go b/apps/api/internal/db/repository/application.go index 9a25c183..f6195dcd 100644 --- a/apps/api/internal/db/repository/application.go +++ b/apps/api/internal/db/repository/application.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "errors" + "time" "github.com/google/uuid" "github.com/jackc/pgx/v5" @@ -77,6 +78,8 @@ func (r *ApplicationRepository) SubmitApplication(ctx context.Context, data any, Status: sqlc.ApplicationStatusSubmitted, ApplicationDoUpdate: true, Application: jsonBytes, + SubmittedAtDoUpdate: true, + SubmittedAt: time.Now(), UserID: userId, EventID: eventId, }) diff --git a/apps/api/internal/db/sqlc/applications.sql.go b/apps/api/internal/db/sqlc/applications.sql.go index 43fe3cb4..e2b1d369 100644 --- a/apps/api/internal/db/sqlc/applications.sql.go +++ b/apps/api/internal/db/sqlc/applications.sql.go @@ -7,6 +7,7 @@ package sqlc import ( "context" + "time" "github.com/google/uuid" ) @@ -17,7 +18,7 @@ INSERT INTO applications ( ) VALUES ( $1, $2 ) -RETURNING user_id, event_id, status, application, created_at, saved_at, updated_at +RETURNING user_id, event_id, status, application, created_at, saved_at, updated_at, submitted_at ` type CreateApplicationParams struct { @@ -36,6 +37,7 @@ func (q *Queries) CreateApplication(ctx context.Context, arg CreateApplicationPa &i.CreatedAt, &i.SavedAt, &i.UpdatedAt, + &i.SubmittedAt, ) return i, err } @@ -56,7 +58,7 @@ func (q *Queries) DeleteApplication(ctx context.Context, arg DeleteApplicationPa } const getApplicationByUserAndEventID = `-- name: GetApplicationByUserAndEventID :one -SELECT user_id, event_id, status, application, created_at, saved_at, updated_at FROM applications +SELECT user_id, event_id, status, application, created_at, saved_at, updated_at, submitted_at FROM applications WHERE user_id = $1 AND event_id = $2 ` @@ -76,6 +78,7 @@ func (q *Queries) GetApplicationByUserAndEventID(ctx context.Context, arg GetApp &i.CreatedAt, &i.SavedAt, &i.UpdatedAt, + &i.SubmittedAt, ) return i, err } @@ -84,9 +87,10 @@ const updateApplication = `-- name: UpdateApplication :exec UPDATE applications SET status = CASE WHEN $1::boolean THEN $2::application_status ELSE status END, - application = CASE WHEN $3::boolean THEN $4::JSONB ELSE application END + application = CASE WHEN $3::boolean THEN $4::JSONB ELSE application END, + submitted_at = CASE WHEN $5::boolean THEN $6::timestamptz ELSE submitted_at END WHERE - user_id = $5 AND event_id = $6 + user_id = $7 AND event_id = $8 ` type UpdateApplicationParams struct { @@ -94,6 +98,8 @@ type UpdateApplicationParams struct { Status ApplicationStatus `json:"status"` ApplicationDoUpdate bool `json:"application_do_update"` Application []byte `json:"application"` + SubmittedAtDoUpdate bool `json:"submitted_at_do_update"` + SubmittedAt time.Time `json:"submitted_at"` UserID uuid.UUID `json:"user_id"` EventID uuid.UUID `json:"event_id"` } @@ -104,6 +110,8 @@ func (q *Queries) UpdateApplication(ctx context.Context, arg UpdateApplicationPa arg.Status, arg.ApplicationDoUpdate, arg.Application, + arg.SubmittedAtDoUpdate, + arg.SubmittedAt, arg.UserID, arg.EventID, ) diff --git a/apps/api/internal/db/sqlc/models.go b/apps/api/internal/db/sqlc/models.go index 446635f5..8e4f7654 100644 --- a/apps/api/internal/db/sqlc/models.go +++ b/apps/api/internal/db/sqlc/models.go @@ -196,6 +196,7 @@ type Application struct { CreatedAt time.Time `json:"created_at"` SavedAt time.Time `json:"saved_at"` UpdatedAt time.Time `json:"updated_at"` + SubmittedAt *time.Time `json:"submitted_at"` } type AuthAccount struct {