def get(self): """GET запрос для получения статистики постов. Возвращает JSON объект содержащий статистику постов и черновиков в БД: 'categories_count': int - количество категорий 'comment_count': int - количество комментариев 'draft_count': int - количество черновиков 'post_count': int - количество постов 'total_in_posts_table': int - количество постов + черновиков В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При невозможности подключения к БД - 503 """ try: statistic = get_statistic() except Exception as e: response = make_exception_response(str(e)) return response return jsonify(statistic)
def get(self): """GET запрос для получения всех существующих категорий. Возвращает JSON объект содержащий все категории из БД. Каждая категория имеет вид определённый в методе `to_dict` класса `Category` в blog/models.py: 'id': int - id категории 'name': str - название категории 'tag': str - тэг категории В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При невозможности подключения к БД - 503 """ result = [] try: categories = get_all_categories() for category in categories: result.append(category.to_dict()) except Exception as e: response = make_exception_response(str(e)) return response return jsonify(result)
def get(self): """GET запрос для получения всех постов. Возвращает JSON объект содержащий все посты из БД. Каждый пост имеет вид определённый в методе `to_dict` класса `Post` в blog/models.py: 'id': int - id поста 'user_id': int - id пользователя создавшего пост 'title': str - заголовок поста 'body': str - текст поста 'tag': str - тэг категории поста В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При невозможности подключения к БД - 503 """ try: posts = get_all_posts() except Exception as e: response = make_exception_response(str(e)) return response result = [] for post in posts: result.append(post.to_dict()) return jsonify(result)
def put(self): """PUT запрос для добавления/редактирования тэга поста. Принимает JSON с информацией для замены тэга: 'post_id': int - id поста для которого будет происходить смена тэга 'tag': str - новый тэг поста(при отсутствии - удаление тэга у поста) В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При ошибке записи - 409 При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('post_id') parser.add_argument('tag') args = parser.parse_args() try: change_post_tag(post_id=args['post_id'], tag=args['tag']) except Exception as e: response = make_exception_response(str(e)) return response return Response(status=201)
def post(self): """POST запрос для добавления поста/черновика. Принимает JSON с информацией для создания поста: 'user_id': int - id пользователя создающего пост 'title': str - заголовок поста* 'text': str - текст поста** 'is_draft': bool - пометка "создать как черновик"(опционально) 'tag': str - тэг категории поста(опционально) * & ** имеют ограничения максимального количества символов. Информация находится в классе Config в config.py. В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При ошибке записи - 409 При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('user_id') parser.add_argument('title') parser.add_argument('text') parser.add_argument('is_draft') parser.add_argument('tag') args = parser.parse_args() is_draft = False # Проверка входящего значения is_draft(пометка "черновик") # для корректной обработки строк. if args['is_draft'] and args['is_draft'].lower() == 'true': is_draft = True try: add_post(user_id=args['user_id'], title=args['title'], body=args['text'], is_draft=is_draft, tag=args['tag']) except Exception as e: response = make_exception_response(str(e)) return response return Response(status=201)
def get(self): """GET запрос для получения всех комментариев поста. Принимает JSON с id поста для которого необходимо найти комментарии: 'post_id': int - id поста для которого необходимо найти комментарии Возвращает JSON объект содержащий все комментарии из БД, которые адресованы посту с id из запроса. Каждый комментарий имеет вид определённый в методе `to_dict` класса `Comment` в blog/models.py: 'id': int - id комментария 'post_id': int - id поста для которого написан комментарий 'email': str - email оставившего комментарий 'name': str - имя оставившего комментарий 'body': str - текст комментария В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При отсутствии поста, для которого необходимо получить комментарии - 409 При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('post_id') args = parser.parse_args() post_id = args['post_id'] try: comments = get_all_comments_for_post(post_id=post_id) except Exception as e: response = make_exception_response(str(e)) return response result = [] for comment in comments: result.append(comment.to_dict()) return jsonify(result)
def post(self): """POST запрос для добавления комментария к посту. Принимает JSON с информацией для создания комментария: 'post_id': int - id поста для которого создаётся комментарий 'email': str - email оставляющего комментарий 'name': str - имя оставляющего комментарий 'text': str - текс комментария В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При ошибке записи - 409 При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('post_id') parser.add_argument('email') parser.add_argument('name') parser.add_argument('text') args = parser.parse_args() try: add_comment(post_id=args['post_id'], email=args['email'], name=args['name'], body=args['text']) except Exception as e: response = make_exception_response(str(e)) return response return Response(status=201)
def delete(self): """DELETE запрос для удаления постов. Принимает JSON с id постов, которые необходимо удалить: 'posts_id': int - id постов для удаления. Возможно удаление одного или нескольких постов. Для удаления нескольких постов - в posts_id необходимо передать строку с перечислением id постов разделённых с помощью ',' ('posts_id': '34,45,67,89,2'). В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('posts_id') args = parser.parse_args() try: try: separated_posts_id = args['posts_id'].replace(' ', '').split(',') except Exception: raise Exception('Проверьте корректность параметра posts_id') delete_posts(*separated_posts_id) except Exception as e: response = make_exception_response(str(e)) return response return Response(status=200)
def put(self): """PUT запрос для изменения категории. Принимает JSON с информацией для изменения категории: 'category_id': int - id категории, которую необходимо изменить 'name': str - опциональный параметр - новое название категории 'tag': str - опциональный параметр - новый тэг категории В случае ошибки возвращает сообщение соответствующее типу ошибки в виде JSON(в поле 'status' находится сообщение ошибки) и соответствующий код. Возможные коды ошибок: При ошибке записи - 409 При невозможности подключения к БД - 503 """ parser = reqparse.RequestParser() parser.add_argument('category_id') parser.add_argument('name') parser.add_argument('tag') args = parser.parse_args() try: change_category(category_id=args['category_id'], name=args['name'], tag=args['tag']) except Exception as e: response = make_exception_response(str(e)) return response return Response(status=201)