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)