diff --git a/src/application/commands/create_order_command.py b/src/application/commands/create_order_command.py index 8544112..11c05e4 100644 --- a/src/application/commands/create_order_command.py +++ b/src/application/commands/create_order_command.py @@ -7,7 +7,7 @@ from src.application.contracts import ILogger from src.application.contracts import IItPayService from src.application.domain.entities.order import OrderEntity from src.application.domain.enums import OrderStatus -from src.application.domain.exceptions import PriceChangedException +from src.application.domain.exceptions import ApplicationException, ForbiddenException, PriceChangedException from src.application.services import PaymentQuoteService from src.infrastructure.database.decorators import transactional from src.presentation.schemas.order import CreateOrder @@ -31,6 +31,12 @@ class CreateOrderCommand: @transactional async def __call__(self, payment_data: CreateOrder, user_id: str) -> OrderEntity: + user = await self._unit_of_work.user_repository.get(user_id) + if user is None: + raise ApplicationException(status_code=404, message='User not found') + if user.account_type == 'legal_entity': + raise ForbiddenException(message='USDT purchase orders are not available for legal entity accounts') + client_payment_id = str(ULID()) quote = await self._payment_quote_service.get_quote(payment_data.usdt_amount) diff --git a/src/application/domain/entities/user.py b/src/application/domain/entities/user.py index a9576c6..3f9d5e9 100644 --- a/src/application/domain/entities/user.py +++ b/src/application/domain/entities/user.py @@ -29,3 +29,5 @@ class UserEntity: created_at: datetime | None = None updated_at: datetime | None = None kyc_verified_at: datetime | None = None + + account_type: str = 'individual' diff --git a/src/infrastructure/database/models/user.py b/src/infrastructure/database/models/user.py index 65e77c3..4415e69 100644 --- a/src/infrastructure/database/models/user.py +++ b/src/infrastructure/database/models/user.py @@ -29,3 +29,5 @@ class UserModel(Base, UlidPrimaryKeyMixin, AuditTimestampsMixin, SoftDeleteMixin kyc_verified: Mapped[bool] = mapped_column(Boolean, nullable=False, server_default='false', default=False) kyc_verified_at: Mapped[DateTime | None] = mapped_column(DateTime(timezone=True), nullable=True) + account_type: Mapped[str] = mapped_column(String(20), nullable=False, server_default='individual', default='individual') + diff --git a/src/infrastructure/database/repositories/user_repository.py b/src/infrastructure/database/repositories/user_repository.py index 3f4179a..9d47e0d 100644 --- a/src/infrastructure/database/repositories/user_repository.py +++ b/src/infrastructure/database/repositories/user_repository.py @@ -35,6 +35,7 @@ class UserRepository(IUserRepository): created_at=model.created_at, updated_at=model.updated_at, kyc_verified_at=model.kyc_verified_at, + account_type=model.account_type, )