Переменные окружения (docker.env
):
DB_DEBUG=true
Вывод отладочной информации базы данных
PRINT_CONFIG=true
Печать настроек приложения
DB_MIGRATE=true
Выполнить проверку миграций при старте приложения (необходимо установить в true
при первом запуске)
DB_URL=postgres://username:passwordr@localhost:5432/database?sslmode=disable
Адрес PostgreSQL для работы
IMAGE_TAG=latest
Тег запуска
IMAGE_TAG=latest docker-compose up -d
https://avito.asciishell.ru/
http://asciishell.ru:9000/
Цель задания – разработать чат-сервер, предоставляющий HTTP API для работы с чатами и сообщениями пользователя.
Детали реализации:
- Писать код можно на любом языке программирования
- В качестве хранилища данных можно использовать любую технологию
- При перезапуске сервера добавленные данные должны сохраняться
- Сервер должен быть доступен на порту 9000
- Визуализация данных в виде пользовательского интерфейса (веб-приложение, мобильное приложение) не требуется – достаточно только обозначенного ниже API, доступного из командной строки. Однако простор фантазии не ограничиваем, покуда соблюдаются основные требования
- Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой
docker-compose up
- Финальную версию нужно выложить на github.com
Ниже перечислены основные сущности, которыми должен оперировать сервер.
Пользователь приложения. Имеет следующие свойства:
- id - уникальный идентификатор пользователя
- username - уникальное имя пользователя
- created_at - время создания пользователя
Отдельный чат. Имеет следующие свойства:
- id - уникальный идентификатор чата
- name - уникальное имя чата
- users - список пользователей в чате, отношение многие-ко-многим
- created_at - время создания
Сообщение в чате. Имеет следующие свойства:
- id - уникальный идентификатор сообщения
- chat - ссылка на идентификатор чата, в который было отправлено сообщение
- author - ссылка на идентификатор отправителя сообщения, отношение многие-к-одному
- text - текст отправленного сообщения
- created_at - время создания
Методы обрабатывают HTTP POST запросы c телом, содержащим все необходимые параметры в JSON.
Запрос:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username": "user_1"}' \
http://localhost:9000/users/add
Ответ: id
созданного пользователя или HTTP-код ошибки.
Запрос:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"name": "chat_1", "users": ["<USER_ID_1>", "<USER_ID_2>"]}' \
http://localhost:9000/chats/add
Ответ: id
созданного чата или HTTP-код ошибки.
Количество пользователей не ограничено.
Запрос:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"chat": "<CHAT_ID>", "author": "<USER_ID>", "text": "hi"}' \
http://localhost:9000/messages/add
Ответ: id
созданного сообщения или HTTP-код ошибки.
Запрос:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"user": "<USER_ID>"}' \
http://localhost:9000/chats/get
Ответ: cписок всех чатов со всеми полями, отсортированный по времени создания последнего сообщения в чате (от позднего к раннему). Или HTTP-код ошибки.
Запрос:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"chat": "<CHAT_ID>"}' \
http://localhost:9000/messages/get
Ответ: список всех сообщений чата со всеми полями, отсортированный по времени создания сообщения (от раннего к позднему). Или HTTP-код ошибки.