Initial FastAPI admin auth scaffold
This commit is contained in:
1
app/controller/__init__.py
Normal file
1
app/controller/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Controller layer."""
|
||||
1
app/controller/admin/__init__.py
Normal file
1
app/controller/admin/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Admin controllers."""
|
||||
32
app/controller/admin/login_controller.py
Normal file
32
app/controller/admin/login_controller.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
|
||||
from app.core.dependencies import get_login_service, get_refresh_service
|
||||
from app.lib.jwt.token import JwtToken
|
||||
from app.middleware.admin.refresh_admin_token_middleware import RefreshAdminTokenMiddleware
|
||||
from app.request.admin.login_request import LoginRequest
|
||||
from app.service.admin.login.login_service import LoginService
|
||||
from app.service.admin.login.refresh_service import RefreshService
|
||||
|
||||
router = APIRouter(prefix="/admin/login", tags=["admin-login"])
|
||||
|
||||
|
||||
@router.post("/login")
|
||||
async def login(
|
||||
payload: LoginRequest,
|
||||
request: Request,
|
||||
# FastAPI 的 Depends 类似 Hyperf 里的容器注入。
|
||||
# 请求进入这个接口时,框架会先调用 get_login_service(),
|
||||
# 把组装好的 LoginService 传进 service 参数。
|
||||
service: LoginService = Depends(get_login_service),
|
||||
) -> dict:
|
||||
return await service.handle(payload, request)
|
||||
|
||||
|
||||
@router.post("/refresh")
|
||||
async def refresh(
|
||||
# 这里把 RefreshAdminTokenMiddleware 当成依赖使用。
|
||||
# FastAPI 会先执行 refresh token 校验,通过后才进入 controller。
|
||||
token: JwtToken = Depends(RefreshAdminTokenMiddleware()),
|
||||
service: RefreshService = Depends(get_refresh_service),
|
||||
) -> dict:
|
||||
return await service.handle(token)
|
||||
21
app/controller/admin/profile_controller.py
Normal file
21
app/controller/admin/profile_controller.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from app.core.dependencies import get_current_user_service
|
||||
from app.middleware.admin.admin_token_middleware import AdminTokenMiddleware
|
||||
from app.middleware.admin.permission_middleware import PermissionMiddleware
|
||||
from app.service.admin.profile.current_user_service import CurrentUserService
|
||||
|
||||
router = APIRouter(prefix="/admin/profile", tags=["admin-profile"])
|
||||
|
||||
|
||||
@router.get(
|
||||
"/current",
|
||||
dependencies=[
|
||||
Depends(AdminTokenMiddleware()),
|
||||
Depends(PermissionMiddleware()),
|
||||
],
|
||||
)
|
||||
async def current(
|
||||
service: CurrentUserService = Depends(get_current_user_service),
|
||||
) -> dict:
|
||||
return await service.handle()
|
||||
1
app/controller/api/__init__.py
Normal file
1
app/controller/api/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Frontend API controllers."""
|
||||
10
app/controller/api/health_controller.py
Normal file
10
app/controller/api/health_controller.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from app.lib.response.admin_return import AdminReturn
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["api"])
|
||||
|
||||
|
||||
@router.get("/health")
|
||||
async def health() -> dict:
|
||||
return AdminReturn().success("success", {"status": "ok"})
|
||||
Reference in New Issue
Block a user