Stade Disponibilité
Général
Le but du module 'StadeDisponibilite' est d'encapsuler tout le nécessaire pour gérer la disponibilité d'une zone/place sur le stade en fonction du modèle article. L'interêt sur le long terme est d'avoir toute les infos nécessaires au même endroit pour pouvoir faire des Test Automatique externe à Rails qui teste le bon fonctionnement pour ensuite externaliser ça dans un micro-service testé avec les même Tests.
On a trois sous-modules:
- ContextProvider qui permet de prendre en entrée plusieurs type de données et construire un seul context.
- Scopes qui permet de faire le traitement nécessaire en SQL
- Responses qui permet à partir d'un context de fournir un format de réponse souhaité.
Context provider / Context
Le sous-module 'ContextProvider' permet d'auto configurer les informations importantes pour le calcul de disponibilité tel que les matchs concernés, les reservoirs, les catégories de places et la configuration de stade.
Il existe les providers suivant:
- ModeleArticle : Permet de configurer le context à partir d'un modèle article et du current user.
- RawOpts : Laisse la possibilité de configurer manuellement tout les paramètres.
Le context peut-être utilisé pour plusieurs Responses et donc peut mettre en cache certaines données si nécessaire (Le cache devra être gérer dans le module 'StadeDisponibilite' uniquement pour des raisons d'encapsulation).
Scopes
Le sous-module 'Scopes' permet de centraliser tout les scopes nécessaires pour l'état de disponibilité des places/zones sur le stade.
Le module 'Scopes' (scopes.rb) contient un registre de scope avec la class associée. Il est important de rajouter une ligne register([nom du scope de type symbol], [la class utilisé]).
Une fois le scope rajouté, on peut y accéder depuis n'importe où dans le module via le context avec de la manière suivante:
context.get_scope(:nom_du_scope)Permet de récupérer un scope standard Railscontext.get_scope_sql(:nom_du_scope)Permet de récupérer le résultat SQLcontext.get_scope_result(:nom_du_scope)Permet de récupérer le résultat au format brute Postgresqlcontext.explain_scope(:nom_du_scope)Permet de faire un .explain d'un scope
Chaque class 'Scope' doit avoir une méthode get_scope(context). Le context permet de récupérer les informations que l'on a besoin pour construire le nouveau scope.
Responses
Le sous-module 'Responses' permet de faire le traitement final et ensuite de renvoyer les données dans le format souhaité. Il peut-être utilisé pour gérer une Vue, une réponse JSON ou même pour récupérer une place/zone disponible.