aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/categories/categories.repository.ts
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
commitef55d9bb24430610b60c1b77821307cd72c08c55 (patch)
treee6935a810b34370b0a4c821e55f6397aac50c832 /api/src/modules/categories/categories.repository.ts
downloadhelpdesk-master.tar.gz
helpdesk-master.zip
feat: upload of the projectHEADmaster
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.ts80
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;
+}