Добро пожаловать в репозиторий банковского чат-сервиса! Этот проект представляет собой чат-сервис, разработанный специально для банковских учреждений. Он предоставляет коммуникационное решение между клиентами и сотрудниками банка, обеспечивая безопасность и эффективность в общении.
Этот проект был выполнен в рамках этого курса. и распространяется под лицензией 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
-
Все сообщения от клиента будут проходить через отдельную AFC (Anti-Financial Crime) систему, прежде чем попасть к менеджеру. Если сообщение содержит чувствительный контент, оно будет заблокировано, и клиент будет получать соответствующее предупреждение.
-
В целях безопасности сообщения одного менеджера не видны другим менеджерам. Каждый менеджер видит только сообщения, связанные с текущим вопросом. Если клиент обращается с новой проблемой и общается с другим менеджером, а затем снова связывается с нами, мы не видим предыдущие сообщения. При этом для клиента это непрерывный чат без пропусков.
-
Менеджер может одновременно общаться с N клиентами, но каждый клиент привязан к конкретному менеджеру и его вопрос обрабатывается только этим менеджером.
-
Клиенты не направляются к менеджеру автоматически, пока менеджер не выразит готовность (как будто не крикнет "свободная касса"). Закрытие клиентского вопроса также происходит только по сигналу от менеджера.
- Убедитесь, что у вас установлен docker и docker-compose.
- Убедитесь, что у вас установлен taskfile.dev. Вы можете установить его, следуя инструкциям на официальном сайте.
- После установите все необходимые dev-tools с помощью команды:
task dev-tools:install
- Поднимите все контейнеры с помощью команды (возможно необходимо вызвать несколько раз):
task deps
todo
- Запуск unit-тестов:
task tests
- Запуск интеграционных тестов:
task tests:integration
Обратите внимание на переменные окружения, которые прописаны в taskfile. Так же убедитесь, что все необходимое окружение поднято и доступно.
- Запуск e2e тестов (ginkgo):
task tests:e2e
Обратите внимание на переменные окружения, которые прописаны в taskfile. Так же убедитесь, что все необходимое окружение поднято и доступно.
- Запуск линтера:
task lint
- Запуск форматирования кода:
task fmt
Последовательность действий отображается синими стрелками:
- Поступает запрос на отправку нового сообщения.
- Мы проверяем входящий JWT с помощью системы IAM для подтверждения его валидности.
- Затем мы сохраняем задачу в базе данных, которая отвечает за отправку сообщений в AFC (Automatic Message Forwarding).
- Outbox Service (сервис исходящих сообщений), который будет рассмотрен дальше в курсе, извлекает задачу и выполняет ее, обращаясь к Message Producer с запросом на отправку сообщения.
- Message Producer шифрует сообщение и отправляет его в AFC.
- AFC Verdicts Processor получает подписанный вердикт, проверяет подпись и обновляет сообщение. Оно может быть заблокировано или сделано видимым для менеджера. Кроме того, он создает задачу для отправки соответствующих событий клиенту и менеджеру.
- Outbox Service выполняет задачу, и события отправляются пользователям через Event Stream.
- Менеджер получает уведомление о новом сообщении (или не получает никакого уведомления, если AFC заблокировало сообщение).
- Клиент получает уведомление о том, что его сообщение было доставлено (или заблокировано).
Последовательность действий отображается красными стрелками:
- Manager Scheduler регулярно выбирает клиентские запросы, требующие решения.
- Manager Scheduler запрашивает Manager Pool, чтобы предоставить свободного менеджера.
- Manager Scheduler назначает менеджера клиенту и создает задачу на отправку соответствующих событий на фронтэнд (веб-интерфейс).
- Outbox Service извлекает задачу и выполняет ее с использованием Event Stream (поток событий).
- Менеджер получает уведомление о новом клиенте, чья проблема требует решения.
- Клиент получает служебное сообщение с информацией о том, что их вопрос решается определенным менеджером.