/** * categories.repository.ts * Queries de banco para o CRUD de categorias. */ import { eq, asc } from 'drizzle-orm'; import type { Database } from '@/db/connection.js'; import { categories, type NewCategory } from '@/db/schema.js'; // ─── Leitura ────────────────────────────────────────────────────────────────── export async function findAllCategories(db: Database) { return db .select() .from(categories) .orderBy(asc(categories.name)); } export async function findCategoryById(db: Database, id: number) { const [cat] = await db .select() .from(categories) .where(eq(categories.id, id)) .limit(1); return cat ?? null; } export async function findCategoryBySlug(db: Database, slug: string) { const [cat] = await db .select() .from(categories) .where(eq(categories.slug, slug)) .limit(1); return cat ?? null; } // ─── Criação ────────────────────────────────────────────────────────────────── export async function createCategory( db: Database, data: Pick, ) { const now = new Date().toISOString(); const [category] = await db .insert(categories) .values({ ...data, createdAt: now, updatedAt: now }) .returning(); return category!; } // ─── Atualização ────────────────────────────────────────────────────────────── export async function updateCategory( db: Database, id: number, data: Partial>, ) { const [updated] = await db .update(categories) .set({ ...data, updatedAt: new Date().toISOString() }) .where(eq(categories.id, id)) .returning(); return updated ?? null; } // ─── Exclusão ───────────────────────────────────────────────────────────────── export async function deleteCategory(db: Database, id: number) { const [deleted] = await db .delete(categories) .where(eq(categories.id, id)) .returning(); return deleted ?? null; }