From bdccada6289865cd8f019e7efadc3704f5e36e71 Mon Sep 17 00:00:00 2001 From: erius Date: Thu, 27 Jun 2024 04:41:51 +0300 Subject: [PATCH] Added README --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d4b9b4 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +Реализовать систему для добавления и чтения постов и комментариев с использованием 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)