import { int, mysqlTable, timestamp } from 'drizzle-orm/mysql-core'; import { strikeReason } from '@db/schema/strikeReason.ts'; import type { MySql2Database } from 'drizzle-orm/mysql2'; import { eq } from 'drizzle-orm'; import { report } from '@db/schema/report.ts'; type Database = MySql2Database<{ strike: typeof strike }>; export const strike = mysqlTable('strike', { at: timestamp('at', { mode: 'date' }).notNull(), reportId: int('report_id') .notNull() .references(() => report.id), strikeReasonId: int('strike_reason_id') .notNull() .references(() => strikeReason.id) }); export type EditStrikeReq = { reportId: number; at?: Date; strikeReasonId: number; }; export type GetStrikesByTeamIdReq = { teamId: number; }; export async function editStrike(db: Database, values: EditStrikeReq) { return db .insert(strike) .values({ at: values.at ?? new Date(), reportId: values.reportId, strikeReasonId: values.strikeReasonId }) .onDuplicateKeyUpdate({ set: { at: values.at ?? new Date(), strikeReasonId: values.strikeReasonId } }); } export async function getStrikesByTeamId(db: Database, values: GetStrikesByTeamIdReq) { return db .select({ at: strike.at, report: report, reason: strikeReason }) .from(strike) .innerJoin(strikeReason, eq(strike.strikeReasonId, strikeReason.id)) .innerJoin(report, eq(strike.reportId, report.id)) .where(eq(report.reportedTeamId, values.teamId)); }