mp_driver_server/core/model/task/db.py

82 lines
1.8 KiB
Python
Raw Normal View History

2024-06-26 16:44:12 +03:00
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