Мікросервісна система для управління оркестровим каталогом, замовленнями та відгуками.
Music Orchestra Platform — це розподілена мікросервісна система, яка моделює роботу оркестрової організації:
управління інструментами, виконавцями, композиціями, замовленнями та користувацькими відгуками.
Система побудована на базі трьох незалежних сервісів:
- 🎼 CatalogService — каталог оркестрових даних
- 💰 OrderService — замовлення та клієнти
- ⭐ ReviewService — користувацькі рецензії й рейтинги
React (Frontend)
│
▼
API Gateway (Reverse Proxy)
│
┌───────────────┬────────────────┬────────────────┐
│ │ │ │
▼ ▼ ▼
CatalogService OrderService ReviewService
(PostgreSQL) (PostgreSQL) (MongoDB)
- Взаємодія між сервісами — через HTTP REST API
- Можлива інтеграція через RabbitMQ
- API Gateway — центральна точка входу
- Асинхронна політика узгодженості (event-driven)
Мета: зберігати дані про інструменти, виконавців та композиції.
База: PostgreSQL
Технології: .NET 8 + EF Core (Fluent API, Seed Data, Migrations)
| Сутність | Поля |
|---|---|
| Instrument | ID, Name, Type, Price |
| Performer | ID, Name, InstrumentID |
| Composition | ID, Title, Duration, Genre |
| ConcertProgram | ID, ConcertID, CompositionID |
| InstrumentImage | ID, InstrumentID, Url |
1:N→ Instrument → PerformerM:N→ ConcertProgram ↔ Composition1:1→ Instrument ↔ InstrumentImage
- Перевірка
Price > 0 - Індекси на
Name,Type - Seed дані при першому запуску
Мета: управління клієнтами, замовленнями та складом замовлень.
База: PostgreSQL
Технології: .NET 8 + ADO.NET Dapper
| Сутність | Поля |
|---|---|
| Customer | ID, Name, Email |
| Order | ID, CustomerID, OrderDate, TotalAmount |
| OrderItem | ID, OrderID, ProductId, Quantity, UnitPrice |
1:N→ Customer → Order1:N→ Order → OrderItem
- Автоматичне обчислення суми замовлення
- Унікальний
Emailдля клієнтів - Асинхронні CRUD-репозиторії
Мета: управління користувацькими відгуками та рейтингами для інструментів, виконавців і композицій.
База: MongoDB
Технології: .NET 8 + MongoDB.Driver
{
"Id": "uuid",
"EntityType": "Instrument | Performer | Composition",
"EntityId": "string",
"Author": "John Doe",
"Rating": 5,
"Comment": "Incredible performance!",
"CreatedAt": "2025-11-01T12:00:00Z"
}- Гнучка документна структура (NoSQL)
- Фільтрація та сортування за рейтингом
- Зв’язок через
EntityType + EntityId
- Catalog — реальні ресурси: інструменти, виконавці, композиції
- Order — взаємодія користувачів (купівлі, бронювання)
- Review — соціальний аспект (відгуки, рейтинги, популярність)
| Контекст | Мікросервіс | Відповідальність |
|---|---|---|
| Catalog Context | CatalogService | Управління сутностями оркестру |
| Order Context | OrderService | Замовлення, транзакції, клієнти |
| Review Context | ReviewService | Відгуки, рейтинги, рекомендації |
- Кожен мікросервіс має власну БД (повна незалежність)
- Дозволено дублювання ключових ID (
EntityId,InstrumentIdтощо) - Узгодженість — eventual consistency
- Обмін подіями — через API або чергу повідомлень
- Немає централізованої транзакції між БД
- Схеми створюються автоматично через EF Core Migrations
- Генерація:
dotnet ef migrations add InitialCreate
dotnet ef database update- Колекції створюються автоматично при вставці документів
# Клонування репозиторію
git clone https://github.com/shillxzy/MusicOrchestraPlatform.git
# Налаштування баз у appsettings.json
# PostgreSQL / MongoDB
# Збірка та запуск сервісів
dotnet build
dotnet run --project CatalogService
dotnet run --project OrderService
dotnet run --project ReviewService- .NET 8 / C#
- Entity Framework Core
- PostgreSQL
- MongoDB
- REST API
- Clean Architecture + Repository Pattern
shillxzy