"""admin 用户管理 schemas。""" from __future__ import annotations from datetime import datetime from typing import Literal from pydantic import BaseModel, ConfigDict, Field class AdminUserListItem(BaseModel): model_config = ConfigDict(from_attributes=True) id: int phone: str nickname: str | None = None register_channel: str status: str wechat_openid: str | None = None created_at: datetime last_login_at: datetime class AdminUserOverview(BaseModel): """用户 360 概览:基础资料 + 钱包余额 + 各项 count(历史明细走各自分页接口)。""" model_config = ConfigDict(from_attributes=True) user: AdminUserListItem coin_balance: int cash_balance_cents: int total_coin_earned: int comparison_total: int comparison_success: int withdraw_total: int withdraw_success_cents: int feedback_total: int class GrantCoinsRequest(BaseModel): amount: int = Field(..., description="金币变动:正=增加,负=扣减(不可为 0)") reason: str = Field(..., min_length=1, max_length=128, description="操作原因(必填,入审计)") class SetUserStatusRequest(BaseModel): status: Literal["active", "disabled"] = Field( ..., description="active=解封 / disabled=封禁(注销 deleted 不走此接口)" )