Coverage for arclith / application / services / base_service.py: 100%
30 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 15:02 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 15:02 +0100
1from typing import Generic, Optional, TypeVar
2from uuid6 import UUID
4from arclith.domain.models.entity import Entity
5from arclith.domain.ports.logger import Logger
6from arclith.domain.ports.repository import Repository
7from arclith.application.use_cases import (
8 CreateUseCase,
9 ReadUseCase,
10 UpdateUseCase,
11 DeleteUseCase,
12 FindAllUseCase,
13 DuplicateUseCase,
14 PurgeUseCase,
15)
17T = TypeVar("T", bound = Entity)
20class BaseService(Generic[T]):
21 def __init__(self, repository: Repository[T], logger: Logger, retention_days: float | None = None) -> None:
22 self._create = CreateUseCase(repository, logger)
23 self._read = ReadUseCase(repository, logger)
24 self._update = UpdateUseCase(repository, logger)
25 self._delete = DeleteUseCase(repository, logger, retention_days)
26 self._find_all = FindAllUseCase(repository, logger)
27 self._duplicate = DuplicateUseCase(repository, logger)
28 self._purge = PurgeUseCase(repository, logger, retention_days)
30 async def create(self, entity: T) -> T:
31 return await self._create.execute(entity)
33 async def read(self, uuid: UUID) -> Optional[T]:
34 return await self._read.execute(uuid)
36 async def update(self, entity: T) -> T:
37 return await self._update.execute(entity)
39 async def delete(self, uuid: UUID, deleted_by: str | None = None) -> None:
40 await self._delete.execute(uuid, deleted_by)
42 async def find_all(self) -> list[T]:
43 return await self._find_all.execute()
45 async def duplicate(self, uuid: UUID) -> T:
46 return await self._duplicate.execute(uuid)
48 async def purge(self) -> int:
49 return await self._purge.execute()