From c263ad704d57455dacbc46de1c7d668c1e3ac1e1 Mon Sep 17 00:00:00 2001 From: Noloquideus Date: Tue, 12 May 2026 18:11:49 +0300 Subject: [PATCH] feat: add passport data --- .../abstractions/repositories/i_user_repository.py | 1 + src/application/commands/create_kyc_command.py | 2 ++ src/application/domain/dto/beorg.py | 1 + src/application/domain/entities/user.py | 4 +--- src/application/services/kyc_personal_data.py | 2 ++ src/infrastructure/database/models/user.py | 10 ++++------ .../database/repositories/user_repository.py | 6 +++--- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/application/abstractions/repositories/i_user_repository.py b/src/application/abstractions/repositories/i_user_repository.py index b9be460..22866d1 100644 --- a/src/application/abstractions/repositories/i_user_repository.py +++ b/src/application/abstractions/repositories/i_user_repository.py @@ -30,5 +30,6 @@ class IUserRepository(ABC): birth_date: date, middle_name: str | None, inn: str | None, + passport_data: str | None, ) -> UserEntity: raise NotImplementedError \ No newline at end of file diff --git a/src/application/commands/create_kyc_command.py b/src/application/commands/create_kyc_command.py index 1895de9..757e404 100644 --- a/src/application/commands/create_kyc_command.py +++ b/src/application/commands/create_kyc_command.py @@ -88,6 +88,7 @@ class CompleteKycCommand: middle_name=personal_data.middle_name, birth_date=birth_date, inn=personal_data.inn, + passport_data=personal_data.passport_data, ) await unit_of_work.kyc_repository.update_session_result( user_id=user_id, @@ -223,6 +224,7 @@ class PollKycSessionsCommand: middle_name=personal_data.middle_name, birth_date=birth_date, inn=personal_data.inn, + passport_data=personal_data.passport_data, ) await unit_of_work.kyc_repository.update_session_result( user_id=user_id, diff --git a/src/application/domain/dto/beorg.py b/src/application/domain/dto/beorg.py index b3ad23b..f05a5e3 100644 --- a/src/application/domain/dto/beorg.py +++ b/src/application/domain/dto/beorg.py @@ -26,6 +26,7 @@ class KycPersonalData(BaseModel): birth_date: str middle_name: str | None = None inn: str | None = None + passport_data: str | None = None class KycSessionResponse(BaseModel): diff --git a/src/application/domain/entities/user.py b/src/application/domain/entities/user.py index f0a7961..5857676 100644 --- a/src/application/domain/entities/user.py +++ b/src/application/domain/entities/user.py @@ -17,9 +17,7 @@ class UserEntity: crypto_wallet: str | None = None phone: str | None = None - bik: str | None = None - account_number: str | None = None - card_number: str | None = None + passport_data: str | None = None inn: str | None = None kyc_verified: bool | None = None diff --git a/src/application/services/kyc_personal_data.py b/src/application/services/kyc_personal_data.py index 9908340..cb88670 100644 --- a/src/application/services/kyc_personal_data.py +++ b/src/application/services/kyc_personal_data.py @@ -12,6 +12,7 @@ FIELD_ALIASES = { 'middle_name': {'middle_name','middlename','patronymic','отчество'}, 'birth_date': {'birth_date','birthdate','date_birth','datebirth','birthday','дата_рождения'}, 'inn': {'inn','tax_id','taxid','инн'}, + 'passport_data': {'passport_data','passport','passport_number','passport_series_number','серия_номер_паспорта','паспорт'}, } @@ -41,6 +42,7 @@ def extract_personal_data(data: Any) -> KycPersonalData: middle_name=values.get('middle_name'), birth_date=str(_parse_date(values['birth_date'])), inn=values.get('inn'), + passport_data=values.get('passport_data'), ) diff --git a/src/infrastructure/database/models/user.py b/src/infrastructure/database/models/user.py index 991868d..2f4444f 100644 --- a/src/infrastructure/database/models/user.py +++ b/src/infrastructure/database/models/user.py @@ -1,9 +1,9 @@ from __future__ import annotations -from sqlalchemy import Boolean, Date, DateTime, String -from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy import Boolean,Date,String,DateTime +from sqlalchemy.orm import Mapped,mapped_column from src.infrastructure.database.models.base import Base -from src.infrastructure.database.models.mixins import AuditTimestampsMixin, SoftDeleteMixin, UlidPrimaryKeyMixin +from src.infrastructure.database.models.mixins import UlidPrimaryKeyMixin,AuditTimestampsMixin,SoftDeleteMixin class UserModel(Base, UlidPrimaryKeyMixin, AuditTimestampsMixin, SoftDeleteMixin): @@ -20,9 +20,7 @@ class UserModel(Base, UlidPrimaryKeyMixin, AuditTimestampsMixin, SoftDeleteMixin crypto_wallet: Mapped[str | None] = mapped_column(String(255), nullable=True) phone: Mapped[str | None] = mapped_column(String(16), nullable=True) - bik: Mapped[str | None] = mapped_column(String(9), nullable=True) - account_number: Mapped[str | None] = mapped_column(String(20), nullable=True) - card_number: Mapped[str | None] = mapped_column(String(19), nullable=True) + passport_data: Mapped[str | None] = mapped_column(String(255), nullable=True) inn: Mapped[str | None] = mapped_column(String(12), nullable=True) kyc_verified: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default='false', default=False) diff --git a/src/infrastructure/database/repositories/user_repository.py b/src/infrastructure/database/repositories/user_repository.py index af406d6..2e0960c 100644 --- a/src/infrastructure/database/repositories/user_repository.py +++ b/src/infrastructure/database/repositories/user_repository.py @@ -43,6 +43,7 @@ class UserRepository(IUserRepository): birth_date: date, middle_name: str | None, inn: str | None, + passport_data: str | None, ) -> UserEntity: user = await self._session.get(UserModel,user_id) if user is None: @@ -53,6 +54,7 @@ class UserRepository(IUserRepository): user.middle_name = middle_name user.birth_date = birth_date user.inn = inn + user.passport_data = passport_data user.kyc_verified = True user.kyc_verified_at = datetime.now(timezone.utc) await self._session.flush() @@ -70,9 +72,7 @@ class UserRepository(IUserRepository): birth_date=user.birth_date, crypto_wallet=user.crypto_wallet, phone=user.phone, - bik=user.bik, - account_number=user.account_number, - card_number=user.card_number, + passport_data=user.passport_data, inn=user.inn, kyc_verified=user.kyc_verified, is_deleted=user.is_deleted,