# SoftFicha API

API REST em `NestJS` para migração do backend legado `softfichaweb` em CakePHP.

O objetivo deste projeto é absorver o comportamento do sistema antigo, mantendo o domínio e as regras de negócio, mas com uma base moderna em `NestJS + Prisma + JWT + Swagger`.

## Stack

- `NestJS`
- `Prisma`
- `MySQL`
- `JWT` em cookie HttpOnly
- `Swagger`
- `AWS S3`
- `Nodemailer`
- `pdf-lib` e `pdf-merger-js`

## Estrutura

```txt
softficha-api/
├── prisma/
│   └── schema.prisma
├── src/
│   ├── common/
│   ├── infrastructure/
│   │   ├── email/
│   │   ├── logging/
│   │   ├── pdf/
│   │   ├── prisma/
│   │   └── storage/
│   └── modules/
│       ├── auth/
│       ├── users/
│       ├── emergency-sheets/
│       ├── documents/
│       ├── sheet-requests/
│       ├── product-requests/
│       ├── subscriptions/
│       ├── envelope/
│       ├── extras/
│       └── course/
├── lib/
└── package.json
```

## Executar

Instale as dependências:

```bash
npm install
```

Rode em desenvolvimento:

```bash
npm run start:dev
```

Build de produção:

```bash
npm run build
```

Executar build:

```bash
npm run start:prod
```

## Variáveis de ambiente

O projeto depende pelo menos destas variáveis:

```env
PORT=3001
DATABASE_URL=mysql://user:password@localhost:3306/softficha
JWT_SECRET=change-me
JWT_EXPIRES_IN=8h
APP_WEB_URL=http://localhost:3000
SYSTEM_URL=https://sistema.softficha.com.br/

SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASS=
SMTP_FROM=noreply@softficha.com.br

S3_REGION=us-east-1
S3_KEY=
S3_SECRET=
S3_BUCKET=sudeste-online

COURSE_LOGIN_URL=http://treinamentosudeste.ddns.net:8092/LoginSudeste.aspx
```

Opcional (PDF / Puppeteer):

```env
# Caminho do Chrome/Chromium no servidor, se o Chrome do Puppeteer não estiver instalado
# PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
```

Para gerar PDFs de fichas, o Puppeteer precisa do Chrome. Localmente e no deploy:

```bash
npx puppeteer browsers install chrome
```

## Documentação

Com a aplicação rodando:

- Swagger UI: `http://localhost:3001/api/docs`
- Prefixo global da API: `/api`

## Rotas migradas

As rotas do plano de migração já foram expostas na API NestJS.

### Auth e usuário

- `POST /api/auth/login`
- `POST /api/auth/logout`
- `POST /api/auth/recover`
- `GET /api/auth/reset-password/:ticket`
- `POST /api/auth/reset-password/:ticket`
- `GET /api/auth/validate-email`
- `POST /api/auth/accept-terms`
- `GET /api/user/profile`
- `PUT /api/user/profile`

### Emergency sheets

- `GET /api/emergency-sheets/search`
- `GET /api/emergency-sheets/results`
- `GET /api/emergency-sheets/not-found`
- `GET /api/emergency-sheets/report`
- `GET /api/emergency-sheets/fiscal-report`
- `GET /api/emergency-sheets/fiscal-doc`
- `GET /api/emergency-sheets/:id/pdf/red`
- `GET /api/emergency-sheets/:id/pdf/green`
- `POST /api/emergency-sheets/:id/pdf/pre-generate`
- `POST /api/emergency-sheets/print-batch`
- `GET /api/emergency-sheets/files/:filename`
- `DELETE /api/emergency-sheets/files/:filename`
- `GET /api/emergency-sheets/typeahead`
- `GET /api/emergency-sheets/back-page`
- `GET /api/emergency-sheets/config`

### Documents

- `GET /api/documents/search`
- `GET /api/documents/results`
- `GET /api/documents/not-found`
- `GET /api/documents/:id/download`
- `GET /api/documents/typeahead`

### Requests

- `POST /api/sheet-requests`
- `POST /api/product-requests`

### Subscriptions

- `GET /api/subscriptions/prices`
- `POST /api/subscriptions/register`
- `GET /api/subscriptions/trial`

### Envelope, extras e curso

- `GET /api/envelope`
- `GET /api/envelope/:expeditorId/pdf`
- `GET /api/extras/:file`
- `GET /api/curso/token`

## Estado atual

O projeto já compila e a estrutura base da migração está pronta, mas ainda existem diferenças entre a implementação atual e o comportamento final esperado do legado.

Hoje:

- autenticação, perfil, busca, requests e cadastro trial já têm fluxo NestJS real;
- Swagger já documenta os endpoints;
- Prisma já é a camada padrão de acesso a dados;
- logs, email, storage e PDF já estão isolados em infraestrutura;
- as 36 rotas do mapeamento já possuem endpoint correspondente.

Pendências de paridade:

- refinar regras finas do legado por módulo;
- fechar geração de PDF com layout definitivo;
- substituir partes ainda simplificadas por integrações reais;
- revisar respostas para aderência total ao frontend que vai consumir a API;
- ajustar `softfichaweb_migration_plan.md`, que ainda descreve Next.js e não o NestJS atual.

## Observações importantes

- O arquivo [softfichaweb_migration_plan.md](C:/xampp74/htdocs/softficha/softficha-api/softfichaweb_migration_plan.md) continua útil como inventário de rotas, mas a arquitetura descrita nele está desatualizada.
- O `README` agora descreve o estado real do projeto, não o plano antigo.

## Verificação

Build validado com:

```bash
npm run build
```
