deliveryman-api/app/models/coupon_activity.py
2025-02-20 22:53:49 +08:00

62 lines
2.5 KiB
Python

from sqlalchemy import Column, Integer, String, DateTime, Boolean, JSON, Time
from sqlalchemy.sql import func
from pydantic import BaseModel, Field
from typing import Optional, List, Dict
from datetime import datetime, time
from .database import Base
class CouponActivityDB(Base):
__tablename__ = "coupon_activities"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100), nullable=False) # 活动名称
description = Column(String(500), nullable=True) # 活动描述
start_time = Column(DateTime(timezone=True), nullable=False) # 活动开始时间
end_time = Column(DateTime(timezone=True), nullable=False) # 活动结束时间
daily_start_time = Column(Time, nullable=False) # 每日开始时间
daily_end_time = Column(Time, nullable=False) # 每日结束时间
daily_limit = Column(Integer, nullable=False, default=1) # 每日可领取次数
is_active = Column(Boolean, nullable=False, default=True) # 是否激活
coupon_config = Column(JSON, nullable=False) # 可领取的优惠券配置 {coupon_id: count}
create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=func.now())
# Pydantic 模型
class CouponActivityCreate(BaseModel):
name: str = Field(..., max_length=100)
description: Optional[str] = Field(None, max_length=500)
start_time: datetime
end_time: datetime
daily_start_time: time # 每日开始时间 "HH:MM:SS"
daily_end_time: time # 每日结束时间 "HH:MM:SS"
daily_limit: int = Field(..., gt=0)
coupon_config: Dict[int, int] # {coupon_id: count}
is_active: bool = Field(default=True)
class CouponActivityUpdate(BaseModel):
name: Optional[str] = Field(None, max_length=100)
description: Optional[str] = Field(None, max_length=500)
start_time: Optional[datetime] = None
end_time: Optional[datetime] = None
daily_start_time: Optional[time] = None
daily_end_time: Optional[time] = None
daily_limit: Optional[int] = Field(None, gt=0)
coupon_config: Optional[Dict[int, int]] = None
is_active: Optional[bool] = None
class CouponActivityInfo(BaseModel):
id: int
name: str
description: Optional[str]
start_time: datetime
end_time: datetime
daily_start_time: time
daily_end_time: time
daily_limit: int
coupon_config: Dict[int, int]
is_active: bool
create_time: datetime
update_time: Optional[datetime]
class Config:
from_attributes = True