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>
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""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")
|