feat: add onboarding, branding, and supporting data models, migrations, and schemas
Add onboarding_dismissed and branding columns (logo_data, logo_content_type, company_display_name) to users and teams models. Create SessionSupportingData model for attaching text snippets and screenshots to sessions. Add Pydantic schemas for onboarding status, branding responses, and supporting data CRUD. Update SessionExport to accept pdf format. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
"""add onboarding and branding columns
|
||||
|
||||
Revision ID: 21ddb46ddd05
|
||||
Revises: 061
|
||||
Create Date: 2026-03-16 23:30:48.910485
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '21ddb46ddd05'
|
||||
down_revision: Union[str, None] = '061'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Users: onboarding + branding columns
|
||||
op.add_column('users', sa.Column('onboarding_dismissed', sa.Boolean(), server_default='false', nullable=False))
|
||||
op.add_column('users', sa.Column('logo_data', sa.Text(), nullable=True))
|
||||
op.add_column('users', sa.Column('logo_content_type', sa.String(length=50), nullable=True))
|
||||
op.add_column('users', sa.Column('company_display_name', sa.String(length=255), nullable=True))
|
||||
|
||||
# Teams: branding columns
|
||||
op.add_column('teams', sa.Column('logo_data', sa.Text(), nullable=True))
|
||||
op.add_column('teams', sa.Column('logo_content_type', sa.String(length=50), nullable=True))
|
||||
op.add_column('teams', sa.Column('company_display_name', sa.String(length=255), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column('teams', 'company_display_name')
|
||||
op.drop_column('teams', 'logo_content_type')
|
||||
op.drop_column('teams', 'logo_data')
|
||||
op.drop_column('users', 'company_display_name')
|
||||
op.drop_column('users', 'logo_content_type')
|
||||
op.drop_column('users', 'logo_data')
|
||||
op.drop_column('users', 'onboarding_dismissed')
|
||||
@@ -0,0 +1,41 @@
|
||||
"""add session_supporting_data table
|
||||
|
||||
Revision ID: ee98013dd18c
|
||||
Revises: 21ddb46ddd05
|
||||
Create Date: 2026-03-16 23:31:43.483511
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'ee98013dd18c'
|
||||
down_revision: Union[str, None] = '21ddb46ddd05'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.create_table('session_supporting_data',
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('session_id', sa.UUID(), nullable=False),
|
||||
sa.Column('label', sa.String(length=255), nullable=False),
|
||||
sa.Column('data_type', sa.Enum('text_snippet', 'screenshot', name='supporting_data_type'), nullable=False),
|
||||
sa.Column('content', sa.Text(), nullable=False),
|
||||
sa.Column('content_type', sa.String(length=50), nullable=True),
|
||||
sa.Column('sort_order', sa.Integer(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['session_id'], ['sessions.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
)
|
||||
op.create_index(op.f('ix_session_supporting_data_session_id'), 'session_supporting_data', ['session_id'], unique=False)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index(op.f('ix_session_supporting_data_session_id'), table_name='session_supporting_data')
|
||||
op.drop_table('session_supporting_data')
|
||||
op.execute("DROP TYPE IF EXISTS supporting_data_type")
|
||||
Reference in New Issue
Block a user