99 lines
3.2 KiB
Python
99 lines
3.2 KiB
Python
from datetime import datetime
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
from api.dependency import get_post_service, get_project_id
|
|
from api.endpoints.auth import get_current_user
|
|
from api.service.post_service import PostService
|
|
from api.models import PostRequest, PostCreateRequest, PostUpdateRequest, AddGenerationsRequest
|
|
from models.Post import Post
|
|
|
|
router = APIRouter(prefix="/api/posts", tags=["posts"])
|
|
|
|
|
|
@router.post("", response_model=Post)
|
|
async def create_post(
|
|
request: PostCreateRequest,
|
|
project_id: str | None = Depends(get_project_id),
|
|
current_user: dict = Depends(get_current_user),
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
pid = project_id or request.project_id
|
|
return await post_service.create_post(
|
|
date=request.date,
|
|
topic=request.topic,
|
|
generation_ids=request.generation_ids,
|
|
project_id=pid,
|
|
user_id=str(current_user["_id"]),
|
|
)
|
|
|
|
|
|
@router.get("", response_model=list[Post])
|
|
async def get_posts(
|
|
project_id: str | None = Depends(get_project_id),
|
|
limit: int = 200,
|
|
offset: int = 0,
|
|
date_from: datetime | None = None,
|
|
date_to: datetime | None = None,
|
|
current_user: dict = Depends(get_current_user),
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
return await post_service.get_posts(project_id, str(current_user["_id"]), limit, offset, date_from, date_to)
|
|
|
|
|
|
@router.get("/{post_id}", response_model=Post)
|
|
async def get_post(
|
|
post_id: str,
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
post = await post_service.get_post(post_id)
|
|
if not post:
|
|
raise HTTPException(status_code=404, detail="Post not found")
|
|
return post
|
|
|
|
|
|
@router.put("/{post_id}", response_model=Post)
|
|
async def update_post(
|
|
post_id: str,
|
|
request: PostUpdateRequest,
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
post = await post_service.update_post(post_id, date=request.date, topic=request.topic)
|
|
if not post:
|
|
raise HTTPException(status_code=404, detail="Post not found")
|
|
return post
|
|
|
|
|
|
@router.delete("/{post_id}")
|
|
async def delete_post(
|
|
post_id: str,
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
success = await post_service.delete_post(post_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Post not found or could not be deleted")
|
|
return {"status": "success"}
|
|
|
|
|
|
@router.post("/{post_id}/generations")
|
|
async def add_generations(
|
|
post_id: str,
|
|
request: AddGenerationsRequest,
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
success = await post_service.add_generations(post_id, request.generation_ids)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Post not found")
|
|
return {"status": "success"}
|
|
|
|
|
|
@router.delete("/{post_id}/generations/{generation_id}")
|
|
async def remove_generation(
|
|
post_id: str,
|
|
generation_id: str,
|
|
post_service: PostService = Depends(get_post_service),
|
|
):
|
|
success = await post_service.remove_generation(post_id, generation_id)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="Post not found or generation not linked")
|
|
return {"status": "success"}
|