Add is_active field to EventTheme model and test fixture.
The `is_active` field was introduced to the `EventTheme` model to indicate whether a theme is active. The corresponding test fixture in `conftest.py` was updated to include this new field, ensuring consistency in tests. This change enhances flexibility for managing event themes.
This commit is contained in:
@@ -7,8 +7,8 @@ Create Date: 2025-02-28 09:19:33.212278
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
@@ -21,285 +21,303 @@ depends_on: Union[str, Sequence[str], None] = None
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table('event_themes',
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('preview_image_url', sa.String(), nullable=True),
|
||||
sa.Column('color_palette', sa.JSON(), nullable=False),
|
||||
sa.Column('fonts', sa.JSON(), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('preview_image_url', sa.String(), nullable=True),
|
||||
sa.Column('color_palette', sa.JSON(), nullable=False),
|
||||
sa.Column('fonts', sa.JSON(), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('users',
|
||||
sa.Column('email', sa.String(), nullable=False),
|
||||
sa.Column('password_hash', sa.String(), nullable=False),
|
||||
sa.Column('first_name', sa.String(), nullable=False),
|
||||
sa.Column('last_name', sa.String(), nullable=True),
|
||||
sa.Column('phone_number', sa.String(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('is_superuser', sa.Boolean(), nullable=False),
|
||||
sa.Column('preferences', sa.JSON(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('email', sa.String(), nullable=False),
|
||||
sa.Column('password_hash', sa.String(), nullable=False),
|
||||
sa.Column('first_name', sa.String(), nullable=False),
|
||||
sa.Column('last_name', sa.String(), nullable=True),
|
||||
sa.Column('phone_number', sa.String(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('is_superuser', sa.Boolean(), nullable=False),
|
||||
sa.Column('preferences', sa.JSON(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
|
||||
op.create_table('events',
|
||||
sa.Column('title', sa.String(), nullable=False),
|
||||
sa.Column('slug', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('location_name', sa.String(), nullable=True),
|
||||
sa.Column('location_address', sa.String(), nullable=True),
|
||||
sa.Column('location_url', sa.String(), nullable=True),
|
||||
sa.Column('event_date', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('event_start_time', sa.Time(), nullable=True),
|
||||
sa.Column('event_end_time', sa.Time(), nullable=True),
|
||||
sa.Column('timezone', sa.String(), nullable=False),
|
||||
sa.Column('rsvp_deadline', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('is_public', sa.Boolean(), nullable=False),
|
||||
sa.Column('access_code', sa.String(), nullable=True),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('theme_id', sa.UUID(), nullable=True),
|
||||
sa.Column('custom_theme_settings', sa.JSON(), nullable=True),
|
||||
sa.Column('additional_info', sa.JSON(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('rsvp_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('gift_registry_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('updates_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('max_guests_per_invitation', sa.Integer(), nullable=True),
|
||||
sa.Column('contact_email', sa.String(), nullable=True),
|
||||
sa.Column('contact_phone', sa.String(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['theme_id'], ['event_themes.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('slug', name='uq_event_slug')
|
||||
)
|
||||
sa.Column('title', sa.String(), nullable=False),
|
||||
sa.Column('slug', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('location_name', sa.String(), nullable=True),
|
||||
sa.Column('location_address', sa.String(), nullable=True),
|
||||
sa.Column('location_url', sa.String(), nullable=True),
|
||||
sa.Column('event_date', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('event_start_time', sa.Time(), nullable=True),
|
||||
sa.Column('event_end_time', sa.Time(), nullable=True),
|
||||
sa.Column('timezone', sa.String(), nullable=False),
|
||||
sa.Column('rsvp_deadline', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('is_public', sa.Boolean(), nullable=False),
|
||||
sa.Column('access_code', sa.String(), nullable=True),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('theme_id', sa.UUID(), nullable=True),
|
||||
sa.Column('custom_theme_settings', sa.JSON(), nullable=True),
|
||||
sa.Column('additional_info', sa.JSON(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('rsvp_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('gift_registry_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('updates_enabled', sa.Boolean(), nullable=False),
|
||||
sa.Column('max_guests_per_invitation', sa.Integer(), nullable=True),
|
||||
sa.Column('contact_email', sa.String(), nullable=True),
|
||||
sa.Column('contact_phone', sa.String(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['theme_id'], ['event_themes.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('slug', name='uq_event_slug')
|
||||
)
|
||||
op.create_table('email_templates',
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('template_type', sa.Enum('INVITATION', 'REMINDER', 'CONFIRMATION', 'UPDATE', 'THANK_YOU', 'CUSTOM', name='templatetype'), nullable=False),
|
||||
sa.Column('subject', sa.String(), nullable=False),
|
||||
sa.Column('html_content', sa.Text(), nullable=False),
|
||||
sa.Column('text_content', sa.Text(), nullable=False),
|
||||
sa.Column('variables', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=True),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('is_system', sa.Boolean(), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'name', name='uq_event_template_name')
|
||||
)
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('template_type',
|
||||
sa.Enum('INVITATION', 'REMINDER', 'CONFIRMATION', 'UPDATE', 'THANK_YOU', 'CUSTOM',
|
||||
name='templatetype'), nullable=False),
|
||||
sa.Column('subject', sa.String(), nullable=False),
|
||||
sa.Column('html_content', sa.Text(), nullable=False),
|
||||
sa.Column('text_content', sa.Text(), nullable=False),
|
||||
sa.Column('variables', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=True),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('is_system', sa.Boolean(), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'name', name='uq_event_template_name')
|
||||
)
|
||||
op.create_table('event_managers',
|
||||
sa.Column('user_id', sa.UUID(), nullable=False),
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('assigned_by', sa.UUID(), nullable=False),
|
||||
sa.Column('role', sa.Enum('OWNER', 'ADMIN', 'MODERATOR', 'VIEWER', name='eventmanagerrole'), nullable=False),
|
||||
sa.Column('can_edit', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_invite', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_manage_gifts', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_send_updates', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_view_analytics', sa.Boolean(), nullable=False),
|
||||
sa.Column('assigned_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['assigned_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('user_id', 'event_id', name='uq_user_event_manager')
|
||||
)
|
||||
sa.Column('user_id', sa.UUID(), nullable=False),
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('assigned_by', sa.UUID(), nullable=False),
|
||||
sa.Column('role', sa.Enum('OWNER', 'ADMIN', 'MODERATOR', 'VIEWER', name='eventmanagerrole'),
|
||||
nullable=False),
|
||||
sa.Column('can_edit', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_invite', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_manage_gifts', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_send_updates', sa.Boolean(), nullable=False),
|
||||
sa.Column('can_view_analytics', sa.Boolean(), nullable=False),
|
||||
sa.Column('assigned_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['assigned_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('user_id', 'event_id', name='uq_user_event_manager')
|
||||
)
|
||||
op.create_table('event_media',
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('uploaded_by', sa.UUID(), nullable=False),
|
||||
sa.Column('file_path', sa.String(), nullable=False),
|
||||
sa.Column('original_filename', sa.String(), nullable=False),
|
||||
sa.Column('media_type', sa.Enum('IMAGE', 'VIDEO', 'DOCUMENT', name='mediatype'), nullable=False),
|
||||
sa.Column('content_type', sa.String(), nullable=False),
|
||||
sa.Column('file_size', sa.Integer(), nullable=False),
|
||||
sa.Column('purpose', sa.Enum('BANNER', 'GALLERY', 'ATTACHMENT', name='mediapurpose'), nullable=False),
|
||||
sa.Column('is_public', sa.Boolean(), nullable=False),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('title', sa.String(), nullable=True),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('media_metadata', sa.JSON(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['uploaded_by'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('uploaded_by', sa.UUID(), nullable=False),
|
||||
sa.Column('file_path', sa.String(), nullable=False),
|
||||
sa.Column('original_filename', sa.String(), nullable=False),
|
||||
sa.Column('media_type', sa.Enum('IMAGE', 'VIDEO', 'DOCUMENT', name='mediatype'), nullable=False),
|
||||
sa.Column('content_type', sa.String(), nullable=False),
|
||||
sa.Column('file_size', sa.Integer(), nullable=False),
|
||||
sa.Column('purpose', sa.Enum('BANNER', 'GALLERY', 'ATTACHMENT', name='mediapurpose'),
|
||||
nullable=False),
|
||||
sa.Column('is_public', sa.Boolean(), nullable=False),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('title', sa.String(), nullable=True),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('media_metadata', sa.JSON(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['uploaded_by'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('gift_categories',
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('icon', sa.String(), nullable=True),
|
||||
sa.Column('color', sa.String(), nullable=True),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('is_visible', sa.Boolean(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'name', name='uq_event_category_name')
|
||||
)
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_by', sa.UUID(), nullable=False),
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('icon', sa.String(), nullable=True),
|
||||
sa.Column('color', sa.String(), nullable=True),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('is_visible', sa.Boolean(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['created_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'name', name='uq_event_category_name')
|
||||
)
|
||||
op.create_table('guests',
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('invited_by', sa.UUID(), nullable=False),
|
||||
sa.Column('user_id', sa.UUID(), nullable=True),
|
||||
sa.Column('full_name', sa.String(), nullable=False),
|
||||
sa.Column('email', sa.String(), nullable=True),
|
||||
sa.Column('phone', sa.String(), nullable=True),
|
||||
sa.Column('invitation_code', sa.String(), nullable=False),
|
||||
sa.Column('status', sa.Enum('INVITED', 'PENDING', 'CONFIRMED', 'DECLINED', 'WAITLISTED', 'CANCELLED', name='gueststatus'), nullable=False),
|
||||
sa.Column('max_additional_guests', sa.Integer(), nullable=True),
|
||||
sa.Column('actual_additional_guests', sa.Integer(), nullable=True),
|
||||
sa.Column('invitation_sent_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('last_reminded_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('response_date', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('dietary_restrictions', sa.String(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('is_blocked', sa.Boolean(), nullable=True),
|
||||
sa.Column('can_bring_guests', sa.Boolean(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['invited_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'email', name='uq_event_guest_email'),
|
||||
sa.UniqueConstraint('invitation_code')
|
||||
)
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('invited_by', sa.UUID(), nullable=False),
|
||||
sa.Column('user_id', sa.UUID(), nullable=True),
|
||||
sa.Column('full_name', sa.String(), nullable=False),
|
||||
sa.Column('email', sa.String(), nullable=True),
|
||||
sa.Column('phone', sa.String(), nullable=True),
|
||||
sa.Column('invitation_code', sa.String(), nullable=False),
|
||||
sa.Column('status',
|
||||
sa.Enum('INVITED', 'PENDING', 'CONFIRMED', 'DECLINED', 'WAITLISTED', 'CANCELLED',
|
||||
name='gueststatus'), nullable=False),
|
||||
sa.Column('max_additional_guests', sa.Integer(), nullable=True),
|
||||
sa.Column('actual_additional_guests', sa.Integer(), nullable=True),
|
||||
sa.Column('invitation_sent_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('last_reminded_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('response_date', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('dietary_restrictions', sa.String(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('is_blocked', sa.Boolean(), nullable=True),
|
||||
sa.Column('can_bring_guests', sa.Boolean(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['invited_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'email', name='uq_event_guest_email'),
|
||||
sa.UniqueConstraint('invitation_code')
|
||||
)
|
||||
op.create_table('activity_logs',
|
||||
sa.Column('activity_type', sa.Enum('EVENT_CREATED', 'EVENT_UPDATED', 'GUEST_ADDED', 'GUEST_INVITED', 'GUEST_RSVP', 'GIFT_ADDED', 'GIFT_UPDATED', 'GIFT_RESERVED', 'GIFT_PURCHASED', 'USER_LOGIN', 'USER_LOGOUT', 'USER_CREATED', 'MANAGER_ADDED', 'MANAGER_REMOVED', 'MANAGER_UPDATED', 'MEDIA_UPLOADED', 'MEDIA_DELETED', 'ACCESS_DENIED', 'SYSTEM_ERROR', name='activitytype'), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=True),
|
||||
sa.Column('user_id', sa.UUID(), nullable=True),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=True),
|
||||
sa.Column('target_id', sa.UUID(), nullable=True),
|
||||
sa.Column('target_type', sa.String(), nullable=True),
|
||||
sa.Column('ip_address', sa.String(), nullable=True),
|
||||
sa.Column('user_agent', sa.String(), nullable=True),
|
||||
sa.Column('activity_data', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('activity_type',
|
||||
sa.Enum('EVENT_CREATED', 'EVENT_UPDATED', 'GUEST_ADDED', 'GUEST_INVITED', 'GUEST_RSVP',
|
||||
'GIFT_ADDED', 'GIFT_UPDATED', 'GIFT_RESERVED', 'GIFT_PURCHASED', 'USER_LOGIN',
|
||||
'USER_LOGOUT', 'USER_CREATED', 'MANAGER_ADDED', 'MANAGER_REMOVED',
|
||||
'MANAGER_UPDATED', 'MEDIA_UPLOADED', 'MEDIA_DELETED', 'ACCESS_DENIED',
|
||||
'SYSTEM_ERROR', name='activitytype'), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=True),
|
||||
sa.Column('user_id', sa.UUID(), nullable=True),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=True),
|
||||
sa.Column('target_id', sa.UUID(), nullable=True),
|
||||
sa.Column('target_type', sa.String(), nullable=True),
|
||||
sa.Column('ip_address', sa.String(), nullable=True),
|
||||
sa.Column('user_agent', sa.String(), nullable=True),
|
||||
sa.Column('activity_data', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('gift_items',
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('added_by', sa.UUID(), nullable=False),
|
||||
sa.Column('category_id', sa.UUID(), nullable=True),
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('price', sa.Float(), nullable=True),
|
||||
sa.Column('currency', sa.String(), nullable=True),
|
||||
sa.Column('quantity_requested', sa.Integer(), nullable=True),
|
||||
sa.Column('quantity_received', sa.Integer(), nullable=True),
|
||||
sa.Column('status', sa.Enum('AVAILABLE', 'RESERVED', 'PURCHASED', 'RECEIVED', 'REMOVED', name='giftstatus'), nullable=False),
|
||||
sa.Column('priority', sa.Enum('LOW', 'MEDIUM', 'HIGH', 'MUST_HAVE', name='giftpriority'), nullable=True),
|
||||
sa.Column('purchase_url', sa.String(), nullable=True),
|
||||
sa.Column('store_name', sa.String(), nullable=True),
|
||||
sa.Column('brand', sa.String(), nullable=True),
|
||||
sa.Column('model', sa.String(), nullable=True),
|
||||
sa.Column('image_url', sa.String(), nullable=True),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('is_visible', sa.Boolean(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('last_status_change', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['added_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['category_id'], ['gift_categories.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('added_by', sa.UUID(), nullable=False),
|
||||
sa.Column('category_id', sa.UUID(), nullable=True),
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.String(), nullable=True),
|
||||
sa.Column('price', sa.Float(), nullable=True),
|
||||
sa.Column('currency', sa.String(), nullable=True),
|
||||
sa.Column('quantity_requested', sa.Integer(), nullable=True),
|
||||
sa.Column('quantity_received', sa.Integer(), nullable=True),
|
||||
sa.Column('status',
|
||||
sa.Enum('AVAILABLE', 'RESERVED', 'PURCHASED', 'RECEIVED', 'REMOVED', name='giftstatus'),
|
||||
nullable=False),
|
||||
sa.Column('priority', sa.Enum('LOW', 'MEDIUM', 'HIGH', 'MUST_HAVE', name='giftpriority'),
|
||||
nullable=True),
|
||||
sa.Column('purchase_url', sa.String(), nullable=True),
|
||||
sa.Column('store_name', sa.String(), nullable=True),
|
||||
sa.Column('brand', sa.String(), nullable=True),
|
||||
sa.Column('model', sa.String(), nullable=True),
|
||||
sa.Column('image_url', sa.String(), nullable=True),
|
||||
sa.Column('display_order', sa.Integer(), nullable=True),
|
||||
sa.Column('is_visible', sa.Boolean(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('custom_fields', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('last_status_change', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['added_by'], ['users.id'], ),
|
||||
sa.ForeignKeyConstraint(['category_id'], ['gift_categories.id'], ),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('notification_logs',
|
||||
sa.Column('notification_type', sa.Enum('EMAIL', 'SMS', 'PUSH', 'IN_APP', name='notificationtype'), nullable=False),
|
||||
sa.Column('status', sa.Enum('QUEUED', 'SENT', 'DELIVERED', 'FAILED', 'OPENED', 'CLICKED', name='notificationstatus'), nullable=False),
|
||||
sa.Column('subject', sa.String(), nullable=True),
|
||||
sa.Column('content_preview', sa.String(length=255), nullable=True),
|
||||
sa.Column('template_id', sa.UUID(), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=True),
|
||||
sa.Column('recipient', sa.String(), nullable=False),
|
||||
sa.Column('sent_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('delivered_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('opened_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('error_message', sa.Text(), nullable=True),
|
||||
sa.Column('retry_count', sa.Integer(), nullable=True),
|
||||
sa.Column('external_id', sa.String(), nullable=True),
|
||||
sa.Column('notification_metadata', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.ForeignKeyConstraint(['template_id'], ['email_templates.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('notification_type', sa.Enum('EMAIL', 'SMS', 'PUSH', 'IN_APP', name='notificationtype'),
|
||||
nullable=False),
|
||||
sa.Column('status', sa.Enum('QUEUED', 'SENT', 'DELIVERED', 'FAILED', 'OPENED', 'CLICKED',
|
||||
name='notificationstatus'), nullable=False),
|
||||
sa.Column('subject', sa.String(), nullable=True),
|
||||
sa.Column('content_preview', sa.String(length=255), nullable=True),
|
||||
sa.Column('template_id', sa.UUID(), nullable=True),
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=True),
|
||||
sa.Column('recipient', sa.String(), nullable=False),
|
||||
sa.Column('sent_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('delivered_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('opened_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('error_message', sa.Text(), nullable=True),
|
||||
sa.Column('retry_count', sa.Integer(), nullable=True),
|
||||
sa.Column('external_id', sa.String(), nullable=True),
|
||||
sa.Column('notification_metadata', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.ForeignKeyConstraint(['template_id'], ['email_templates.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('rsvps',
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('status', sa.Enum('ATTENDING', 'NOT_ATTENDING', 'MAYBE', name='rsvpstatus'), nullable=False),
|
||||
sa.Column('number_of_guests', sa.Integer(), nullable=False),
|
||||
sa.Column('response_message', sa.String(), nullable=True),
|
||||
sa.Column('dietary_requirements', sa.String(), nullable=True),
|
||||
sa.Column('additional_info', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('response_date', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('last_updated', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'guest_id', name='uq_event_guest_rsvp')
|
||||
)
|
||||
sa.Column('event_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('status', sa.Enum('ATTENDING', 'NOT_ATTENDING', 'MAYBE', name='rsvpstatus'),
|
||||
nullable=False),
|
||||
sa.Column('number_of_guests', sa.Integer(), nullable=False),
|
||||
sa.Column('response_message', sa.String(), nullable=True),
|
||||
sa.Column('dietary_requirements', sa.String(), nullable=True),
|
||||
sa.Column('additional_info', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
||||
sa.Column('response_date', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('last_updated', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.ForeignKeyConstraint(['event_id'], ['events.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('event_id', 'guest_id', name='uq_event_guest_rsvp')
|
||||
)
|
||||
op.create_table('gift_purchases',
|
||||
sa.Column('gift_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('quantity', sa.Integer(), nullable=False),
|
||||
sa.Column('purchased_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('purchase_price', sa.Float(), nullable=True),
|
||||
sa.Column('purchase_currency', sa.String(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
sa.Column('gift_id', sa.UUID(), nullable=False),
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('quantity', sa.Integer(), nullable=False),
|
||||
sa.Column('purchased_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('purchase_price', sa.Float(), nullable=True),
|
||||
sa.Column('purchase_currency', sa.String(), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.Column('id', sa.UUID(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_table('guest_gifts',
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('gift_id', sa.UUID(), nullable=False),
|
||||
sa.Column('reserved_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('guest_id', 'gift_id')
|
||||
)
|
||||
sa.Column('guest_id', sa.UUID(), nullable=False),
|
||||
sa.Column('gift_id', sa.UUID(), nullable=False),
|
||||
sa.Column('reserved_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('notes', sa.String(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ),
|
||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ),
|
||||
sa.PrimaryKeyConstraint('guest_id', 'gift_id')
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, String, JSON
|
||||
from sqlalchemy import Column, String, JSON, Boolean
|
||||
from sqlalchemy.orm import relationship
|
||||
from .base import Base, TimestampMixin, UUIDMixin
|
||||
|
||||
@@ -11,6 +11,7 @@ class EventTheme(Base, UUIDMixin, TimestampMixin):
|
||||
preview_image_url = Column(String)
|
||||
color_palette = Column(JSON, nullable=False)
|
||||
fonts = Column(JSON, nullable=False)
|
||||
is_active = Column(Boolean, default=True, nullable=False)
|
||||
|
||||
# Relationship with Event
|
||||
events = relationship("Event", back_populates="theme")
|
||||
|
||||
@@ -197,6 +197,7 @@ def event_theme_fixture(db_session):
|
||||
name="Animal Theme",
|
||||
description="An animal-themed design for events.",
|
||||
preview_image_url="https://example.com/preview/animal_theme.jpg",
|
||||
is_active=True,
|
||||
color_palette={
|
||||
"primary": "#ff5722",
|
||||
"secondary": "#4caf50",
|
||||
|
||||
Reference in New Issue
Block a user