Asset items

This commit is contained in:
Eden Kirin
2023-08-27 23:13:24 +02:00
parent 867a3c9733
commit c7060c7ed3
8 changed files with 356 additions and 68 deletions

79
app/domain/asset_item.py Normal file
View 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]