82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
import datetime
|
|
import typing
|
|
from typing import Union
|
|
|
|
from pydantic import BaseModel, Field, ConfigDict, AliasGenerator, Json
|
|
from pydantic.alias_generators import to_camel
|
|
|
|
from .enums import StatusEnum, TaskTypeEnum, SubtaskTypeEnum, MarshTemperatureProperty
|
|
|
|
general_model_config = ConfigDict(alias_generator=AliasGenerator(serialization_alias=to_camel))
|
|
|
|
|
|
class DBModel(BaseModel):
|
|
model_config = general_model_config
|
|
id: int
|
|
|
|
def __hash__(self):
|
|
return self.id
|
|
|
|
|
|
class DBSubTask(DBModel):
|
|
start_pln: datetime.datetime
|
|
end_pln: datetime.datetime
|
|
start_fact: datetime.datetime | None
|
|
end_fact: datetime.datetime | None
|
|
status: StatusEnum
|
|
task_type: SubtaskTypeEnum
|
|
text: str
|
|
|
|
station: typing.Optional['DBMST'] = None
|
|
|
|
|
|
class DBAppTask(DBModel):
|
|
profile_id: int = Field(exclude=True)
|
|
start_pln: datetime.datetime
|
|
end_pln: datetime.datetime
|
|
start_fact: datetime.datetime | None
|
|
end_fact: datetime.datetime | None
|
|
status: StatusEnum
|
|
task_type: TaskTypeEnum
|
|
text: str
|
|
|
|
events: list['DBEvent'] = []
|
|
subtasks: list[DBSubTask] | None = []
|
|
route: 'DBMarsh' = None
|
|
|
|
|
|
class DBMarsh(DBModel):
|
|
temperature_property: MarshTemperatureProperty
|
|
name: str
|
|
|
|
parent_id: int = Field(default=0, exclude=True)
|
|
|
|
trailer: Union['DBTRS', None]
|
|
truck: Union['DBTRS', None]
|
|
|
|
|
|
class DBTRS(DBModel):
|
|
gost: str | None
|
|
parent_id: int = Field(default=0, exclude=True)
|
|
|
|
|
|
class DBMST(DBModel):
|
|
name: str
|
|
location: 'Location'
|
|
parent_id: int = Field(default=0, exclude=True)
|
|
|
|
|
|
class Location(BaseModel):
|
|
lat: float
|
|
lon: float
|
|
parent_id: int = Field(default=0, exclude=True)
|
|
|
|
|
|
class DBEvent(DBModel):
|
|
id: int
|
|
type: str
|
|
text: str
|
|
parent_id: int = Field(default=0, exclude=True)
|
|
event_data: list | Json
|
|
event_datetime: datetime.datetime
|