feat(project):change mongo

This commit is contained in:
shahzeydyfah
2025-01-10 22:02:00 +03:30
parent a83d979a54
commit 0630f04690
5 changed files with 292 additions and 39 deletions
+54 -4
View File
@@ -1,8 +1,10 @@
from enum import Enum
from typing import Optional, Any, List
from typing import Any
from typing import Generic, TypeVar, List, Optional
import pydantic
from pydantic import BaseModel
from pydantic.generics import GenericModel
class FilterItem(BaseModel):
@@ -12,6 +14,7 @@ class FilterItem(BaseModel):
op: Optional[str]
type: Optional[str]
val: Optional[Any]
hidden: Optional[bool]
@staticmethod
def ValidItem(item: dict):
@@ -30,6 +33,12 @@ class Cr(str, Enum):
AND = 'and'
class OutPutType(str, Enum):
JSON = 'json'
EXEL = 'exel'
PDF = 'pdf'
class FilterScope(BaseModel):
id: str
items: Optional[List[FilterItem]]
@@ -60,6 +69,7 @@ class FilterScope(BaseModel):
class Page(BaseModel):
c: int = 1
s: int = 5
force: Optional[bool] = False
class SearchModel(BaseModel):
@@ -67,11 +77,23 @@ class SearchModel(BaseModel):
cols: Optional[List[Any]]
class ExportModel(BaseModel):
ot: Optional[OutPutType]
c: Optional[dict]
d: Optional[str]
class SortModel(BaseModel):
field: Optional[str]
direction: Optional[str]
class MultiSortModel(BaseModel):
field: Optional[str]
direction: Optional[str]
fields: Optional[List[SortModel]]
class JoinModel(BaseModel):
model: BaseModel
show: List[str]
@@ -88,17 +110,19 @@ class Config:
class TableEngineInput(BaseModel):
f: Optional[List[FilterScope]]
extra_filter: list = []
o: Optional[SortModel]
o: Optional[MultiSortModel]
p: Optional[Page] = Page()
s: Optional[SearchModel]
e: Optional[ExportModel]
is_deleted: Optional[bool]
def __init__(self, **kwargs):
super().__init__(**kwargs)
_input = {**{'p': {'c': 1, 's': 5},
'f': [], 's': {}, 'o': {}}, **(kwargs or {})}
'f': [], 's': {}, 'o': {}, 'e': {}}, **(kwargs or {})}
self.p = Page(**_input.get('p'))
self.o = SortModel(**_input.get('o'))
self.o = MultiSortModel(**_input.get('o'))
self.e = ExportModel(**_input.get('e'))
if _input.get('f'):
self.f = [FilterScope(**f) for f in
filter(lambda fs: FilterScope.ValidScope(fs), _input.get('f'))]
@@ -135,7 +159,10 @@ class TableEngineInput(BaseModel):
return self.page() + 1
def get_limit(self):
# HIT : LIMIT 0 : in Mongo Return all records
limit = self.p.s if self.p else 20
if self.p.force:
return 1000000
return limit if limit < 100 else 100
def text_search_cols(self, cols: List[str]):
@@ -158,3 +185,26 @@ class TableEngineInput(BaseModel):
class WorkingMode(Enum):
Development = "development"
Production = "production"
T = TypeVar('T')
class TableEngineInputType(GenericModel, Generic[T]):
f: Optional[List]
o: Optional[dict] = {}
p: Optional[dict] = {}
s: Optional[dict] = {}
e: Optional[dict] = {}
class TableEngineExport(GenericModel, Generic[T]):
rows: Optional[List[T]]
total: Optional[int]
page: Optional[int]
te: Optional[TableEngineInputType]
class TableEngineRequestType(GenericModel, Generic[T]):
te: Optional[TableEngineInputType]
extra: Optional[dict]