aibilly_backend_code/src/routes/auth_controller_routes.py
laxmanhalaki b793ac859a
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / build (push) Has been cancelled
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-production (push) Has been cancelled
modification done to up the project
2026-03-12 20:52:08 +05:30

85 lines
2.7 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from src.config.database import get_db
from src.services.user_service import UserCRUD
from src.validation.auth_schemas import (
LoginRequest,
RegisterRequest,
RefreshTokenRequest,
ForgotPasswordRequest,
ResetPasswordRequest,
ChangePasswordRequest,
Token
)
from src.validation.user_schemas import UserResponse
router = APIRouter(prefix="/auth", tags=["Auth"])
def get_user_service(db: Session = Depends(get_db)) -> UserCRUD:
return UserCRUD(db)
@router.post("/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
async def register(
user_in: RegisterRequest,
service: UserCRUD = Depends(get_user_service)
):
# Map RegisterRequest to UserCreate for the service
from src.validation.user_schemas import UserCreate
user_create = UserCreate(
username=user_in.username,
email=user_in.email,
password_hash=user_in.password, # UserService hashes it
first_name=user_in.first_name,
last_name=user_in.last_name,
role=user_in.role,
specialty=user_in.specialty,
npi=user_in.npi,
is_active=True
)
return await service.create(user_create)
@router.post("/login")
async def login(
login_data: LoginRequest,
service: UserCRUD = Depends(get_user_service)
):
return await service.login(login_data.username, login_data.password)
@router.post("/logout")
async def logout():
return {"message": "Successfully logged out"}
@router.post("/refresh")
async def refresh_token(
refresh_data: RefreshTokenRequest,
service: UserCRUD = Depends(get_user_service)
):
return await service.refreshToken(refresh_data.refresh_token)
@router.post("/forgot-password")
async def forgot_password(
data: ForgotPasswordRequest,
service: UserCRUD = Depends(get_user_service)
):
return await service.forgotPassword(data.email)
@router.post("/reset-password")
async def reset_password(
data: ResetPasswordRequest,
service: UserCRUD = Depends(get_user_service)
):
return await service.resetPassword(data.token, data.new_password)
@router.post("/change-password")
async def change_password(
data: ChangePasswordRequest,
service: UserCRUD = Depends(get_user_service)
):
return await service.changePassword(data.current_password, data.new_password)
@router.get("/me", response_model=UserResponse)
async def get_me(service: UserCRUD = Depends(get_user_service)):
# This usually requires a security dependency to get current user
# For alignment purposes, we'll keep it simple or hook into service
return await service.get_current_user()