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,8 +36,11 @@ async def create_coupon_activity(
if not coupon:
return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在")
# 检查数量是否大于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")
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.add(db_activity)
@ -76,8 +79,8 @@ async def get_coupon_activity(
coupon_list = []
for coupon in coupons:
coupon_info = CouponInfo.model_validate(coupon).model_dump()
coupon_info.update({'count': activity_data['coupon_config'][coupon.id]})
coupon_info.update({'available_days': 15})
coupon_info.update({'count': activity_data['coupon_config'][coupon.id]['count']})
coupon_info.update({'available_days': activity_data['coupon_config'][coupon.id]['days']})
coupon_list.append(coupon_info)
activity_data.update({'coupons': coupon_list})
@ -194,18 +197,18 @@ async def receive_coupons(
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()
if coupon:
today = datetime.now().date()
#过期时间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.add_coupon(
user_id=current_user.userid,
coupon_id=coupon.id,
expire_time= expire_time,
count=count
count=config['count']
)
# 检查是否领取过优惠券
@ -294,13 +297,16 @@ async def update_coupon_activity(
# 检查优惠券是否存在
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()
if not coupon:
return error_response(code=404, message=f"优惠券ID {coupon_id} 不存在")
# 检查数量是否大于0
if count <= 0:
if config['count'] <= 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)
for key, value in update_data.items():

View File

@ -33,7 +33,7 @@ class CouponActivityCreate(BaseModel):
daily_end_time: time # 每日结束时间 "HH:MM:SS"
total_limit: int = Field(default=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)
qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL
@ -46,7 +46,7 @@ class CouponActivityUpdate(BaseModel):
daily_end_time: Optional[time] = None
total_limit: Optional[int] = Field(default=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
qr_code: Optional[str] = Field(None, max_length=200) # 活动小程序码URL
@ -60,7 +60,7 @@ class CouponActivityInfo(BaseModel):
daily_end_time: time
total_limit: int
user_limit: int
coupon_config: Dict[int, int]
coupon_config: Dict[int, Dict[str, int]]
is_active: bool
qr_code: Optional[str] # 活动小程序码URL
create_time: datetime

Binary file not shown.