3.7 KiB
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/) :
- Spec session :
H-prompt-session-2-front.md(section "Étape 6") - Wireframes formulaire :
E-spec-frontend.md(page contribuer) - Pipe collaboration :
F-spec-pipe-collaboration.md(workflow modération + statutpending) - Palette :
palette-nav-v2.md - 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 deajouter.vue) ou modalSubmitModal.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 avecmoderation_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)
- POST
- Rate limit Redis : 3 submits / IP / jour
- Setup Redis sur VPS (vérifier
VPS-check.md— sinonapt install redis-server+ config localhost only) - Connexion depuis Nuxt (
ioredisouredisnpm) - En local dev : Redis en Docker ou fallback compteur en mémoire (TODO journal)
- Setup Redis sur VPS (vérifier
- 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 :
_Systemou cf. mémoire (reference_vps_ssh_access) - App nav-carte :
/opt/nav-carte/
Critère de fin
npm run devcharge/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 ?