table_game/backend/app/services/admin_coupon_service.py
2025-03-10 08:35:19 +08:00

92 lines
3.2 KiB
Python

from fastapi import HTTPException
from ..db import get_connection
from ..utils.jwt_handler import verify_token
def validate_admin(token):
try:
payload = verify_token(token)
connection = get_connection()
cursor = connection.cursor(dictionary=True)
cursor.execute("SELECT user_type FROM users WHERE username = %s", (payload['sub'],))
user = cursor.fetchone()
if not user or user['user_type'] != 'admin':
raise HTTPException(status_code=403, detail="权限不足")
return True
except Exception as e:
raise HTTPException(status_code=401, detail=str(e))
def create_coupon_service(token: str, **coupon_data):
validate_admin(token)
connection = get_connection()
try:
cursor = connection.cursor()
valid_from = coupon_data['valid_from'].replace('T', ' ')
valid_to = coupon_data['valid_to'].replace('T', ' ')
cursor.execute("""
INSERT INTO coupons (
coupon_code, discount_type, discount_amount,
min_order_amount, valid_from, valid_to, quantity
) VALUES (%s, %s, %s, %s, %s, %s, %s)
""", (
coupon_data['coupon_code'],
coupon_data['discount_type'],
coupon_data['discount_amount'],
coupon_data.get('min_order_amount'),
valid_from,
valid_to,
coupon_data['quantity']
))
connection.commit()
return {"message": "优惠券创建成功"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
def get_coupons_service(token: str):
validate_admin(token)
connection = get_connection()
cursor = connection.cursor(dictionary=True)
cursor.execute("SELECT * FROM coupons")
return cursor.fetchall()
def issue_coupon_service(token: str, coupon_id: int, user_id: int):
validate_admin(token)
connection = get_connection()
try:
cursor = connection.cursor(dictionary=True)
# 检查优惠券是否存在
cursor.execute("""
INSERT INTO user_coupons (user_id, coupon_id)
VALUES (%s, %s)
""", (user_id, coupon_id))
# 检查库存
cursor.execute("SELECT quantity FROM coupons WHERE coupon_id = %s", (coupon_id,))
coupon = cursor.fetchone()
if not coupon or coupon['quantity'] <= 0:
raise HTTPException(status_code=400, detail="优惠券库存不足")
# 减少库存
cursor.execute("""
UPDATE coupons SET quantity = quantity - 1
WHERE coupon_id = %s
""", (coupon_id,))
connection.commit()
return {"message": "优惠券发放成功"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
def delete_coupon_service(token: str, coupon_id: int):
validate_admin(token)
connection = get_connection()
try:
cursor = connection.cursor()
cursor.execute("DELETE FROM coupons WHERE coupon_id = %s", (coupon_id,))
connection.commit()
return {"message": "优惠券删除成功"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))