- 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
157 lines
5.0 KiB
Markdown
157 lines
5.0 KiB
Markdown
# Gastrobar PDV
|
|
|
|
Sistema de PDV (Ponto de Venda) e gerenciamento para gastrobar/restaurante. Gerencia comandas de clientes, pedidos, cardápio de produtos, usuários com diferentes perfis de acesso e fluxo de preparo na cozinha/bar.
|
|
|
|
## Stack
|
|
|
|
### Backend
|
|
- **Runtime:** Node.js + TypeScript
|
|
- **Framework:** Fastify
|
|
- **ORM:** Prisma
|
|
- **Banco:** SQLite (desenvolvimento)
|
|
- **Validação:** Zod
|
|
- **Auth:** JWT (@fastify/jwt) + bcrypt
|
|
|
|
### Frontend
|
|
- **Bundler:** Vite
|
|
- **Linguagem:** TypeScript vanilla (sem framework)
|
|
- **Estilo:** CSS customizado com dark theme e glassmorphism
|
|
|
|
## Funcionalidades
|
|
|
|
- **Autenticação JWT** com controle por roles (ADMIN, CAIXA, GARÇOM, COZINHA, BARMAN)
|
|
- **Painel de Cozinha/Bar** com atualização em tempo real e notificações sonoras
|
|
- **Gestão de Comandas** com formas de pagamento, desconto, acréscimo e taxa de serviço
|
|
- **Caixa/Checkout** com busca avançada e seleção de pagamento
|
|
- **Cardápio** com gestão de produtos e categorias, controle de estoque
|
|
- **Equipe** com gestão de usuários e redefinição de senha
|
|
- **Relatórios** de vendas por período
|
|
- **Dashboard** com KPIs para administradores
|
|
|
|
## Estrutura do Projeto
|
|
|
|
```
|
|
app_ces/
|
|
├── prisma/ # Schema do banco e seed
|
|
│ ├── schema.prisma
|
|
│ └── seed.ts
|
|
├── src/ # Backend (API)
|
|
│ ├── server.ts
|
|
│ ├── lib/prisma.ts
|
|
│ ├── middlewares/
|
|
│ ├── controllers/
|
|
│ ├── services/
|
|
│ ├── schemas/
|
|
│ └── routes/
|
|
└── web/ # Frontend (SPA)
|
|
└── src/
|
|
├── main.ts
|
|
├── api.ts
|
|
├── utils.ts
|
|
└── views/
|
|
```
|
|
|
|
## Como Rodar
|
|
|
|
### Backend
|
|
|
|
```bash
|
|
# Instalar dependências
|
|
npm install
|
|
|
|
# Gerar cliente Prisma e aplicar schema
|
|
npx prisma db push
|
|
|
|
# Popular banco com dados iniciais
|
|
npm run db:seed
|
|
|
|
# Iniciar servidor de desenvolvimento
|
|
npm run dev
|
|
```
|
|
|
|
O servidor estará disponível em `http://localhost:3333`.
|
|
|
|
### Frontend
|
|
|
|
```bash
|
|
cd web
|
|
|
|
# Instalar dependências
|
|
npm install
|
|
|
|
# Iniciar dev server
|
|
npm run dev
|
|
```
|
|
|
|
O frontend estará disponível em `http://localhost:5173`.
|
|
|
|
## Rotas da API
|
|
|
|
### Autenticação
|
|
| Método | Rota | Descrição |
|
|
|--------|------|-----------|
|
|
| POST | `/api/auth/login` | Login e geração de JWT |
|
|
| PATCH | `/api/auth/senha` | Alterar própria senha |
|
|
|
|
### Categorias
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/categorias` | Listar categorias | Autenticado |
|
|
| GET | `/api/categorias/:id` | Obter categoria | Autenticado |
|
|
| POST | `/api/categorias` | Criar categoria | ADMIN |
|
|
| PUT | `/api/categorias/:id` | Atualizar categoria | ADMIN |
|
|
| DELETE | `/api/categorias/:id` | Deletar categoria | ADMIN |
|
|
|
|
### Produtos
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/produtos` | Listar produtos | Autenticado |
|
|
| GET | `/api/produtos/mais-vendidos` | Top produtos por vendas | Autenticado |
|
|
| GET | `/api/produtos/busca` | Buscar produto por nome | Autenticado |
|
|
| GET | `/api/produtos/baixo-estoque` | Produtos com estoque baixo | ADMIN |
|
|
| GET | `/api/produtos/:id` | Obter produto | Autenticado |
|
|
| POST | `/api/produtos` | Criar produto | ADMIN |
|
|
| PUT | `/api/produtos/:id` | Atualizar produto | ADMIN |
|
|
| DELETE | `/api/produtos/:id` | Deletar produto | ADMIN |
|
|
|
|
### Comandas
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/comandas` | Listar/filtrar comandas | Autenticado |
|
|
| POST | `/api/comandas` | Criar comanda | GARÇOM/CAIXA/ADMIN |
|
|
| POST | `/api/comandas/:id/itens` | Adicionar item | GARÇOM/CAIXA/ADMIN |
|
|
| PATCH | `/api/comandas/:id` | Atualizar comanda | GARÇOM/CAIXA/ADMIN |
|
|
| POST | `/api/comandas/:id/pagar` | Pagar comanda | CAIXA/ADMIN |
|
|
| DELETE | `/api/comandas/itens/:id` | Remover item | CAIXA/ADMIN |
|
|
|
|
### Painel Cozinha/Bar
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/painel/itens` | Listar itens do painel | COZINHA/BARMAN/ADMIN |
|
|
| PATCH | `/api/painel/itens/:id/status` | Atualizar status | COZINHA/BARMAN/ADMIN |
|
|
|
|
### Relatórios
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/relatorios/vendas` | Vendas por período | ADMIN |
|
|
| GET | `/api/relatorios/dashboard` | Dados do dashboard | ADMIN |
|
|
|
|
### Usuários
|
|
| Método | Rota | Descrição | Permissão |
|
|
|--------|------|-----------|-----------|
|
|
| GET | `/api/usuarios` | Listar usuários | ADMIN |
|
|
| POST | `/api/usuarios` | Criar usuário | ADMIN |
|
|
| PATCH | `/api/usuarios/:id` | Atualizar usuário | ADMIN |
|
|
| PATCH | `/api/usuarios/:id/senha` | Resetar senha | ADMIN |
|
|
| DELETE | `/api/usuarios/:id` | Deletar usuário | ADMIN |
|
|
|
|
## Roles e Permissões
|
|
|
|
| Role | Acesso |
|
|
|------|--------|
|
|
| **ADMIN** | Acesso total ao sistema |
|
|
| **CAIXA** | Comandas, checkout, pagamento |
|
|
| **GARÇOM** | Criar/gerenciar comandas |
|
|
| **COZINHA** | Painel de preparo (cozinha) |
|
|
| **BARMAN** | Painel de preparo (bar) |
|