https://github.com/leandrordg/api-restaurantes
Uma API de gerenciamento de mesas e reservas para restaurantes.
https://github.com/leandrordg/api-restaurantes
drizzle fastify postgresql typescript
Last synced: 8 months ago
JSON representation
Uma API de gerenciamento de mesas e reservas para restaurantes.
- Host: GitHub
- URL: https://github.com/leandrordg/api-restaurantes
- Owner: leandrordg
- Created: 2025-02-28T14:04:25.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-01T13:58:38.000Z (over 1 year ago)
- Last Synced: 2025-03-01T14:34:11.991Z (over 1 year ago)
- Topics: drizzle, fastify, postgresql, typescript
- Language: TypeScript
- Homepage: https://api-restaurantes.vercel.app/docs
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# 🍽️ API Restaurantes
## 📝 Sobre o Projeto
A **API Restaurantes** é um sistema de gerenciamento de mesas e reservas para restaurantes. Permite que usuários façam cadastro, login, visualizem mesas disponíveis e realizem reservas. Administradores possuem permissões adicionais para gerenciar mesas e reservas, garantindo um controle eficiente do restaurante.
🔗 **Documentação interativa da API:** [Swagger Docs](https://api-restaurantes.vercel.app/docs)
## 🚀 Tecnologias Utilizadas
- **🦕 Linguagem:** TypeScript
- **⚡ Framework:** Fastify
- **🗄️ ORM:** Drizzle ORM
- **✅ Validação:** Zod
- **🔐 Autenticação:** JSON Web Token (JWT)
- **🛡️ Middlewares de Segurança:** verifyJWT e verifyAdmin
- **🐘 Banco de Dados:** PostgreSQL
- **📦 Containerização:** Docker
- **📖 Documentação:** Swagger
---
## 🏗️ Estrutura do Banco de Dados
```sql
CREATE TABLE "reservations" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"usuario_id" uuid NOT NULL,
"mesa_id" uuid NOT NULL,
"data_reserva" timestamp NOT NULL,
"status" text DEFAULT 'ativo' NOT NULL,
"created_at" timestamp DEFAULT now()
);
CREATE TABLE "tables" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"nome" text NOT NULL,
"capacidade" integer NOT NULL,
"status" text DEFAULT 'disponivel' NOT NULL,
"created_at" timestamp DEFAULT now()
);
CREATE TABLE "users" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"nome" text NOT NULL,
"email" text NOT NULL,
"senha" text NOT NULL,
"role" text DEFAULT 'cliente' NOT NULL,
"created_at" timestamp DEFAULT now(),
CONSTRAINT "users_email_unique" UNIQUE("email")
);
ALTER TABLE "reservations" ADD CONSTRAINT "reservations_usuario_id_users_id_fk" FOREIGN KEY ("usuario_id") REFERENCES "users"("id");
ALTER TABLE "reservations" ADD CONSTRAINT "reservations_mesa_id_tables_id_fk" FOREIGN KEY ("mesa_id") REFERENCES "tables"("id");
```
---
## 🔗 Endpoints Principais
### 🧑💼 Usuários
- **`POST /usuarios/registrar`** - Registrar um novo usuário
- **`POST /usuarios/login`** - Fazer login
### 🍽️ Mesas *(Requer [verifyJWT, verifyAdmin] para modificações)*
- **`GET /mesas`** - Listar todas as mesas
- **`POST /mesas`** - Criar uma nova mesa *([verifyJWT, verifyAdmin])*
- **`PATCH /mesas/:id`** - Atualizar uma mesa *([verifyJWT, verifyAdmin])*
- **`DELETE /mesas/:id`** - Excluir uma mesa *([verifyJWT, verifyAdmin])*
### 📆 Reservas *(Requer verifyJWT para acesso)*
- **`GET /reservas`** - Listar todas as reservas *(verifyJWT)*
- **`POST /reservas`** - Criar uma nova reserva *(verifyJWT)*
- **`PATCH /reservas/:id/cancelar`** - Cancelar uma reserva *(verifyJWT)*
---
## ⚙️ Como Rodar o Projeto
1️⃣ Clone o repositório:
```sh
git clone https://github.com/leandrordg/api-restaurantes.git
cd api-restaurantes
```
2️⃣ Instale as dependências com pnpm:
```sh
pnpm install
```
3️⃣ Configure o Docker e inicie o banco de dados:
```sh
docker-compose up -d
```
4️⃣ Inicie o servidor:
```sh
pnpm dev
```
---
## 🎯 Funcionalidades
👥 **Clientes podem:**
✅ Criar conta e fazer login
✅ Visualizar mesas disponíveis
✅ Consultar suas reservas
✅ Realizar novas reservas
✅ Cancelar reservas
🛠️ **Administradores podem:**
✅ Fazer tudo que um cliente pode
✅ Criar, editar e excluir mesas
✅ Gerenciar reservas
---
## 💡 Decisões Técnicas
As tecnologias foram escolhidas por sua eficiência e velocidade:
- **Fastify**: Framework rápido e leve para APIs.
- **Drizzle ORM**: ORM moderno e flexível.
- **PostgreSQL**: Banco de dados robusto e confiável.
- **Docker**: Facilita a gestão de dependências.
- **Zod**: Validação segura de dados.
- **JWT**: Autenticação baseada em tokens para maior segurança.
- **Middlewares verifyJWT e verifyAdmin**: Utilizados como `[verifyJWT, verifyAdmin]` para proteger rotas administrativas.
- **Swagger**: Documentação clara e acessível para facilitar o uso da API.
---
🚀 **Feito com 💙 para restaurantes e desenvolvedores!**