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

69
prisma/schema.prisma Normal file
View File

@@ -0,0 +1,69 @@
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
generator client {
provider = "prisma-client-js"
}
model Usuario {
id String @id @default(uuid())
nome String
email String @unique
senha String
role String @default("GARCOM") // ADMIN, CAIXA, GARCOM, COZINHA, BARMAN
ativo Boolean @default(true)
criadoEm DateTime @default(now())
}
model Categoria {
id String @id @default(uuid())
nome String
produtos Produto[]
}
model Produto {
id String @id @default(uuid())
nome String
descricao String?
fotoUrl String?
preco Float
custo Float?
estoqueAtual Int @default(0)
estoqueMinimo Int @default(0)
itemCozinha Boolean
ativo Boolean @default(true)
categoriaId String
categoria Categoria @relation(fields: [categoriaId], references: [id])
itensPedido ItemPedido[]
}
model Comanda {
id String @id @default(uuid())
identificador String
nomeCliente String?
status String @default("ABERTA") // ABERTA, FECHADA, PAGA, CANCELADA
total Float @default(0.0)
desconto Float @default(0.0)
acrescimo Float @default(0.0)
taxaServico Boolean @default(false)
formaPagamento String? // DINHEIRO, CARTAO_CREDITO, CARTAO_DEBITO, PIX
motivoCancelamento String?
criadoEm DateTime @default(now())
fechadoEm DateTime?
itens ItemPedido[]
}
model ItemPedido {
id String @id @default(uuid())
quantidade Int
precoUnitario Float
observacao String?
status String @default("PENDENTE") // PENDENTE, PREPARANDO, PRONTO, ENTREGUE
produtoId String
produto Produto @relation(fields: [produtoId], references: [id])
comandaId String
comanda Comanda @relation(fields: [comandaId], references: [id])
criadoEm DateTime @default(now())
}