This commit is contained in:
aaron 2025-03-28 19:13:33 +08:00
parent b82d5c5374
commit cdca663853
3 changed files with 17 additions and 11 deletions

View File

@ -36,9 +36,12 @@ async def create_coupon_activity(
if not coupon: if not coupon:
return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在") return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在")
# 检查数量是否大于0 # 检查数量是否大于0
if activity.coupon_config[coupon_id] <= 0: if activity.coupon_config[coupon_id]['count'] <= 0:
return error_response(code=400, message=f"优惠券ID {coupon_id} 的数量必须大于0") return error_response(code=400, message=f"优惠券ID {coupon_id} 的数量必须大于0")
if activity.coupon_config[coupon_id]['days'] <= 0:
return error_response(code=400, message=f"优惠券ID {coupon_id} 的有效天数必须大于0")
db_activity = CouponActivityDB(**activity.model_dump()) db_activity = CouponActivityDB(**activity.model_dump())
db.add(db_activity) db.add(db_activity)
@ -76,8 +79,8 @@ async def get_coupon_activity(
coupon_list = [] coupon_list = []
for coupon in coupons: for coupon in coupons:
coupon_info = CouponInfo.model_validate(coupon).model_dump() coupon_info = CouponInfo.model_validate(coupon).model_dump()
coupon_info.update({'count': activity_data['coupon_config'][coupon.id]}) coupon_info.update({'count': activity_data['coupon_config'][coupon.id]['count']})
coupon_info.update({'available_days': 15}) coupon_info.update({'available_days': activity_data['coupon_config'][coupon.id]['days']})
coupon_list.append(coupon_info) coupon_list.append(coupon_info)
activity_data.update({'coupons': coupon_list}) activity_data.update({'coupons': coupon_list})
@ -194,18 +197,18 @@ async def receive_coupons(
try: try:
# 发放优惠券 # 发放优惠券
for coupon_id, count in activity.coupon_config.items(): for coupon_id, config in activity.coupon_config.items():
coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first() coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first()
if coupon: if coupon:
today = datetime.now().date() today = datetime.now().date()
#过期时间15 天 #过期时间15 天
expire_time = datetime.combine(today, datetime.max.time()) + timedelta(days=15) expire_time = datetime.combine(today, datetime.max.time()) + timedelta(days=config['days'])
manager = CouponManager(db) manager = CouponManager(db)
manager.add_coupon( manager.add_coupon(
user_id=current_user.userid, user_id=current_user.userid,
coupon_id=coupon.id, coupon_id=coupon.id,
expire_time= expire_time, expire_time= expire_time,
count=count count=config['count']
) )
# 检查是否领取过优惠券 # 检查是否领取过优惠券
@ -294,14 +297,17 @@ async def update_coupon_activity(
# 检查优惠券是否存在 # 检查优惠券是否存在
if activity.coupon_config: if activity.coupon_config:
for coupon_id, count in activity.coupon_config.items(): for coupon_id, config in activity.coupon_config.items():
coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first() coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first()
if not coupon: if not coupon:
return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在") return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在")
# 检查数量是否大于0 # 检查数量是否大于0
if count <= 0: if config['count'] <= 0:
return error_response(code=400, message=f"优惠券ID {coupon_id} 的数量必须大于0") return error_response(code=400, message=f"优惠券ID {coupon_id} 的数量必须大于0")
if config['days'] <= 0:
return error_response(code=400, message=f"优惠券ID {coupon_id} 的有效天数必须大于0")
update_data = activity.model_dump(exclude_unset=True) update_data = activity.model_dump(exclude_unset=True)
for key, value in update_data.items(): for key, value in update_data.items():
setattr(db_activity, key, value) setattr(db_activity, key, value)

View File

@ -33,7 +33,7 @@ class CouponActivityCreate(BaseModel):
daily_end_time: time # 每日结束时间 "HH:MM:SS" daily_end_time: time # 每日结束时间 "HH:MM:SS"
total_limit: int = Field(default=0) total_limit: int = Field(default=0)
user_limit: int = Field(..., gt=0) user_limit: int = Field(..., gt=0)
coupon_config: Dict[int, int] # {coupon_id: count} coupon_config: Dict[int, Dict[str, int]] # {coupon_id: {'count': int, 'days': int}}
is_active: bool = Field(default=True) is_active: bool = Field(default=True)
qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL
@ -46,7 +46,7 @@ class CouponActivityUpdate(BaseModel):
daily_end_time: Optional[time] = None daily_end_time: Optional[time] = None
total_limit: Optional[int] = Field(default=0) total_limit: Optional[int] = Field(default=0)
user_limit: Optional[int] = Field(None, gt=0) user_limit: Optional[int] = Field(None, gt=0)
coupon_config: Optional[Dict[int, int]] = None coupon_config: Optional[Dict[int, Dict[str, int]]] = None
is_active: Optional[bool] = None is_active: Optional[bool] = None
qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL
@ -60,7 +60,7 @@ class CouponActivityInfo(BaseModel):
daily_end_time: time daily_end_time: time
total_limit: int total_limit: int
user_limit: int user_limit: int
coupon_config: Dict[int, int] coupon_config: Dict[int, Dict[str, int]]
is_active: bool is_active: bool
qr_code: Optional[str] # 活动小程序码URL qr_code: Optional[str] # 活动小程序码URL
create_time: datetime create_time: datetime

Binary file not shown.