import { Kysely, sql } from 'kysely' import { addDefaultColumns } from '../db'; export async function up(db: Kysely): Promise { // 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): Promise { // TABLE: VERIFICATIONS await db.schema.dropTable("verifications").ifExists().execute() }