48 lines
1.7 KiB
Python
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)
|