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

1from typing import Literal 

2 

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 

10 

11 

12class CustomerFilter(TypedDict): 

13 by: Literal['name', 'phones', 'group_id'] 

14 value: str 

15 

16 

17class GetCustomersRequest(PaginatedDataRequest): 

18 with_: UnsetField[list[Literal['group', 'balance', 'cashback_balance']]] = Field(exclude=True) 

19 filters: UnsetField[list[CustomerFilter]] = Field(exclude=True) 

20 

21 @model_serializer() 

22 def serialize_model(self) -> dict: 

23 """Model serializer""" 

24 data = {} 

25 

26 for i, with_item in enumerate(self.with_ or []): 

27 data[f'with[{i}]'] = with_item 

28 

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'] 

32 

33 return data 

34 

35 

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]