init
This commit is contained in:
46
src/application/commands/organization_commands.py
Normal file
46
src/application/commands/organization_commands.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from src.application.abstractions import IUnitOfWork
|
||||
from src.application.contracts import ILogger
|
||||
from src.application.domain.entities.organization import LegalEntityEntity
|
||||
from src.infrastructure.database.decorators import transactional
|
||||
|
||||
|
||||
class ListOrganizationsCommand:
|
||||
def __init__(self, unit_of_work: IUnitOfWork, logger: ILogger):
|
||||
self._unit_of_work = unit_of_work
|
||||
self._logger = logger
|
||||
|
||||
@transactional
|
||||
async def __call__(self, *, limit: int = 50, offset: int = 0) -> tuple[list[LegalEntityEntity], int]:
|
||||
items = await self._unit_of_work.legal_entity_repository.list_all(limit=limit, offset=offset)
|
||||
total = await self._unit_of_work.legal_entity_repository.count_all()
|
||||
return items, total
|
||||
|
||||
|
||||
class GetOrganizationCommand:
|
||||
def __init__(self, unit_of_work: IUnitOfWork, logger: ILogger):
|
||||
self._unit_of_work = unit_of_work
|
||||
self._logger = logger
|
||||
|
||||
@transactional
|
||||
async def __call__(self, organization_id: str) -> LegalEntityEntity:
|
||||
return await self._unit_of_work.legal_entity_repository.get_by_id(organization_id)
|
||||
|
||||
|
||||
class UpdateOrganizationCommand:
|
||||
ALLOWED_FIELDS = frozenset({
|
||||
'name', 'short_name', 'ogrn', 'kpp', 'legal_address', 'actual_address',
|
||||
'bank_details', 'contact_person', 'contact_phone', 'status',
|
||||
})
|
||||
|
||||
def __init__(self, unit_of_work: IUnitOfWork, logger: ILogger):
|
||||
self._unit_of_work = unit_of_work
|
||||
self._logger = logger
|
||||
|
||||
@transactional
|
||||
async def __call__(self, organization_id: str, *, values: dict[str, Any]) -> LegalEntityEntity:
|
||||
filtered = {k: v for k, v in values.items() if k in self.ALLOWED_FIELDS and v is not None}
|
||||
return await self._unit_of_work.legal_entity_repository.update(organization_id, values=filtered)
|
||||
Reference in New Issue
Block a user