252 lines
4.6 KiB
Markdown
252 lines
4.6 KiB
Markdown
|
|
# 🚀 ToP Tran Backend
|
||
|
|
|
||
|
|
Backend da aplicação ToP Tran construído com Node.js, Express, TypeScript e Prisma.
|
||
|
|
|
||
|
|
## 📋 Requisitos
|
||
|
|
|
||
|
|
- Node.js 18+
|
||
|
|
- Docker/Podman
|
||
|
|
- PostgreSQL 16+
|
||
|
|
|
||
|
|
## 🏗️ Estrutura
|
||
|
|
|
||
|
|
```
|
||
|
|
src/
|
||
|
|
├── controllers/ # Lógica HTTP
|
||
|
|
├── routes/ # Definição de rotas
|
||
|
|
├── services/ # Lógica de negócios
|
||
|
|
├── repositories/ # Acesso ao banco de dados
|
||
|
|
├── middlewares/ # Middlewares Express
|
||
|
|
├── lib/ # Bibliotecas utilitárias
|
||
|
|
└── server.ts # Ponto de entrada
|
||
|
|
|
||
|
|
prisma/
|
||
|
|
├── schema.prisma # Definição do banco de dados
|
||
|
|
└── migrations/ # Histórico de mudanças no BD
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🚀 Quick Start
|
||
|
|
|
||
|
|
### Desenvolvimento Local
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Instalar dependências
|
||
|
|
npm install
|
||
|
|
|
||
|
|
# 2. Configurar .env
|
||
|
|
cp .env.example .env
|
||
|
|
|
||
|
|
# 3. Executar migrações
|
||
|
|
npx prisma migrate dev
|
||
|
|
|
||
|
|
# 4. Iniciar servidor
|
||
|
|
npm run dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Com Docker
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Desenvolvimento
|
||
|
|
chmod +x deploy.sh
|
||
|
|
./deploy.sh development
|
||
|
|
|
||
|
|
# Produção
|
||
|
|
./deploy.sh production
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📦 Scripts Disponíveis
|
||
|
|
|
||
|
|
| Script | Descrição |
|
||
|
|
| ------------------- | ----------------------------------- |
|
||
|
|
| `npm run dev` | Iniciar servidor em modo watch |
|
||
|
|
| `npm run build` | Compilar TypeScript para JavaScript |
|
||
|
|
| `npm run start` | Rodar aplicação compilada |
|
||
|
|
| `npm run typecheck` | Verificar tipos sem compilar |
|
||
|
|
|
||
|
|
## 🐳 Docker Commands
|
||
|
|
|
||
|
|
### Build
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Com NODE_ENV=production (padrão)
|
||
|
|
NODE_ENV=production podman build -t toptran-backend:latest .
|
||
|
|
|
||
|
|
# Com NODE_ENV=development
|
||
|
|
NODE_ENV=development podman build --build-arg NODE_ENV=development -t toptran-backend:dev .
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Produção
|
||
|
|
NODE_ENV=production podman-compose --env-file .env.production -f docker-compose.yml up -d
|
||
|
|
|
||
|
|
# Desenvolvimento
|
||
|
|
NODE_ENV=development podman-compose --env-file .env.development -f docker-compose.yml up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### Logs
|
||
|
|
|
||
|
|
```bash
|
||
|
|
NODE_ENV=production podman-compose -f docker-compose.yml logs -f backend
|
||
|
|
```
|
||
|
|
|
||
|
|
### Stop
|
||
|
|
|
||
|
|
```bash
|
||
|
|
podman-compose -f docker-compose.yml down
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🗄️ Banco de Dados
|
||
|
|
|
||
|
|
### Migrações
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Criar nova migração
|
||
|
|
npx prisma migrate dev --name descricao_da_mudanca
|
||
|
|
|
||
|
|
# Aplicar migrações
|
||
|
|
npx prisma migrate deploy
|
||
|
|
|
||
|
|
# Resetar banco (⚠️ deleta dados)
|
||
|
|
npx prisma migrate reset
|
||
|
|
```
|
||
|
|
|
||
|
|
### Studio (GUI)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npx prisma studio
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📡 Rotas da API
|
||
|
|
|
||
|
|
### Autenticação
|
||
|
|
|
||
|
|
- `POST /auth/register` - Registrar usuário
|
||
|
|
- `POST /auth/login` - Login
|
||
|
|
- `POST /auth/refresh` - Refresh token
|
||
|
|
|
||
|
|
### Usuários
|
||
|
|
|
||
|
|
- `GET /users/me` - Obter dados do usuário
|
||
|
|
- `GET /users/profile` - Obter perfil
|
||
|
|
- `PATCH /users/profile` - Atualizar perfil
|
||
|
|
- `PUT /users/me` - Atualizar usuário
|
||
|
|
- `DELETE /users/me` - Deletar conta
|
||
|
|
|
||
|
|
### Sincronização
|
||
|
|
|
||
|
|
- `GET /sync/companies` - Listar empresas
|
||
|
|
- `POST /sync/companies` - Sincronizar empresas
|
||
|
|
- `GET /sync/rides` - Listar corridas
|
||
|
|
- `POST /sync/rides` - Sincronizar corridas
|
||
|
|
|
||
|
|
## 🔑 Variáveis de Ambiente
|
||
|
|
|
||
|
|
```env
|
||
|
|
# Banco de Dados
|
||
|
|
DATABASE_URL=postgresql://user:password@host:5432/db_name
|
||
|
|
DB_USER=user
|
||
|
|
DB_PASSWORD=password
|
||
|
|
DB_HOST=localhost
|
||
|
|
DB_PORT=5432
|
||
|
|
DB_NAME=toptran
|
||
|
|
|
||
|
|
# Servidor
|
||
|
|
PORT=4000
|
||
|
|
NODE_ENV=production
|
||
|
|
|
||
|
|
# JWT
|
||
|
|
JWT_SECRET=sua_chave_secreta_aqui
|
||
|
|
JWT_REFRESH_SECRET=sua_chave_refresh_aqui
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🚢 Deploy
|
||
|
|
|
||
|
|
### Opção 1: Script de Deploy
|
||
|
|
|
||
|
|
```bash
|
||
|
|
chmod +x deploy.sh
|
||
|
|
|
||
|
|
# Desenvolvimento
|
||
|
|
./deploy.sh development
|
||
|
|
|
||
|
|
# Produção
|
||
|
|
./deploy.sh production
|
||
|
|
```
|
||
|
|
|
||
|
|
### Opção 2: Manual com Docker Compose
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Produção
|
||
|
|
NODE_ENV=production podman-compose \
|
||
|
|
--env-file .env.production \
|
||
|
|
-f docker-compose.yml \
|
||
|
|
up --build -d
|
||
|
|
|
||
|
|
# Executar migrações
|
||
|
|
NODE_ENV=production podman-compose \
|
||
|
|
--env-file .env.production \
|
||
|
|
-f docker-compose.yml \
|
||
|
|
exec -T backend npx prisma migrate deploy
|
||
|
|
```
|
||
|
|
|
||
|
|
### Opção 3: SSH para Servidor
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# No servidor
|
||
|
|
cd /var/www/toptran-backend
|
||
|
|
git pull origin main
|
||
|
|
npm ci --only=production
|
||
|
|
npm run build
|
||
|
|
npx prisma migrate deploy
|
||
|
|
|
||
|
|
# Com PM2
|
||
|
|
pm2 restart toptran-backend
|
||
|
|
pm2 save
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔍 Troubleshooting
|
||
|
|
|
||
|
|
### Erro: "Cannot find module 'express'"
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npm install
|
||
|
|
npm run build
|
||
|
|
```
|
||
|
|
|
||
|
|
### Erro: "Database connection refused"
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Verificar se PostgreSQL está rodando
|
||
|
|
podman ps | grep postgres
|
||
|
|
|
||
|
|
# Verificar DATABASE_URL em .env
|
||
|
|
cat .env
|
||
|
|
```
|
||
|
|
|
||
|
|
### Erro: "port 4000 already in use"
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Parar container antigo
|
||
|
|
podman stop toptran-backend
|
||
|
|
|
||
|
|
# Ou usar porta diferente
|
||
|
|
PORT=5000 podman-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📚 Referências
|
||
|
|
|
||
|
|
- [Express.js](https://expressjs.com/)
|
||
|
|
- [Prisma](https://www.prisma.io/)
|
||
|
|
- [TypeScript](https://www.typescriptlang.org/)
|
||
|
|
- [Docker](https://docs.docker.com/)
|
||
|
|
|
||
|
|
## 👤 Autor
|
||
|
|
|
||
|
|
Rayan
|
||
|
|
|
||
|
|
## 📄 Licença
|
||
|
|
|
||
|
|
ISC
|