Реализовать систему для добавления и чтения постов и комментариев с использованием GraphQL, аналогичную комментариям к постам на популярных платформах, таких как Хабр или Reddit.
Характеристики системы постов:
можно просмотреть список постов,
можно просмотреть пост и комментарии под ним,
пользователь, написавший пост, может запретить оставление комментариев к своему посту.
Характеристики системы комментариев к постам:
комментарии организованы иерархически, позволяя вложенность без ограничений,
длина текста комментария ограничена до, например, 2000 символов,
система пагинации для получения списка комментариев.
Требования к реализации:
система должна быть написана на языке Go,
использование Docker для распространения сервиса в виде Docker-образа,
хранение данных может быть как в памяти (in-memory), так и в PostgreSQL. Выбор хранилища должен быть определяемым параметром при запуске сервиса,
покрытие реализованного функционала unit-тестами.
Критерии оценки:
как хранятся комментарии и как организована таблица в базе данных/in-memory, включая механизм пагинации,
качество и чистота кода, структура проекта и распределение файлов по пакетам,
обработка ошибок в различных сценариях использования,
удобство и логичность использования системы комментариев,
эффективность работы системы при множественном одновременном использовании, сравнимая с популярными сервисами, такими как Хабр,
в реализации учитываются возможные проблемы с производительностью, такие как проблемы с n+1 запросами и большая вложенность комментариев.
Запуск:
Сначала соберите образы Docker с помощью команды make build: