dsmultimedika's picture
Improve the code bot development
d57efd6
raw
history blame
5.17 kB
from api.router.user import user_dependency
from fastapi.responses import JSONResponse
from fastapi import APIRouter, HTTPException, Depends, Query
from db.models import Category
from db.database import get_db
from service.dto import CategoryCreate
from script.vector_db import IndexManager
from sqlalchemy.orm import Session
from sqlalchemy.exc import SQLAlchemyError, IntegrityError
from typing import Annotated
router = APIRouter(tags=["Category"])
index_manager = IndexManager()
db_dependency = Annotated[Session, Depends(get_db)]
@router.get("/category")
async def get_all_categories(user: user_dependency, db: db_dependency):
if user is None or user.get("role_id") != 1:
return JSONResponse(status_code=401, content="Authentication Failed")
try:
# Logic to retrieve all categories
categories = db.query(Category).all()
if not categories:
return JSONResponse(status_code=404, content="No categories found")
return {
"message": "Categories retrieved successfully",
"categories": [
{"id": cat.id, "category": cat.category} for cat in categories
],
}
except SQLAlchemyError as e:
return JSONResponse(
status_code=500, content="Database error occurred: " + str(e)
)
@router.get("/category/{category_id}")
async def get_categories_by_ids(
user: user_dependency,
db: db_dependency,
category_id: int,
):
if user is None or user.get("role_id") != 1:
return JSONResponse(status_code=401, content="Authentication Failed")
try:
# Fetch categories based on the list of provided category_ids
category = db.query(Category).filter(Category.id == category_id).first()
if category is None:
return JSONResponse(status_code=404, content="No categories found for the given IDs")
return {
"message": "Categories retrieved successfully",
"category": {"id": category.id, "category": category.category},
}
except SQLAlchemyError as e:
return JSONResponse(
status_code=500, content="Database error occurred: " + str(e)
)
@router.post("/category")
async def create_category(user: user_dependency, db: db_dependency, category: CategoryCreate):
if user is None or user.get("role_id") != 1:
return JSONResponse(status_code=401, content="Authentication Failed")
try:
# Check if category already exists
existing_category = (
db.query(Category).filter(Category.category == category.category_name).first()
)
if existing_category:
return JSONResponse(status_code=400, content="Category already exists")
# Logic to create a new category
new_category = Category(category=category) # Assuming Category is your model
db.add(new_category)
db.commit()
db.refresh(new_category)
return {
"message": "Category created successfully",
"category_id": new_category.id,
}
except IntegrityError:
db.rollback()
return JSONResponse(
status_code=400,
content="Database integrity error: possibly a duplicate entry.",
)
except SQLAlchemyError as e:
db.rollback()
return JSONResponse(
status_code=500, content="Database error occurred: " + str(e)
)
@router.put("/category/{category_id}")
async def update_category(
user: user_dependency, db: db_dependency, category_id: int, category: CategoryCreate
):
if user is None or user.get("role_id") != 1:
return JSONResponse(status_code=401, content="Authentication Failed")
try:
# Logic to update an existing category
existing_category = (
db.query(Category).filter(Category.id == category_id).first()
)
if not existing_category:
return JSONResponse(status_code=404, content="Category not found")
existing_category.category = category.category_name
db.commit()
return {"message": "Category updated successfully"}
except SQLAlchemyError as e:
db.rollback()
return JSONResponse(
status_code=500, content="Database error occurred: " + str(e)
)
@router.delete("/category/{category_id}")
async def delete_category(user: user_dependency, db: db_dependency, category_id: int):
if user is None or user.get("role_id") != 1:
return JSONResponse(status_code=401, content="Authentication Failed")
try:
# Logic to delete an existing category
existing_category = (
db.query(Category).filter(Category.id == category_id).first()
)
if not existing_category:
return JSONResponse(status_code=404, content="Category not found")
db.delete(existing_category)
db.commit()
return {"message": "Category deleted successfully"}
except SQLAlchemyError as e:
db.rollback()
return JSONResponse(
status_code=500, content="Database error occurred: " + str(e)
)