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:
2026-07-21 12:47:15 -03:00
commit 402ac776ac
55 changed files with 7403 additions and 0 deletions

View 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 },
});
}