Initial commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user