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}