Spaces:
Runtime error
Runtime error
| """ | |
| API routes for user settings. | |
| """ | |
| from fastapi import APIRouter, HTTPException, Depends | |
| from sqlalchemy.orm import Session | |
| from pydantic import BaseModel | |
| from typing import Optional | |
| from app.database.connection import get_db | |
| from app.database.models import User | |
| from app.middleware.auth import get_current_user | |
| from app.services.settings_service import settings_service | |
| router = APIRouter(prefix="/api/settings", tags=["settings"]) | |
| class ProfileUpdateRequest(BaseModel): | |
| """Request schema for profile updates.""" | |
| bio: Optional[str] = None | |
| phone: Optional[str] = None | |
| company: Optional[str] = None | |
| class AppearanceUpdateRequest(BaseModel): | |
| """Request schema for appearance updates.""" | |
| theme: str # light, dark, system | |
| class NotificationUpdateRequest(BaseModel): | |
| """Request schema for notification updates.""" | |
| email_notifications: Optional[bool] = None | |
| update_notifications: Optional[bool] = None | |
| async def get_settings( | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user) | |
| ): | |
| """ | |
| Get current user settings. | |
| Returns: | |
| User settings including profile, appearance, and notifications | |
| """ | |
| try: | |
| settings = settings_service.get_or_create_settings(db, current_user.id) | |
| return { | |
| "profile": { | |
| "name": current_user.name, | |
| "email": current_user.email, | |
| "bio": settings.bio, | |
| "phone": settings.phone, | |
| "company": settings.company | |
| }, | |
| "appearance": { | |
| "theme": settings.theme | |
| }, | |
| "notifications": { | |
| "email_notifications": bool(settings.email_notifications), | |
| "update_notifications": bool(settings.update_notifications) | |
| } | |
| } | |
| except Exception as e: | |
| print(f"Error getting settings: {e}") | |
| raise HTTPException(status_code=500, detail="Error retrieving settings") | |
| async def update_profile( | |
| request: ProfileUpdateRequest, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user) | |
| ): | |
| """ | |
| Update user profile settings. | |
| Args: | |
| request: Profile update data | |
| Returns: | |
| Updated profile settings | |
| """ | |
| try: | |
| settings = settings_service.update_profile( | |
| db, | |
| current_user.id, | |
| bio=request.bio, | |
| phone=request.phone, | |
| company=request.company | |
| ) | |
| return { | |
| "success": True, | |
| "profile": { | |
| "bio": settings.bio, | |
| "phone": settings.phone, | |
| "company": settings.company | |
| } | |
| } | |
| except Exception as e: | |
| print(f"Error updating profile: {e}") | |
| raise HTTPException(status_code=500, detail="Error updating profile") | |
| async def update_appearance( | |
| request: AppearanceUpdateRequest, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user) | |
| ): | |
| """ | |
| Update appearance settings. | |
| Args: | |
| request: Appearance update data | |
| Returns: | |
| Updated appearance settings | |
| """ | |
| try: | |
| settings = settings_service.update_appearance( | |
| db, | |
| current_user.id, | |
| theme=request.theme | |
| ) | |
| return { | |
| "success": True, | |
| "appearance": { | |
| "theme": settings.theme | |
| } | |
| } | |
| except ValueError as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| except Exception as e: | |
| print(f"Error updating appearance: {e}") | |
| raise HTTPException(status_code=500, detail="Error updating appearance") | |
| async def update_notifications( | |
| request: NotificationUpdateRequest, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user) | |
| ): | |
| """ | |
| Update notification settings. | |
| Args: | |
| request: Notification update data | |
| Returns: | |
| Updated notification settings | |
| """ | |
| try: | |
| settings = settings_service.update_notifications( | |
| db, | |
| current_user.id, | |
| email_notifications=request.email_notifications, | |
| update_notifications=request.update_notifications | |
| ) | |
| return { | |
| "success": True, | |
| "notifications": { | |
| "email_notifications": bool(settings.email_notifications), | |
| "update_notifications": bool(settings.update_notifications) | |
| } | |
| } | |
| except Exception as e: | |
| print(f"Error updating notifications: {e}") | |
| raise HTTPException(status_code=500, detail="Error updating notifications") | |