Asset items
This commit is contained in:
79
app/domain/asset_item.py
Normal file
79
app/domain/asset_item.py
Normal file
@ -0,0 +1,79 @@
|
||||
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]
|
||||
|
||||
Reference in New Issue
Block a user