Files
nav-carte/V2-cadrage/K-prompt-session-2-contribuer.md
2026-04-28 14:00:05 +02:00

3.7 KiB

K — Prompt Sonnet 3 : Formulaire /contribuer + Redis rate limit

Lancer APRÈS validation checkpoint étape 2 (Sonnet 1). Peut tourner en parallèle avec Sonnet 2 (étape 3 fiche) — pas de conflit attendu.

Mission

Construire le formulaire de soumission de nouvelle organisation + setup Redis pour rate limiting.

Contexte (lis AVANT)

Racine projet : nav-carte/

Specs (toutes dans nav-carte/V2-cadrage/) :

  1. Spec session : H-prompt-session-2-front.md (section "Étape 6")
  2. Wireframes formulaire : E-spec-frontend.md (page contribuer)
  3. Pipe collaboration : F-spec-pipe-collaboration.md (workflow modération + statut pending)
  4. Palette : palette-nav-v2.md
  5. VPS infra (Redis dispo ?) : V2-cadrage/VPS-check.md

Code base :

  • nav-carte/pages/ajouter.vue (formulaire V1 à reprendre / refondre)
  • nav-carte/server/routes/ (proxy NocoDB)
  • Note Sonnet 1 dans JOURNAL-V2.md : conventions composants

Livrables

  • Page /contribuer (refonte de ajouter.vue) ou modal SubmitModal.vue (tu tranches selon UX cohérence)
  • Validation Zod côté client + serveur
  • Champs :
    • nom (required, min 3)
    • url (optional, regex URL)
    • description_user (required, 50-500 chars)
    • echelle (required, enum National/Régional/Local)
    • fonctions (required, 1-5 multi parmi 10)
    • territoire (required, enum Métropole + 5 DOM-TOM)
    • localisation_ville (optional, geocoding Nominatim côté serveur si fourni)
    • submitted_by_email (required, format email)
  • Submit :
    • POST /api/submit → NocoDB avec moderation_status: "pending", ai_processed: false
    • Message confirmation : texte exact E-spec-frontend.md §9
    • Worker IA (cron 5 min) traitera plus tard — Session 3 (toi tu ne touches pas le worker)
  • Rate limit Redis : 3 submits / IP / jour
    • Setup Redis sur VPS (vérifier VPS-check.md — sinon apt install redis-server + config localhost only)
    • Connexion depuis Nuxt (ioredis ou redis npm)
    • En local dev : Redis en Docker ou fallback compteur en mémoire (TODO journal)
  • Endpoint /api/comment (Sonnet 2) : ajouter rate limit Redis 5 commentaires/IP/jour — coordonne avec Sonnet 2 via JOURNAL-V2.md

Règles

  • Accents français
  • Palette respectée
  • Mobile-first
  • Pas de Google Fonts
  • Pas de touche à : carte, sidebar, page fiche détail, worker IA, schéma NocoDB
  • Sécurité : pas de leak token NocoDB côté client (proxy Nuxt obligatoire)

Délégation cascade autorisée

Sous-agents Task (Sonnet) pour : install Redis VPS via SSH, génération schéma Zod, recherche Nominatim API.

Credentials VPS

  • SSH alias : vps-hetzner (port 4422)
  • Détails : _System ou cf. mémoire (reference_vps_ssh_access)
  • App nav-carte : /opt/nav-carte/

Critère de fin

  • npm run dev charge /contribuer
  • Soumission valide → fiche en NocoDB avec status pending
  • Soumission invalide → erreurs Zod affichées
  • 4ᵉ submit même IP/jour → 429 rate limit
  • Redis tourne sur VPS (ou fallback documenté en local)
  • Mobile testé
  • Commits atomiques

Doute / blocage

  • Redis impossible à installer VPS → fallback fichier JSON simple (compteur IP/jour) + TODO journal
  • Nominatim rate-limited → skip geocoding, store ville texte brut
  • Spec ambiguë → tranche au plus simple, note JOURNAL-V2.md
  • Blocage dur → STOP + reporte

Résumé attendu

## S2 Étape 6 — [DONE / BLOCKED]

### Livrables
- ✓ ... / ✗ ...

### Décisions
- Redis : VPS / Docker local / fallback JSON ?
- Page vs modal : ...

### À tester
- /contribuer (submit valide + invalide + rate limit)

### Fichiers modifiés / Commits
- ...

### Coordination Sonnet 2
- Rate limit `/api/comment` : posé pour toi ou à toi de poser ?