- ASP.NET Core
- EF Core
- MediatR
- FluentValidation
- AutoMapper
- Hangfire
- PostgreSQL
- RabbitMQ
- MassTransit
- Keycloak
- Serilog
AccountService(Program.csи настройки приложения)AccountService.Application(Основные слайсы логики, отсортированные по доменным типам)AccountService.Background(Background задачи, в данном случае - начисление процентов по счетам и диспетчер отправки сообщений в брокер)AccountService.Tests(Интеграционные и юнит тесты)
{
"isSuccess": true, // флаг успешности операции
"result": operationResult, // тело ответа
"message": "string", // сообщение
"mbError": { // mbError с более подробным описание
"message": "string", // сообщение ошибки
"validationErrors": [
"string" // массив ошибок
]
}
}
Все (кроме api/health/*) эндпоинты требуют авторизации через Keycloak, для этого нужно получить токен доступа и указать его
-
GET /api/health/ready- проверка готовности приложения, возвращает200 OK, если приложение готово к отравке сообщений в брокер. (RabbitMQ работает)' -
GET /api/health/live- проверка живости приложения, возвращает200 OK, если приложение не зависло и может обрабатывать запросы. -
GET /api/accounts- возвращает список открытых у юзера счетов. -
POST /api/accounts- создает счет. Пример тела запроса:
{
"currency": "string",
"accountType": "string",
"interestRate": 0 // процентная ставка, если счет Deposit или Credit
}
accountType должен быть валидной строкой, currency корректной валютой.
-
DELETE /api/accounts/{id}- удаляет (закрывает) счет по IDid. -
PATCH /api/accounts/{id}- изменяет процентную ставку по счету, если тип счета соответствующий. Пример тела:
{
"interestRate": 0
}
-
GET /api/accounts/{id}/transactions?skip=x&take=y- получение выписки по счетуid, пропустивskipзаписей, взявtakeзаписей. -
POST /api/transactions- создает транзакцию для счетаid. Пример тела:
{
"accountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"counterpartyAccountId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"transactionType": "string",
"currency": "string",
"amount": 0,
"description": "string"
}
-
DELETE /api/transactions/{transactionId}- помечает транзакциюtransactionIdкак удаленную. Пример ответа: -
PATCH /api/transactions/{transactionId}- изменяет у транзакцииtransactionIdописание. Пример тела:
{
"description": "string"
}
Keycloak используется как сервер авторизации, доступны два юзера:
username: violetta
password: 123
username: johnprok
password: 123
другие важные поля для Keycloak:
{
client_id: aspnet-api,
client_secret: 9qKJ6qvOOOnlbg1uZoSbtIIHk7Elaxik,
grant_type: password
}
Из корневой папки репозитория введите команду: docker-compose up --build -d (файл compose.yml), после чего немного подождите, прежде чем Keycloak настроится (обычно около 20 секунд).
Затем из Postman или другого удобного инструмента отправьте запрос на http://localhost:8888/realms/account_service/protocol/openid-connect/token
с телом типа x-www-form-urlenconded:
{
client_id: aspnet-api,
client_secret: 9qKJ6qvOOOnlbg1uZoSbtIIHk7Elaxik,
grant_type: password,
username: <выбранный_юзернейм>,
password: <пароль_юзера>
}
после этого скопируйте accessToken и вставьте его в swagger по адресу http://localhost:80/swagger в форму авторизации, чтобы иметь возможность обращаться к API.
В VS 2022 выберите профиль Docker Compose и запустите его в режиме дебагга (F5)
Тесты можно запустить как через IDE, так и через консоль, для этого нужно ввести команду dotnet test в папке AccountService.Tests. Тесты выполняются пару минут из-за большого количества контейнеров и намеренно выключенного параллелизма.
Hangfire доступен по адресу http://localhost:80/hangfire, там можно посмотреть запланированные задачи, а также запустить их вручную для проверки.
RabbitMQ доступен по адресу http://localhost:15672, логин и пароль - admin. Информацию о продюсируемых и потребляемых сообщениях можно посмотреть в разделе Schemas в Swagger или в папке Events для соответствующей сущности в AccountService.Application.