Bug rapporté : le panneau "+ Nouvel objet" du tableau de bord "recharge la page sans créer d'objet". Cause : object_new exigeait "name AND fields" pour créer quoi que ce soit — or le formulaire du panneau permet de taper le nom et de cliquer directement "Créer l'objet" SANS avoir cliqué au préalable "+ Ajouter un champ" (les champs se posent typiquement APRÈS, depuis le panneau "Modifier un objet", workflow déjà supporté). Sans champ soumis, la condition échouait, la route redirigeait silencieusement vers le tableau de bord SANS créer l'objet ET sans le moindre message d'erreur — vécu comme "un rechargement qui ne fait rien". create_definition(fields=[]) fonctionne déjà très bien (crée juste une table avec id/created_at, sans colonne "métier") : retiré l'exigence d'au moins un champ, ne reste que "name" non vide. Nouveau test (tests/test_object_new_without_fields.py), confirmé en échec sur l'ancien code (git stash) puis au vert avec le correctif. 131 tests au vert au total. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
31 lines
1.5 KiB
Python
31 lines
1.5 KiB
Python
from flask import request, redirect, url_for
|
|
|
|
import db
|
|
|
|
from core.flask_app import app
|
|
from .parse_field_rows import _parse_field_rows
|
|
|
|
|
|
@app.route("/game/<slug>/objects/new", methods=["GET", "POST"])
|
|
def object_new(slug):
|
|
"""La création d'un objet se fait désormais depuis un panneau déplaçable
|
|
sur le tableau de bord du jeu (voir game_dashboard.html, formulaire
|
|
#objectForm) plutôt qu'une page dédiée — cette route ne fait donc plus
|
|
que traiter la soumission de CE formulaire. Un GET direct (ex. lien
|
|
externe obsolète) redirige simplement vers le tableau de bord."""
|
|
if request.method == "POST":
|
|
name = request.form.get("object_name", "").strip()
|
|
# Aucun champ requis à la création : create_definition(fields=[])
|
|
# crée simplement une table sans colonne "métier" (juste id/
|
|
# created_at), et le panneau "Modifier un objet" (onglet Champs,
|
|
# bouton "+ Ajouter") permet d'en poser ensuite — exiger au moins
|
|
# un champ ici faisait échouer silencieusement la création (aucun
|
|
# message d'erreur, juste un retour au tableau de bord) dès qu'on
|
|
# tapait le nom sans avoir encore cliqué "+ Ajouter un champ".
|
|
fields = _parse_field_rows(request.form)
|
|
if name:
|
|
definition_id = db.create_definition(slug, name, fields)
|
|
return redirect(url_for("object_view", slug=slug, definition_id=definition_id))
|
|
|
|
return redirect(url_for("game_dashboard", slug=slug))
|