Erreurs, Config & Déploiement (Server)
1. Gestion des erreurs
Section titled “1. Gestion des erreurs”Les erreurs applicatives sont stables, typées et converties en HTTP au bord du système. gorm.ErrRecordNotFound est systématiquement traduit en apperror.ErrNotFound dans les repositories.
package apperror
import "errors"
var ( ErrNotFound = errors.New("resource not found") ErrUnauthorized = errors.New("unauthorized") ErrForbidden = errors.New("forbidden") ErrConflict = errors.New("conflict"))2. Configuration
Section titled “2. Configuration”Les secrets et chemins peuvent être surchargés par variables d’environnement. La configuration est validée au démarrage.
.env.example
Section titled “.env.example”# URL acceptée par gorm.io/driver/postgresDATABASE_URL=host=postgres user=berth password=change-me dbname=berth port=5432 sslmode=disable TimeZone=UTCREDIS_URL=redis://redis:6379/0HTTP_ADDR=:8080JWT_SECRET=replace-with-a-long-random-secretMAX_OPEN_CONNS=20MAX_IDLE_CONNS=5CONN_MAX_LIFETIME=30m3. Conventions de code
Section titled “3. Conventions de code”- Formater tout Go avec
gofmt. - Utiliser
context.Contexten premier argument. - Préférer des transactions GORM pour une mutation multi-étapes.
- Utiliser des UUID pour les identifiants et des timestamps UTC.
4. Tests
Section titled “4. Tests”Mocks manuels
Section titled “Mocks manuels”Définir des interfaces fines (Repository, Cache, AgentGateway) et des mocks manuels dans *_test.go. Tester les commandes pour vérifier : succès, application absente, échec gRPC, échec de sauvegarde et invalidation.
Tests d’intégration GORM
Section titled “Tests d’intégration GORM”Utiliser testcontainers-go pour démarrer PostgreSQL et Redis dans les tests d’intégration. Initialiser GORM avec le même driver PostgreSQL que la production.
5. Évolution possible
Section titled “5. Évolution possible”- Étendre l’audit Redis Streams (DLQ, outbox transactionnelle).
- Introduire un outbox transactionnel si la publication d’événements devient critique.
- Ajouter une réplica PostgreSQL en lecture si la charge le justifie.
- Ajouter OpenTelemetry et métriques Prometheus.
