107 lines
3.8 KiB
Python
107 lines
3.8 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Query, Body
|
|
from api.dependency import get_idea_service, get_project_id, get_generation_service
|
|
from api.endpoints.auth import get_current_user
|
|
from api.service.idea_service import IdeaService
|
|
from api.service.generation_service import GenerationService
|
|
from models.Idea import Idea
|
|
from api.models import GenerationResponse, GenerationsResponse
|
|
from api.models import IdeaRequest, PostRequest # Adjusting for general model usage
|
|
from api.models.IdeaRequest import IdeaCreateRequest, IdeaUpdateRequest, IdeaResponse
|
|
|
|
router = APIRouter(prefix="/api/ideas", tags=["ideas"])
|
|
|
|
@router.post("", response_model=Idea)
|
|
async def create_idea(
|
|
request: IdeaCreateRequest,
|
|
project_id: str | None = Depends(get_project_id),
|
|
current_user: dict = Depends(get_current_user),
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
pid = project_id or request.project_id
|
|
|
|
return await idea_service.create_idea(
|
|
name=request.name,
|
|
description=request.description,
|
|
project_id=pid,
|
|
user_id=str(current_user["_id"]),
|
|
inspiration_id=request.inspiration_id
|
|
)
|
|
|
|
@router.get("", response_model=list[IdeaResponse])
|
|
async def get_ideas(
|
|
project_id: str | None = Depends(get_project_id),
|
|
limit: int = 20,
|
|
offset: int = 0,
|
|
current_user: dict = Depends(get_current_user),
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
return await idea_service.get_ideas(project_id, str(current_user["_id"]), limit, offset)
|
|
|
|
@router.get("/{idea_id}", response_model=Idea)
|
|
async def get_idea(
|
|
idea_id: str,
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
idea = await idea_service.get_idea(idea_id)
|
|
if not idea:
|
|
raise HTTPException(status_code=404, detail="Idea not found")
|
|
return idea
|
|
|
|
@router.put("/{idea_id}", response_model=Idea)
|
|
async def update_idea(
|
|
idea_id: str,
|
|
request: IdeaUpdateRequest,
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
idea = await idea_service.update_idea(
|
|
idea_id=idea_id,
|
|
name=request.name,
|
|
description=request.description,
|
|
inspiration_id=request.inspiration_id
|
|
)
|
|
if not idea:
|
|
raise HTTPException(status_code=404, detail="Idea not found")
|
|
return idea
|
|
|
|
@router.delete("/{idea_id}")
|
|
async def delete_idea(
|
|
idea_id: str,
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
success = await idea_service.delete_idea(idea_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Idea not found or could not be deleted")
|
|
return {"status": "success"}
|
|
|
|
@router.get("/{idea_id}/generations", response_model=GenerationsResponse)
|
|
async def get_idea_generations(
|
|
idea_id: str,
|
|
limit: int = 50,
|
|
offset: int = 0,
|
|
generation_service: GenerationService = Depends(get_generation_service),
|
|
current_user: dict = Depends(get_current_user)
|
|
):
|
|
return await generation_service.get_generations(idea_id=idea_id, limit=limit, offset=offset, current_user_id=str(current_user["_id"]))
|
|
|
|
@router.post("/{idea_id}/generations/{generation_id}")
|
|
async def add_generation_to_idea(
|
|
idea_id: str,
|
|
generation_id: str,
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
success = await idea_service.add_generation_to_idea(idea_id, generation_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Idea or Generation not found")
|
|
return {"status": "success"}
|
|
|
|
@router.delete("/{idea_id}/generations/{generation_id}")
|
|
async def remove_generation_from_idea(
|
|
idea_id: str,
|
|
generation_id: str,
|
|
idea_service: IdeaService = Depends(get_idea_service)
|
|
):
|
|
success = await idea_service.remove_generation_from_idea(idea_id, generation_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Idea or Generation not found")
|
|
return {"status": "success"}
|