Formulaire public : logo et texte d'introduction personnalisables

FormTemplate porte désormais un logo (image, PUT/GET .../form/logo — GET
public comme .../form/public, affiché sur /inscription) et un texte
d'introduction libre (PATCH .../form, description désormais optionnelle
comme is_open). Écran de configuration (/inscriptions) : nouveau panneau
« Personnalisation » pour importer le logo et rédiger le texte. Le
formulaire public affiche le logo en grand au-dessus du panneau et le
texte juste sous le titre.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-23 20:46:52 +02:00
co-authored by Claude Sonnet 5
parent 48d3deec65
commit 957a004623
17 changed files with 415 additions and 44 deletions
+8 -1
View File
@@ -466,7 +466,11 @@ class BadgeField(TimestampMixin, table=True):
class FormTemplate(TimestampMixin, table=True):
"""Configuration du formulaire public d'une édition. Une ligne par
édition (créée à la demande). `is_open` coupe les nouvelles soumissions
sans effacer la configuration (les champs activés restent enregistrés)."""
sans effacer la configuration (les champs activés restent enregistrés).
`logo`/`logo_content_type` et `description` habillent la page publique
(`/inscription`) — aucun rapport avec les champs collectés par
`FormField` ; stockage en base comme les autres images de l'appli
(badges, photo de bénévole), pas de volume de fichiers à gérer."""
__tablename__ = "form_template"
@@ -478,6 +482,9 @@ class FormTemplate(TimestampMixin, table=True):
default=True,
sa_column=Column(Boolean, nullable=False, server_default="true"),
)
logo: bytes | None = Field(default=None, sa_column=Column(LargeBinary))
logo_content_type: str | None = None
description: str | None = None
class FormField(SQLModel, table=True):