Étude de cas

Vif

Une plateforme configurable pour les communautés privées. Walking Club en est la première configuration ; les adhésions, événements, réservations, paiements et opérations organisateur sont des fonctions communes de la plateforme.

Stack
Go · PostgreSQL · TypeScript

Problème

Des outils séparés, des états incohérents

Les organisateurs géraient candidatures, accès, événements, paiements et communication dans plusieurs outils. Vif fournit une source de vérité unique pour les adhésions et les réservations, avec des informations d’événement protégées et des contrôles explicites.

Mon travail

Application et livraison

J’ai implémenté le modèle métier, le schéma et les migrations PostgreSQL, les handlers et workers Go, l’interface rendue côté serveur, les composants TypeScript, les intégrations, les contrôles de déploiement et les tests automatisés.

Implémentation

Une application Go modulaire

Vif est un monolithe Go modulaire avec un accès direct à PostgreSQL via pgx. Les pages sont rendues côté serveur ; de petits Web Components TypeScript ajoutent les interactions nécessaires. Keycloak fournit l’identité OIDC. Une outbox transactionnelle sort les notifications du chemin de requête, et Stripe Sandbox reste isolé derrière la frontière de paiement.

ApplicationMonolithe modulaire Go
DonnéesPostgreSQL · pgx
NavigateurHTML · CSS · TypeScript
FournisseursKeycloak · Stripe Sandbox · SMTP

Frontières transactionnelles

Rendre les changements d’état explicites

Les états d’adhésion, d’événement et de réservation restent dans PostgreSQL et évoluent dans des transactions explicites. La concurrence et les retours arrière restent lisibles, au prix de davantage de SQL et de coordination métier qu’avec un ORM.

Confirmation du paiement

Le webhook fait autorité

Un retour navigateur réussi n’accorde jamais un droit payé. Seul un webhook Stripe dont la signature est vérifiée, enregistré puis appliqué de façon idempotente peut modifier l’accès. La confirmation peut être moins immédiate, mais un callback dupliqué ou falsifié ne crée pas de droit.

Gestion des erreurs

Événement de paiement manquant

Vif laisse l’inscription en attente au lieu de faire confiance à l’URL de retour. Une réconciliation bornée signale qu’un événement fournisseur semble manquer sans appliquer son contenu. L’organisateur peut demander à Stripe de le renvoyer ; seul le nouveau webhook signé ferme le signalement et fait avancer l’état.

Vérification

Tests automatisés et fournisseurs

  • Tests Go unitaires, avec race detector et intégration PostgreSQL
  • Typage TypeScript et tests des composants navigateur
  • Parcours Playwright sur Chromium, Firefox et WebKit
  • Contrôles séparés en préproduction pour l’identité, l’e-mail et Stripe Sandbox