import crypto from "node:crypto"; import { and, asc, eq } from "drizzle-orm"; import { defaultCircuitSectionDefinitions } from "../../domain/models/distribution-board-structure-project-command.model.js"; import { db } from "../client.js"; import { circuitSections } from "../schema/circuit-sections.js"; export function createDefaultCircuitSectionValues(circuitListId: string) { return defaultCircuitSectionDefinitions.map((entry) => ({ id: crypto.randomUUID(), circuitListId, ...entry, })); } export class CircuitSectionRepository { async findById(sectionId: string) { const [row] = await db.select().from(circuitSections).where(eq(circuitSections.id, sectionId)).limit(1); return row ?? null; } async listByCircuitList(circuitListId: string) { return db .select() .from(circuitSections) .where(eq(circuitSections.circuitListId, circuitListId)) .orderBy(asc(circuitSections.sortOrder)); } async createDefaults(circuitListId: string) { for (const entry of createDefaultCircuitSectionValues(circuitListId)) { const existing = await db .select({ id: circuitSections.id }) .from(circuitSections) .where( and(eq(circuitSections.circuitListId, circuitListId), eq(circuitSections.key, entry.key)) ) .limit(1); if (existing.length) { continue; } await db.insert(circuitSections).values(entry); } } }