diff --git a/app/api/endpoints/coupon_activity.py b/app/api/endpoints/coupon_activity.py index 7efcf91..2ed2262 100644 --- a/app/api/endpoints/coupon_activity.py +++ b/app/api/endpoints/coupon_activity.py @@ -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(): diff --git a/app/models/coupon_activity.py b/app/models/coupon_activity.py index 64cfbb3..4e5e93d 100644 --- a/app/models/coupon_activity.py +++ b/app/models/coupon_activity.py @@ -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 diff --git a/jobs.sqlite b/jobs.sqlite index ef5c313..0c648b9 100644 Binary files a/jobs.sqlite and b/jobs.sqlite differ