import type { Insertable, Transaction, Updateable } from "../generated/kysely-tailordb"; export function createFiscalYearRepository(db: Transaction) { return { async findById(id: string, opts?: { forUpdate?: boolean }) { let query = db.selectFrom("FiscalYear").selectAll().where("id", "=", id); if (opts?.forUpdate) query = query.forUpdate(); return (await query.executeTakeFirst()) ?? null; }, async findOverlapping(companyId: string, startDate: Date, endDate: Date, excludeId?: string) { let query = db.selectFrom("FiscalYear").selectAll().where("companyId", "=", companyId); if (excludeId !== undefined) query = query.where("id", "!=", excludeId); return ( (await query .where("startDate", "<", endDate) .where("endDate", ">", startDate) .executeTakeFirst()) ?? null ); }, async insert(data: Insertable<"FiscalYear">) { return db.insertInto("FiscalYear").values(data).returningAll().executeTakeFirstOrThrow(); }, async update(id: string, data: Updateable<"FiscalYear">) { return db .updateTable("FiscalYear") .set(data) .where("id", "=", id) .returningAll() .executeTakeFirstOrThrow(); }, async delete(id: string) { await db.deleteFrom("FiscalYear").where("id", "=", id).executeTakeFirst(); }, }; } export type FiscalYearRepository = ReturnType;