1
This commit is contained in:
@@ -78,6 +78,38 @@ async def _assign_default_frontend_menus(db: AsyncSession, user: User) -> None:
|
||||
user.allowed_menus = [m.path for m in default_menus if m.path]
|
||||
|
||||
|
||||
async def _get_register_credits(db: AsyncSession) -> int:
|
||||
result = await db.execute(
|
||||
select(SystemConfig.value).where(SystemConfig.key == "user_register_credits").limit(1)
|
||||
)
|
||||
value = result.scalar_one_or_none()
|
||||
return int(value) if value else 100
|
||||
|
||||
|
||||
async def _handle_daily_login_credits(db: AsyncSession, user: User) -> None:
|
||||
enabled_result = await db.execute(
|
||||
select(SystemConfig.value).where(SystemConfig.key == "user_login_credits_enabled").limit(1)
|
||||
)
|
||||
enabled = enabled_result.scalar_one_or_none() == "true"
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
credits_result = await db.execute(
|
||||
select(SystemConfig.value).where(SystemConfig.key == "user_login_credits").limit(1)
|
||||
)
|
||||
credits = int(credits_result.scalar_one_or_none() or "0")
|
||||
if credits <= 0:
|
||||
return
|
||||
|
||||
today = datetime.now().date()
|
||||
if user.last_login_at:
|
||||
last_login_date = user.last_login_at.date()
|
||||
if last_login_date >= today:
|
||||
return
|
||||
|
||||
user.credits += credits
|
||||
|
||||
|
||||
@router.post(
|
||||
"/login",
|
||||
summary="客户端密码登录",
|
||||
@@ -100,6 +132,7 @@ async def login(req: LoginRequest, db: AsyncSession = Depends(get_db)):
|
||||
detail="该账号不允许在此登录",
|
||||
)
|
||||
|
||||
await _handle_daily_login_credits(db, user)
|
||||
user.last_login_at = datetime.now()
|
||||
await db.flush()
|
||||
return _token_response(user, req.remember_me)
|
||||
@@ -130,6 +163,7 @@ async def sms_login(req: SmsLoginRequest, db: AsyncSession = Depends(get_db)):
|
||||
detail="该账号不允许在此登录",
|
||||
)
|
||||
|
||||
await _handle_daily_login_credits(db, user)
|
||||
user.last_login_at = datetime.now()
|
||||
await db.flush()
|
||||
return _token_response(user, req.remember_me)
|
||||
@@ -155,13 +189,15 @@ async def register(req: RegisterRequest, db: AsyncSession = Depends(get_db)):
|
||||
detail="该手机号已注册",
|
||||
)
|
||||
|
||||
register_credits = await _get_register_credits(db)
|
||||
|
||||
user = User(
|
||||
id=generate_id(),
|
||||
username=req.phone,
|
||||
phone=req.phone,
|
||||
hashed_password=hash_password(req.password),
|
||||
password_set_at=datetime.now(),
|
||||
credits=100,
|
||||
credits=register_credits,
|
||||
is_admin=False,
|
||||
user_type="frontend",
|
||||
)
|
||||
|
||||
@@ -151,6 +151,10 @@ async def _seed_data():
|
||||
("payment_alipay_private_key", "", "支付宝私钥"),
|
||||
# Text credit config
|
||||
("text_credits_per_1000_tokens", "1", "每1000 token消耗文本积分"),
|
||||
# User credits config
|
||||
("user_register_credits", "100", "用户注册赠送积分"),
|
||||
("user_login_credits", "0", "用户每日登录赠送积分"),
|
||||
("user_login_credits_enabled", "false", "启用每日登录赠送积分"),
|
||||
]
|
||||
for key, value, desc in configs:
|
||||
existing = await db.execute(
|
||||
|
||||
Reference in New Issue
Block a user