File size: 1,172 Bytes
047d92b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from typing import Any, Dict, List, Optional, Type, TypeVar

from ._repository import BaseRepository

RepositoryT = TypeVar("RepositoryT", bound="BaseRepository")


class BaseService:
    def __init__(self, repository: Type[RepositoryT]):
        self.repository = repository()

    async def create(self, data: dict):
        return await self.repository.create(object=self.repository.model(**data))

    async def list(
        self,
        page: int = 1,
        page_size: int = 10,
        order_by: Optional[List[str]] | None = None,
        filter_by: Dict[str, Any] | None = None,
    ):
        return await self.repository.list(
            page=page,
            page_size=page_size,
            filter_by=filter_by,
            order_by=order_by,
        )

    async def get(self, id: int):
        return await self.repository.get(id=id)

    async def patch(self, id: int, data: dict):
        return await self.repository.patch(id=id, **data)

    async def delete(self, id: int):
        return await self.repository.delete(id=id)

    async def count(self, filter_by: dict | None = None):
        return await self.repository.count(filter_by=filter_by)