sync: migrate secure-online-shop to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user