from sqlmodel import Session, select import src.models as models def get_all( session: Session, names: list[str], productors: list[str], types: list[str], ) -> list[models.ProductPublic]: statement = select(models.Product) if len(names) > 0: statement = statement.where(models.Product.name.in_(names)) if len(productors) > 0: statement = statement.join(models.Productor).where(models.Productor.name.in_(productors)) if len(types) > 0: statement = statement.where(models.Product.type.in_(types)) return session.exec(statement.order_by(models.Product.name)).all() def get_one(session: Session, product_id: int) -> models.ProductPublic: return session.get(models.Product, product_id) def create_one(session: Session, product: models.ProductCreate) -> models.ProductPublic: product_create = product.model_dump(exclude_unset=True) new_product = models.Product(**product_create) session.add(new_product) session.commit() session.refresh(new_product) return new_product def update_one(session: Session, id: int, product: models.ProductUpdate) -> models.ProductPublic: statement = select(models.Product).where(models.Product.id == id) result = session.exec(statement) new_product = result.first() if not new_product: return None product_updates = product.model_dump(exclude_unset=True) for key, value in product_updates.items(): setattr(new_product, key, value) session.add(new_product) session.commit() session.refresh(new_product) return new_product def delete_one(session: Session, id: int) -> models.ProductPublic: statement = select(models.Product).where(models.Product.id == id) result = session.exec(statement) product = result.first() if not product: return None result = models.ProductPublic.model_validate(product) session.delete(product) session.commit() return result