lavkach3

Форк
0
/
store_schemas.py 
66 строк · 2.2 Кб
1
from typing import Optional, List
2

3
from fastapi_filter.contrib.sqlalchemy import Filter
4
from pydantic import BaseModel, Field, field_validator
5
from pydantic.types import UUID
6

7
from app.basic.store.models.store_models import Store
8
from app.basic.store.models.store_models import StoreType
9
from core.schemas import BaseFilter
10
from core.schemas.basic_schemes import BasicModel
11
from core.schemas.list_schema import GenericListSchema
12
from core.schemas.timestamps import TimeStampScheme
13

14

15
class StoreBaseScheme(BasicModel):
16
    vars: Optional[dict] = None
17
    title: str = Field(title='Title', table=True, form=True)
18
    external_number: Optional[str] = Field(default=None, title='External ID', table=True, form=True)
19
    address: str = Field(title='Address', table=True, form=True)
20
    source: Optional[StoreType] = Field(default=StoreType.INTERNAL, title='Source', table=True, form=True)
21

22

23
    class Config:
24
        extra = 'allow'
25
        from_attributes = True
26
        orm_model = Store
27
        service = 'app.basic.store.services.StoreService'
28

29
    @field_validator('vars', mode='before')
30
    @classmethod
31
    def convert_int_serial(cls, v):
32
        if v == '':
33
            return {}
34
class StoreUpdateScheme(StoreBaseScheme):
35
    title: str = Field(title='Title', table=True, form=True)
36
    source: Optional[StoreType] = Field(default=None, title='Source', table=True, form=True)
37

38

39
class StoreCreateScheme(StoreBaseScheme):
40
    pass
41

42

43
class StoreScheme(StoreCreateScheme, TimeStampScheme):
44
    company_id: UUID = Field(title='Company ID', model='company')
45
    lsn: int
46
    id: UUID
47

48

49

50
class StoreFilter(BaseFilter):
51
    title__ilike: Optional[str] = Field(default=None, title='Title')
52
    address__ilike: Optional[str] = Field(description="address", default=None, title='Address')
53
    source__in: Optional[list[StoreType]] = Field(default=None, title='Source')
54

55
    class Config:
56
        populate_by_name = True
57

58
    class Constants(Filter.Constants):
59
        model = Store
60
        ordering_field_name = "order_by"
61
        search_field_name = "search"
62
        search_model_fields = ["title", "external_number", "address"]
63

64

65
class StoreListSchema(GenericListSchema):
66
    data: Optional[List[StoreScheme]]
67

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.