from pydantic import BaseModel, EmailStr from pydantic_mongo import AbstractRepository, ObjectIdField from datetime import datetime, date from bson import ObjectId from typing import List, Optional class Event(BaseModel): id: ObjectIdField = None name: str place: str description: str imgUrl: Optional[str] = None status: int = 0 latitude: float = 0.0 longitude: float = 0.0 link: Optional[str] = None ticket: Optional[str] = None organizers: List[str] = [] tags: List[str] = [] start_date: Optional[datetime] = None end_date: Optional[datetime] = None created_at: datetime = datetime.today() updated_at: Optional[datetime] = None deleted_at: Optional[datetime] = None disabled_at: Optional[datetime] = None interested_users: List[ObjectId] = [] model_config = { "arbitrary_types_allowed": True } class EventOut(BaseModel): id: ObjectIdField = 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] = [] class EventOutWithInterested(EventOut): interested: bool = False interested_count: int = 0 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"