| from fastapi import APIRouter, HTTPException, Query |
| from typing import List |
| from ...models.schemas import CommentRead |
| from ...core.database import db_manager |
| import logging |
|
|
| router = APIRouter(prefix="/comments", tags=["comments"]) |
| logger = logging.getLogger("api.comments") |
|
|
| @router.post("") |
| async def post_comment(user_id: str, content_id: str, text: str): |
| if not text.strip(): |
| raise HTTPException(status_code=400, detail="Comment text cannot be empty") |
| |
| async with db_manager.get_connection() as db: |
| await db.execute( |
| "INSERT INTO comments (user_id, content_id, text) VALUES (?, ?, ?)", |
| (user_id, content_id, text) |
| ) |
| |
| await db.execute("UPDATE users SET points = points + 10 WHERE id = ?", (user_id,)) |
| await db.commit() |
| return {"status": "success"} |
|
|
| @router.get("/{content_id}", response_model=List[CommentRead]) |
| async def get_comments(content_id: str): |
| async with db_manager.get_connection() as db: |
| cursor = await db.execute(""" |
| SELECT c.*, COALESCE(u.is_fan, 0) as is_fan, COALESCE(u.points, 0) as points |
| FROM comments c |
| LEFT JOIN users u ON c.user_id = u.id |
| WHERE c.content_id = ? |
| ORDER BY c.created_at DESC |
| """, (content_id,)) |
| rows = await cursor.fetchall() |
| return [dict(row) for row in rows] |
|
|