Giter Site home page Giter Site logo

email_box's Introduction

Почтовый ящик

Простое приложение почтового ящика для отправки/приемки сообщений. Выполнен на 2-х микросервисах: User, Message.

Содержание



  1. Сервис User
    • Аутентификация и авторизация
    • Добавление пользователя
    • Получение списка пользователей
    • Удаление пользователя
    • Получение id пользователя
  2. Сервис Message
    • Отправка сообщений
    • Получение сообщений

Оба микросервиса используют swagger(OpenApi). В них также присутствует Autofac для инверсии зависимостей. Прежде чем попасть в базу, данные проходят через Automapper. Сервис User отправляет данные сервису Message через RabbitMQ.
В каждом микросервисе присутсвует контроллер, сервис управления, конекст для работы с БД.

https://localhost:7205/swagger/index.html

Микросервис осуществляет контроль пользователей в системе. Сущность содержит идентификатор (Guid), логин (за основу взят e-mail пользователя), пароль (конкатенируется с солью и вычисляется хэш), роль в системе (администратор или пользователь).

  • Аутентификация и авторизация
    Микросервис выполняет функции аутентификации и управления пользователями. Аутентификация происходит с помощью RSA-шифрования. В ответ направляется JWT-токен, в котором содержится id пользователя и его роль. В дальнейшем токен направляется в микросервис Message для проверки авторизации. Конкретнее, его нужно положить в заголовок Authorization.
  • Добавить администратора
    Метод проверяет есть ли пользователи в системе, если нет, добавляет администратора. Е-mail проверяется по шаблону. Пароль проходит проверку по длине и сложности. Для этого создана библиотека для проверки входящих данных.
  • Добавить пользователя
    Метод проверяет есть ли пользователь с таким именем в системе. Если нет, добавляет пользователя.
  • Получить список пользователей
    Метод выводит список всех пользователей в системе.
  • Удалить пользователя
    Метод удаляет пользователей, кроме администратора.
  • Получить id пользователя
    Метод возвращает id пользователя из JWT-токена. Токен проходит проверку на валидность.

https://localhost:7191/swagger/index.html

Микросервис выполняет функцию мессенджера. Полученные токен от сервиса User проверяется на валидность. Затем дается доступ к отправке и получению сообщений. Сущность содержит идентификатор (Guid), тело сообщения, от кого направлено, кому направлено.

  • Получить сообщения
    Метод возвращает все неполученные сообщения от других пользователей. При этом сообщения помечаются, как прочитанные.
  • Отправить сообщение
    Метод отправляет сообщение другому пользователю.

http://localhost:8080

В проекте используются 2 базы данных.

  • Для микросервиса User
  • Для микросервиса Message

Для входа в adminer введите следующие данные:

  • Движок - PostgreSQL
  • Сервер - db
  • Имя пользователя - postgres
  • Пароль - example
  • База данных - totalAttectation

Подход проектирования БД: Code first
Тип хранения данных: PostgreSQL & Docker
ORM: Entity Framework Core


Для запуска подготовлен docker-compose файл в корне решения. dockerfile располагаются в проектах.


http://localhost:15672

В проекте реализован брокер сообщений RabbitMq. В качестве издателя выступает сервис User - он отсылает токен пользователя в очередь сообщений, в качестве подписчика сервис Mеssage - находится в состоянии прослушивания очереди сообщений. При получении из очереди данных проводится проверка авторизации.

Для входа введите следующие данные:

  • Имя - guest
  • Пароль - guest

https://localhost:7052/swagger/index.html

В проекте реализован Ocelot API Gateway для переадресации методов. Для конфигурирования проекта подключается totalAttectation.json файл, в котором расписаны пути, а также методы переадресации.


Проект SolutionTests содержит Unit-тесты на функционал микросервисов User и Message.


1-й вариант

Можно запуститься через программу docker. Для запуска в терминале необходимо прописать следующие команды:

  • git clone <адрес репозитория на Github>
  • docker-compose up

После этого перейдите по указанным адресам.

2-й вариант

Можно запуститься через среду разработки. В docker запустить контейнеры с базой данных, adminer и RabbitMq. Затем в Visual Studio (или другой IDE) запустить проекты User, Message, APIGateway. Перед запуском в проектах User(RabbitMqService), Message(Program.cs) следует поменять имя хоста службы RabbitMq на "localhost".

Для запуска необходимо прописать следующие команды:

  • git clone <адрес репозитория на Github>
  • docker-compose up <Имя контейнера>

Это мой первый проект, так что прошу привнести максимально объективную критику.

email_box's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.