# Guia de Instalação e Operação

Sistema de Compras, Estoque e Locação — Grupo 1AMS.
Stack: **React (PWA)** + **NestJS (Node)** + **PostgreSQL** + **Prisma**. Tudo open source.

---

## 1. Pré-requisitos

- **Node.js** 20+ (testado no 24 LTS) — https://nodejs.org
- **PostgreSQL** 15+ (testado no 17) — https://www.postgresql.org
- **Git**

No Windows, dá para instalar tudo com o `winget`:

```powershell
winget install OpenJS.NodeJS.LTS
winget install PostgreSQL.PostgreSQL.17
```

---

## 2. Banco de dados

Crie o banco e um usuário dedicado (não use o superusuário na aplicação):

```sql
CREATE ROLE moderna LOGIN PASSWORD 'uma_senha_forte' CREATEDB;
CREATE DATABASE moderna_sany OWNER moderna;
-- conectado em moderna_sany:
ALTER SCHEMA public OWNER TO moderna;
```

---

## 3. Backend (API)

```bash
cd backend
cp .env.example .env          # edite o .env com a DATABASE_URL e o JWT_SECRET
npm install
npm run prisma:deploy         # cria as tabelas (migrações)
npm run db:seed               # carga inicial (empresas, perfis, alçada, usuários)
npm run criar-admin-master    # cria o Administrador Master (usa as variáveis ADMIN_MASTER_*)
npm run build
npm run start:prod            # sobe a API em http://localhost:3000/api
```

Usuários do seed (senha `Moderna@2026`, troca no 1º acesso): `bruno@`, `nataly@`,
`cristiano@`, `supervisor@`, `comprador@` `1ams.com.br`.

> Para devolver todos à senha padrão (homologação): `npm run db:reset-senhas`.

---

## 4. Frontend (PWA)

```bash
cd frontend
npm install
npm run build                 # gera a pasta dist/ para produção
npm run preview               # ou sirva a dist/ por um servidor web (nginx, etc.)
```

Em desenvolvimento: `npm run dev` (http://localhost:5173) — já encaminha `/api`
para o backend.

### Logomarca
Coloque o arquivo oficial em `frontend/public/logo.png` (ou `logo.svg`).

---

## 5. Backup do banco (diário, retenção 30 dias)

Script pronto em `infra/backup/`. Para agendar no Windows, ver
[infra/backup/README.md](../infra/backup/README.md). Em Linux, usar `pg_dump -Fc`
+ `cron` + remoção de arquivos com mais de 30 dias.

---

## 6. Produção (hospedagem definitiva)

- Servir o **frontend** (dist) por um servidor web com **HTTPS** (nginx + Let's Encrypt).
- Rodar o **backend** como serviço (PM2, systemd ou contêiner) com `npm run start:prod`.
- Apontar o `DATABASE_URL` para o PostgreSQL do servidor.
- Configurar `FRONTEND_ORIGIN` com o domínio real.
- Trocar **todos** os segredos (`JWT_SECRET`, senhas) — nunca usar os de exemplo.
- Ativar o **backup automático** e o **2FA** das contas de acesso remoto.
- (Opcional) IP fixo da empresa para a trava por IP (campo já existe no sistema).

---

## 7. Comandos úteis

| Comando (em `backend/`) | O que faz |
|---|---|
| `npm run start:dev` | API em modo desenvolvimento (recarrega ao salvar) |
| `npm run prisma:deploy` | aplica migrações no banco |
| `npm run db:seed` | carga inicial |
| `npm run criar-admin-master` | cria/atualiza o Administrador Master |
| `npm run db:reset-senhas` | redefine senhas ao padrão (homologação) |
