Moteur de reservation Ruby on Rails en cours de construction.
Ce repository doit d'abord se lire comme un projet exploite par un seul developpeur en local.
Le README sert donc de porte d'entree strictement orientee usage solo local :
- comprendre rapidement le perimetre actif
- lancer l'application en developpement
- verifier la base et les tests utiles
- savoir quel fichier DB fait vraiment foi
Si tu developpes seul en local pour l'instant, concentre-toi sur 3 commandes :
bin/setup --skip-server
bin/dev
bin/checkElles couvrent l'essentiel :
bin/setup --skip-servervalide et prepare l'environnement localbin/devlance l'application en developpementbin/checkexecute simplement les tests Rails locaux
Pour l'instant, tu peux ignorer :
- Docker
- Kamal / deploy
- CI
- production
Ce repo conserve ces elements pour plus tard, mais ils ne sont pas necessaires a ton usage quotidien local.
- Ruby
3.4.9 - Rails
8.1.2 - Bundler
2.7.2 - PostgreSQL
17.x
Verification rapide :
ruby -v
bundle -v
psql --versionPrerequis locaux reels :
- Ruby
3.4.9 - Bundler
2.7.2 - PostgreSQL
17.xlocal accessible
Premier bootstrap local :
bundle install
bin/setup --skip-serverDemarrage quotidien :
bin/devValidation minimale avant un changement sensible :
bin/checkAlias explicite :
bin/rails testbin/check suppose un environnement deja valide et prepare par bin/setup --skip-server.
Si un probleme local vient de Ruby, Bundler, PostgreSQL ou de la base, la remediaton attendue est de repasser par bin/setup --skip-server, pas d'ajouter du bootstrap implicite a bin/check.
Reset exceptionnel de la base locale :
bin/setup --reset --skip-serverLe workflow recommande pour un usage solo local est :
bin/devpour coder et lancer le serveurbin/checkavant ou apres une modification importantebin/setup --reset --skip-serverseulement si tu veux remettre la base locale a plat
Le chemin de reference pour preparer le projet en local est :
bin/setup --skip-serverCe script :
- installe les dependances Ruby si necessaire
- prepare la base de donnees avec
bin/rails db:prepare - nettoie les logs et fichiers temporaires
Pour lancer directement l'application apres le setup :
bin/setupApplication disponible sur :
Healthcheck :
Commande minimale recommandee :
bin/checkCommande equivalente :
bin/rails testbin/check reste volontairement un alias court de test local.
Il ne fait ni preflight d'environnement, ni db:prepare, ni auto-reparation.
Lancer un fichier de test precis :
bin/rails test test/integration/booking_flow_test.rb- docs/DeveloperOnboarding.md : vue d'ensemble technique pour un nouveau developpeur
- docs/TestOnboarding.md : vue d'ensemble de la strategie et de la structure des tests
- docs/DatabaseOnboarding.md : vue d'ensemble rapide de la structure de la base et des invariants DB
- README.md : point d'entree setup, base locale, tests et perimetre courant
- docs/BookingRules.md : point d'entree technique vers la documentation de reservation
- docs/BookingFlow.md : reference du flux de reservation et du cycle de vie courant
- docs/BookingInvariants.md : reference des invariants de domaine, DB et concurrence
- docs/DatabaseArchitecture.md : architecture de la base, tables, relations et garde-fous PostgreSQL
- docs/ProductScope.md : cadrage produit/strategie courant
- docs/FutureInvariantsChecklist.md : memo prospectif a relire seulement si le perimetre evolue
Le projet utilise PostgreSQL 17.x.
Configuration locale par defaut :
- base de developpement :
webook4u_development - base de test :
webook4u_test
Par defaut, config/database.yml utilise PostgreSQL local avec l'utilisateur systeme courant si aucun username n'est renseigne.
PostgreSQL doit donc etre demarre et accessible en local, sauf configuration specifique via DATABASE_URL.
Contrat local de bin/setup :
- le preflight PostgreSQL part de la config
developmentdeconfig/database.yml - si
development.urlest defini, ses attributs remplacent seulement les cles explicites de cette URL - si
DATABASE_URLest defini, ses attributs remplacent ensuite seulement les cles explicites qu'il fournit - le preflight verifie ainsi la meme cible
developmentquebin/rails db:prepare
Important :
- le serveur PostgreSQL local doit etre en version
17.x - PostgreSQL
15et les versions anterieures ne sont pas compatibles avec ledb/structure.sqlcourant - un client
psqlen version17.xne suffit pas si le serveur local tourne encore en15
Doctrine DB actuelle :
db/structure.sqlest la seule reference DB serieuse du projetdb/schema.rbreste un artefact Rails secondaire, utile pour une lecture rapide, mais pas une base d'analyse ni une source de verite pour les invariants PostgreSQL avances- toute analyse DB, revue de migration ou verification d'invariant doit partir de
db/structure.sql
Si un doute apparait entre les deux fichiers, il faut croire db/structure.sql, pas db/schema.rb.
Une installation est consideree valide si :
bin/setup --skip-serverse termine sans erreurbin/rails serverdemarre sans erreur- http://localhost:3000/up repond
- une page publique seedee s'affiche en local
bin/rails testpasse au vert
Ces elements existent dans le repo mais ne sont pas necessaires a ton usage quotidien local :
bin/cipour les checks agregees CIbin/brakemanetbin/bundler-auditpour les audits securitebin/rubocoppour le styleDockerfilepour l'image de productionconfig/deploy.ymletbin/kamalpour le deploy- la section
productiondeconfig/database.ymlpour une future mise en prod
Le projet couvre aujourd'hui :
- page publique de reservation par
slug - selection d'une enseigne
- selection d'une prestation
- selection d'une date
- affichage des creneaux disponibles
- creation d'une reservation temporaire (
pending) - confirmation de reservation
- page de succes
Hors perimetre actuel :
- paiement
- gestion metier liee aux echecs de paiement
- exploitation reelle du statut
failed - fonctionnement 100% base sur les horaires par enseigne
Regles metier actuelles :
- les prestations sont partagees entre toutes les enseignes d'un meme client
- pour un jour donne, si une enseigne a au moins une plage dans
enseigne_opening_hours, ces horaires remplacent totalement le fallbackclientpour ce jour - les horaires
clientne servent de fallback que lorsqu'aucune plageenseignen'existe pour le jour demande