57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
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));
|
|
}
|