55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
# app/schemas/event_themes.py
|
|
from typing import Dict, Optional
|
|
from uuid import UUID # Add this import
|
|
from pydantic import BaseModel, Field, validator, field_validator
|
|
|
|
|
|
class EventThemeBase(BaseModel):
|
|
name: str = Field(..., min_length=1) # Ensures name is not empty
|
|
description: Optional[str] = None
|
|
preview_image_url: Optional[str] = None
|
|
background_image_url: Optional[str] = None
|
|
foreground_image_url: Optional[str] = None
|
|
color_palette: Dict[str, str] = Field(..., min_items=1) # Ensures at least one color
|
|
asset_image_urls: Optional[Dict[str, str]] = None
|
|
fonts: Dict[str, str] = Field(..., min_items=1) # Ensures at least one font
|
|
is_active: bool = True
|
|
|
|
@field_validator('color_palette')
|
|
def validate_color_palette(cls, v):
|
|
if not v:
|
|
raise ValueError("color_palette cannot be empty")
|
|
return v
|
|
|
|
@field_validator('fonts')
|
|
def validate_fonts(cls, v):
|
|
if not v:
|
|
raise ValueError("fonts cannot be empty")
|
|
return v
|
|
|
|
|
|
class EventThemeCreate(EventThemeBase):
|
|
pass
|
|
|
|
|
|
class EventThemeUpdate(EventThemeBase):
|
|
name: Optional[str] = None
|
|
color_palette: Optional[Dict[str, str]] = None
|
|
fonts: Optional[Dict[str, str]] = None
|
|
|
|
|
|
# Move EventThemeInDBBase before EventThemeResponse
|
|
class EventThemeInDBBase(EventThemeBase):
|
|
id: UUID # Changed from str to UUID to match the model
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
# Now EventThemeResponse can properly inherit from EventThemeInDBBase
|
|
class EventThemeResponse(EventThemeInDBBase):
|
|
pass
|
|
|
|
|
|
class EventTheme(EventThemeInDBBase):
|
|
pass |