This commit is contained in:
2026-06-16 13:12:43 +08:00
parent 496759ccdf
commit 1b15561e0a
6 changed files with 156 additions and 7 deletions
+37 -1
View File
@@ -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",
)