Skip to content

feat: le module vitrine de l'API, avec le label Tech Tontine (#129) - #187

Open
sowibrr wants to merge 1 commit into
mainfrom
129-module-vitrine
Open

sowibrr wants to merge 1 commit into
mainfrom
129-module-vitrine

Conversation

@sowibrr

@sowibrr sowibrr commented Nov 14, 2026

Copy link
Copy Markdown
Collaborator

Closes #129 · Repris de @Amar233-ui comme prévu dans docs/priorites.md : sans PR ouverte à 18 h GMT, la reprise revient à @sowibrr. Rien n'a été retiré à son travail, il n'avait ni branche ni PR sur ce ticket.

Ce qui a été fait

GET /api/vitrine répondait 404 : le module n'existait pas, donc l'étape 4 de la démo était vide en ligne. Le module vitrine de l'API (contracts/vitrine.yaml) :

  • compose sans lire les tables des autres : les projets en ligne et leur adresse (DeploiementsEnLigne.lister(), déjà limité aux adresses qui ont répondu il y a moins de 24 h), leur titre, accroche et équipe (FichesPubliques.lire), et le pays des membres (ProfilsPublies.publie, seulement les profils publiés) ;
  • trie par mise en ligne la plus récente, avec un curseur, les filtres hebergeur (datacloud ou autre) et pays ;
  • répond avec Cache-Control: public, max-age=60, sans connexion (la route était déjà publique) ;
  • renvoie 400 au format du contrat pour un paramètre invalide (hébergeur inconnu, pays mal écrit, limite hors de 1 à 100, curseur illisible).

Le label : l'origine cercle existait en base (V13) et dans le module projets, mais pas dans le contrat. Elle y entre, les types sont régénérés, et la carte du front affiche « Né dans une Tech Tontine Systalink » (texte en français et en anglais). Un projet de démo en est marqué, et un test le vérifie.

Comment c'est vérifié

  • tests : VitrineTest, 8 tests écrits avant le code, sur un vrai PostgreSQL :
    • un projet en ligne apparaît sans connexion, avec son équipe (le porteur d'abord) et sans aucun e-mail ;
    • une adresse qui n'a pas répondu depuis plus de 24 h sort de la vitrine (23 h oui, 25 h non) ;
    • ni un déploiement en cours, ni en échec, ni l'absence de déploiement ne font apparaître un projet ;
    • l'ordre par mise en ligne, et le curseur qui ne répète rien ;
    • les filtres hébergeur et pays, et le pays d'un profil privé n'est jamais révélé ;
    • les 400.
  • suite complète en local : API 399 tests, front 174 tests, build du front et types à jour. ModulesTest passe : le module ne touche que les services publics des autres.
  • contrat : redocly lint valide vitrine.yaml.

Décisions et alternatives écartées

  • Composition en mémoire plutôt qu'une table ou une requête SQL entre modules : la vitrine est petite (un projet par déploiement en ligne), et docs/modele-donnees.md dit que la vitrine n'est pas une table.
  • Le pays vient seulement des profils publiés : un profil privé ne doit pas se deviner par la vitrine.
  • L'en-tête Cache-Control est écrit tel que le contrat le donne (public, max-age=60).

Pistes d'amélioration

  • 🟡 Le pays est lu profil par profil (ProfilsPublies.publie). Pour quelques dizaines de projets c'est sans risque ; avec beaucoup plus, il faudra une lecture groupée côté profils : à demander à @rev22rse22 le moment venu.
  • 🟡 Deux tests, CommunautesTest.une_question_publiee_se_relit… et reseau.test.ts > venu d'un besoin, invite en un clic…, ont échoué une fois chacun aujourd'hui, puis sont repassés sans changement. Ils semblent instables sous charge.
  • 💡 Idée : un projet livré par un tour pourrait montrer le nom du cercle sur sa carte.
  • ❓ Question ouverte : @Amar233-ui reprend-il le module après la CADEV ? Le contrat et les tests sont là pour lui.

Outils d'IA utilisés : Claude Code (Claude Sonnet 5.5) pour le code, les tests et la rédaction.

🤖 Generated with Claude Code

GET /api/vitrine (contracts/vitrine.yaml) répondait 404 : le module n'existait
pas. Il compose les projets en ligne (deploiement), leur fiche et leur équipe
(projets) et le pays des profils publiés (profils), sans lire leurs tables.
Tri par mise en ligne la plus récente, curseur, filtres hébergeur et pays,
Cache-Control public d'une minute. L'origine « cercle » entre dans le contrat
et la carte du front affiche « Né dans une Tech Tontine Systalink ».

Outils d'IA : Claude Code (Claude Sonnet 5.5).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Demande à @Amar233-ui : le module vitrine de l'API (GET /api/vitrine répond 404)

1 participant