# 🚀 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
