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:
2025-03-12 15:21:28 +01:00
parent a0d472f583
commit 525d1b8012
3 changed files with 287 additions and 267 deletions

View File

@@ -7,8 +7,8 @@ Create Date: 2025-02-28 09:19:33.212278
""" """
from typing import Sequence, Union from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
@@ -27,6 +27,7 @@ def upgrade() -> None:
sa.Column('color_palette', sa.JSON(), nullable=False), sa.Column('color_palette', sa.JSON(), nullable=False),
sa.Column('fonts', sa.JSON(), nullable=False), sa.Column('fonts', sa.JSON(), nullable=False),
sa.Column('id', sa.UUID(), 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('created_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False), sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
@@ -82,7 +83,9 @@ def upgrade() -> None:
op.create_table('email_templates', op.create_table('email_templates',
sa.Column('name', sa.String(), nullable=False), sa.Column('name', sa.String(), nullable=False),
sa.Column('description', sa.String(), nullable=True), 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('template_type',
sa.Enum('INVITATION', 'REMINDER', 'CONFIRMATION', 'UPDATE', 'THANK_YOU', 'CUSTOM',
name='templatetype'), nullable=False),
sa.Column('subject', sa.String(), nullable=False), sa.Column('subject', sa.String(), nullable=False),
sa.Column('html_content', sa.Text(), nullable=False), sa.Column('html_content', sa.Text(), nullable=False),
sa.Column('text_content', sa.Text(), nullable=False), sa.Column('text_content', sa.Text(), nullable=False),
@@ -103,7 +106,8 @@ def upgrade() -> None:
sa.Column('user_id', sa.UUID(), nullable=False), sa.Column('user_id', sa.UUID(), nullable=False),
sa.Column('event_id', sa.UUID(), nullable=False), sa.Column('event_id', sa.UUID(), nullable=False),
sa.Column('assigned_by', 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('role', sa.Enum('OWNER', 'ADMIN', 'MODERATOR', 'VIEWER', name='eventmanagerrole'),
nullable=False),
sa.Column('can_edit', sa.Boolean(), nullable=False), sa.Column('can_edit', sa.Boolean(), nullable=False),
sa.Column('can_invite', sa.Boolean(), nullable=False), sa.Column('can_invite', sa.Boolean(), nullable=False),
sa.Column('can_manage_gifts', sa.Boolean(), nullable=False), sa.Column('can_manage_gifts', sa.Boolean(), nullable=False),
@@ -127,7 +131,8 @@ def upgrade() -> None:
sa.Column('media_type', sa.Enum('IMAGE', 'VIDEO', 'DOCUMENT', name='mediatype'), 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('content_type', sa.String(), nullable=False),
sa.Column('file_size', sa.Integer(), nullable=False), sa.Column('file_size', sa.Integer(), nullable=False),
sa.Column('purpose', sa.Enum('BANNER', 'GALLERY', 'ATTACHMENT', name='mediapurpose'), nullable=False), sa.Column('purpose', sa.Enum('BANNER', 'GALLERY', 'ATTACHMENT', name='mediapurpose'),
nullable=False),
sa.Column('is_public', sa.Boolean(), nullable=False), sa.Column('is_public', sa.Boolean(), nullable=False),
sa.Column('display_order', sa.Integer(), nullable=True), sa.Column('display_order', sa.Integer(), nullable=True),
sa.Column('title', sa.String(), nullable=True), sa.Column('title', sa.String(), nullable=True),
@@ -166,7 +171,9 @@ def upgrade() -> None:
sa.Column('email', sa.String(), nullable=True), sa.Column('email', sa.String(), nullable=True),
sa.Column('phone', sa.String(), nullable=True), sa.Column('phone', sa.String(), nullable=True),
sa.Column('invitation_code', sa.String(), nullable=False), 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('status',
sa.Enum('INVITED', 'PENDING', 'CONFIRMED', 'DECLINED', 'WAITLISTED', 'CANCELLED',
name='gueststatus'), nullable=False),
sa.Column('max_additional_guests', sa.Integer(), nullable=True), sa.Column('max_additional_guests', sa.Integer(), nullable=True),
sa.Column('actual_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('invitation_sent_at', sa.DateTime(timezone=True), nullable=True),
@@ -188,7 +195,12 @@ def upgrade() -> None:
sa.UniqueConstraint('invitation_code') sa.UniqueConstraint('invitation_code')
) )
op.create_table('activity_logs', 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('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('description', sa.Text(), nullable=True),
sa.Column('event_id', sa.UUID(), nullable=True), sa.Column('event_id', sa.UUID(), nullable=True),
sa.Column('user_id', sa.UUID(), nullable=True), sa.Column('user_id', sa.UUID(), nullable=True),
@@ -216,8 +228,11 @@ def upgrade() -> None:
sa.Column('currency', sa.String(), nullable=True), sa.Column('currency', sa.String(), nullable=True),
sa.Column('quantity_requested', sa.Integer(), nullable=True), sa.Column('quantity_requested', sa.Integer(), nullable=True),
sa.Column('quantity_received', 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('status',
sa.Column('priority', sa.Enum('LOW', 'MEDIUM', 'HIGH', 'MUST_HAVE', name='giftpriority'), nullable=True), 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('purchase_url', sa.String(), nullable=True),
sa.Column('store_name', sa.String(), nullable=True), sa.Column('store_name', sa.String(), nullable=True),
sa.Column('brand', sa.String(), nullable=True), sa.Column('brand', sa.String(), nullable=True),
@@ -237,8 +252,10 @@ def upgrade() -> None:
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('notification_logs', op.create_table('notification_logs',
sa.Column('notification_type', sa.Enum('EMAIL', 'SMS', 'PUSH', 'IN_APP', name='notificationtype'), nullable=False), sa.Column('notification_type', sa.Enum('EMAIL', 'SMS', 'PUSH', 'IN_APP', name='notificationtype'),
sa.Column('status', sa.Enum('QUEUED', 'SENT', 'DELIVERED', 'FAILED', 'OPENED', 'CLICKED', name='notificationstatus'), nullable=False), 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('subject', sa.String(), nullable=True),
sa.Column('content_preview', sa.String(length=255), nullable=True), sa.Column('content_preview', sa.String(length=255), nullable=True),
sa.Column('template_id', sa.UUID(), nullable=True), sa.Column('template_id', sa.UUID(), nullable=True),
@@ -263,7 +280,8 @@ def upgrade() -> None:
op.create_table('rsvps', op.create_table('rsvps',
sa.Column('event_id', sa.UUID(), nullable=False), sa.Column('event_id', sa.UUID(), nullable=False),
sa.Column('guest_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('status', sa.Enum('ATTENDING', 'NOT_ATTENDING', 'MAYBE', name='rsvpstatus'),
nullable=False),
sa.Column('number_of_guests', sa.Integer(), nullable=False), sa.Column('number_of_guests', sa.Integer(), nullable=False),
sa.Column('response_message', sa.String(), nullable=True), sa.Column('response_message', sa.String(), nullable=True),
sa.Column('dietary_requirements', sa.String(), nullable=True), sa.Column('dietary_requirements', sa.String(), nullable=True),

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, String, JSON from sqlalchemy import Column, String, JSON, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from .base import Base, TimestampMixin, UUIDMixin from .base import Base, TimestampMixin, UUIDMixin
@@ -11,6 +11,7 @@ class EventTheme(Base, UUIDMixin, TimestampMixin):
preview_image_url = Column(String) preview_image_url = Column(String)
color_palette = Column(JSON, nullable=False) color_palette = Column(JSON, nullable=False)
fonts = Column(JSON, nullable=False) fonts = Column(JSON, nullable=False)
is_active = Column(Boolean, default=True, nullable=False)
# Relationship with Event # Relationship with Event
events = relationship("Event", back_populates="theme") events = relationship("Event", back_populates="theme")

View File

@@ -197,6 +197,7 @@ def event_theme_fixture(db_session):
name="Animal Theme", name="Animal Theme",
description="An animal-themed design for events.", description="An animal-themed design for events.",
preview_image_url="https://example.com/preview/animal_theme.jpg", preview_image_url="https://example.com/preview/animal_theme.jpg",
is_active=True,
color_palette={ color_palette={
"primary": "#ff5722", "primary": "#ff5722",
"secondary": "#4caf50", "secondary": "#4caf50",