Files
platform/apps/api/src/database/migrations/2026-09-19.ts
T

51 lines
2.0 KiB
TypeScript

import { Kysely, sql } from 'kysely'
import { addDefaultColumns } from '../db';
export async function up(db: Kysely<any>): Promise<void> {
// TABLE: VERIFICATIONS
await db.schema.createTable("verifications")
.$call(addDefaultColumns)
.addColumn("assessment_id", "bigint", (cb) => cb.notNull().unique())
.addColumn("status", "text", (cb) => cb.notNull().defaultTo("request")) // request | in_review | action_requested | completed
.addColumn("completed_at", "timestamptz")
.addColumn("completed_by", "uuid")
.addColumn("media_key_back_squat", "text")
.addColumn("media_key_deadlift", "text")
.addColumn("media_key_bench_press", "text")
.addColumn("media_key_run", "text")
.addColumn("media_key_broad_jump", "text")
.addColumn("media_key_cone_drill", "text")
.addColumn("verf_back_squat", "boolean")
.addColumn("verf_deadlift", "boolean")
.addColumn("verf_bench_press", "boolean")
.addColumn("verf_run", "boolean")
.addColumn("verf_broad_jump", "boolean")
.addColumn("verf_cone_drill", "boolean")
.addColumn("reviewer_notes", "text") // can be structured in the future, for now keep simple
.addForeignKeyConstraint(
"fk_verifications_assessment_id",
["assessment_id"],
"assessments",
["id"],
(cb) => cb.onDelete("cascade")
)
.addForeignKeyConstraint(
"fk_verifications_completed_by",
["completed_by"],
"accounts",
["id"],
(cb) => cb.onDelete("restrict")
)
.addCheckConstraint(
"chk_verifications_completed_fields",
sql`status != 'completed' OR (completed_at IS NOT NULL AND completed_by IS NOT NULL)`
)
.execute()
}
export async function down(db: Kysely<any>): Promise<void> {
// TABLE: VERIFICATIONS
await db.schema.dropTable("verifications").ifExists().execute()
}