Skip to content

About

Тестовое задание .NET 8: микросервисы User/Finance, JWT, YARP, курсы ЦБ РФ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CurrencyRates

Микросервисная система курсов валют ЦБ РФ с избранными валютами пользователя.

  • .NET 8, PostgreSQL (две БД), Redis, gRPC, JWT, YARP API Gateway
  • Clean Architecture + MediatR (CQRS) в User и Finance
  • Сервисы: Migration (EF migrations), CbrWorker (фоновая загрузка XML ЦБ), User API, Finance API, Gateway
  • ТЗ: spec/Тестовое задание .Net 2.pdf
  • Архитектура: spec/ARCHITECTURE.md

Требования

  • .NET 8 SDK
  • Docker Desktop
  • Visual Studio 2022 (опционально)

Запуск

git clone https://github.com/PersonaN1/finance_test_code.git
cd finance_test_code
docker compose up --build

Дождитесь завершения migration и первого цикла cbr-worker.

Данные Postgres и Redis сохраняются в ./data/postgres и ./data/redis (относительные volume mounts — перезапуск контейнеров не удаляет данные).

PostgreSQL: две БД и сброс данных

При первом запуске Postgres выполняет docker/postgres/init-databases.sql и создаёт:

  • currency_user — пользователи, избранное, refresh-токены (Redis)
  • currency_finance — справочник валют и курсы

Скрипт init выполняется только если каталог данных пуст. Если нужно пересоздать БД с нуля:

docker compose down
# Windows PowerShell:
Remove-Item -Recurse -Force .\data\postgres\*
# Linux/macOS:
# rm -rf ./data/postgres/*
docker compose up --build

После wipe migration применит EF-миграции заново.

Сервис URL
Gateway (публичный REST) http://localhost:8080
User Swagger (через gateway) http://localhost:8080/user/swagger
Finance Swagger (через gateway) http://localhost:8080/finance/swagger

Прямой доступ к API/Swagger (порты уже в docker-compose.yml): http://localhost:5001/swagger , http://localhost:5002/swagger

Локально в Visual Studio 2022

  1. Поднять только инфраструктуру:
docker compose -f docker-compose.infra.yml up -d

Postgres: localhost:5432, Redis: localhost:6379. Если 5432 занят — в docker-compose.infra.yml поставь "5433:5432" и тот же Port в launchSettings.

  1. Открыть CurrencyRates.sln.
  2. Включить Multi-Project Launch Profiles (VS 17.11+): Tools → Options → Preview Features → Enable Multi-Project Launch Profiles.
  3. В toolbar выбрать профиль All services (файл CurrencyRates.slnLaunch) и F5.

Профили:

  • All services — Migration (one-shot, без отладчика: накатит схему и выйдет) → User → Finance → Worker → Gateway
  • All services (no migration) — то же без Migration (если схема уже есть)

Gateway: http://localhost:8080
Jwt/Grpc ключи заданы в Properties/launchSettings.json каждого проекта.

Быстрый сценарий

# Регистрация
curl -X POST http://localhost:8080/api/auth/register -H "Content-Type: application/json" -d "{\"name\":\"demo\",\"password\":\"secret123\"}"

# Логин
curl -X POST http://localhost:8080/api/auth/login -H "Content-Type: application/json" -d "{\"name\":\"demo\",\"password\":\"secret123\"}"

# Справочник валют (без JWT)
curl http://localhost:8080/api/finance/currencies

# Избранное (подставьте accessToken)
curl -X PUT http://localhost:8080/api/users/me/favorites -H "Authorization: Bearer ACCESS_TOKEN" -H "Content-Type: application/json" -d "{\"currencyCodes\":[\"USD\",\"EUR\"]}"

# Курсы
curl http://localhost:8080/api/finance/rates -H "Authorization: Bearer ACCESS_TOKEN"

# Logout
curl -X POST http://localhost:8080/api/auth/logout -H "Authorization: Bearer ACCESS_TOKEN" -H "Content-Type: application/json" -d "{\"refreshToken\":\"REFRESH_TOKEN\"}"

Тесты

dotnet test

About

Тестовое задание .NET 8: микросервисы User/Finance, JWT, YARP, курсы ЦБ РФ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages