"""Authentication endpoints — register, login, refresh, password reset.""" from __future__ import annotations from fastapi import APIRouter, Depends from app.middleware.auth import get_current_user from app.schemas.auth import ( ChangePasswordRequest, LoginRequest, MessageResponse, PasswordResetConfirm, PasswordResetRequest, RefreshTokenRequest, RegisterRequest, RegisterResponse, ) from app.services.auth_service import AuthService router = APIRouter(prefix="/auth", tags=["Authentication"]) @router.post("/register", status_code=201, response_model=RegisterResponse) def register(body: RegisterRequest): svc = AuthService() return svc.register( email=body.email, password=body.password, name=body.name, role=body.role, ) @router.post("/login") def login(body: LoginRequest): svc = AuthService() return svc.login(email=body.email, password=body.password) @router.post("/refresh") def refresh(body: RefreshTokenRequest): svc = AuthService() return svc.refresh(body.refresh_token) @router.post("/password-reset/request", response_model=MessageResponse) def request_password_reset(body: PasswordResetRequest): svc = AuthService() msg = svc.request_password_reset(body.email) return {"message": msg} @router.post("/password-reset/confirm", response_model=MessageResponse) def confirm_password_reset( body: PasswordResetConfirm, user: dict = Depends(get_current_user), ): svc = AuthService() return svc.reset_password(user["id"], body.new_password) @router.post("/change-password", response_model=MessageResponse) def change_password( body: ChangePasswordRequest, user: dict = Depends(get_current_user), ): svc = AuthService() return svc.change_password( user["id"], user["email"], body.current_password, body.new_password ) @router.post("/resend-verification", response_model=MessageResponse) def resend_verification(user: dict = Depends(get_current_user)): svc = AuthService() return svc.resend_verification(user["email"]) @router.get("/me") def get_me(user: dict = Depends(get_current_user)): return user