from pydantic import BaseModel, EmailStr from pydantic_mongo import AbstractRepository, ObjectIdField from datetime import datetime, date class Event(BaseModel): id: ObjectIdField = None name: str place: str description: str imgUrl: str | None = None status: int = 0 latitude: float = 0.0 longitude: float = 0.0 link: str | None = None ticket: str | None = None organizers: list[str] = [] tags: list[str] = [] start_date: datetime | None = None end_date: datetime | None = None created_at: datetime = datetime.today() updated_at: datetime | None = None deleted_at: datetime | None = None disabled_at: datetime | None = None class EventOut(BaseModel): id: str | None = None name: str place: str description: str imgUrl: str | None = None link: str | None = None ticket: str | None = None status: int = 0 start_date: datetime | None = None end_date: datetime | None = None tags: list[str] = [] @classmethod def from_mongo(cls, event: Event) -> "EventOut": return cls( id=str(event.id) if event.id else None, name=event.name, place=event.place, description=event.description, imgUrl=event.imgUrl, link=event.link, ticket=event.ticket, status=event.status, start_date=event.start_date, end_date=event.end_date, tags=event.tags, ) class EventIn(BaseModel): name: str place: str description: str imgUrl: str | None = None status: int = 0 organizers: list[str] = [] tags: list[str] = [] link: str | None = None ticket: str | None = None start_date: datetime | None = None end_date: datetime | None = None latitude: float = 0.0 longitude: float = 0.0 class EventIDS(BaseModel): ids: list[str] class EventRepository(AbstractRepository[Event]): class Meta: collection_name = "events"