Files
ai-contract-platform/backend/app/api/auth.py
T
2026-04-24 13:44:17 +08:00

63 lines
1.9 KiB
Python

from typing import Optional
from fastapi import APIRouter, Depends, Form, Header
from sqlalchemy.orm import Session
from app.core.response import success_response
from app.db import get_db_session
from app.schemas.auth import LoginRequest, RegisterRequest
from app.services.auth_service import AuthService
router = APIRouter(prefix="/auth", tags=["auth"])
ROUTE_PERMISSION_SCOPE = "auth"
ROUTE_PERMISSION_ACTIONS = {
"register": "auth:register",
"login": "auth:login",
"me": "auth:me:get",
"update_me": "auth:me:update",
"logout": "auth:logout",
"seed_admin": "auth:seed_admin",
}
def get_auth_service(db: Session = Depends(get_db_session)) -> AuthService:
return AuthService(db)
@router.post("/register")
def register(payload: RegisterRequest, auth_service: AuthService = Depends(get_auth_service)):
return success_response(auth_service.register(payload.username, payload.password, payload.display_name))
@router.post("/login")
def login(payload: LoginRequest, auth_service: AuthService = Depends(get_auth_service)):
return success_response(auth_service.login(payload.account, payload.password))
@router.get("/me")
def get_current_user(
authorization: Optional[str] = Header(default=None),
auth_service: AuthService = Depends(get_auth_service),
):
return success_response(auth_service.get_current_user(authorization))
@router.put("/me")
def update_current_user(
display_name: str = Form(...),
password: Optional[str] = Form(default=None),
authorization: Optional[str] = Header(default=None),
auth_service: AuthService = Depends(get_auth_service),
):
return success_response(auth_service.update_current_user(authorization, display_name, password))
@router.post("/logout")
def logout():
return success_response(True)
@router.post("/seed-admin")
def seed_admin(auth_service: AuthService = Depends(get_auth_service)):
return success_response(auth_service.seed_default_admin())