| | from fastapi import APIRouter, Depends, HTTPException, status |
| | from sqlalchemy.orm import Session |
| | import logging |
| |
|
| | from database.database import get_db |
| | from schemas import UserCreate, UserLogin, UserLogout, UserResponse, TokenResponse |
| | from services import get_user, login_user_service, register_user_service |
| | from utils.dependencies import get_current_user |
| | from models.user import User |
| | from logging_config import get_logger |
| |
|
| | |
| | logger = get_logger(__name__) |
| |
|
| | router = APIRouter(prefix="/users", tags=["users"]) |
| |
|
| | |
| | @router.post("/registration/signup", response_model=TokenResponse) |
| | def register_user_endpoint(user: UserCreate, db: Session = Depends(get_db)): |
| | """Register a new user""" |
| | logger.info(f"Registering new user with email: {user.email}") |
| |
|
| | |
| | token_response = register_user_service(db, user) |
| | return token_response |
| |
|
| | @router.post("/registration/login", response_model=TokenResponse) |
| | def login_user_endpoint(credentials: UserLogin, db: Session = Depends(get_db)): |
| | """Login a user""" |
| | logger.info(f"Login attempt for user: {credentials.email}") |
| |
|
| | |
| | token_response = login_user_service(db, credentials) |
| | return token_response |
| |
|
| | @router.post("/registration/logout") |
| | def logout_user(credentials: UserLogout, db: Session = Depends(get_db)): |
| | """Logout a user""" |
| | logger.info("User logout request") |
| | |
| | |
| | return {} |
| |
|
| | |
| | @router.get("/me", response_model=UserResponse) |
| | def get_current_user_data(current_user: User = Depends(get_current_user)): |
| | """Get current user's details based on their token""" |
| | logger.info(f"Retrieving current user details for ID: {current_user.id}") |
| |
|
| | |
| | logger.info(f"Successfully retrieved current user details for ID: {current_user.id}") |
| | return current_user |
| |
|
| | @router.get("/{id}", response_model=UserResponse) |
| | def get_user_details(id: str, current_user: User = Depends(get_current_user), db: Session = Depends(get_db)): |
| | """Get user details by ID""" |
| | logger.info(f"Retrieving user details for ID: {id} by user: {current_user.id}") |
| |
|
| | |
| | if current_user.id != id and current_user.role != "hr": |
| | logger.warning(f"Unauthorized attempt to access user details by user: {current_user.id} for user: {id}") |
| | raise HTTPException( |
| | status_code=status.HTTP_403_FORBIDDEN, |
| | detail="You can only access your own user details" |
| | ) |
| |
|
| | user = get_user(db, id) |
| | if not user: |
| | logger.warning(f"User not found for ID: {id}") |
| | raise HTTPException( |
| | status_code=status.HTTP_404_NOT_FOUND, |
| | detail="User not found" |
| | ) |
| |
|
| | logger.info(f"Successfully retrieved user details for ID: {user.id}") |
| | return user |