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