Coverage for src/integrify/azericard/schemas/request/transfer.py: 100%
34 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-12-29 00:57 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-12-29 00:57 +0000
1from decimal import Decimal
2from hashlib import md5
3from typing import ClassVar
5from pydantic import AliasGenerator, ConfigDict, Field, computed_field
6from pydantic.alias_generators import to_pascal
8from integrify.azericard import env
9from integrify.azericard.utils import TimeStampOut
10from integrify.schemas import PayloadBaseModel
13class BaseTransferRequestSchema(PayloadBaseModel):
14 SIGNATURE_FIELDS: ClassVar[list[str]]
15 """Signature hesablanılması üçün lazım olan field adları"""
17 model_config = ConfigDict(alias_generator=AliasGenerator(serialization_alias=to_pascal))
19 merchant: str = Field(min_length=1, max_length=16)
20 """Şirkət adı"""
22 srn: str = Field(min_length=1, max_length=12, serialization_alias='SRN')
23 """Tərəfinizdən unikal əməliyyat nömrəsi"""
25 amount: Decimal
26 """Ödəniş məbləği"""
28 cur: str = Field(min_length=3, max_length=3)
29 """Ödəniş valyutasının 3 rəqəmli kodu (AZN - 944)"""
31 @computed_field # type: ignore[prop-decorator]
32 @property
33 def signature(self) -> str:
34 """Yaradılmış data üçün signature generasiyası"""
35 assert self.SIGNATURE_FIELDS
37 with open(env.AZERICARD_KEY_FILE_PATH, encoding='utf-8') as key_file:
38 key = key_file.read().replace('\n', '')
40 source = ''
41 for field in self.SIGNATURE_FIELDS:
42 source += str(getattr(self, field))
44 source += key
46 return md5(source.encode('utf-8'), usedforsecurity=False).hexdigest()
49class TransferStartRequestSchema(BaseTransferRequestSchema):
50 SIGNATURE_FIELDS: ClassVar[list[str]] = [
51 'merchant',
52 'srn',
53 'amount',
54 'cur',
55 'receiver_credentials',
56 'redirect_link',
57 ]
59 receiver_credentials: str = Field(max_length=151)
60 """İstifadəçinin tam adı"""
62 redirect_link: str = Field(max_length=12)
63 """Əməliyyatın sonunda müştərini yönləndirmək istədiyiniz keçid"""
66class TransferConfirmDeclineRequestSchema(BaseTransferRequestSchema):
67 SIGNATURE_FIELDS: ClassVar[list[str]] = ['merchant', 'srn', 'amount', 'cur', 'timestamp']
69 timestamp: TimeStampOut