client_api.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. """
  2. 客户端API统一格式规范
  3. """
  4. from typing import Dict, Any, Optional
  5. from pydantic import BaseModel, Field
  6. from datetime import datetime
  7. class ClientApiRequest(BaseModel):
  8. """客户端API请求基础格式"""
  9. action: str = Field(..., description="API操作类型")
  10. params: Dict[str, Any] = Field(default_factory=dict, description="请求参数")
  11. timestamp: int = Field(..., description="请求时间戳(秒级)")
  12. version: str = Field(default="1.0", description="API版本")
  13. session_id: Optional[str] = Field(None, description="会话ID(登录后提供)")
  14. class ClientApiResponse(BaseModel):
  15. """客户端API响应基础格式"""
  16. code: int = Field(..., description="响应码:200-成功,400-参数错误,401-未授权,500-服务器错误")
  17. msg: str = Field(..., description="响应消息")
  18. data: Optional[Dict[str, Any]] = Field(None, description="响应数据")
  19. timestamp: int = Field(..., description="响应时间戳")
  20. version: str = Field(default="1.0", description="API版本")
  21. class EncryptedRequest(BaseModel):
  22. """加密请求格式"""
  23. encrypted: str = Field(..., description="RSA+AES加密后的数据")
  24. key_version: int = Field(..., description="使用的密钥版本")
  25. class EncryptedResponse(BaseModel):
  26. """加密响应格式"""
  27. encrypted: str = Field(..., description="RSA+AES加密后的数据")
  28. key_version: int = Field(..., description="使用的密钥版本")
  29. new_public_key: Optional[str] = Field(None, description="新的公钥(密钥轮换时提供)")
  30. # 具体业务请求格式
  31. class LoginRequest(BaseModel):
  32. """登录请求"""
  33. username: str = Field(..., description="用户名")
  34. password: str = Field(..., description="密码")
  35. machine_code: str = Field(..., description="机器码")
  36. class RegisterRequest(BaseModel):
  37. """注册请求"""
  38. username: str = Field(..., description="用户名")
  39. password: str = Field(..., description="密码")
  40. email: str = Field(..., description="邮箱")
  41. card_code: str = Field(..., description="卡密")
  42. machine_code: Optional[str] = Field(None, description="机器码(可选,第一次登录时绑定)")
  43. class HeartbeatRequest(BaseModel):
  44. """心跳请求"""
  45. user_id: int = Field(..., description="用户ID")
  46. session_id: str = Field(..., description="会话ID")
  47. machine_code: str = Field(..., description="机器码")
  48. class ActivateCardRequest(BaseModel):
  49. """激活卡密请求"""
  50. user_id: int = Field(..., description="用户ID")
  51. card_code: str = Field(..., description="卡密")
  52. software_code: str = Field(..., description="软件特征码")
  53. class LogoutRequest(BaseModel):
  54. """登出请求"""
  55. user_id: int = Field(..., description="用户ID")
  56. session_id: str = Field(..., description="会话ID")
  57. class UnbindRequest(BaseModel):
  58. """解绑请求"""
  59. username: str = Field(..., description="用户名")
  60. password: str = Field(..., description="密码")
  61. # 响应数据格式
  62. class LoginResponseData(BaseModel):
  63. """登录响应数据"""
  64. user_id: int = Field(..., description="用户ID")
  65. username: str = Field(..., description="用户名")
  66. session_id: str = Field(..., description="会话ID")
  67. expire_time: str = Field(..., description="到期时间")
  68. machine_code: str = Field(..., description="机器码")
  69. class RegisterResponseData(BaseModel):
  70. """注册响应数据"""
  71. user_id: int = Field(..., description="用户ID")
  72. class HeartbeatResponseData(BaseModel):
  73. """心跳响应数据"""
  74. expire_time: str = Field(..., description="到期时间")
  75. new_public_key: Optional[str] = Field(None, description="新公钥")
  76. class ValidateSessionRequest(BaseModel):
  77. """验证会话请求"""
  78. session_id: str = Field(..., description="会话ID")
  79. class ValidateSessionResponseData(BaseModel):
  80. """验证会话响应数据"""
  81. user_id: int = Field(..., description="用户ID")
  82. username: str = Field(..., description="用户名")
  83. expire_time: str = Field(..., description="到期时间")
  84. is_active: bool = Field(..., description="用户是否激活")
  85. machine_code: str = Field(..., description="机器码")
  86. class ActivateCardResponseData(BaseModel):
  87. """激活卡密响应数据"""
  88. expire_time: str = Field(..., description="新到期时间")
  89. days: int = Field(..., description="激活天数")
  90. # API操作类型常量
  91. class ApiActions:
  92. """API操作类型常量"""
  93. LOGIN = "login"
  94. REGISTER = "register"
  95. LOGOUT = "logout"
  96. HEARTBEAT = "heartbeat"
  97. VALIDATE_SESSION = "validate_session"
  98. ACTIVATE_CARD = "activate_card"
  99. UNBIND = "unbind"
  100. GET_ANNOUNCEMENTS = "get_announcements"
  101. GET_RECHARGE_RECORDS = "get_recharge_records"