Go to file
2024-06-27 04:42:48 +03:00
cmd Added init log messages 2024-06-25 03:19:53 +03:00
deployments/docker-compose Separated graphql schema into multiple files and moved them to graph/schema dir, update the gqlgen.yml accordingly 2024-06-26 04:45:04 +03:00
graph Implemented pagination for posts, comments and replies 2024-06-27 04:28:18 +03:00
internal/storage Implemented pagination for posts, comments and replies 2024-06-27 04:28:18 +03:00
.dockerignore First commit 2024-06-25 02:34:10 +03:00
.gitignore First commit 2024-06-25 02:34:10 +03:00
Dockerfile First commit 2024-06-25 02:34:10 +03:00
go.mod Implemented pagination for posts, comments and replies 2024-06-27 04:28:18 +03:00
go.sum Implemented pagination for posts, comments and replies 2024-06-27 04:28:18 +03:00
gqlgen.yml Separated graphql schema into multiple files and moved them to graph/schema dir, update the gqlgen.yml accordingly 2024-06-26 04:45:04 +03:00
Makefile Separated graphql schema into multiple files and moved them to graph/schema dir, update the gqlgen.yml accordingly 2024-06-26 04:45:04 +03:00
README.md Minor README change 2024-06-27 04:42:48 +03:00
tools.go First commit 2024-06-25 02:34:10 +03:00

Реализовать систему для добавления и чтения постов и комментариев с использованием GraphQL, аналогичную комментариям к постам на популярных платформах, таких как Хабр или Reddit.

Характеристики системы постов:

  • ✔️ Можно просмотреть список постов.
  • ✔️ Можно просмотреть пост и комментарии под ним.
  • ✔️ Пользователь, написавший пост, может запретить оставление комментариев к своему посту.

Характеристики системы комментариев к постам:

  • ✔️ Комментарии организованы иерархически, позволяя вложенность без ограничений.
  • ✔️ Длина текста комментария ограничена до, например, 2000 символов.
  • ✔️ Система пагинации для получения списка комментариев.

Дополнительные требования для реализации через GraphQL Subscriptions:

  • Комментарии к постам должны доставляться асинхронно, т.е. клиенты, подписанные на определенный пост, должны получать уведомления о новых комментариях без необходимости повторного запроса.

Требования к реализации:

  • ✔️ Система должна быть написана на языке Go.
  • ✔️ Использование Docker для распространения сервиса в виде Docker-образа.
  • ✔️ Хранение данных может быть как в памяти (in-memory), так и в PostgreSQL. Выбор хранилища должен быть определяемым параметром при запуске сервиса.
  • Покрытие реализованного функционала unit-тестами.

Критерии оценки:

  • Как хранятся комментарии и как организована таблица в базе данных/in-memory, включая механизм пагинации.
  • Качество и чистота кода, структура проекта и распределение файлов по пакетам.
  • Обработка ошибок в различных сценариях использования.
  • Удобство и логичность использования системы комментариев.
  • Эффективность работы системы при множественном одновременном использовании, сравнимая с популярными сервисами, такими как Хабр.
  • В реализации учитываются возможные проблемы с производительностью, такие как проблемы с n+1 запросами и большая вложенность комментариев.

Сборка

  1. Клонировать репозиторий
  2. Запустить приложение с помощью make
  • Запуск контейнера сервера в режиме in-memory make docker-standalone
  • Запуск контейнера сервера в режиме postgres с контейнером PostgreSQL make docker-postgres
  • Очистка рабочей среды docker make docker-clean

Приложение настраивается с помощью переменных среды, их можно найти в файле ozon-task.env