70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Optional
|
|
|
|
from litestar import Controller, get, post
|
|
from litestar.contrib.repository.filters import SearchFilter
|
|
from litestar.di import Provide
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.domain.fiscal_payment_mapping import (
|
|
FiscalPaymentMapping,
|
|
FiscalPaymentMappingReadDTO,
|
|
FiscalPaymentMappingWriteDTO,
|
|
Repository,
|
|
Service,
|
|
)
|
|
from app.lib.filters import ExactFilter
|
|
from app.lib.responses import ObjectListResponse, ObjectResponse
|
|
|
|
if TYPE_CHECKING:
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
|
|
DETAIL_ROUTE = "/{id:int}"
|
|
|
|
|
|
def provides_service(db_session: AsyncSession) -> Service:
|
|
"""Constructs repository and service objects for the request."""
|
|
return Service(Repository(session=db_session))
|
|
|
|
|
|
class FiscalPaymentMappingController(Controller):
|
|
dto = FiscalPaymentMappingWriteDTO
|
|
return_dto = FiscalPaymentMappingReadDTO
|
|
path = "/fiscal-payment-mappings"
|
|
dependencies = {
|
|
"service": Provide(provides_service, sync_to_thread=False),
|
|
}
|
|
tags = ["FiscalPaymentMappings"]
|
|
|
|
@post()
|
|
async def create_fiscal_payment_mappings(
|
|
self, data: FiscalPaymentMapping, service: Service
|
|
) -> FiscalPaymentMapping:
|
|
return await service.create(data)
|
|
|
|
@get()
|
|
async def get_fiscal_payment_mappings(
|
|
self, service: Service, payment_device_code: Optional[int] = None
|
|
) -> ObjectListResponse[FiscalPaymentMapping]:
|
|
filters = []
|
|
|
|
if payment_device_code is not None:
|
|
filters.append(
|
|
ExactFilter[int](
|
|
field_name="payment_device_code",
|
|
value=payment_device_code,
|
|
),
|
|
)
|
|
|
|
content = await service.list(*filters)
|
|
return ObjectListResponse(content=content)
|
|
|
|
@get(DETAIL_ROUTE)
|
|
async def get_fiscal_payment_mapping(
|
|
self, service: Service, id: int
|
|
) -> ObjectResponse[FiscalPaymentMapping]:
|
|
content = await service.get(id)
|
|
return ObjectResponse(content=content)
|