88 lines
2.3 KiB
Python
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" |