80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Annotated, Optional
|
|
|
|
import sqlalchemy
|
|
from litestar.contrib.sqlalchemy.base import BigIntBase
|
|
from litestar.contrib.sqlalchemy.dto import SQLAlchemyDTO
|
|
from litestar.dto import DTOConfig, MsgspecDTO
|
|
from msgspec import Struct, Meta
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.domain.enums import AssetItemProductLineEnum, AssetItemStatusEnum
|
|
from app.lib import service
|
|
from app.lib.company_owned_repository import CompanyOwnedRepository
|
|
|
|
|
|
class AssetItem(BigIntBase):
|
|
__tablename__ = "asset_items" # type: ignore[assignment]
|
|
|
|
company_id: Mapped[int]
|
|
product_line: Mapped[AssetItemProductLineEnum] = mapped_column(
|
|
sqlalchemy.Enum(AssetItemProductLineEnum, name="asset_product_line_enum")
|
|
)
|
|
brand_id: Mapped[int]
|
|
model_id: Mapped[int]
|
|
serial_number: Mapped[str]
|
|
external_id: Mapped[Optional[str]]
|
|
alive: Mapped[bool]
|
|
status: Mapped[AssetItemStatusEnum] = mapped_column(
|
|
sqlalchemy.Enum(AssetItemStatusEnum, name="asset_status_enum")
|
|
)
|
|
created_by_id: Mapped[Optional[int]]
|
|
created_at: Mapped[datetime]
|
|
last_modified_by_id: Mapped[Optional[int]]
|
|
last_modified_at: Mapped[datetime]
|
|
is_fiscal_device: Mapped[bool]
|
|
warehouse_id: Mapped[Optional[int]]
|
|
|
|
|
|
PositiveInt = Annotated[int, Meta(gt=0)]
|
|
|
|
|
|
class AssetItemWriteStruct(Struct):
|
|
company_id: PositiveInt
|
|
product_line: AssetItemProductLineEnum
|
|
brand_id: PositiveInt
|
|
model_id: PositiveInt
|
|
serial_number: Annotated[str, Meta(max_length=10)]
|
|
external_id: Annotated[str, Meta(max_length=10)] | None
|
|
alive: bool
|
|
status: AssetItemStatusEnum
|
|
created_by_id: PositiveInt | None
|
|
created_at: datetime
|
|
last_modified_by_id: PositiveInt | None
|
|
last_modified_at: datetime | None
|
|
is_fiscal_device: bool
|
|
warehouse_id: PositiveInt | None
|
|
|
|
|
|
class XXAssetItemWriteDTO(MsgspecDTO[AssetItemWriteStruct]):
|
|
...
|
|
|
|
|
|
class Repository(CompanyOwnedRepository[AssetItem]):
|
|
model_type = AssetItem
|
|
alive_flag = "alive"
|
|
company_id_field = "company_id"
|
|
|
|
|
|
class Service(service.Service[AssetItem]):
|
|
repository_type = Repository
|
|
|
|
|
|
write_config = DTOConfig(exclude={"id"})
|
|
AssetItemWriteDTO = SQLAlchemyDTO[Annotated[AssetItem, write_config]]
|
|
# AssetItemWriteDTO = MsgspecDTO[AssetItemWriteStruct]
|
|
AssetItemReadDTO = SQLAlchemyDTO[AssetItem]
|
|
|