Skip to content

Erreurs, Config & Déploiement (Server)

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.

internal/pkg/apperror/error.go
package apperror
import "errors"
var (
ErrNotFound = errors.New("resource not found")
ErrUnauthorized = errors.New("unauthorized")
ErrForbidden = errors.New("forbidden")
ErrConflict = errors.New("conflict")
)

Les secrets et chemins peuvent être surchargés par variables d’environnement. La configuration est validée au démarrage.

# URL acceptée par gorm.io/driver/postgres
DATABASE_URL=host=postgres user=berth password=change-me dbname=berth port=5432 sslmode=disable TimeZone=UTC
REDIS_URL=redis://redis:6379/0
HTTP_ADDR=:8080
JWT_SECRET=replace-with-a-long-random-secret
MAX_OPEN_CONNS=20
MAX_IDLE_CONNS=5
CONN_MAX_LIFETIME=30m
  • Formater tout Go avec gofmt.
  • Utiliser context.Context en premier argument.
  • Préférer des transactions GORM pour une mutation multi-étapes.
  • Utiliser des UUID pour les identifiants et des timestamps UTC.

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.

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.

  • É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.