e8bd12cc1f
废弃 force_onboarding(运营按用户强制引导,客户端不认——被 onboarding_completed 压过), 改用 onboarding_completion(设备+账号 维度),admin 直接增删该表记录控制重走。 - 删 force_onboarding: User 列 + auth/admin schema + admin 接口 + mutations + repo clear + /onboarding/complete 调用 + 3 测试;新增 alembic 迁移删列 - admin 设备管理: 列设备(按 device 聚合) / 重置单设备 / 全部重置(清 onboarding_completion) - 新增 GET /api/v1/user/onboarding/status: 客户端已登录启动查"本设备是否要重走引导" Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
984 B
Python
32 lines
984 B
Python
"""用户资料(昵称/头像)相关请求 schemas。响应复用 [auth.UserOut]。"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
|
|
class ProfileUpdateRequest(BaseModel):
|
|
nickname: str = Field(..., min_length=1, max_length=16, description="昵称,1-16 字")
|
|
|
|
@field_validator("nickname")
|
|
@classmethod
|
|
def _strip_non_blank(cls, v: str) -> str:
|
|
v = v.strip()
|
|
if not v:
|
|
raise ValueError("昵称不能为空")
|
|
return v
|
|
|
|
|
|
class OnboardingCompleteRequest(BaseModel):
|
|
device_id: str = Field(
|
|
..., min_length=1, max_length=64,
|
|
description="硬件级设备标识(Android ANDROID_ID),与登录时一致,用于按 设备+账号 标记引导完成",
|
|
)
|
|
|
|
|
|
class OnboardingStatusResponse(BaseModel):
|
|
completed: bool = Field(..., description="该 设备+账号 是否已走过新手引导(false → 客户端应重走)")
|
|
|
|
|
|
class OkResponse(BaseModel):
|
|
ok: bool = True
|