48 lines
1.8 KiB
TypeScript
48 lines
1.8 KiB
TypeScript
import { Kysely, sql } from 'kysely'
|
|
import { addDefaultColumns } from '../db';
|
|
|
|
export async function up(db: Kysely<any>): Promise<void> {
|
|
// TABLE: ACCOUNTS
|
|
await db.schema.createTable("accounts")
|
|
.addColumn("id", "uuid", (cb) => cb.primaryKey().defaultTo(sql`uuidv7()`))
|
|
.addColumn("created_at", "timestamptz", (cb) => cb
|
|
.notNull()
|
|
.defaultTo(sql`now()`)
|
|
)
|
|
.addColumn("discord_id", "text", (cb) => cb.unique())
|
|
.addColumn("email", "text", (cb) => cb.unique())
|
|
.addColumn("name", "text", (cb) => cb.notNull().defaultTo("Anonymous"))
|
|
.addColumn("gender", "text")
|
|
.execute();
|
|
|
|
// TABLE: ASSESSMENTS
|
|
await db.schema.createTable("assessments")
|
|
.$call(addDefaultColumns)
|
|
.addColumn("account_id", "uuid")
|
|
.addColumn("name", "text", (cb) => cb.notNull().defaultTo("Anonymous"))
|
|
.addColumn("gender", "text", (cb) => cb.notNull())
|
|
.addColumn("age", "integer", (cb) => cb.notNull())
|
|
.addColumn("weight", "float8", (cb) => cb.notNull())
|
|
.addColumn("perf_back_squat", "float8") // kg
|
|
.addColumn("perf_deadlift", "float8") // kg
|
|
.addColumn("perf_bench_press", "float8") // kg
|
|
.addColumn("perf_run", "float8") // ms
|
|
.addColumn("perf_broad_jump", "float8") // cm
|
|
.addColumn("perf_cone_drill", "float8") // ms
|
|
.addForeignKeyConstraint(
|
|
"fk_assessments_account_id",
|
|
["account_id"],
|
|
"accounts",
|
|
["id"],
|
|
(cb) => cb.onDelete("cascade")
|
|
)
|
|
.execute();
|
|
}
|
|
|
|
export async function down(db: Kysely<any>): Promise<void> {
|
|
// TABLE: ASSESSMENTS
|
|
await db.schema.dropTable("assessments").ifExists().execute()
|
|
// TABLE: ACCOUNTS
|
|
await db.schema.dropTable("accounts").ifExists().execute()
|
|
}
|