Files
reservas/README.md

83 lines
3.3 KiB
Markdown

# Portal de Requisição e Reserva de Equipamentos
Portal interno para consultar, requisitar, aprovar, entregar e devolver equipamentos cuja fonte oficial de inventário é o Snipe-IT.
## Estado atual
O projeto concluiu as **Fases 1 a 6** e já inclui a primeira entrega técnica da **Fase 7**: autenticação Microsoft Entra/OIDC com associação explícita, health checks, procedimentos executáveis de backup/restauro e sincronização de leitura validada contra o Snipe-IT de produção. Entra/SMTP institucionais, observabilidade externa, validação formal de permissões e piloto permanecem tarefas de entrada em produção.
Consulte sempre [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md) antes de alterar o projeto. Esse documento contém o ponto de situação, riscos e próxima tarefa recomendada.
## Arranque rápido
Requisitos: Docker Desktop e Docker Compose.
```bash
cp .env.example .env
docker compose build
docker compose run --rm app php artisan key:generate
docker compose up -d
docker compose exec app php artisan migrate --seed
```
O portal fica disponível em <http://localhost:8000> e o Mailpit em <http://localhost:8025>.
Contas de desenvolvimento:
| Perfil | Email | Palavra-passe |
|---|---|---|
| Requisitante | `demo@escola.pt` | `password` |
| Administrador | `admin@escola.pt` | `password` |
Estas credenciais existem apenas no `DatabaseSeeder` e nunca devem ser usadas em produção.
## Comandos frequentes
```bash
docker compose exec app composer test
docker compose exec app composer lint
docker compose exec app composer types:check
docker compose exec node npm run types:check
docker compose exec node npm run lint:check
docker compose exec node npm run build
```
Como o serviço Docker define variáveis de desenvolvimento, use o script Composer para testes. O script força de forma isolada `APP_ENV=testing`, SQLite em memória, cache/sessão em memória e fila síncrona, evitando locks Redis ou middleware CSRF do ambiente local:
```bash
docker compose exec app composer test
```
Para repor apenas dados de desenvolvimento:
```bash
docker compose exec app php artisan migrate:fresh --seed
```
## Documentação
- [Estado e handoff](docs/PROJECT_STATUS.md)
- [Arquitetura](docs/ARCHITECTURE.md)
- [Requisitos e âmbito](docs/REQUIREMENTS.md)
- [Decisões técnicas](docs/DECISIONS.md)
- [Operação local](docs/RUNBOOK.md)
- [Checklist de produção](docs/PRODUCTION_CHECKLIST.md)
- [Registo de alterações](CHANGELOG.md)
- [Regras para agentes](AGENTS.md)
## Stack
- Laravel 13 / PHP 8.3+
- React 19 / TypeScript / Inertia 3
- Tailwind CSS 4 / componentes shadcn/ui
- PostgreSQL 17
- Redis 7
- Nginx, worker de filas, scheduler e Mailpit em Docker Compose
- Pest, PHPStan/Larastan, ESLint, Prettier e TypeScript
## Princípio central
O portal nunca escreve diretamente na base de dados do Snipe-IT. Identificação e estado operacional do equipamento pertencem ao Snipe-IT; períodos, aprovações, conflitos, notificações, entrega/devolução e auditoria pertencem ao portal.
A instância Snipe-IT configurada é de produção: o portal não cria, edita nem elimina inventário. As únicas escritas remotas permitidas são checkout e check-in operacionais, com validação atual do estado e prova local do movimento; testes e sincronizações são apenas de leitura.