from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.models.blogs import Blog from app.schemas.blogs import BlogCreate, BlogResponse from app.api.dependencies import get_db from typing import List from pydantic import BaseModel router = APIRouter() @router.post("/blogs", response_model=BlogResponse) def create_blog(blog_data: BlogCreate, db: Session = Depends(get_db)): new_blog = Blog(**blog_data.dict()) db.add(new_blog) db.commit() db.refresh(new_blog) return new_blog @router.get("/blogs", response_model=List[BlogResponse]) def get_blogs(db: Session = Depends(get_db)): return db.query(Blog).all() @router.patch("/blogs/{blog_id}/like") def like_blog(blog_id: int, db: Session = Depends(get_db)): blog = db.query(Blog).filter(Blog.id == blog_id).first() if not blog: raise HTTPException(status_code=404, detail="Blog not found") blog.likes += 1 db.commit() db.refresh(blog) return {"message": "Blog liked successfully", "likes": blog.likes} class CommentRequest(BaseModel): username: str comment: str @router.patch("/blogs/{blog_id}/comment") def comment_on_blog(blog_id: int, comment_data: CommentRequest, db: Session = Depends(get_db)): blog = db.query(Blog).filter(Blog.id == blog_id).first() if not blog: raise HTTPException(status_code=404, detail="Blog not found") blog.comments[comment_data.username] = comment_data.comment db.commit() db.refresh(blog) return {"message": "Comment added successfully", "comments": blog.comments}