from sqlalchemy.orm import Session from app.common.errors.app_error import NotFoundAppError from app.modules.payments.repository import PaymentsRepository from app.modules.wallets.service import WalletService class PaymentsService: def __init__(self, db: Session) -> None: self.db = db self.repository = PaymentsRepository(db) self.wallet_service = WalletService(db) def repair_order(self, order_id: int) -> dict: order = self.repository.get_order_by_id(order_id) if not order: raise NotFoundAppError("order not found", code=30001) return self.wallet_service.handle_mock_payment(order.order_no) def list_orders(self) -> list[dict]: rows = self.repository.list_orders().limit(200).all() return [self.serialize_order(item) for item in rows] def get_order_detail(self, order_id: int) -> dict: order = self.repository.get_order_by_id(order_id) if not order: raise NotFoundAppError("order not found", code=30001) return self.serialize_order(order) @staticmethod def serialize_order(order) -> dict: return { "id": order.id, "orderNo": order.order_no, "userId": order.user_id, "payAmount": f"{order.pay_amount:.2f}", "arrivalPoints": order.arrival_points, "status": order.status, "paymentChannelCode": order.payment_channel_code, "paidAt": order.paid_at.isoformat() if order.paid_at else None, "createdAt": order.created_at.isoformat(), }