Skip to content

Pickausernaame/chat-service

Repository files navigation

CI Go Report Card Coverage Status Go Reference CC BY-NC-SA 4.0 version-img

Bank Support Chat System

Добро пожаловать в репозиторий банковского чат-сервиса! Этот проект представляет собой чат-сервис, разработанный специально для банковских учреждений. Он предоставляет коммуникационное решение между клиентами и сотрудниками банка, обеспечивая безопасность и эффективность в общении.

Этот проект был выполнен в рамках этого курса. и распространяется под лицензией CC BY-NC-SA 4.0

Стек технологий

  • Golang 1.20

Работа с данными

  • PostgreSQL
  • Kafka

Прочие сервисы

  • Keycloak
  • Sentry
  • Swagger-UI

Технологии и инструменты

  • Docker
  • HTTP 1.1
  • Websocket
  • Echo framework
  • Ent
  • Testify
  • Mockgen
  • Ginkgo
  • JWT
  • pprof
  • swagger
  • oapi-codegen

Функциональные требования (FR):

Чат имеет следующие функциональные требования:

  1. Все сообщения от клиента будут проходить через отдельную AFC (Anti-Financial Crime) систему, прежде чем попасть к менеджеру. Если сообщение содержит чувствительный контент, оно будет заблокировано, и клиент будет получать соответствующее предупреждение.

  2. В целях безопасности сообщения одного менеджера не видны другим менеджерам. Каждый менеджер видит только сообщения, связанные с текущим вопросом. Если клиент обращается с новой проблемой и общается с другим менеджером, а затем снова связывается с нами, мы не видим предыдущие сообщения. При этом для клиента это непрерывный чат без пропусков.

  3. Менеджер может одновременно общаться с N клиентами, но каждый клиент привязан к конкретному менеджеру и его вопрос обрабатывается только этим менеджером.

  4. Клиенты не направляются к менеджеру автоматически, пока менеджер не выразит готовность (как будто не крикнет "свободная касса"). Закрытие клиентского вопроса также происходит только по сигналу от менеджера.

Demo

ezgif-3-fa876d4cd2.gif

Настройка и запуск

Настройка окружения

  1. Убедитесь, что у вас установлен docker и docker-compose.
  2. Убедитесь, что у вас установлен taskfile.dev. Вы можете установить его, следуя инструкциям на официальном сайте.
  3. После установите все необходимые dev-tools с помощью команды:
task dev-tools:install

Запуск сервисов

  1. Поднимите все контейнеры с помощью команды (возможно необходимо вызвать несколько раз):
task deps

todo

Тесты и прочие инструкции

  1. Запуск unit-тестов:
task tests
  1. Запуск интеграционных тестов:
task tests:integration

Обратите внимание на переменные окружения, которые прописаны в taskfile. Так же убедитесь, что все необходимое окружение поднято и доступно.

  1. Запуск e2e тестов (ginkgo):
task tests:e2e

Обратите внимание на переменные окружения, которые прописаны в taskfile. Так же убедитесь, что все необходимое окружение поднято и доступно.

  1. Запуск линтера:
task lint
  1. Запуск форматирования кода:
task fmt

Схема работы сервиса

img.png

Клиент отправляет сообщение в чат.

Последовательность действий отображается синими стрелками:

  1. Поступает запрос на отправку нового сообщения.
  2. Мы проверяем входящий JWT с помощью системы IAM для подтверждения его валидности.
  3. Затем мы сохраняем задачу в базе данных, которая отвечает за отправку сообщений в AFC (Automatic Message Forwarding).
  4. Outbox Service (сервис исходящих сообщений), который будет рассмотрен дальше в курсе, извлекает задачу и выполняет ее, обращаясь к Message Producer с запросом на отправку сообщения.
  5. Message Producer шифрует сообщение и отправляет его в AFC.
  6. AFC Verdicts Processor получает подписанный вердикт, проверяет подпись и обновляет сообщение. Оно может быть заблокировано или сделано видимым для менеджера. Кроме того, он создает задачу для отправки соответствующих событий клиенту и менеджеру.
  7. Outbox Service выполняет задачу, и события отправляются пользователям через Event Stream.
  8. Менеджер получает уведомление о новом сообщении (или не получает никакого уведомления, если AFC заблокировало сообщение).
  9. Клиент получает уведомление о том, что его сообщение было доставлено (или заблокировано).

Работа менеджера с клиентами.

Последовательность действий отображается красными стрелками:

  1. Manager Scheduler регулярно выбирает клиентские запросы, требующие решения.
  2. Manager Scheduler запрашивает Manager Pool, чтобы предоставить свободного менеджера.
  3. Manager Scheduler назначает менеджера клиенту и создает задачу на отправку соответствующих событий на фронтэнд (веб-интерфейс).
  4. Outbox Service извлекает задачу и выполняет ее с использованием Event Stream (поток событий).
  5. Менеджер получает уведомление о новом клиенте, чья проблема требует решения.
  6. Клиент получает служебное сообщение с информацией о том, что их вопрос решается определенным менеджером.