48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from sqlalchemy.orm import Session
|
|
from app.models.coupon import CouponDB,UserCouponDB
|
|
from app.models.user import UserDB
|
|
from datetime import datetime
|
|
|
|
class CouponManager:
|
|
def __init__(self, db: Session):
|
|
self.db = db
|
|
|
|
# 发放优惠券
|
|
def add_coupon(
|
|
self,
|
|
user_id: int,
|
|
coupon_id: int,
|
|
count: int,
|
|
expire_time: datetime
|
|
):
|
|
try:
|
|
# 检查优惠券是否存在
|
|
coupon = self.db.query(CouponDB).filter(CouponDB.id == coupon_id).first()
|
|
if not coupon:
|
|
raise ValueError("优惠券不存在")
|
|
|
|
# 检查用户是否存在
|
|
user = self.db.query(UserDB).filter(UserDB.userid == user_id).first()
|
|
if not user:
|
|
raise ValueError("用户不存在")
|
|
|
|
for _ in range(count):
|
|
# 发放优惠券
|
|
user_coupon = UserCouponDB(
|
|
user_id=user_id,
|
|
coupon_id=coupon_id,
|
|
coupon_name=coupon.name,
|
|
coupon_amount=coupon.amount,
|
|
coupon_type=coupon.coupon_type,
|
|
expire_time=expire_time,
|
|
)
|
|
self.db.add(user_coupon)
|
|
|
|
self.db.commit()
|
|
except Exception as e:
|
|
self.db.rollback()
|
|
raise e
|
|
|
|
|
|
|