from db.query.base_query import BaseQuery from db.models import Metadata, Category, Session_Publisher from fastapi.responses import JSONResponse class BookQuery(BaseQuery): def __init__(self, user): super().__init__(user) def add_book(self, db, title, author, category_id, year, publisher): new_book = Metadata( title=title, author=author, category_id=category_id, year=year, publisher=publisher, ) self.add(db, new_book) def get_book(self, db): model = Metadata metadata_columns = [ Metadata.id, Metadata.title, Metadata.author, Category.category, # Assuming this is the correct field for category name Category.id, Metadata.year, Metadata.publisher, Metadata.thumbnail, ] join_models = [Category] join_conditions = [Metadata.category_id == Category.id] result = self.get_with_joins( db, model=model, columns=metadata_columns, join_models=join_models, join_conditions=join_conditions, multiple=True, ) return result def update_metadata_entry( self, db, metadata_id, title, author, category_id, year, publisher ): model = Metadata # Define filter conditions based on the metadata_id filter_conditions = [Metadata.id == metadata_id] # Prepare the update data update_data = { "title": title, "author": author, "category_id": category_id, "year": year, "publisher": publisher, } # Call the update_entries method to update the metadata update_response = self.update_entries( db, model=model, update_data=update_data, filter_conditions=filter_conditions, ) if isinstance(update_response, JSONResponse): return update_response # Return error response if any # Fetch the updated metadata to retrieve the new category updated_metadata = db.query(Metadata).filter(Metadata.id == metadata_id).first() if not updated_metadata: return JSONResponse(status_code=404, content="Metadata not found") return updated_metadata def update_book(self, db, book_id, title, author): update_data = {"title": title, "author": author} self.update( db, model=Metadata, id=book_id, update_data=update_data, ) def delete_book(self, db, book_id): self.delete(db, Metadata, book_id) def get_books(self, db): return self.get(db, model=Metadata, multiple=True) def get_metadata_books(self, db, metadata_id): return self.get(db, Metadata, id=metadata_id) def get_title_from_session(self, db, metadata_id, session_id): model = Session_Publisher columns = [Metadata.title] join_models = [Session_Publisher] join_conditions = [Metadata.id == metadata_id] filter_conditions = [ Session_Publisher.user_id == self.user_id, Session_Publisher.id == session_id, ] titles = self.get_with_joins( db, model=model, columns=columns, join_models=join_models, join_conditions=join_conditions, filter_conditions=filter_conditions, multiple=True, ) return titles