Coverage for src/integrify/epoint/schemas/response.py: 100%

43 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2026-02-02 01:50 +0000

1from decimal import Decimal 

2from typing import Optional 

3 

4from pydantic import BaseModel, field_validator 

5 

6from integrify.epoint.schemas.enums import ( 

7 Code, 

8 TransactionStatus, 

9 TransactionStatusExtended, 

10) 

11 

12 

13class MinimalResponseSchema(BaseModel): 

14 status: TransactionStatus 

15 """Success və ya failed əməliyyatının nəticəsi""" 

16 

17 message: Optional[str] = None 

18 """Ödənişin icra statusu haqqında mesaj""" 

19 

20 

21class BaseResponseSchema(MinimalResponseSchema): 

22 # if success 

23 transaction: Optional[str] = None 

24 """EPoint xidmətinin əməliyyat IDsi""" 

25 

26 bank_transaction: Optional[str] = None 

27 """Bank ödəniş əməliyyatı IDsi""" 

28 

29 bank_response: Optional[str] = None 

30 """Ödəniş icrasının nəticəsi ilə bankın cavabı""" 

31 

32 operation_code: Optional[str] = None 

33 """001-kart qeydiyyatı\n100- istifadəçi ödənişi""" 

34 

35 rrn: Optional[str] = None 

36 """Retrieval Reference Number - unikal əməliyyat identifikatoru. 

37 Yalnız uğurlu bir əməliyyat üçün mövcuddur""" 

38 

39 card_mask: Optional[str] = None 

40 """Ödəniş səhifəsində göstərilən istifadəçi adı""" 

41 

42 card_name: Optional[str] = None 

43 """123456******1234 formatında əks edilən kart maskası""" 

44 

45 amount: Optional[Decimal] = None 

46 """Ödəniş məbləği""" 

47 

48 

49class BaseWithCodeSchema(BaseResponseSchema): 

50 code: Optional[str] = None 

51 """Bankın 3 rəqəmli cavab kodu.""" 

52 

53 @field_validator('code', mode='before') 

54 @classmethod 

55 def code_to_msg(cls, v: Optional[str] = None) -> Optional[str]: 

56 """3 rəqəmli koddan, xəta/uğur mesajına çevrilir.""" 

57 return Code[v] if v else None 

58 

59 

60################################################################# 

61class RedirectUrlResponseSchema(MinimalResponseSchema): 

62 # if success 

63 transaction: Optional[str] = None 

64 """EPoint xidmətinin əməliyyat IDsi""" 

65 

66 redirect_url: Optional[str] = None 

67 """İstifadəçinin kart məlumatlarını daxil etmək üçün yönləndirilməsi lazım olan URL""" 

68 

69 

70class RedirectUrlWithCardIdResponseSchema(RedirectUrlResponseSchema): 

71 card_id: Optional[str] = None 

72 """Ödənişləri yerinə yetirmək üçün istifadə edilməsi 

73 lazım olan unikal kart identifikatoru""" 

74 

75 

76class PaymentSchema(BaseWithCodeSchema): 

77 order_id: str 

78 """Tətbiqinizdə unikal əməliyyat ID""" 

79 

80 other_attr: Optional[str] = None 

81 """Əlavə göndərdiyiniz seçimlər""" 

82 

83 

84class TransactionStatusResponseSchema(BaseWithCodeSchema): 

85 status: TransactionStatusExtended # type: ignore[assignment] 

86 """Tranzaksiyanın detallı statusu""" 

87 

88 order_id: Optional[str] = None 

89 """Tətbiqinizdə unikal əməliyyat ID""" 

90 

91 other_attr: Optional[str] = None 

92 """Əlavə göndərdiyiniz seçimlər""" 

93 

94 

95class SplitPayWithSavedCardResponseSchema(BaseResponseSchema): 

96 split_amount: Optional[Decimal] = None 

97 """İkinci istifadəçi üçün ödəniş məbləği."""