Files
backend-collector/app/models/events.py
2025-09-04 22:05:54 +02:00

88 lines
2.3 KiB
Python

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: 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 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"