Adding filter on Entity type

This commit is contained in:
2025-05-04 17:30:08 +02:00
parent 0d7cad945c
commit c8466c557d

View File

@@ -1,10 +1,12 @@
from datetime import date from datetime import date
from enum import Enum
from typing import List, Literal, Optional from typing import List, Literal, Optional
from fastapi_filter import FilterDepends, with_prefix
from pydantic import Field, BaseModel, ConfigDict from pydantic import Field, BaseModel, ConfigDict
from beanie import PydanticObjectId from beanie import PydanticObjectId
from firm.core.models import CrudDocument, ForeignKey from firm.core.models import CrudDocument, ForeignKey, CrudDocumentConfig
from firm.core.filter import Filter, FilterSchema from firm.core.filter import Filter, FilterSchema
@@ -13,6 +15,10 @@ class EntityType(BaseModel):
def label(self) -> str: def label(self) -> str:
return self.title return self.title
class EntityTypeEnum(str, Enum):
individual = 'individual'
corporation = 'corporation'
institution = 'institution'
class Individual(EntityType): class Individual(EntityType):
model_config = ConfigDict(title='Particulier') model_config = ConfigDict(title='Particulier')
@@ -63,6 +69,9 @@ class Entity(CrudDocument):
Fiche d'un client Fiche d'un client
""" """
model_config = ConfigDict(title='Client') model_config = ConfigDict(title='Client')
document_config = CrudDocumentConfig(
indexes=["entity_data.type"],
)
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type') entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
address: str = Field(default="", title='Adresse') address: str = Field(default="", title='Adresse')
@@ -73,7 +82,16 @@ class Entity(CrudDocument):
return self.entity_data.label return self.entity_data.label
class EntityDataFilter(Filter):
type__in: Optional[list[EntityTypeEnum]] = None
class Constants(Filter.Constants):
model = EntityType
class EntityFilters(FilterSchema): class EntityFilters(FilterSchema):
entity_data: Optional[EntityDataFilter] = FilterDepends(with_prefix("entity_data", EntityDataFilter))
class Constants(Filter.Constants): class Constants(Filter.Constants):
model = Entity model = Entity
search_model_fields = ["label"] search_model_fields = ["label"]