from enum import Enum 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 from sqlalchemy.orm import Mapped, mapped_column from app.lib import service from app.lib.filter_repository import FilterRepository class FiscalModuleEnum(str, Enum): CROATIA = "CROATIA" HUNGARY = "HUNGARY" ITALY = "ITALY" MONTENEGRO = "MONTENEGRO" ROMANIA = "ROMANIA" RUSSIA = "RUSSIA" SERBIA = "SERBIA" class PaymentTypeEnum(str, Enum): CA = "CA" DA = "DA" DB = "DB" DC = "DC" DD = "DD" PA4 = "PA4" NEG = "NEG" PA3 = "PA3" TA = "TA" WLT = "WLT" class FiscalPaymentMapping(BigIntBase): __tablename__ = "fiscal_payment_mapping" # type: ignore[assignment] fiscal_module: Mapped[FiscalModuleEnum] = mapped_column( sqlalchemy.Enum(FiscalModuleEnum, name="fiscal_module_enum") ) code: Mapped[str] payment_type: Mapped[PaymentTypeEnum] = mapped_column( sqlalchemy.Enum(PaymentTypeEnum, name="televend_payment_type") ) operation_mode_code: Mapped[int] payment_device_code: Mapped[Optional[int]] class Repository(FilterRepository[FiscalPaymentMapping]): model_type = FiscalPaymentMapping class Service(service.Service[FiscalPaymentMapping]): repository_type = Repository write_config = DTOConfig(exclude={"id"}) FiscalPaymentMappingWriteDTO = SQLAlchemyDTO[ Annotated[FiscalPaymentMapping, write_config] ] FiscalPaymentMappingReadDTO = SQLAlchemyDTO[FiscalPaymentMapping]