server

package module
v0.0.0-...-1ad6296 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2019 License: MIT Imports: 0 Imported by: 0

README

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=<имя БД>

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Chat

type Chat struct {
	ID        int64
	Name      string
	Users     []User
	CreatedAt string
}

type ChatService

type ChatService interface {
	Add(name string, users []int64) (int64, error)
	Messages(id int64) ([]Message, error)
}

type Message

type Message struct {
	ID        int64
	Chat      int64
	Author    *User
	Text      string
	CreatedAt string
}

type MessageService

type MessageService interface {
	Add(chat int64, author int64, text string) (int64, error)
}

type User

type User struct {
	ID        int64
	Username  string
	CreatedAt string
}

type UserService

type UserService interface {
	Add(username string) (int64, error)
	Chats(id int64) ([]Chat, error)
}

Directories

Path Synopsis
cmd
main command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL