def insert_category(self, category: CategoryModel): """Add a new category into the database or add the children list an existing category""" try: return self._insert(collection=CategoryModel.COLLECTION, data=CategoryModel.to_json(category)) except Exception as err: raise ObjectManagerInsertError(err=err)
def update_category(self, category: CategoryModel): """Update a existing category into the database""" try: return self._update(collection=CategoryModel.COLLECTION, public_id=category.get_public_id(), data=CategoryModel.to_json(category)) except Exception as err: raise ObjectManagerUpdateError(err=err)
def get_categories(params: CollectionParameters): """ HTTP `GET`/`HEAD` route for getting a iterable collection of resources. Args: params (CollectionParameters): Passed parameters over the http query string + optional `view` parameter. Returns: GetMultiResponse: Which includes a IterationResult of the CategoryModel. If the view parameter with tree was set the route returns a GetMultiResponse<CategoryTree>. Example: You can pass any parameter based on the CollectionParameters. Optional parameters are passed over the function declaration. The `view` parameter is optional and default `list`, but can be `tree` for the category tree view. Raises: FrameworkIterationError: If the collection could not be iterated. ManagerGetError: If the collection could not be found. """ category_manager: CategoryManager = CategoryManager( database_manager=current_app.database_manager) body = True if not request.method != 'HEAD' else False try: if params.optional['view'] == 'tree': tree: CategoryTree = category_manager.tree api_response = GetMultiResponse(CategoryTree.to_json(tree), total=len(tree), params=params, url=request.url, model=CategoryTree.MODEL, body=body) return api_response.make_response(pagination=False) else: iteration_result: IterationResult[ CategoryModel] = category_manager.iterate(filter=params.filter, limit=params.limit, skip=params.skip, sort=params.sort, order=params.order) category_list = [ CategoryModel.to_json(category) for category in iteration_result.results ] api_response = GetMultiResponse(category_list, total=iteration_result.total, params=params, url=request.url, model=CategoryModel.MODEL, body=body) except FrameworkIterationError as err: return abort(400, err.message) except ManagerGetError as err: return abort(404, err.message) return api_response.make_response()