chat-server
Чат-сервер
Основные сущности
Ниже перечислены основные сущности, которыми должен оперировать сервер.
User
Пользователь приложения. Имеет следующие свойства:
- id - уникальный идентификатор пользователя
- username - уникальное имя пользователя
- created_at - время создания пользователя
Chat
Отдельный чат. Имеет следующие свойства:
- id - уникальный идентификатор чата
- name - уникальное имя чата
- users - список пользователей в чате, отношение многие-ко-многим
- created_at - время создания
Message
Сообщение в чате. Имеет следующие свойства:
- id - уникальный идентификатор сообщения
- chat - ссылка на идентификатор чата, в который было отправлено сообщение
- author - ссылка на идентификатор отправителя сообщения, отношение многие-к-одному
- text - текст отправленного сообщения
- created_at - время создания
Основные API методы
Методы обрабатывают 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-код ошибки.
Как запустить
Для работы приложения необходима mysql. Необходимо создать БД и выполнить код из db.sql
Бинарники находятся на https://github.com/dbond762/chat-server/releases/tag/v1.0
Для того, что бы собрать
go get github.com/go-sql-driver/mysql
go get github.com/go-chi/chi
go get github.com/go-chi/cors
go build cmd/main/main.go
При запуске есть возможность указать такие параметры
main -port=<порт, на котором будет запущен сервер> -db-user=<имя пользователя БД> -db-password=<пароль пользователя БД> -db-host=<хост БД> -db-port=<порт БД> -db-name=<имя БД>