feat: sistema GastroBar PDV completo
- Backend: Fastify + Prisma/SQLite com autenticacao JWT - CRUD completo: usuarios, categorias, produtos, comandas - Sistema de comandas com itens, status, pagamento - Controle de estoque (entrada/saida automatica) - Relatorios e dashboard com KPIs - Notificacoes sonoras na cozinha - Frontend: SPA vanilla TS com tema dark glassmorphism - Mobile-first com bottom-sheet e cards compactos - Busca de comandas por periodo - Modal de detalhes com secao editavel colapsavel
This commit is contained in:
47
src/services/category.service.ts
Normal file
47
src/services/category.service.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { prisma } from '../lib/prisma';
|
||||
import { CategoryInput } from '../schemas/category.schema';
|
||||
|
||||
export async function createCategory(data: CategoryInput) {
|
||||
return prisma.categoria.create({
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
export async function listCategories() {
|
||||
return prisma.categoria.findMany({
|
||||
include: { _count: { select: { produtos: true } } },
|
||||
});
|
||||
}
|
||||
|
||||
export async function getCategoryById(id: string) {
|
||||
return prisma.categoria.findUnique({
|
||||
where: { id },
|
||||
include: { produtos: true },
|
||||
});
|
||||
}
|
||||
|
||||
export async function updateCategory(id: string, data: CategoryInput) {
|
||||
return prisma.categoria.update({
|
||||
where: { id },
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
export async function deleteCategory(id: string) {
|
||||
const categoria = await prisma.categoria.findUnique({
|
||||
where: { id },
|
||||
include: { _count: { select: { produtos: true } } },
|
||||
});
|
||||
|
||||
if (!categoria) {
|
||||
throw new Error('Categoria não encontrada');
|
||||
}
|
||||
|
||||
if (categoria._count.produtos > 0) {
|
||||
throw new Error(`Não é possível excluir: a categoria possui ${categoria._count.produtos} produto(s). Remova ou reatribua os produtos primeiro.`);
|
||||
}
|
||||
|
||||
return prisma.categoria.delete({
|
||||
where: { id },
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user