feat: complete reservation lifecycle

This commit is contained in:
2026-08-04 16:30:11 +01:00
parent 077015f17a
commit e667d05bc1
24 changed files with 1096 additions and 46 deletions

View File

@@ -18,6 +18,10 @@ Todas as alterações materiais são registadas neste ficheiro. O formato segue
- Sincronização horária e manual de equipamentos, job único, lock distribuído, histórico de execuções e desativação segura de ausentes.
- Área administrativa de diagnóstico Snipe-IT com teste de conectividade, métricas do cache e histórico de sincronizações.
- Autorização administrativa através de Gate e navegação condicional por perfil.
- Pesquisa de disponibilidade por período no catálogo e formulário, incluindo reservas, atribuições atuais e bloqueios administrativos.
- Cancelamento pelo requisitante com validação da máquina de estados, libertação transacional dos equipamentos e auditoria.
- Expiração automática e manual de pré-reservas, com job único agendado a cada cinco minutos e comando `reservations:expire`.
- Calendário mensal pessoal com isolamento por utilizador e navegação entre meses.
### Alterado
@@ -26,6 +30,7 @@ Todas as alterações materiais são registadas neste ficheiro. O formato segue
- Configuração de desenvolvimento Vite passa a publicar módulos e HMR em `localhost:5173` e a aceitar explicitamente a origem do portal em `localhost:8000`, corrigindo a página em branco em Docker.
- As mensagens flash globais recebem agora as propriedades diretamente de `withApp`, evitando o uso de `usePage()` fora do contexto Inertia que interrompia o arranque do React.
- SSR de desenvolvimento ligado internamente de PHP para o serviço `node`, com o hostname Docker autorizado no Vite.
- Catálogo sem período passa a distinguir equipamentos apenas requisitáveis; quando um período é selecionado, apresenta exclusivamente equipamentos livres nesse intervalo.
### Segurança
@@ -35,9 +40,11 @@ Todas as alterações materiais são registadas neste ficheiro. O formato segue
### Verificado
- Migrations e seeders executados em PostgreSQL 17 real.
- Suite backend: Pint, PHPStan nível 7 e 53 testes Pest (201 asserções).
- Suite backend: Pint em 102 ficheiros, PHPStan nível 7 em 77 ficheiros e 60 testes Pest (270 asserções).
- Frontend: TypeScript, ESLint, Prettier e build Vite de produção.
- Stack Docker operacional e endpoint de login acessível através do Nginx.
- Renderização SSR real do login validada, incluindo o conteúdo “Entrar no Portal de Reservas”.
- API Snipe-IT simulada em testes: paginação, headers, retry, erro em HTTP 200, falha parcial, idempotência e desativação de ausentes.
- Migration `last_seen_sync_run_id` aplicada em PostgreSQL 17.
- Comando de expiração executado em PostgreSQL e agendamento a cada cinco minutos confirmado.
- Builds Vite cliente e SSR com as páginas de disponibilidade, cancelamento e calendário concluídos.