"""Calendar API routes for VoIdea.""" from typing import Annotated from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.core.dependencies import get_current_user, get_db from app.models.user import User from app.services.calendar_service import CALENDAR_PROVIDERS, CalendarService from app.services.idea_service import IdeaService router = APIRouter() @router.post("/ideas/{idea_id}/calendar") async def add_idea_to_calendar( idea_id: str, user: Annotated[User, Depends(get_current_user)], db: AsyncSession = Depends(get_db), ): """Create a calendar event from an idea.""" idea_svc = IdeaService(db) idea = await idea_svc.get_by_id(idea_id) if not idea or str(idea.user_id) != str(user.id): raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Idea not found") cal_svc = CalendarService(db) success = await cal_svc.create_idea_event(user, idea.title, idea.content) if not success: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Calendar not configured. Connect a calendar in Settings > Integrations.", ) return {"success": True, "message": "Event created in calendar"} @router.get("/calendar/providers") async def list_calendar_providers(): return {"providers": list(CALENDAR_PROVIDERS)} @router.get("/calendar/status") async def calendar_status( user: Annotated[User, Depends(get_current_user)], db: AsyncSession = Depends(get_db), ): cal_svc = CalendarService(db) creds = await cal_svc.get_calendar_credentials(user) return { "connected": creds is not None, "provider": user.calendar_provider if hasattr(user, "calendar_provider") else None, } @router.post("/calendar/disconnect") async def disconnect_calendar( user: Annotated[User, Depends(get_current_user)], db: AsyncSession = Depends(get_db), ): cal_svc = CalendarService(db) await cal_svc.disconnect_calendar(user) return {"success": True}