96 lines
2.0 KiB
Python
96 lines
2.0 KiB
Python
"""
|
||
Pydantic schemas for user API.
|
||
"""
|
||
from typing import Optional
|
||
from datetime import datetime
|
||
from ninja import Schema
|
||
|
||
|
||
class UserOut(Schema):
|
||
"""Public user output schema."""
|
||
id: int
|
||
open_id: str
|
||
user_id: Optional[str] = None # 可分享的用户ID,用于好友/商品搜索
|
||
name: Optional[str] = None
|
||
email: Optional[str] = None
|
||
avatar: Optional[str] = None
|
||
role: str
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
|
||
class UserPrivateOut(UserOut):
|
||
"""Private user output schema (includes sensitive fields)."""
|
||
stripe_customer_id: Optional[str] = None
|
||
stripe_account_id: Optional[str] = None
|
||
|
||
|
||
class UserBrief(Schema):
|
||
"""Minimal user info for social features."""
|
||
id: int
|
||
open_id: str
|
||
user_id: Optional[str] = None # 可分享的用户ID
|
||
name: Optional[str] = None
|
||
email: Optional[str] = None
|
||
avatar: Optional[str] = None
|
||
|
||
|
||
class UserUpdate(Schema):
|
||
"""User update schema."""
|
||
name: Optional[str] = None
|
||
email: Optional[str] = None
|
||
avatar: Optional[str] = None
|
||
|
||
|
||
class TokenOut(Schema):
|
||
"""JWT token output schema."""
|
||
access_token: str
|
||
refresh_token: str
|
||
token_type: str = "Bearer"
|
||
|
||
|
||
class OAuthCallbackIn(Schema):
|
||
"""OAuth callback input schema."""
|
||
code: str
|
||
state: Optional[str] = None
|
||
|
||
|
||
class RegisterIn(Schema):
|
||
"""Register input schema."""
|
||
open_id: str
|
||
password: str
|
||
name: Optional[str] = None
|
||
email: Optional[str] = None
|
||
|
||
|
||
class LoginIn(Schema):
|
||
"""Login input schema."""
|
||
open_id: str
|
||
password: str
|
||
|
||
|
||
class MessageOut(Schema):
|
||
"""Simple message response."""
|
||
message: str
|
||
success: bool = True
|
||
|
||
|
||
class FriendRequestIn(Schema):
|
||
receiver_id: int
|
||
|
||
|
||
class FriendRequestOut(Schema):
|
||
id: int
|
||
requester: UserBrief
|
||
receiver: UserBrief
|
||
status: str
|
||
accepted_at: Optional[datetime] = None
|
||
created_at: datetime
|
||
updated_at: datetime
|
||
|
||
|
||
class FriendOut(Schema):
|
||
request_id: int
|
||
user: UserBrief
|
||
since: Optional[datetime] = None
|