diff options
| author | zwlucas <lucas.fariamo08@gmail.com> | 2026-07-25 21:23:29 +0000 |
|---|---|---|
| committer | zwlucas <lucas.fariamo08@gmail.com> | 2026-07-25 21:23:29 +0000 |
| commit | ef55d9bb24430610b60c1b77821307cd72c08c55 (patch) | |
| tree | e6935a810b34370b0a4c821e55f6397aac50c832 /api/src/modules/categories/categories.repository.ts | |
| download | helpdesk-master.tar.gz helpdesk-master.zip | |
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'api/src/modules/categories/categories.repository.ts')
| -rw-r--r-- | api/src/modules/categories/categories.repository.ts | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/api/src/modules/categories/categories.repository.ts b/api/src/modules/categories/categories.repository.ts new file mode 100644 index 0000000..1ca5901 --- /dev/null +++ b/api/src/modules/categories/categories.repository.ts @@ -0,0 +1,80 @@ +/** + * 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<NewCategory, 'name' | 'slug' | 'description'>, +) { + 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<Pick<NewCategory, 'name' | 'slug' | 'description'>>, +) { + 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; +} |