Skip to content

feat: publier sa demande, avec l'événement DemandePubliee et des questions guidées (#158) - #188

Open
sowibrr wants to merge 3 commits into
mainfrom
158-publier-sa-demande
Open

sowibrr wants to merge 3 commits into
mainfrom
158-publier-sa-demande

Conversation

@sowibrr

@sowibrr sowibrr commented Nov 14, 2026

Copy link
Copy Markdown
Collaborator

Suivi : #158 (le module Freelance) · Attendu par @rev22rse22 dans #155 (point 3) · Complète #164 (les précisions après l'analyse)

Ce qui a été fait

Le parcours « décrire, relire, publier » de docs/blocs/freelance.md, sur l'orientation telle qu'elle est (aucun nouvel agent, comme le décide docs/priorites.md) :

  1. Des questions guidées avant l'analyse (facultatives) sur « Décris ton besoin » : Qui va s'en servir ? Qu'est-ce qui ne va pas aujourd'hui ? À quoi verras-tu que c'est réussi ? Les réponses sont ajoutées au besoin, avec leur question, dans la langue de la personne. Elles complètent les précisions après l'analyse de feat: l'orientation parle aux non-techniciens et présente les options côte à côte #164, sans les remplacer.
  2. Publier sa demande : POST /api/demandes/{id}/publication (contrat demandes.yaml v0.3). Quand le plan est prêt, la personne relit son cahier des charges et choisit le résumé que la communauté verra (prérempli, modifiable, 600 caractères au plus).
    • Seul ce résumé devient public : jamais le texte d'origine, jamais l'orientation complète. Les e-mails et téléphones en sont retirés.
    • Une seule fois : 409 deja_publiee, même avec deux requêtes simultanées (une seule met la ligne à jour).
    • Seulement si le plan est prêt : 409 plan_non_pret, y compris quand le service IA ne répond pas.
    • Pour tout autre que l'auteur : 404.
  3. L'événement public DemandePubliee (dev.jamii.api.demandes.DemandePubliee), publié dans la même transaction que la publication : demandeId, auteurId, titre, resume, secteur, ville, pays, dureeSemaines, competences, publieeLe. Pas de texte d'origine ni de coordonnées. @rev22rse22 peut l'écouter pour afficher la demande dans un salon, en retrouvant le nom de l'auteur par Annuaire.
  4. La publication fait partie de l'export du compte (GET /api/me/export).

Migration : V20261114_1850__demande_publication.sql (deux colonnes et une contrainte de cohérence). Écran : PublierDemande.vue, ajouté d'une seule ligne dans DemandePage.vue.

Comment c'est vérifié

  • tests API : PublicationDemandesTest, 12 tests écrits avant le code (événement et son contenu, plan non prêt, IA en panne, double publication, deux publications simultanées, 404 pour un autre compte, 401 et 403 sans connexion ou sans jeton CSRF, résumé trop court ou trop long, coordonnées retirées, export). Suite complète : 415 tests, 0 échec, ModulesTest compris.
  • tests front : 10 nouveaux (publication.test.ts) ; suite complète 182 sur 183, build réussi, types à jour, redocly lint valide.
  • testé à la main, API locale (profil demo) et navigateur : connexion par e-mail avec une adresse fictive, besoin avec une question guidée, analyse, relecture, publication. L'écran affiche « Ta demande est publiée depuis le 14 novembre 2026 », la base contient le résumé, aucune erreur dans le journal.
  • Conflits résolus avec feat: l'orientation parle aux non-techniciens et présente les options côte à côte #164 (GestionDemandes, DemandesController, DonneesDemandes, NouvelleDemandePage) : la fiche, la vue et l'export portent maintenant les précisions et la publication.

Décisions et alternatives écartées

  • Un résumé choisi par l'auteur plutôt que de publier le cahier des charges entier : la demande est une donnée personnelle ; la personne décide de ce qui sort, et l'événement ne peut pas fuiter son texte d'origine.
  • Une transaction pour la publication et l'événement plutôt qu'un événement envoyé après coup : sinon une panne entre les deux publierait la demande sans qu'aucun salon ne le sache.
  • Questions guidées côté écran, sans nouvel agent : conforme à la décision du chef de projet, et le besoin reste un seul texte pour l'API.

Pistes d'amélioration

  • 🔴 Test instable, pas le mien : reseau.test.ts > venu d'un besoin, invite en un clic… échoue dans la suite complète quand elle est chargée. Il attend l'invitation de Kwame mais pas l'erreur d'Amina qui arrive après. Avec await vi.waitFor(() => expect(…)) autour de la ligne 89, la suite passe 3 fois sur 3 (vérifié en local, non gardé : le fichier est à @rev22rse22). Si la CI échoue sur ce test, relancer le job.
  • 🟡 On ne peut pas retirer une publication pour l'instant (la supprimer avec le compte ou la demande la retire). À prévoir : un DELETE /api/demandes/{id}/publication et un événement DemandeRetiree.
  • 🟡 Les demandes publiées n'ont pas encore de page publique de lecture ; le salon affiche le résumé de l'événement.
  • ❓ Question ouverte : un développeur qui veut répondre à une demande publiée passe par « Former un cercle avec eux » (feat: du besoin au cercle, la création pré-remplie depuis l'orientation (#133) #150) ; faut-il aussi un bouton « Je peux t'aider » ?

Outils d'IA utilisés : Claude Code (Claude Sonnet 5.5) pour le code, les tests, la résolution des conflits et la vérification dans le navigateur.

🤖 Generated with Claude Code

sowibrr and others added 2 commits November 14, 2026 18:56
…tions guidées (#158)

Quand son plan est prêt, l'auteur relit son cahier des charges et publie sa
demande avec le résumé qu'il choisit de montrer (e-mails et téléphones
retirés, une seule fois, atomique). L'événement public DemandePubliee part
dans la même transaction, pour que les communautés l'affichent dans un salon.
Le contrat des demandes passe en v0.3, la publication entre dans l'export du
compte, et « Décris ton besoin » pose trois questions guidées facultatives.

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

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Conflits dans les demandes avec #164 (les précisions après l'analyse) : la
fiche, la vue et l'export portent maintenant les précisions ET la publication.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@sowibrr
sowibrr requested a review from algabah2004 as a code owner November 14, 2026 19:06
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.

1 participant