"""朋友圈路由""" from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db, get_current_user from app.models.user import User from app.schemas.moment import MomentCreate, MomentCommentCreate from app.services.moment_service import MomentService router = APIRouter() @router.get("/") async def get_feed( cursor: str | None = Query(None), limit: int = Query(20, ge=1, le=50), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取朋友圈 feed""" service = MomentService(db) return await service.get_feed(user.id, cursor, limit) @router.post("/") async def create_moment( req: MomentCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """发布动态""" service = MomentService(db) try: moment = await service.create_moment(user.id, req.content, req.images, req.visibility) detail = await service.get_feed(user.id, limit=1) return detail[0] if detail else {"success": True} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/user/{target_user_id}") async def get_user_moments( target_user_id: str, cursor: str | None = Query(None), limit: int = Query(20, ge=1, le=50), user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取指定用户的动态""" service = MomentService(db) return await service.get_user_moments(target_user_id, user.id, cursor, limit) @router.get("/{moment_id}") async def get_moment( moment_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取单条动态详情""" service = MomentService(db) feed = await service.get_feed(user.id, limit=100) moment = next((m for m in feed if m["id"] == moment_id), None) if not moment: raise HTTPException(status_code=404, detail="动态不存在") return moment @router.delete("/{moment_id}") async def delete_moment( moment_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """删除动态""" service = MomentService(db) try: await service.delete_moment(moment_id, user.id) return {"success": True, "message": "动态已删除"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.post("/{moment_id}/like") async def toggle_like( moment_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """点赞/取消点赞""" service = MomentService(db) try: is_liked = await service.toggle_like(moment_id, user.id) return {"success": True, "is_liked": is_liked} except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/{moment_id}/comments") async def get_comments( moment_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取评论列表""" service = MomentService(db) return await service.get_comments(moment_id) @router.post("/{moment_id}/comments") async def add_comment( moment_id: str, req: MomentCommentCreate, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """添加评论""" service = MomentService(db) try: comment = await service.add_comment(moment_id, user.id, req.content, req.reply_to_id) return comment except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.delete("/{moment_id}/comments/{comment_id}") async def delete_comment( moment_id: str, comment_id: str, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """删除评论""" service = MomentService(db) try: await service.delete_comment(comment_id, user.id) return {"success": True, "message": "评论已删除"} except ValueError as e: raise HTTPException(status_code=400, detail=str(e))