Coverage for packages/epoint/src/integrify/epoint/schemas/response.py: 100%
106 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 datetime import datetime
2from decimal import Decimal
3from typing import Any
5from integrify.epoint.schemas.enums import Code, TransactionStatus, TransactionStatusExtended
6from pydantic import BaseModel, field_validator
9class MinimalResponseSchema(BaseModel):
10 status: TransactionStatus
11 """Success və ya failed əməliyyatının nəticəsi"""
13 message: str | None = None
14 """Ödənişin icra statusu haqqında mesaj"""
17class BaseResponseSchema(MinimalResponseSchema):
18 # if success
19 transaction: str | None = None
20 """EPoint xidmətinin əməliyyat IDsi"""
22 bank_transaction: str | None = None
23 """Bank ödəniş əməliyyatı IDsi"""
25 bank_response: str | None = None
26 """Ödəniş icrasının nəticəsi ilə bankın cavabı"""
28 operation_code: str | None = None
29 """001-kart qeydiyyatı\n100- istifadəçi ödənişi"""
31 rrn: str | None = None
32 """Retrieval Reference Number - unikal əməliyyat identifikatoru.
33 Yalnız uğurlu bir əməliyyat üçün mövcuddur"""
35 card_mask: str | None = None
36 """Ödəniş səhifəsində göstərilən istifadəçi adı"""
38 card_name: str | None = None
39 """123456******1234 formatında əks edilən kart maskası"""
41 amount: Decimal | None = None
42 """Ödəniş məbləği"""
45class BaseWithCodeSchema(BaseResponseSchema):
46 code: str | None = None
47 """Bankın 3 rəqəmli cavab kodu."""
49 @field_validator('code', mode='before')
50 @classmethod
51 def code_to_msg(cls, v: str | None = None) -> str | None:
52 """3 rəqəmli koddan, xəta/uğur mesajına çevrilir.
54 Kod `Code` lüğətində yoxdursa (bank yeni/naməlum kod qaytara bilər),
55 `KeyError` atmaq əvəzinə orijinal kod qaytarılır ki, cavab parse-i crash olmasın.
56 """
57 if not v:
58 return None
60 return Code.get(v, v)
63#################################################################
64class RedirectUrlResponseSchema(MinimalResponseSchema):
65 # if success
66 transaction: str | None = None
67 """EPoint xidmətinin əməliyyat IDsi"""
69 redirect_url: str | None = None
70 """İstifadəçinin kart məlumatlarını daxil etmək üçün yönləndirilməsi lazım olan URL"""
73class RedirectUrlWithCardIdResponseSchema(RedirectUrlResponseSchema):
74 card_id: str | None = None
75 """Ödənişləri yerinə yetirmək üçün istifadə edilməsi
76 lazım olan unikal kart identifikatoru"""
79class PaymentSchema(BaseWithCodeSchema):
80 order_id: str
81 """Tətbiqinizdə unikal əməliyyat ID"""
83 other_attr: str | None = None
84 """Əlavə göndərdiyiniz seçimlər"""
87class TransactionStatusResponseSchema(BaseWithCodeSchema):
88 status: TransactionStatusExtended
89 """Tranzaksiyanın detallı statusu"""
91 order_id: str | None = None
92 """Tətbiqinizdə unikal əməliyyat ID"""
94 other_attr: str | None = None
95 """Əlavə göndərdiyiniz seçimlər"""
98class SplitPayWithSavedCardResponseSchema(BaseResponseSchema):
99 split_amount: Decimal | None = None
100 """İkinci istifadəçi üçün ödəniş məbləği."""
103#################################################################
104# Apple Pay & Google Pay
105class WidgetResponseSchema(BaseModel):
106 """`/api/1/token/widget` sorğusunun cavabı"""
108 status: str
109 """Əməliyyatın nəticəsi: `success` və ya `error`"""
111 message: str | None = None
112 """Xəta baş verdikdə, xəta mesajı"""
114 widget_url: str | None = None
115 """Apple Pay/Google Pay düymələrinin olduğu widget-in URL-i.
116 iframe və ya webview daxilində açılmalıdır."""
119class TokenPaymentResponseSchema(BaseModel):
120 """`/api/1/token/payment` sorğusunun cavabı: EPoint-də yaradılmış token ödənişi.
121 Bu obyekt frontend-də `initTokenPay`-ə `payment` parametri kimi ötürülür."""
123 # if error
124 status: str | None = None
125 """Xəta baş verdikdə, əməliyyatın statusu"""
127 message: str | None = None
128 """Xəta baş verdikdə, xəta mesajı"""
130 # if success
131 id: int | None = None
132 """Token ödənişinin EPoint-dəki IDsi. Apple/Google Pay sorğularında istifadə olunur."""
134 transaction: str | None = None
135 """EPoint xidmətinin əməliyyat IDsi"""
137 rrn: str | None = None
138 """Retrieval Reference Number - unikal əməliyyat identifikatoru"""
140 short_link: str | None = None
141 """Ödənişin qısa linki"""
143 bank_order_id: str | None = None
144 """Bank tərəfindəki sifariş IDsi"""
146 total: Decimal | None = None
147 """Ödənişin yekun məbləği"""
149 card_name: str | None = None
150 """Ödəniş səhifəsində göstərilən istifadəçi adı"""
152 card_mask: str | None = None
153 """123456******1234 formatında əks edilən kart maskası"""
155 description: str | None = None
156 """Ödənişin təsviri"""
158 merchant_order_id: str | None = None
159 """Tətbiqinizdə unikal əməliyyat ID (sorğuda göndərdiyiniz `order_id`)"""
161 other_attr: Any = None
162 """Əlavə göndərdiyiniz seçimlər"""
164 created_at: datetime | None = None
165 """Ödənişin yaradılma tarixi"""
167 updated_at: datetime | None = None
168 """Ödənişin son yenilənmə tarixi"""
171class TokenPayResponseSchema(BaseModel):
172 """Apple Pay/Google Pay ödənişinin tamamlanması sorğusunun cavabı"""
174 status: str
175 """Əməliyyatın nəticəsi. Uğurlu olduqda: `success`"""
177 message: str | None = None
178 """Ödənişin icra statusu haqqında mesaj"""
180 result: Any = None
181 """Ödəniş provayderindən (PSP) gələn cavab"""
183 redirect_url: str | None = None
184 """Yönləndirmə URL-i (məs., 3DS üçün). Hər zaman gəlmir."""