schema.py 2.9 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, ConfigDict
  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. model_config = ConfigDict(from_attributes=True)
  23. class TenantApiKeyListResponse(BaseModel):
  24. """API Key列表的响应模型"""
  25. id: int
  26. api_key: str
  27. status: str
  28. expired_at: Optional[datetime]
  29. last_used_at: Optional[datetime]
  30. created_time: datetime
  31. description: Optional[str]
  32. return_url: Optional[str]
  33. model_config = ConfigDict(from_attributes=True)
  34. class TenantApiKeyUpdate(BaseModel):
  35. """更新API Key的请求模型"""
  36. status: str = Field(..., description="状态:0-正常,1-禁用")
  37. class TenantApiLogCreate(BaseModel):
  38. """创建API调用日志的请求模型"""
  39. api_key_id: Optional[int] = Field(None, description="API Key ID")
  40. tenant_id: int = Field(..., description="租户ID")
  41. endpoint: str = Field(..., description="调用的接口")
  42. method: str = Field(..., description="请求方法")
  43. request_ip: str = Field(..., description="请求IP")
  44. request_data: Optional[str] = Field(None, description="请求数据")
  45. response_code: int = Field(..., description="响应码")
  46. response_time: float = Field(..., description="响应时间(毫秒)")
  47. class TenantApiLogResponse(BaseModel):
  48. """API调用日志的响应模型"""
  49. id: int
  50. endpoint: str
  51. method: str
  52. request_ip: str
  53. response_code: int
  54. response_time: float
  55. created_time: datetime
  56. model_config = ConfigDict(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="业务数据载荷")