Реализовать систему для добавления и чтения постов и комментариев с использованием 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](https://git.obamna.ru/erius/ozon-task/src/branch/main/deployments/docker-compose/postgres/ozon-task.env)