from __future__ import annotations import logging from datetime import datetime, timezone from sqlalchemy.orm import Session from app.core.exceptions import BadRequestError from app.models.order import Order, OrderStatusEnum from app.models.user import User from app.services.order_service import OrderService audit_logger = logging.getLogger("app.audit") class PaymentService: def __init__(self, db: Session) -> None: self.db = db self.order_service = OrderService(db) def confirm_payment(self, order_id: int, user: User) -> Order: order = self.order_service.get_order_for_user(order_id, user) if order.status != OrderStatusEnum.pending: raise BadRequestError("This order is not eligible for payment") try: order.status = OrderStatusEnum.paid order.paid_at = datetime.now(timezone.utc) self.db.commit() except Exception: self.db.rollback() raise audit_logger.info( "payment_confirmed order_id=%s user_id=%s total_amount=%s", order.id, user.id, str(order.total_amount), ) return self.order_service.get_order_for_user(order.id, user)