feat: deploy infrastructure + disk/drive, calendar, presentation, workspaces, onboarding, demo user

This commit is contained in:
2026-05-19 16:26:26 +03:00
parent 688d043dad
commit 3529c39b22
304 changed files with 18826 additions and 1176 deletions
+63
View File
@@ -0,0 +1,63 @@
"""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}