from .database import DatabaseController from models.products.product import Product class ProductController(DatabaseController): FIELDS = ['id', 'name', 'image', 'description', 'cost', 'sellerID', 'category', 'postedDate', 'quantityAvailable'] def __init__(self): super().__init__() def create(self, product: Product): params = [ product.name, product.image, product.description, product.cost, product.category, product.sellerID, product.postedDate, product.quantityAvailable ] self._conn.execute( """ INSERT INTO Products (name, image, description, cost, categoryID, sellerID, postedDate, quantityAvailable) VALUES (?, ?, ?, ?, ?, ?, ?, ?)""", params ) self._conn.commit() def read(self, name: str = "") -> list[Product] | None: params = [ "%" + name + "%" ] cursor = self._conn.execute( "SELECT * FROM Products WHERE name like ?", params ) rows = cursor.fetchmany() if rows is None: return None products = list() # Create an object for each row for product in rows: params = dict(zip(self.FIELDS, product)) obj = self.new_instance(Product, params) products.append(obj) return products def read_id(self, id: int) -> Product | None: params = [ id ] cursor = self._conn.execute( "SELECT * FROM Products WHERE id == ?", params ) row = cursor.fetchone() if row is None: return None # Create an object with the row params = dict(zip(self.FIELDS, row)) obj = self.new_instance(Product, params) return obj def read_all(self, category: str = "", search_term: str = "") -> list[Product] | None: params = [ "%" + category + "%", "%" + search_term + "%" ] cursor = self._conn.execute( """SELECT * FROM Products INNER JOIN Categories ON Products.categoryID = Categories.id WHERE Categories.name LIKE ? AND Products.name LIKE ? """, params ) rows = cursor.fetchall() if len(rows) == 0: return None products = list() # Create an object for each row for product in rows: params = dict(zip(self.FIELDS, product)) obj = self.new_instance(Product, params) products.append(obj) return products def read_user(self, user_id: int) -> list[Product] | None: params = [ user_id ] cursor = self._conn.execute( """SELECT * FROM Products WHERE sellerID = ? """, params ) rows = cursor.fetchall() if len(rows) == 0: return None products = list() # Create an object for each row for product in rows: params = dict(zip(self.FIELDS, product)) obj = self.new_instance(Product, params) products.append(obj) return products def update(self, product: Product): params = [ product.name, product.description, product.image, product.cost, product.quantityAvailable, product.category, product.id ] cursor = self._conn.execute( """UPDATE Products SET name = ?, description = ?, image = ?, cost = ?, quantityAvailable = ?, categoryID = ? WHERE id = ? """, params ) self._conn.commit() def delete(self): print("Doing work")