# README
Ozon_Test_Task
Система для добавления и чтения постов и комментариев с использованием GraphQL, аналогичную комментариям к постам на популярных платформах, таких как Хабр или Reddit.
Характеристики системы постов:
- Можно просмотреть список постов.
- Можно просмотреть пост и комментарии под ним.
- Пользователь, написавший пост, может запретить оставление комментариев к своему посту.
Характеристики системы комментариев к постам:
- Комментарии организованы иерархически, позволяя вложенность без ограничений.
- Длина текста комментария ограничена до 2000 символов.
- Система пагинации для получения списка комментариев.
Важно:
- В качестве системы пагинации используется курсорная реализация, т.к. для подобных сервисов она должна подходить лучше станадартной реализации
- В проекте выполнены дополнительные требования для реализации через GraphQL Subscriptions (комментарии доставляются асинхронно)
- На большее количество тестов, к сожалению, не хватило времени
Установка и запуск
Прежде чем начать, убедитесь, что у вас установлены следующие компоненты:
- Docker
- Docker Compose
Шаги:
-
Файл .env:
Файл
.env
уже находится в корневой директории проекта. Для корректной работы настоятельно не рекомендую изменять переменные, кромеSTORAGE_TYPE
. -
Выбор типа хранилища:
Для выбора типа хранилища необходимо поменять значение переменной
STORAGE_TYPE
. Возможные параметры:- in_memory - хранение данных in_memory
- postgres - хранение данных в бд
Пример:
STORAGE_TYPE=in_memory
-
Запуск сервиса
Для запуска сервиса небходимо включить docker и запусить контейнеры командой:
docker-compose up --build
После запуска подключиться к GraphQL Playground можно будет подключиться по адресу:
http://localhost:8080/
Примеры запросов
-
Создание поста:
mutation { createPost(authorId:"1", title:"title", content: "content", allowComments: true) { id title content allowComments } }
-
Создание комментария:
mutation { createComment(authorId:"2", postId:"id поста из предыдущего пункта", content: "i am content") { id } }
-
Получение постов:
query GetPosts { posts(first: 10) { edges { cursor node { id title content allowComments } } pageInfo { hasNextPage endCursor } } }
-
Создание ответа:
mutation { createReply(authorId:"12", postId:"id поста, на комментарий которого мы хотим добавить ответ", content: "i am content") { id } }
-
Получение комментариев под постом:
query getComment { comments(postId:"1") { edges{ node{ id postId parentId replies(first:10) { edges { node { id postId parentId replies { edges { node { id parentId } } } } } } } } pageInfo { endCursor } } }
Детальная документация
С более подробной документацией вы можете ознакомиться в окне GraphQL Playground, перейда во вкладку "Show Documentation Explorer"