52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
from fastapi import APIRouter, Depends, Header
|
|
from pydantic import BaseModel
|
|
from sqlalchemy.orm import Session
|
|
|
|
from backend.app.api.deps import get_auth_service, get_current_user
|
|
from backend.app.db import get_db_session
|
|
from backend.app.schemas.auth import LoginRequest
|
|
from backend.app.schemas.common import success_payload
|
|
from backend.app.services.auth_service import AuthService
|
|
from backend.app.services.wechat_notification_service import wechat_notification_service
|
|
|
|
router = APIRouter(prefix="/api/auth", tags=["auth"])
|
|
|
|
|
|
class BindOpenIdRequest(BaseModel):
|
|
open_id: str
|
|
|
|
|
|
@router.post("/login")
|
|
def login(
|
|
payload: LoginRequest,
|
|
auth_service: AuthService = Depends(get_auth_service),
|
|
session: Session = Depends(get_db_session),
|
|
) -> dict:
|
|
return success_payload(auth_service.login(payload.username, payload.password, payload.role_type, session))
|
|
|
|
|
|
@router.get("/me")
|
|
def me(
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> dict:
|
|
return success_payload(current_user)
|
|
|
|
|
|
@router.post("/logout")
|
|
def logout(
|
|
authorization: str | None = Header(default=None),
|
|
auth_service: AuthService = Depends(get_auth_service),
|
|
) -> dict:
|
|
token = (authorization or "").removeprefix("Bearer").strip()
|
|
return success_payload(auth_service.logout(token))
|
|
|
|
|
|
@router.post("/bind-openid")
|
|
def bind_openid(
|
|
payload: BindOpenIdRequest,
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> dict:
|
|
wechat_notification_service.bind_open_id(session, current_user["user_id"], payload.open_id)
|
|
return success_payload({"success": True})
|