Skip to content

feat(characters): création identity-first, traits par ligne (#148, PR 3/4) - #168

Merged
RebelliousSmile merged 1 commit into
mainfrom
claude/plan-derniere-issue-l94t6x
Jul 21, 2026
Merged

feat(characters): création identity-first, traits par ligne (#148, PR 3/4)#168
RebelliousSmile merged 1 commit into
mainfrom
claude/plan-derniere-issue-l94t6x

Conversation

@RebelliousSmile

Copy link
Copy Markdown
Owner

Troisième PR de #148 — volet ② persistance par ligne (ta décision : « persistance par ligne, puisqu'on peut les éditer »).

Pourquoi

Le point ② de l'issue : « il n'y a pas de bouton pour valider l'ajout d'un trait/action — il faut en ajouter un nouveau pour que le précédent soit enregistré ». Le formulaire de création accumulait traits/actions en mémoire Alpine puis les sérialisait dans un champ caché payload envoyé en un seul POST atomique. Rien n'était persisté au fil de l'eau.

Comme un trait/action doit référencer un personnage existant, la création passe en deux temps :

  1. Le formulaire crée l'identité (nom, description, background, secrets, cover_alt, sheet_url, avatar, partie d'origine).
  2. Redirection vers l'éditeur (traits_editor), où traits et actions se gèrent un par un — persistés et éditables (PR 2).

Changements

  • character_create.html : retrait des cartes builder Traits + Actions (Alpine sets/actions) et du champ caché payload ; note « traits & actions ajoutés sur la fiche après création ». Identité + fiche externe conservées.
  • main.js characterCreate : réduit à la validation d'identité (hasName/hasGame/canSubmit) — retrait de sets/actions/buildPayload.
  • character_create (vue) : POST crée avec trait_sets=[]/actions=[] et redirige vers traits_editor ; suppression de _parse_character_create_payload, du helper _is_plain_int, des constantes MAX_* et des imports json/Any.
  • create_character_with_sheet (service) : inchangé — garde trait_sets/actions (utilisés par tests/seeds), le view passe des listes vides.
  • Aucune migration.

Tests & vérification

  • Vue : POST identité → 302 vers traits_editor, personnage PC créé, 0 trait / 0 action. GET : composant Alpine câblé, pas de champ payload. Erreurs conservées (nom vide / partie manquante / non possédée → 422). Service TestCreateCharacterWithSheet intact et vert.
  • manage.py check · makemigrations --check = No changes · pytest (57) · ruff check . + ruff format --check . · mypy suddenly/ · design lint.
  • i18n fr/en (note sur une seule ligne fr).

Reste #148

  • PR 4 — ⑤ conséquences conditionnelles (nouveau modèle ActionOutcome).

Refs #148

🤖 Generated with Claude Code


Generated by Claude Code

…148)

PR 3 de #148 — ② persistance par ligne (décision utilisateur). Le
formulaire de création accumulait traits/actions en mémoire Alpine puis
les envoyait dans un champ caché payload (un seul POST atomique) — rien
n'était persisté au fil de l'eau, d'où « il faut ajouter un nouveau
trait pour que le précédent soit enregistré ».

Un trait/action devant référencer un personnage existant, la création
passe en deux temps :
- Le formulaire crée l'identité (nom, description, background, secrets,
  cover_alt, sheet_url, avatar, partie) et redirige vers l'éditeur.
- Traits/actions ajoutés un par un dans l'éditeur (persistés +
  éditables, cf. PR 2).

- character_create.html : retrait des builders Traits/Actions + champ
  payload ; note explicative.
- main.js characterCreate réduit à la validation d'identité.
- character_create : crée avec listes vides, redirige vers traits_editor ;
  suppression de _parse_character_create_payload + constantes + imports.
- create_character_with_sheet inchangé (garde trait_sets/actions pour
  tests/seeds ; le view passe []).
- Tests réécrits (identité → editor, 0 trait/action, plus de payload) ;
  i18n fr/en. Aucune migration.

Reste : ⑤ conséquences conditionnelles (PR 4).

Refs #148

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBRFVUtmBW3YSP8Yd2uNpB
@RebelliousSmile
RebelliousSmile merged commit 368ceb3 into main Jul 21, 2026
1 check passed
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.

2 participants