57 lines
1.5 KiB
Python
Executable File
57 lines
1.5 KiB
Python
Executable File
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
from models.event import ParticipationStatus
|
|
|
|
class EventBase(BaseModel):
|
|
title: str = Field(..., min_length=1, max_length=200)
|
|
description: Optional[str] = None
|
|
location: Optional[str] = None
|
|
latitude: Optional[float] = None
|
|
longitude: Optional[float] = None
|
|
date: datetime
|
|
end_date: Optional[datetime] = None
|
|
|
|
class EventCreate(EventBase):
|
|
cover_image: Optional[str] = None
|
|
|
|
class EventUpdate(BaseModel):
|
|
title: Optional[str] = Field(None, min_length=1, max_length=200)
|
|
description: Optional[str] = None
|
|
location: Optional[str] = None
|
|
latitude: Optional[float] = None
|
|
longitude: Optional[float] = None
|
|
date: Optional[datetime] = None
|
|
end_date: Optional[datetime] = None
|
|
cover_image: Optional[str] = None
|
|
|
|
class ParticipationResponse(BaseModel):
|
|
user_id: int
|
|
username: str
|
|
full_name: str
|
|
avatar_url: Optional[str]
|
|
status: ParticipationStatus
|
|
response_date: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class EventResponse(EventBase):
|
|
id: int
|
|
creator_id: int
|
|
creator_name: str
|
|
creator_avatar: Optional[str] = None
|
|
cover_image: Optional[str]
|
|
created_at: datetime
|
|
participations: List[ParticipationResponse] = []
|
|
present_count: int = 0
|
|
absent_count: int = 0
|
|
maybe_count: int = 0
|
|
pending_count: int = 0
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class ParticipationUpdate(BaseModel):
|
|
status: ParticipationStatus
|