Files
ai_web/backend/apps/users/schemas.py
2026-01-28 16:00:56 +08:00

94 lines
1.8 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
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
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