
from typing import List, Optional, Dict, Any
from abc import ABC, abstractmethod

from app.{{ name }}.domain.entities.{{ name }} import {{ pascal_case }}

class {{ pascal_case }}Repository(ABC):
    @abstractmethod
    def all(self,
            trashed: int,
            paginate: int,
            page: int,
            rows: int,
            filters: Optional[Dict[str, Any]] = None
        ) -> List[{{ pascal_case }}]:
        pass

    @abstractmethod
    def find(self, id: str) -> Optional[{{ pascal_case }}]:
        pass

    @abstractmethod
    def create(self, {{ name }}: {{ pascal_case }}) -> {{ pascal_case }}:
        pass

    @abstractmethod
    def update(self, id:str, {{ name }}: {{ pascal_case }}) -> Optional[{{ pascal_case }}]:
        pass

    @abstractmethod
    def delete(self, id: str) -> Optional[{{ pascal_case }}]:
        pass