增加 邀请人和 注册送券 功能。

This commit is contained in:
aaron 2025-01-07 09:16:31 +08:00
parent 6d0793c2b1
commit 70f5dd0c52
2 changed files with 53 additions and 4 deletions

View File

@ -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
])
])
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)

View File

@ -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()