def edit_article(request): body = convert_request_body_to_json(request) if is_invalid_create_article_request_body(body): return generate_invalid_req_body_error_message_response() name, stock_quantity, price, category_name = map_create_article(body) article = Article.objects.filter(name=name) if not article.exists(): return generate_bad_req_body_error_message_response( EntityType.ARTICLE.value) if price != 0: article.update(price=price) if stock_quantity != 0: article.update(stock_quantity=stock_quantity) article = Article.objects.get(name=name, isDeleted=0) category_list = get_category_list_or_none(category_name) if category_list: for category in category_list: article.category.add(category) data = {"message": "Article updated successfully"} return Response(data=data)
def create_article(request): body = convert_request_body_to_json(request) if is_invalid_create_article_request_body(body): return generate_invalid_req_body_error_message_response() name, stock_quantity, price, category_name = map_create_article(body) if object_exists_with_this_article(name): return generate_bad_req_body_error_message_response( EntityType.ARTICLE.value) article = Article.objects.create(name=name, stock_quantity=stock_quantity, price=price) article.save() category_list = get_category_list_or_none(category_name) # TODO: Optimize the following operation to minimize the db call if category_list: for category in category_list: article.category.add(category) return generate_success_message(EntityType.ARTICLE.value)
def delete_category(request): body = convert_request_body_to_json(request) category_name, _ = map_create_category(body) category = Category.objects.filter(name=category_name, isDeleted=0) if category.exists(): category.update(isDeleted=1) return generate_success_deletion_message(EntityType.CATEGORY.value) return generate_invalid_req_body_error_message_response()
def delete_article(request): body = convert_request_body_to_json(request) name, stock_quantity, price, category_name = map_create_article(body) article = Article.objects.filter(name=name, isDeleted=0) if article.exists(): article.update(isDeleted=1) return generate_success_deletion_message(EntityType.ARTICLE.value) return generate_invalid_req_body_error_message_response()
def edit_category(request): body = convert_request_body_to_json(request) if is_invalid_edit_category_request_body(body): return generate_invalid_req_body_error_message_response() category_name, parent = map_create_category(body) try: category = Category.objects.get(name=category_name) parent_category, _ = Category.objects.get_or_create(name=parent) category.parent = parent_category category.save() return generate_success_edit_message(EntityType.CATEGORY.value) except Category.DoesNotExist: return generate_invalid_req_body_error_message_response()
def create_category(request): body = convert_request_body_to_json(request) if is_invalid_create_category_request_body(body): return generate_invalid_req_body_error_message_response() category_name, parent = map_create_category(body) if object_exists_with_this_category(category_name): return generate_bad_req_body_error_message_response( EntityType.CATEGORY.value) if parent: parent_of_the_category = Category.objects.get(name=parent) category = Category.objects.create(name=category_name, parent=parent_of_the_category) category.save() else: category = Category.objects.create(name=category_name) category.save() return generate_success_message(EntityType.CATEGORY.value)
def get_all_articles(request): body = convert_request_body_to_json(request) category_name, _ = map_create_category(body) page = request.GET.get('page', DEFAULT_PAGE_NUMBER) try: category = Category.objects.get(name=category_name, isDeleted=0) articles = Article.objects.filter(category=category, isDeleted=0).order_by('-price') paginator = Paginator(articles, PAGE_SIZE) try: articles_pages = paginator.page(page) except PageNotAnInteger: articles_pages = paginator.page(DEFAULT_PAGE_NUMBER) except EmptyPage: articles_pages = paginator.page(paginator.num_pages) return Response(data=get_paginated_articles(articles_pages)) except Category.DoesNotExist: return generate_invalid_req_body_error_message_response()