JourneyPoint / journeypoint / app / api / routes / blogs.py
blogs.py
Raw
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}