62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
# modules/calendar/schemas.py
|
|
from datetime import datetime
|
|
from pydantic import BaseModel, field_validator # Add field_validator
|
|
from typing import List, Optional # Add List and Optional
|
|
|
|
# Base schema for common fields, including tags
|
|
class CalendarEventBase(BaseModel):
|
|
title: str
|
|
description: Optional[str] = None
|
|
start: datetime
|
|
end: Optional[datetime] = None
|
|
location: Optional[str] = None
|
|
color: Optional[str] = None # Assuming color exists
|
|
all_day: Optional[bool] = None # Add all_day field
|
|
tags: Optional[List[str]] = None # Add optional tags
|
|
|
|
@field_validator('tags', mode='before')
|
|
@classmethod
|
|
def tags_validate_null_string(cls, v):
|
|
if v == "Null":
|
|
return None
|
|
return v
|
|
|
|
# Schema for creating an event (inherits from Base)
|
|
class CalendarEventCreate(CalendarEventBase):
|
|
pass
|
|
|
|
# Schema for updating an event (all fields optional)
|
|
class CalendarEventUpdate(BaseModel):
|
|
title: Optional[str] = None
|
|
description: Optional[str] = None
|
|
start: Optional[datetime] = None
|
|
end: Optional[datetime] = None
|
|
location: Optional[str] = None
|
|
color: Optional[str] = None
|
|
all_day: Optional[bool] = None # Add all_day field
|
|
tags: Optional[List[str]] = None # Add optional tags for update
|
|
|
|
@field_validator('tags', mode='before')
|
|
@classmethod
|
|
def tags_validate_null_string(cls, v):
|
|
if v == "Null":
|
|
return None
|
|
return v
|
|
|
|
# Schema for the response (inherits from Base, adds ID and user_id)
|
|
class CalendarEventResponse(CalendarEventBase):
|
|
id: int
|
|
user_id: int
|
|
tags: List[str] # Keep as List[str], remove default []
|
|
|
|
@field_validator('tags', mode='before')
|
|
@classmethod
|
|
def tags_validate_none_to_list(cls, v):
|
|
# If the value from the source object (e.g., ORM model) is None,
|
|
# convert it to an empty list before Pydantic validation.
|
|
if v is None:
|
|
return []
|
|
return v
|
|
|
|
class Config:
|
|
from_attributes = True |