""" User management API routes """ from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from typing import List import logging from app.core.database import get_db from app.schemas.auth import UserResponse, PasswordChangeRequest from app.services.user_service import UserService from app.core.auth import get_current_user from app.models.users import User logger = logging.getLogger(__name__) router = APIRouter() @router.get("/me", response_model=UserResponse) async def get_current_user_info( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db) ): """Get current user information""" try: return UserResponse( id=str(current_user.id), email=current_user.email, full_name=current_user.full_name, is_active=current_user.is_active, is_verified=current_user.is_verified, tenant_id=str(current_user.tenant_id) if current_user.tenant_id else None, role=current_user.role, phone=current_user.phone, language=current_user.language, timezone=current_user.timezone, created_at=current_user.created_at, last_login=current_user.last_login ) except Exception as e: logger.error(f"Get current user error: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to get user information" ) @router.put("/me", response_model=UserResponse) async def update_current_user( user_update: dict, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db) ): """Update current user information""" try: updated_user = await UserService.update_user(current_user.id, user_update, db) return UserResponse( id=str(updated_user.id), email=updated_user.email, full_name=updated_user.full_name, is_active=updated_user.is_active, is_verified=updated_user.is_verified, tenant_id=str(updated_user.tenant_id) if updated_user.tenant_id else None, role=updated_user.role, phone=updated_user.phone, language=updated_user.language, timezone=updated_user.timezone, created_at=updated_user.created_at, last_login=updated_user.last_login ) except HTTPException: raise except Exception as e: logger.error(f"Update user error: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to update user" ) @router.post("/change-password") async def change_password( password_data: PasswordChangeRequest, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db) ): """Change user password""" try: await UserService.change_password( current_user.id, password_data.current_password, password_data.new_password, db ) return {"message": "Password changed successfully"} except HTTPException: raise except Exception as e: logger.error(f"Password change error: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to change password" ) @router.delete("/me") async def delete_current_user( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db) ): """Delete current user account""" try: await UserService.delete_user(current_user.id, db) return {"message": "User account deleted successfully"} except HTTPException: raise except Exception as e: logger.error(f"Delete user error: {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to delete user account" )