feat(characters): création identity-first, traits par ligne (#148, PR 3/4) - #168
Merged
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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é
payloadenvoyé 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 :
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 (Alpinesets/actions) et du champ cachépayload; note « traits & actions ajoutés sur la fiche après création ». Identité + fiche externe conservées.main.jscharacterCreate: réduit à la validation d'identité (hasName/hasGame/canSubmit) — retrait desets/actions/buildPayload.character_create(vue) : POST crée avectrait_sets=[]/actions=[]et redirige verstraits_editor; suppression de_parse_character_create_payload, du helper_is_plain_int, des constantesMAX_*et des importsjson/Any.create_character_with_sheet(service) : inchangé — gardetrait_sets/actions(utilisés par tests/seeds), le view passe des listes vides.Tests & vérification
traits_editor, personnage PC créé, 0 trait / 0 action. GET : composant Alpine câblé, pas de champpayload. Erreurs conservées (nom vide / partie manquante / non possédée → 422). ServiceTestCreateCharacterWithSheetintact et vert.manage.py check·makemigrations --check= No changes ·pytest(57) ·ruff check .+ruff format --check .·mypy suddenly/· design lint.Reste #148
ActionOutcome).Refs #148
🤖 Generated with Claude Code
Generated by Claude Code