from fastapi import APIRouter, Cookie, Depends, Request, Response from sqlalchemy.orm import Session from app.common.db.session import get_db from app.common.responses.api_response import success_response from app.common.security.deps import get_current_user from app.models.entities import User from app.modules.auth.schema import LoginRequest, RegisterRequest from app.modules.auth.service import AuthService router = APIRouter(prefix="/api/v1/auth", tags=["auth"]) @router.post("/register") def register( payload: RegisterRequest, request: Request, response: Response, db: Session = Depends(get_db), ): data = AuthService(db).register(payload, request, response) return {"code": 0, "message": "ok", "data": data} @router.post("/login") def login( payload: LoginRequest, request: Request, response: Response, db: Session = Depends(get_db), ): data = AuthService(db).login(payload, request, response) return {"code": 0, "message": "ok", "data": data} @router.post("/refresh") def refresh( response: Response, db: Session = Depends(get_db), user_refresh_token: str | None = Cookie(default=None), ): data = AuthService(db).refresh(user_refresh_token, response) return {"code": 0, "message": "ok", "data": data} @router.post("/logout") def logout(response: Response, db: Session = Depends(get_db)): AuthService(db).logout(response) return {"code": 0, "message": "ok", "data": {"success": True}} @router.get("/me") def me(current_user: User = Depends(get_current_user)): return success_response(AuthService.serialize_user(current_user))