schema.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. class TenantApiKeyResponse(BaseModel):
  13. """API Key的响应模型"""
  14. id: int
  15. api_key: str
  16. api_secret: str
  17. status: str
  18. expired_at: Optional[datetime]
  19. created_time: datetime
  20. class Config:
  21. from_attributes = True
  22. class TenantApiKeyListResponse(BaseModel):
  23. """API Key列表的响应模型"""
  24. id: int
  25. api_key: str
  26. status: str
  27. expired_at: Optional[datetime]
  28. last_used_at: Optional[datetime]
  29. created_time: datetime
  30. description: Optional[str]
  31. class Config:
  32. from_attributes = True
  33. class TenantApiKeyUpdate(BaseModel):
  34. """更新API Key的请求模型"""
  35. status: str = Field(..., description="状态:0-正常,1-禁用")
  36. class TenantApiLogCreate(BaseModel):
  37. """创建API调用日志的请求模型"""
  38. api_key_id: Optional[int] = Field(None, description="API Key ID")
  39. tenant_id: int = Field(..., description="租户ID")
  40. endpoint: str = Field(..., description="调用的接口")
  41. method: str = Field(..., description="请求方法")
  42. request_ip: str = Field(..., description="请求IP")
  43. request_data: Optional[str] = Field(None, description="请求数据")
  44. response_code: int = Field(..., description="响应码")
  45. response_time: float = Field(..., description="响应时间(毫秒)")
  46. class TenantApiLogResponse(BaseModel):
  47. """API调用日志的响应模型"""
  48. id: int
  49. endpoint: str
  50. method: str
  51. request_ip: str
  52. response_code: int
  53. response_time: float
  54. created_time: datetime
  55. class Config:
  56. from_attributes = True
  57. class ApiKeyQueryParam:
  58. """API Key管理查询参数"""
  59. def __init__(
  60. self,
  61. # tenant_id: int | None = Query(None, description="租户ID,默认使用当前用户的租户ID"),
  62. status: str | None = Query(None, description="状态:0-正常,1-禁用"),
  63. ) -> None:
  64. # self.tenant_id = tenant_id
  65. self.status = status
  66. class ApiKeyPayload(BaseModel, Generic[T]):
  67. api_key: str = Field(description="API Key")
  68. api_secret: str = Field(description="API Secret")
  69. tenant_id: int = Field(description="租户ID")
  70. auth: AuthSchema = Field(description="认证")
  71. data: Optional[T] = Field(default=None, description="业务数据载荷")