feat: add Snipe-IT asset synchronization
This commit is contained in:
@@ -35,7 +35,7 @@ Nginx ──► Laravel + Inertia/React
|
||||
- `app/Domain/Approvals`: decisões e concorrência de aprovação (a criar).
|
||||
- `app/Domain/Handovers`: entrega, devolução e incidentes (a criar).
|
||||
- `app/Domain/Audit`: logs imutáveis pela interface.
|
||||
- `app/Integrations/SnipeIt`: único ponto de comunicação com Snipe-IT (a criar).
|
||||
- `app/Integrations/SnipeIt`: cliente HTTP, DTOs, mapper e exceções da API Snipe-IT.
|
||||
|
||||
## Consistência temporal
|
||||
|
||||
@@ -52,11 +52,15 @@ Uma criação ou aprovação deve bloquear as linhas dos ativos, voltar a valida
|
||||
|
||||
1. Um job consulta a API paginada com token de leitura.
|
||||
2. Um mapper reduz a resposta aos campos documentados.
|
||||
3. `AssetSyncService` faz upsert por `snipe_asset_id` e calcula `content_hash`.
|
||||
4. Ativos ausentes numa sincronização completa ficam `active = false`; não são apagados para preservar histórico.
|
||||
3. `AssetSyncService` faz upsert por `snipe_asset_id`, calcula `content_hash` e marca cada ativo com `last_seen_sync_run_id`.
|
||||
4. Apenas após todas as páginas serem recebidas com sucesso, ativos cujo marcador não corresponde à execução atual ficam `active = false`; não são apagados para preservar histórico.
|
||||
5. Antes de aprovação ou entrega, o ativo é validado novamente.
|
||||
6. Checkout/check-in usam um token operacional separado e guardam apenas a resposta necessária para auditoria.
|
||||
|
||||
Uma falha intermédia pode deixar upserts válidos das páginas anteriores, mas nunca executa a desativação global. A sincronização seguinte converge o cache. Um lock distribuído e um job único impedem duas sincronizações simultâneas.
|
||||
|
||||
Referências oficiais usadas para o contrato: [autenticação da API](https://snipe-it.readme.io/reference/authenticating-with-the-api), [listagem de hardware](https://snipe-it.readme.io/reference/hardware-list) e [limites/paginação](https://snipe-it.readme.io/reference/api-throttling).
|
||||
|
||||
## Segurança
|
||||
|
||||
- Sem registo público.
|
||||
|
||||
Reference in New Issue
Block a user