{"id":20715757,"url":"https://github.com/tpierrain/tmp","last_synced_at":"2026-02-06T09:33:38.543Z","repository":{"id":153457568,"uuid":"629478149","full_name":"tpierrain/Tmp","owner":"tpierrain","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-29T16:17:11.000Z","size":76,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-17T02:39:41.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tpierrain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-18T11:54:34.000Z","updated_at":"2024-10-29T16:17:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"f538c783-7788-4397-a22d-3421dd4ba95c","html_url":"https://github.com/tpierrain/Tmp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tpierrain%2FTmp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tpierrain%2FTmp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tpierrain%2FTmp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tpierrain%2FTmp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tpierrain","download_url":"https://codeload.github.com/tpierrain/Tmp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234435208,"owners_count":18832090,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T02:39:47.013Z","updated_at":"2025-09-27T12:30:39.127Z","avatar_url":"https://github.com/tpierrain.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kata-LegacyTrain (TrainTrain)\n*Le kata TrainTrain est un kata écrit par Thomas PIERRAIN et Bruno BOUCARD suite à une inspiration du kata d’Emily BACHE ([Train reservation](https://github.com/emilybache/KataTrainReservation) )*\n*(Sauf que dans TrainTrain, on a écrit plus de code, pour rendre plus savoureux le côté Legacy)*\n\n# Contexte\n\nNous sommes une petite équipe de dev et nous arrivons sur une code-base assez moche -mais qui est en prod- et pour laquelle nous n'avons plus aucun dev pour nous expliquer leurs intentions initiales et justifier de leurs choix. On va devoir se débrouiller seuls pour rajouter une fonctionnalité manquante.\n\nLe système s’appelle TrainTrain, et \n\n `Notre API TrainTrain permet de reserver des places dans les trains`\n\nPour faire son travail, celle-ci attends un identifiant de train (qui correspond dans les faits à un voyage) et un nombre de places souhaitées. Elle retournera un JSON qui contient les noms des sièges réservés ainsi qu’un identifiant de réservation/booking qui est unique.\n\n# Les règles métiers\n\nNotre API est censée implémenter quelques règles métiers :\n\n1. On ne peux réserver que des sièges qui ne sont pas déjà réservés\n2. On ne doit pas remplir les trains à plus de 70% de leur capacité totale (on doit en effet laisser les 30% restants aux salariés de HassanCehef, l’opérateur officiel et historique, car eux aussi on leur propre système de réservation de billets de train)\n3. On ne doit pas séparer les couples et les familles en les plaçant dans des voitures (coaches) différentes\n4. **La règles métier qui manque et qu’il va falloir ajouter est la suivante :** On ne doit pas remplir chaque voiture/coach à plus de 70% de leur capacité (pour permettre aux clients directs de l’opérateur officiel et historique de pouvoir réserver ces 30% restants)\n\n# Les tierces parties utilisées\n\nPour faire sont travail, notre jeune startup exploite 2 APIs de l'opérateur national et historique HassanCehef.\n\nCes 2 APIs de la HassanCehef sont :\n\n### L'API TrainDataService\n\n- **retourne le détail et la composition des trains à partir de leur identifiant de train**\n- **permet de booker/reserver un ensemble de sièges sur un train** en\nprécisant l'identifiant du train, les identifiants/noms des sièges\nsollicités et un booking reference valide récupéré auprès de l'API **BookingReferenceService**\n\n### L'API BookingReferenceService\n\n- Permet de **récupérer un identifiant unique de réservation juste avant** d'appeler le TrainDataService pour effectuer une reservation (on a\nexternalisé le BookingReferenceService pour répondre à une contrainte\nréglementaire Européene, mais certain·e·s disent que c'est plutôt à\ncause de la loi de Conway chez HassanCehef...)\n\n# Objectifs\n\nOn nous a demandé de rajouter une nouvelle fonctionnalité (la règle métier #4: “*On ne doit pas remplir chaque voiture/coach à plus de 70% de leur capacité”*) \n\nmais…\n\nEn rajoutant quelques tests d’acceptation sur la route, on s’est rendu-compte que la règle #3: “*On ne doit pas séparer les couples et les familles en les plaçant dans des voitures (coaches) différentes”*\n\nn’était tout simplement pas implémentée… \n\nC'est là où on en est dans la code base. \n\n---\n\nOn te propose donc nous faire une proposition. Par quoi commencerais-tu ? :\n\n- implémenter la fonctionnalité (#3) qu’on est censé avoir et qui ne fonctionne visiblement pas ? (i.e.: de ne pas séparer les familles)\n- implémenter la nouvelle fonctionnalité qu’on nous a demandé de rajouter (#4)\n- autre chose ?\n\nLetsgo!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftpierrain%2Ftmp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftpierrain%2Ftmp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftpierrain%2Ftmp/lists"}