import os from sqlalchemy.orm import Session def add_item(db: Session, cls, item): db_item = cls(**item.dict()) db.add(db_item) db.commit() db.refresh(db_item) return db_item def view_item(db: Session, cls, item_id: int): return db.query(cls).filter(cls.id == item_id).first() def edit_item(db: Session, cls, item_id: int, item): db_item = db.query(cls).filter(cls.id == item_id).first() for key, value in item.dict().items(): setattr(db_item, key, value) db.commit() db.refresh(db_item) return db_item def remove_item(db: Session, cls, item_id: int): db_item = db.query(cls).filter(cls.id == item_id).first() db.delete(db_item) db.commit() return db_item def view_items(db: Session, cls, skip: int = 0, limit: int = 100): return db.query(cls).offset(skip).limit(limit).all() def add_file(db: Session, cls, item_id: int, field: str, file): content = file.file.read() if content: file_path = os.path.join("media", file.filename) else: file_path = None if file_path: with open(file_path, "wb") as f: f.write(content) db_item = db.query(cls).filter(cls.id == item_id).first() setattr(db_item, field, file_path) db.commit() db.refresh(db_item) return db_item def remove_file(db: Session, cls, item_id: int, field: str): db_item = db.query(cls).filter(cls.id == item_id).first() file_path = getattr(db_item, field) if file_path: os.remove(file_path) setattr(db_item, field, None) db.commit() db.refresh(db_item) return db_item