Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/s-rb/registration-service
Registration service module
https://github.com/s-rb/registration-service
Last synced: 2 months ago
JSON representation
Registration service module
- Host: GitHub
- URL: https://github.com/s-rb/registration-service
- Owner: s-rb
- Created: 2020-06-21T04:58:32.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-03-31T19:11:16.000Z (almost 3 years ago)
- Last Synced: 2023-03-04T21:12:24.003Z (almost 2 years ago)
- Language: Java
- Size: 27.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# registration-service
Registration service module![Java](https://img.shields.io/badge/-Java-05122A?style=flat&logo=Java&logoColor=fffffb) ![Spring](https://img.shields.io/badge/-Spring-05122A?style=flat&logo=Spring) ![Springboot](https://img.shields.io/badge/-Springboot-05122A?style=flat&logo=Springboot) ![H2](https://img.shields.io/badge/-H2-05122A?style=flat&logo=h2) ![JUnit](https://img.shields.io/badge/-JUnit-05122A?style=flat&logo=JUnit) ![Mockito](https://img.shields.io/badge/-Mockito-05122A?style=flat&logo=Mockito) ![Powermock](https://img.shields.io/badge/-Powermock-05122A?style=flat&logo=Powermock) ![Liquibase](https://img.shields.io/badge/-Liquibase-05122A?style=flat&logo=Liquibase) ![Lombok](https://img.shields.io/badge/-Lombok-05122A?style=flat&logo=Lombok) ![Rest](https://img.shields.io/badge/-RestAPI-05122A?style=flat&logo=rest) ![Postman](https://img.shields.io/badge/-Postman-05122A?style=flat&logo=Postman)
## Main Features:
* Java 11,
* SpringBoot (web, data-jpa),
* H2,
* JUnit, Mockito, PowerMock, AssertJ (Юнит тесты 79% строк кода).
* Для удобства ручного тестирования в папке data приложена коллекция с запросами для Postman,
* Liquibase (создание таблиц и наполнение некоторыми тестовыми данными),
* Lombok### Выполненное тестовое задание SKB LAB.
Алгоритм работы:
* Контроллер получает данные из формы регистрации **POST** запросом на **/api/auth/** в формате **JSON**
со следующими обязательными полями: email, login, password, firstname, lastname, middlename (опционально).
* Передает данные из запроса в RegistrationService, где сначала происходит проверка введенных данных
заполнение, формат Email, соответствие пароля, отсутствие посторонних символов в имени/фамилии/отчестве.
В случае каких-либо ошибок, собирает все ошибки в List и возвращает в контроллер.
* После первичной проверки, пытается отправить данные на одобрение регистрации во внешний сервис
используя MessagingService, которая получает данные и передает их во внешнюю службу на проверку,
а также возвращает Id в RegistrationService, по которому можно узнать ответ.
* После получения ответа от внешней службы MessageService сохраняет результат в Map<'id', boolean>.
* Далее RegistrationService обращается в MessageService за результатом запроса на регистрацию, используя
полученный ранее Id. Если все ок, то создает нового пользователя, сохраняет его в БД, обращаясь в репозиторий,
а также направляет в сообщение с подтверждением пользователю на Email, используя SendMailer.
* В случае отсутствия ошибок, контроллер возвращает {success: true}, со статусом Ok. Если ошибки были, то
{success: false, [error1, error2, ...]}, со статусом BadRequest.
* На случай недоступности служб MessagingService и OuterCheckingService или исключений, имеется таймаут ожидания,
по истечении времени, отказ в регистрации и вывод соответствующего сообщения об ошибке.### Исходное задание:
Форма регистрации с отправкой имейла после одобрения из внешней системы.
Дана форма регистрации в нашем приложении, в которой необходимо заполнить:- логин,
- пароль,
- адрес электронной почты,
- ФИО.После отправки формы, мы регистрируем данные из нее в нашей БД, а также отправляем ее
для одобрения во внешней системе. Пусть обмен с этой внешней системой будет через некое
messaging решение. После одобрения или отклонения заявки, наше приложение должно отправить
сообщение на электронную почту нашему пользователю с результатом проверки.Стэк: JavaSE 8+, Spring boot 2, dbms - h2. Для тестов предпочтение Junit/Mockito/Assertj,
т.к. на проекте будут именно они. Остальное по вкусу.В качестве абстракции над шиной предлагаем взять такой набросок:
https://pastebin.com/qWjRPuypВозвращать из примеров в наброске можно заглушки, дабы сэкономить время на реализацию
тестового задания. Неплохо при этом помнить, что в реальной эксплуатации любая часть нашей
системы может отказать. Будем очень рады обоснованиям принятых архитектурных решений.
Комментарии в коде к ним крайне приветствуются.