Spaces:
Sleeping
Sleeping
from api.router.user import user_dependency | |
from fastapi.responses import JSONResponse | |
from fastapi import APIRouter, Depends | |
from db.models import Category | |
from db.database import get_db | |
from db.query.query_category import CategoryQuery | |
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)] | |
async def get_all_categories_router(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 | |
category_query = CategoryQuery(user) | |
categories = category_query.get_all_categories(db) | |
print(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) | |
) | |
async def get_category_by_id_router( | |
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_query = CategoryQuery(user) | |
category = category_query.get_category_by_id(db, category_id) | |
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) | |
) | |
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 | |
category_query = CategoryQuery(user) | |
existing_category = category_query.get_existing_category(db, category.category_name) | |
print(existing_category) | |
if existing_category: # Check if the category already exists | |
return JSONResponse(status_code=400, content={"error": "Category already exists"}) | |
# Add category | |
category_query.add_category(db, category.category_name) | |
print("category added") | |
return { | |
"message": "Category created successfully", | |
} | |
except IntegrityError: | |
db.rollback() | |
return JSONResponse( | |
status_code=400, | |
content="Database integrity error: possibly a duplicate entry.", | |
) | |
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) | |
) | |
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) | |
) |