141 lines
5.1 KiB
Python
141 lines
5.1 KiB
Python
"""
|
|
User Environment API endpoints
|
|
Handles user-specific environment setup and management.
|
|
"""
|
|
|
|
from fastapi import APIRouter, HTTPException, Depends
|
|
from typing import Dict, Any, Optional
|
|
from loguru import logger
|
|
|
|
from services.progressive_setup_service import ProgressiveSetupService
|
|
from services.database import get_db_session
|
|
from middleware.auth_middleware import get_current_user
|
|
|
|
router = APIRouter(prefix="/api/user-environment", tags=["user-environment"])
|
|
|
|
@router.post("/initialize")
|
|
async def initialize_user_environment(current_user: Dict[str, Any] = Depends(get_current_user)):
|
|
"""Initialize user environment based on onboarding progress."""
|
|
try:
|
|
user_id = str(current_user.get('id'))
|
|
db_session = get_db_session()
|
|
|
|
if not db_session:
|
|
raise HTTPException(status_code=500, detail="Database connection failed")
|
|
|
|
setup_service = ProgressiveSetupService(db_session)
|
|
result = setup_service.initialize_user_environment(user_id)
|
|
|
|
return {
|
|
"message": "User environment initialized successfully",
|
|
"data": result
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error initializing user environment: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Error initializing user environment: {str(e)}")
|
|
finally:
|
|
if db_session:
|
|
db_session.close()
|
|
|
|
@router.get("/status")
|
|
async def get_user_environment_status(current_user: Dict[str, Any] = Depends(get_current_user)):
|
|
"""Get current user environment status."""
|
|
try:
|
|
user_id = str(current_user.get('id'))
|
|
db_session = get_db_session()
|
|
|
|
if not db_session:
|
|
raise HTTPException(status_code=500, detail="Database connection failed")
|
|
|
|
setup_service = ProgressiveSetupService(db_session)
|
|
status = setup_service.get_user_environment_status(user_id)
|
|
|
|
return status
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error getting user environment status: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Error getting user environment status: {str(e)}")
|
|
finally:
|
|
if db_session:
|
|
db_session.close()
|
|
|
|
@router.post("/upgrade")
|
|
async def upgrade_user_environment(
|
|
new_step: int,
|
|
current_user: Dict[str, Any] = Depends(get_current_user)
|
|
):
|
|
"""Upgrade user environment when progressing in onboarding."""
|
|
try:
|
|
user_id = str(current_user.get('id'))
|
|
db_session = get_db_session()
|
|
|
|
if not db_session:
|
|
raise HTTPException(status_code=500, detail="Database connection failed")
|
|
|
|
setup_service = ProgressiveSetupService(db_session)
|
|
result = setup_service.upgrade_user_environment(user_id, new_step)
|
|
|
|
return {
|
|
"message": "User environment upgraded successfully",
|
|
"data": result
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error upgrading user environment: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Error upgrading user environment: {str(e)}")
|
|
finally:
|
|
if db_session:
|
|
db_session.close()
|
|
|
|
@router.delete("/cleanup")
|
|
async def cleanup_user_environment(current_user: Dict[str, Any] = Depends(get_current_user)):
|
|
"""Clean up user environment (for account deletion)."""
|
|
try:
|
|
user_id = str(current_user.get('id'))
|
|
db_session = get_db_session()
|
|
|
|
if not db_session:
|
|
raise HTTPException(status_code=500, detail="Database connection failed")
|
|
|
|
setup_service = ProgressiveSetupService(db_session)
|
|
success = setup_service.cleanup_user_environment(user_id)
|
|
|
|
if success:
|
|
return {"message": "User environment cleaned up successfully"}
|
|
else:
|
|
raise HTTPException(status_code=500, detail="Failed to cleanup user environment")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error cleaning up user environment: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Error cleaning up user environment: {str(e)}")
|
|
finally:
|
|
if db_session:
|
|
db_session.close()
|
|
|
|
@router.get("/workspace")
|
|
async def get_user_workspace_info(current_user: Dict[str, Any] = Depends(get_current_user)):
|
|
"""Get user workspace information."""
|
|
try:
|
|
user_id = str(current_user.get('id'))
|
|
db_session = get_db_session()
|
|
|
|
if not db_session:
|
|
raise HTTPException(status_code=500, detail="Database connection failed")
|
|
|
|
setup_service = ProgressiveSetupService(db_session)
|
|
workspace_manager = setup_service.workspace_manager
|
|
workspace = workspace_manager.get_user_workspace(user_id)
|
|
|
|
if not workspace:
|
|
raise HTTPException(status_code=404, detail="User workspace not found")
|
|
|
|
return workspace
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error getting user workspace: {str(e)}")
|
|
raise HTTPException(status_code=500, detail=f"Error getting user workspace: {str(e)}")
|
|
finally:
|
|
if db_session:
|
|
db_session.close()
|