1+ import json
12import os
23from datetime import UTC , datetime
34
1617 RefreshTokenRequest ,
1718 TokenRefreshOut ,
1819)
20+ from schemas .response import (
21+ CurrentUserResponse ,
22+ HealthInfo ,
23+ HealthResponse ,
24+ TokenResponse ,
25+ VersionInfo ,
26+ VersionResponse ,
27+ )
1928from settings import settings
2029from utils .jwt import create_token_pair , verify_token
2130
@@ -29,7 +38,6 @@ def apply_rate_limit(rate="5/minute"):
2938 """根据环境应用限流装饰器"""
3039
3140 def decorator (func ):
32- import os
3341
3442 if os .getenv ("TESTING" , "false" ).lower () == "true" :
3543 return func # 测试环境不应用限流
@@ -38,7 +46,7 @@ def decorator(func):
3846 return decorator
3947
4048
41- @router .post ("/access_token" , summary = "获取token" )
49+ @router .post ("/access_token" , summary = "获取token" , response_model = TokenResponse )
4250@apply_rate_limit ()
4351async def login_access_token (request : Request , credentials : CredentialsSchema ):
4452 user : User = await user_repository .authenticate (credentials )
@@ -55,10 +63,11 @@ async def login_access_token(request: Request, credentials: CredentialsSchema):
5563 username = user .username ,
5664 expires_in = settings .JWT_ACCESS_TOKEN_EXPIRE_MINUTES * 60 ,
5765 )
58- return Success (data = data .model_dump ())
66+ result = Success (data = data .model_dump ())
67+ return json .loads (result .body )
5968
6069
61- @router .post ("/refresh_token" , summary = "刷新token" )
70+ @router .post ("/refresh_token" , summary = "刷新token" , response_model = TokenResponse )
6271@apply_rate_limit ("10/minute" )
6372async def refresh_access_token (request : Request , refresh_request : RefreshTokenRequest ):
6473 """
@@ -84,43 +93,45 @@ async def refresh_access_token(request: Request, refresh_request: RefreshTokenRe
8493 expires_in = settings .JWT_ACCESS_TOKEN_EXPIRE_MINUTES * 60 ,
8594 )
8695
87- return Success (data = data .model_dump ())
96+ result = Success (data = data .model_dump ())
97+ return json .loads (result .body )
8898
8999 except Exception :
90- return Fail (code = 401 , msg = "令牌无效或已过期" )
100+ result = Fail (code = 401 , msg = "令牌无效或已过期" )
101+ return json .loads (result .body )
91102
92103
93- @router .get ("/userinfo" , summary = "查看用户信息" )
104+ @router .get ("/userinfo" , summary = "查看用户信息" , response_model = CurrentUserResponse )
94105async def get_userinfo (current_user : User = DependAuth ):
95106 user_id = CTX_USER_ID .get ()
96107 user_obj = await user_repository .get (id = user_id )
97108 user_dict = await user_obj .to_dict ()
98- return Success (data = user_dict )
109+ result = Success (data = user_dict )
110+ return json .loads (result .body )
99111
100112
101- @router .get ("/health" , summary = "健康检查" )
113+ @router .get ("/health" , summary = "健康检查" , response_model = HealthResponse )
102114async def health_check ():
103115 """系统健康检查"""
104- return {
105- " status" : "healthy" ,
106- " timestamp" : datetime .now (UTC ). isoformat ( ),
107- "version" : settings .VERSION ,
108- "environment" : settings . APP_ENV ,
109- "service" : "FastAPI Backend Template" ,
110- }
116+ health_data = HealthInfo (
117+ status = "healthy" ,
118+ timestamp = datetime .now (UTC ),
119+ environment = settings .APP_ENV ,
120+ database = "connected"
121+ )
122+ return HealthResponse ( code = 200 , msg = "OK" , data = health_data )
111123
112124
113- @router .get ("/version" , summary = "版本信息" )
125+ @router .get ("/version" , summary = "版本信息" , response_model = VersionResponse )
114126async def get_version ():
115127 """获取API版本信息"""
116- return {
117- "version" : settings .VERSION ,
118- "app_title" : settings .APP_TITLE ,
119- "project_name" : settings .PROJECT_NAME ,
120- "build" : os .getenv ("BUILD_NUMBER" , "dev" ),
121- "commit" : os .getenv ("GIT_COMMIT" , "unknown" ),
122- "python_version" : os .getenv ("PYTHON_VERSION" , "3.11+" ),
123- }
128+ version_data = VersionInfo (
129+ app_name = settings .APP_TITLE ,
130+ version = settings .VERSION ,
131+ api_version = "v1" ,
132+ environment = settings .APP_ENV
133+ )
134+ return VersionResponse (code = 200 , msg = "OK" , data = version_data )
124135
125136
126137# @router.get("/usermenu", summary="查看用户菜单", dependencies=[DependAuth])
0 commit comments