Files
sakhteman/core/repositories/base.py
T
2024-02-15 00:17:51 +03:30

48 lines
1.7 KiB
Python

from typing import Generic, TypeVar, Any
from uuid import UUID
from pydantic.generics import GenericModel
from core.service.mongo_db import use_collection
from core.utils.crudify import mongo_inserter, mongo_soft_deleter, mongo_updater, mongo_find_one
from core.utils.table_engine import TableEngineRequestType, TableEngineExport
from core.utils.te import NewTableEngine
T = TypeVar('T')
class BaseRepository(GenericModel, Generic[T]):
COLLECTION: str = 'asa'
FETCH_COLS_SEARCH = ['v_id']
MODEL: T = None
def __init__(self, collection: str, fetch_cols_search=None, model: T = None, **data: Any):
super().__init__(**data)
if fetch_cols_search is None:
fetch_cols_search = ['v_id']
self.COLLECTION = collection
self.MODEL = model
self.FETCH_COLS_SEARCH = fetch_cols_search
async def get(self, _id: UUID) -> T:
return await mongo_find_one(_id, self.COLLECTION)
async def fetch(self, _input: TableEngineRequestType) -> TableEngineExport[T]:
return await NewTableEngine.mongo(
query_class=use_collection(self.COLLECTION),
soft_deleted=True,
model=self.MODEL,
search_cols=self.FETCH_COLS_SEARCH,
inputs=_input.te) \
.to_dict()
async def create(self, create: T) -> T:
return await mongo_inserter(create, self.COLLECTION, getter=self.get)
async def update(self, _id: UUID, update: T, extra_query: dict = None):
return await mongo_updater(update, _id, self.COLLECTION, getter=self.get,
extra_query=extra_query)
async def delete(self, _id: UUID):
return await mongo_soft_deleter(_id, self.COLLECTION)