schema.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from datetime import datetime
  2. from fastapi import Query
  3. from typing import Generic, TypeVar, Optional
  4. from pydantic import BaseModel, Field
  5. from app.api.v1.module_system.auth.schema import AuthSchema
  6. T = TypeVar("T")
  7. class TenantApiKeyCreate(BaseModel):
  8. """创建API Key的请求模型"""
  9. tenant_id: Optional[int] = Field(None, description="租户ID,默认使用当前用户的租户ID")
  10. description: Optional[str] = Field(None, description="备注")
  11. expired_days: Optional[int] = Field(365, description="过期天数,默认365天")
  12. return_url: Optional[str] = Field(default=None, description="同步返回地址")
  13. class TenantApiKeyResponse(BaseModel):
  14. """API Key的响应模型"""
  15. id: int
  16. api_key: str
  17. api_secret: str
  18. status: str
  19. expired_at: Optional[datetime]
  20. created_time: datetime
  21. return_url: Optional[str]
  22. class Config:
  23. from_attributes = True
  24. class TenantApiKeyListResponse(BaseModel):
  25. """API Key列表的响应模型"""
  26. id: int
  27. api_key: str
  28. status: str
  29. expired_at: Optional[datetime]
  30. last_used_at: Optional[datetime]
  31. created_time: datetime
  32. description: Optional[str]
  33. return_url: Optional[str]
  34. class Config:
  35. from_attributes = True
  36. class TenantApiKeyUpdate(BaseModel):
  37. """更新API Key的请求模型"""
  38. status: str = Field(..., description="状态:0-正常,1-禁用")
  39. class TenantApiLogCreate(BaseModel):
  40. """创建API调用日志的请求模型"""
  41. api_key_id: Optional[int] = Field(None, description="API Key ID")
  42. tenant_id: int = Field(..., description="租户ID")
  43. endpoint: str = Field(..., description="调用的接口")
  44. method: str = Field(..., description="请求方法")
  45. request_ip: str = Field(..., description="请求IP")
  46. request_data: Optional[str] = Field(None, description="请求数据")
  47. response_code: int = Field(..., description="响应码")
  48. response_time: float = Field(..., description="响应时间(毫秒)")
  49. class TenantApiLogResponse(BaseModel):
  50. """API调用日志的响应模型"""
  51. id: int
  52. endpoint: str
  53. method: str
  54. request_ip: str
  55. response_code: int
  56. response_time: float
  57. created_time: datetime
  58. class Config:
  59. from_attributes = True
  60. class ApiKeyQueryParam:
  61. """API Key管理查询参数"""
  62. def __init__(
  63. self,
  64. # tenant_id: int | None = Query(None, description="租户ID,默认使用当前用户的租户ID"),
  65. status: str | None = Query(None, description="状态:0-正常,1-禁用"),
  66. ) -> None:
  67. # self.tenant_id = tenant_id
  68. self.status = status
  69. class ApiKeyPayload(BaseModel, Generic[T]):
  70. api_key: str = Field(description="API Key")
  71. api_secret: str = Field(description="API Secret")
  72. tenant_id: int = Field(description="租户ID")
  73. auth: AuthSchema = Field(description="认证")
  74. data: Optional[T] = Field(default=None, description="业务数据载荷")