refactor: replace direct Prisma calls with service layer methods for banking operations
This commit is contained in:
60
services/category.service.ts
Normal file
60
services/category.service.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { prisma } from "@/lib/prisma"
|
||||
import type { Category } from "@/lib/types"
|
||||
|
||||
export const categoryService = {
|
||||
async create(data: Omit<Category, "id">): Promise<Category> {
|
||||
const created = await prisma.category.create({
|
||||
data: {
|
||||
name: data.name,
|
||||
color: data.color,
|
||||
icon: data.icon,
|
||||
keywords: JSON.stringify(data.keywords),
|
||||
parentId: data.parentId,
|
||||
},
|
||||
})
|
||||
|
||||
return {
|
||||
id: created.id,
|
||||
name: created.name,
|
||||
color: created.color,
|
||||
icon: created.icon,
|
||||
keywords: JSON.parse(created.keywords) as string[],
|
||||
parentId: created.parentId,
|
||||
}
|
||||
},
|
||||
|
||||
async update(id: string, data: Partial<Omit<Category, "id">>): Promise<Category> {
|
||||
const updated = await prisma.category.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name: data.name,
|
||||
color: data.color,
|
||||
icon: data.icon,
|
||||
keywords: data.keywords ? JSON.stringify(data.keywords) : undefined,
|
||||
parentId: data.parentId,
|
||||
},
|
||||
})
|
||||
|
||||
return {
|
||||
id: updated.id,
|
||||
name: updated.name,
|
||||
color: updated.color,
|
||||
icon: updated.icon,
|
||||
keywords: JSON.parse(updated.keywords) as string[],
|
||||
parentId: updated.parentId,
|
||||
}
|
||||
},
|
||||
|
||||
async delete(id: string): Promise<void> {
|
||||
// Business rule: Remove category from transactions (set to null)
|
||||
await prisma.transaction.updateMany({
|
||||
where: { categoryId: id },
|
||||
data: { categoryId: null },
|
||||
})
|
||||
|
||||
await prisma.category.delete({
|
||||
where: { id },
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user