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
@@ -0,0 +1,34 @@
"""Logo et description du formulaire public
Revision ID: 0014_form_logo
Revises: 0013_signup_form
Create Date: 2026-09-23
Habillage de la page publique (`/inscription`, `FormTemplate`) : `logo`/
`logo_content_type` (image, stockée en base comme les autres images de
l'appli) et `description` (texte libre). Voir `app/api/forms.py`.
"""
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = "0014_form_logo"
down_revision: str | None = "0013_signup_form"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
op.add_column("form_template", sa.Column("logo", sa.LargeBinary(), nullable=True))
op.add_column(
"form_template", sa.Column("logo_content_type", sa.String(), nullable=True)
)
op.add_column("form_template", sa.Column("description", sa.String(), nullable=True))
def downgrade() -> None:
op.drop_column("form_template", "description")
op.drop_column("form_template", "logo_content_type")
op.drop_column("form_template", "logo")