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())