Coverage for packages/clopos/src/integrify/clopos/schemas/customers/request.py: 100%
33 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
1from typing import Literal
3from integrify.clopos.helpers import IsoDate
4from integrify.clopos.schemas.common.request import PaginatedDataRequest
5from integrify.clopos.schemas.enums import Gender
6from integrify.schemas import PayloadBaseModel
7from integrify.utils import UnsetField, UnsetOrNoneField
8from pydantic import Field, model_serializer
9from typing_extensions import TypedDict
12class CustomerFilter(TypedDict):
13 by: Literal['name', 'phones', 'group_id']
14 value: str
17class GetCustomersRequest(PaginatedDataRequest):
18 with_: UnsetField[list[Literal['group', 'balance', 'cashback_balance']]] = Field(exclude=True)
19 filters: UnsetField[list[CustomerFilter]] = Field(exclude=True)
21 @model_serializer()
22 def serialize_model(self) -> dict:
23 """Model serializer"""
24 data = {}
26 for i, with_item in enumerate(self.with_ or []):
27 data[f'with[{i}]'] = with_item
29 for i, filter_ in enumerate(self.filters or []):
30 data[f'filters[{i}][0]'] = filter_['by']
31 data[f'filter[{i}][1]'] = filter_['value']
33 return data
36class CreateCustomerRequest(PayloadBaseModel):
37 name: str
38 email: UnsetField[str]
39 phone: UnsetField[str]
40 code: UnsetField[str]
41 cid: UnsetField[str]
42 description: UnsetField[str]
43 group_id: UnsetField[int]
44 gender: UnsetOrNoneField[Gender]
45 date_of_birth: UnsetField[IsoDate]