diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index 4155a13..bf24a78 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -1,6 +1,7 @@ from fastapi import APIRouter, HTTPException, Depends, Response, Body from sqlalchemy.orm import Session -from app.models.user import UserLogin, UserInfo, VerifyCodeRequest, UserDB, UserUpdate, UserRole, UserPasswordLogin, ReferralUserInfo +from app.models.user import UserLogin, UserInfo, VerifyCodeRequest, UserDB, UserUpdate, UserRole, UserPasswordLogin, ReferralUserInfo, generate_user_code +from app.models.coupon import CouponDB, UserCouponDB from app.api.deps import get_current_user, get_admin_user from app.models.database import get_db import random @@ -85,12 +86,22 @@ async def login( # 查找或创建用户 user = db.query(UserDB).filter(UserDB.phone == phone).first() if not user: + # 生成用户编码 + user_code = generate_user_code() + user = UserDB( username=f"user_{phone[-4:]}", phone=phone, + user_code=user_code, + referral_code=user_login.referral_code, roles=[UserRole.USER] ) db.add(user) + db.flush() # 获取用户ID + + # 发放优惠券 + issue_register_coupons(db, user.userid) + db.commit() db.refresh(user) @@ -132,11 +143,21 @@ async def mock_login( # 查找或创建用户 user = db.query(UserDB).filter(UserDB.phone == request.phone).first() if not user: + # 生成用户编码 + user_code = generate_user_code() + user = UserDB( username=f"user_{request.phone[-4:]}", - phone=request.phone + phone=request.phone, + user_code=user_code, + roles=[UserRole.USER] ) db.add(user) + db.flush() + + # 发放优惠券 + issue_register_coupons(db, user.userid) + db.commit() db.refresh(user) @@ -278,4 +299,26 @@ async def get_referral_users( phone=mask_phone(user.phone), create_time=user.create_time ) for user in referral_users - ]) \ No newline at end of file + ]) + +def issue_register_coupons(db: Session, user_id: int): + """发放注册优惠券 + Args: + db: 数据库会话 + user_id: 用户ID + """ + register_coupons = settings.REGISTER_COUPONS + + for config in register_coupons: + coupon = db.query(CouponDB).filter( + CouponDB.id == config["coupon_id"] + ).first() + + if coupon: + for _ in range(config["count"]): + user_coupon = UserCouponDB( + user_id=user_id, + coupon_id=coupon.id, + status="unused" + ) + db.add(user_coupon) \ No newline at end of file diff --git a/app/core/config.py b/app/core/config.py index ec7e69a..17261a3 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -12,7 +12,7 @@ class Settings(BaseSettings): ORDER_EXTRA_PACKAGE_THRESHOLD: int = 5 # 额外收费阈值 # JWT 配置 - SECRET_KEY: str = "your-secret-key-here" + SECRET_KEY: str = "s10GmiRMmplfYWXYZLSsE3X36Ld4gVZxHgAcdqFGC20v3llv7UdOeWLBEEP3e40p" ACCESS_TOKEN_EXPIRE_MINUTES: Optional[int] = None # None 表示永不过期 REDIS_HOST: str = "101.36.120.145" @@ -44,7 +44,13 @@ class Settings(BaseSettings): COS_BUCKET: str = "dman-1311994147" COS_BASE_URL: str = "dman-1311994147.cos.ap-chengdu.myqcloud.com" + # 注册赠券配置 + REGISTER_COUPONS: list = [ + {"coupon_id": 1, "count": 3}, + ] + class Config: case_sensitive = True + env_file = ".env" settings = Settings() \ No newline at end of file