Feature: Implement advanced POST-based search with recursive logical grouping and unique parameterization (Verified Working).
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import datetime, pytz
|
||||
|
||||
from typing import Dict, List, Optional, Set, Union
|
||||
from typing import Any, Dict, List, Optional, Set, Union
|
||||
from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator
|
||||
|
||||
from app.db_sql import redis_lookup_id_random
|
||||
@@ -11,6 +11,28 @@ log = logging.getLogger(__name__)
|
||||
from app.models.common_field_schema import base_fields, default_num_bytes
|
||||
|
||||
|
||||
# ### BEGIN ### API Search Models ###
|
||||
class SearchFilter(BaseModel):
|
||||
"""
|
||||
Represents a single filter condition.
|
||||
Example: {"field": "price", "op": "gt", "value": 100}
|
||||
"""
|
||||
field: str
|
||||
op: str # eq, ne, gt, gte, lt, lte, like, in, is_null, is_not_null
|
||||
value: Optional[Any] = None
|
||||
|
||||
class SearchQuery(BaseModel):
|
||||
"""
|
||||
Represents a complex search query with optional logical grouping.
|
||||
"""
|
||||
and_filters: Optional[List[Union[SearchFilter, 'SearchQuery']]] = Field(None, alias="and")
|
||||
or_filters: Optional[List[Union[SearchFilter, 'SearchQuery']]] = Field(None, alias="or")
|
||||
|
||||
# Support recursive models in Pydantic v1
|
||||
SearchQuery.update_forward_refs()
|
||||
# ### END ### API Search Models ###
|
||||
|
||||
|
||||
# ### BEGIN ### API CRUD Models ### Fundraising_Cfg_Base() ###
|
||||
class Api_Crud_Base(BaseModel):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
Reference in New Issue
Block a user