[V0.2] WORKING Working calendar and AI with full frontend.
This commit is contained in:
@@ -1,31 +1,60 @@
|
||||
# modules/calendar/schemas.py
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, field_validator # Add field_validator
|
||||
from typing import List, Optional # Add List and Optional
|
||||
|
||||
class CalendarEventCreate(BaseModel):
|
||||
# Base schema for common fields, including tags
|
||||
class CalendarEventBase(BaseModel):
|
||||
title: str
|
||||
description: str | None = None
|
||||
description: Optional[str] = None
|
||||
start: datetime
|
||||
end: datetime | None = None
|
||||
location: str | None = None
|
||||
end: Optional[datetime] = None
|
||||
location: Optional[str] = None
|
||||
color: Optional[str] = None # Assuming color exists
|
||||
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: str | None = None
|
||||
description: str | None = None
|
||||
start: datetime | None = None
|
||||
end: datetime | None = None
|
||||
location: str | None = None
|
||||
title: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
start: Optional[datetime] = None
|
||||
end: Optional[datetime] = None
|
||||
location: Optional[str] = None
|
||||
color: Optional[str] = None
|
||||
tags: Optional[List[str]] = None # Add optional tags for update
|
||||
|
||||
class CalendarEventResponse(CalendarEventCreate):
|
||||
@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
|
||||
|
||||
class CalendarEventUpdate(BaseModel):
|
||||
title: str | None = None
|
||||
description: str | None = None
|
||||
start: datetime | None = None
|
||||
end: datetime | None = None
|
||||
location: str | None = None
|
||||
from_attributes = True # Changed from orm_mode
|
||||
Reference in New Issue
Block a user