From fbefd84a679a8fff5882ff5810bb278abc1bbd3a Mon Sep 17 00:00:00 2001 From: kingtuler Date: Wed, 25 Feb 2026 00:59:48 +0400 Subject: [PATCH 01/10] =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client.Wasm/Components/StudentCard.razor | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Client.Wasm/Components/StudentCard.razor b/Client.Wasm/Components/StudentCard.razor index 661f1181..b49603bf 100644 --- a/Client.Wasm/Components/StudentCard.razor +++ b/Client.Wasm/Components/StudentCard.razor @@ -4,9 +4,9 @@ - Номер №X "Название лабораторной" - Вариант №Х "Название варианта" - Выполнена Фамилией Именем 65ХХ + Номер №1. «Кэширование» + Вариант №47" + Выполнена Морозовым Сергеем 6513 Ссылка на форк From b8e29533f86470bd7a429a888bc2d746b8f62bc8 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Tue, 3 Mar 2026 13:08:43 +0400 Subject: [PATCH 02/10] =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=88=D1=82=D1=80=D0=B8=D1=85=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client.Wasm/Components/StudentCard.razor | 6 +- Client.Wasm/Properties/launchSettings.json | 6 +- Client.Wasm/wwwroot/appsettings.json | 2 +- CloudDevelopment.AppHost/AppHost.cs | 5 + .../CloudDevelopment.AppHost.csproj | 15 ++ .../Properties/launchSettings.json | 31 ++++ .../appsettings.Development.json | 8 + CloudDevelopment.AppHost/appsettings.json | 9 + .../CloudDevelopment.ServiceDefaults.csproj | 22 +++ .../Extensions.cs | 127 ++++++++++++++ CloudDevelopment.sln | 18 ++ README.md | 157 +++++------------- .../Controllers/WeatherForecastController.cs | 32 ++++ TransportApp.Api/Program.cs | 29 ++++ .../Properties/launchSettings.json | 41 +++++ TransportApp.Api/TransportApp.Api.csproj | 17 ++ TransportApp.Api/TransportApp.Api.http | 6 + TransportApp.Api/WeatherForecast.cs | 12 ++ TransportApp.Api/appsettings.Development.json | 8 + TransportApp.Api/appsettings.json | 9 + VehicleApp.Api/Models/Vehicle.cs | 57 +++++++ VehicleApp.Api/Program.cs | 26 +++ VehicleApp.Api/Properties/launchSettings.json | 38 +++++ VehicleApp.Api/Services/IVehicleService.cs | 16 ++ VehicleApp.Api/Services/VehicleGenerator.cs | 32 ++++ VehicleApp.Api/Services/VehicleService.cs | 61 +++++++ VehicleApp.Api/VehicleApp.Api.csproj | 18 ++ VehicleApp.Api/appsettings.Development.json | 8 + VehicleApp.Api/appsettings.json | 18 ++ VehicleApp/VehicleApp.AppHost/AppHost.cs | 14 ++ .../Properties/launchSettings.json | 29 ++++ .../VehicleApp.AppHost.csproj | 23 +++ .../appsettings.Development.json | 8 + .../VehicleApp.AppHost/appsettings.json | 9 + .../VehicleApp.ServiceDefaults/Extensions.cs | 127 ++++++++++++++ .../VehicleApp.ServiceDefaults.csproj | 22 +++ images/aspire.png | Bin 0 -> 56139 bytes images/client.png | Bin 0 -> 53379 bytes 38 files changed, 945 insertions(+), 121 deletions(-) create mode 100644 CloudDevelopment.AppHost/AppHost.cs create mode 100644 CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj create mode 100644 CloudDevelopment.AppHost/Properties/launchSettings.json create mode 100644 CloudDevelopment.AppHost/appsettings.Development.json create mode 100644 CloudDevelopment.AppHost/appsettings.json create mode 100644 CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj create mode 100644 CloudDevelopment.ServiceDefaults/Extensions.cs create mode 100644 TransportApp.Api/Controllers/WeatherForecastController.cs create mode 100644 TransportApp.Api/Program.cs create mode 100644 TransportApp.Api/Properties/launchSettings.json create mode 100644 TransportApp.Api/TransportApp.Api.csproj create mode 100644 TransportApp.Api/TransportApp.Api.http create mode 100644 TransportApp.Api/WeatherForecast.cs create mode 100644 TransportApp.Api/appsettings.Development.json create mode 100644 TransportApp.Api/appsettings.json create mode 100644 VehicleApp.Api/Models/Vehicle.cs create mode 100644 VehicleApp.Api/Program.cs create mode 100644 VehicleApp.Api/Properties/launchSettings.json create mode 100644 VehicleApp.Api/Services/IVehicleService.cs create mode 100644 VehicleApp.Api/Services/VehicleGenerator.cs create mode 100644 VehicleApp.Api/Services/VehicleService.cs create mode 100644 VehicleApp.Api/VehicleApp.Api.csproj create mode 100644 VehicleApp.Api/appsettings.Development.json create mode 100644 VehicleApp.Api/appsettings.json create mode 100644 VehicleApp/VehicleApp.AppHost/AppHost.cs create mode 100644 VehicleApp/VehicleApp.AppHost/Properties/launchSettings.json create mode 100644 VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj create mode 100644 VehicleApp/VehicleApp.AppHost/appsettings.Development.json create mode 100644 VehicleApp/VehicleApp.AppHost/appsettings.json create mode 100644 VehicleApp/VehicleApp.ServiceDefaults/Extensions.cs create mode 100644 VehicleApp/VehicleApp.ServiceDefaults/VehicleApp.ServiceDefaults.csproj create mode 100644 images/aspire.png create mode 100644 images/client.png diff --git a/Client.Wasm/Components/StudentCard.razor b/Client.Wasm/Components/StudentCard.razor index b49603bf..022071e9 100644 --- a/Client.Wasm/Components/StudentCard.razor +++ b/Client.Wasm/Components/StudentCard.razor @@ -4,9 +4,9 @@ - Номер №1. «Кэширование» - Вариант №47" - Выполнена Морозовым Сергеем 6513 + Номер №1 "Кэширование" + Вариант №47 "Транспортное средство" + Выполнена Морозов Сергей Сергеевич 6513 Ссылка на форк diff --git a/Client.Wasm/Properties/launchSettings.json b/Client.Wasm/Properties/launchSettings.json index 0d824ea7..60120ec3 100644 --- a/Client.Wasm/Properties/launchSettings.json +++ b/Client.Wasm/Properties/launchSettings.json @@ -12,7 +12,7 @@ "http": { "commandName": "Project", "dotnetRunMessages": true, - "launchBrowser": true, + "launchBrowser": false, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5127", "environmentVariables": { @@ -22,7 +22,7 @@ "https": { "commandName": "Project", "dotnetRunMessages": true, - "launchBrowser": true, + "launchBrowser": false, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7282;http://localhost:5127", "environmentVariables": { @@ -31,7 +31,7 @@ }, "IIS Express": { "commandName": "IISExpress", - "launchBrowser": true, + "launchBrowser": false, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/Client.Wasm/wwwroot/appsettings.json b/Client.Wasm/wwwroot/appsettings.json index d1fe7ab3..3de814bd 100644 --- a/Client.Wasm/wwwroot/appsettings.json +++ b/Client.Wasm/wwwroot/appsettings.json @@ -6,5 +6,5 @@ } }, "AllowedHosts": "*", - "BaseAddress": "" + "BaseAddress": "https://localhost:7069/vehicles" } diff --git a/CloudDevelopment.AppHost/AppHost.cs b/CloudDevelopment.AppHost/AppHost.cs new file mode 100644 index 00000000..e5c8089c --- /dev/null +++ b/CloudDevelopment.AppHost/AppHost.cs @@ -0,0 +1,5 @@ +var builder = DistributedApplication.CreateBuilder(args); + +builder.AddProject("transportapp-api"); + +builder.Build().Run(); diff --git a/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj b/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj new file mode 100644 index 00000000..d44a2009 --- /dev/null +++ b/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + enable + enable + 064f7aae-2d43-4c3f-856d-ddcddc898ca2 + + + + + + + diff --git a/CloudDevelopment.AppHost/Properties/launchSettings.json b/CloudDevelopment.AppHost/Properties/launchSettings.json new file mode 100644 index 00000000..e33e87ea --- /dev/null +++ b/CloudDevelopment.AppHost/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17115;http://localhost:15240", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21024", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "https://localhost:23070", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22014" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15240", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19230", + "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "http://localhost:18106", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20055" + } + } + } +} diff --git a/CloudDevelopment.AppHost/appsettings.Development.json b/CloudDevelopment.AppHost/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/CloudDevelopment.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/CloudDevelopment.AppHost/appsettings.json b/CloudDevelopment.AppHost/appsettings.json new file mode 100644 index 00000000..31c092aa --- /dev/null +++ b/CloudDevelopment.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj b/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj new file mode 100644 index 00000000..8ad67261 --- /dev/null +++ b/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + enable + enable + true + + + + + + + + + + + + + + + diff --git a/CloudDevelopment.ServiceDefaults/Extensions.cs b/CloudDevelopment.ServiceDefaults/Extensions.cs new file mode 100644 index 00000000..b72c8753 --- /dev/null +++ b/CloudDevelopment.ServiceDefaults/Extensions.cs @@ -0,0 +1,127 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.ServiceDiscovery; +using OpenTelemetry; +using OpenTelemetry.Metrics; +using OpenTelemetry.Trace; + +namespace Microsoft.Extensions.Hosting; + +// Adds common Aspire services: service discovery, resilience, health checks, and OpenTelemetry. +// This project should be referenced by each service project in your solution. +// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults +public static class Extensions +{ + private const string HealthEndpointPath = "/health"; + private const string AlivenessEndpointPath = "/alive"; + + public static TBuilder AddServiceDefaults(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.ConfigureOpenTelemetry(); + + builder.AddDefaultHealthChecks(); + + builder.Services.AddServiceDiscovery(); + + builder.Services.ConfigureHttpClientDefaults(http => + { + // Turn on resilience by default + http.AddStandardResilienceHandler(); + + // Turn on service discovery by default + http.AddServiceDiscovery(); + }); + + // Uncomment the following to restrict the allowed schemes for service discovery. + // builder.Services.Configure(options => + // { + // options.AllowedSchemes = ["https"]; + // }); + + return builder; + } + + public static TBuilder ConfigureOpenTelemetry(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Logging.AddOpenTelemetry(logging => + { + logging.IncludeFormattedMessage = true; + logging.IncludeScopes = true; + }); + + builder.Services.AddOpenTelemetry() + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation(); + }) + .WithTracing(tracing => + { + tracing.AddSource(builder.Environment.ApplicationName) + .AddAspNetCoreInstrumentation(tracing => + // Exclude health check requests from tracing + tracing.Filter = context => + !context.Request.Path.StartsWithSegments(HealthEndpointPath) + && !context.Request.Path.StartsWithSegments(AlivenessEndpointPath) + ) + // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package) + //.AddGrpcClientInstrumentation() + .AddHttpClientInstrumentation(); + }); + + builder.AddOpenTelemetryExporters(); + + return builder; + } + + private static TBuilder AddOpenTelemetryExporters(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); + + if (useOtlpExporter) + { + builder.Services.AddOpenTelemetry().UseOtlpExporter(); + } + + // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) + //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) + //{ + // builder.Services.AddOpenTelemetry() + // .UseAzureMonitor(); + //} + + return builder; + } + + public static TBuilder AddDefaultHealthChecks(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Services.AddHealthChecks() + // Add a default liveness check to ensure app is responsive + .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); + + return builder; + } + + public static WebApplication MapDefaultEndpoints(this WebApplication app) + { + // Adding health checks endpoints to applications in non-development environments has security implications. + // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. + if (app.Environment.IsDevelopment()) + { + // All health checks must pass for app to be considered ready to accept traffic after starting + app.MapHealthChecks(HealthEndpointPath); + + // Only health checks tagged with the "live" tag must pass for app to be considered alive + app.MapHealthChecks(AlivenessEndpointPath, new HealthCheckOptions + { + Predicate = r => r.Tags.Contains("live") + }); + } + + return app; + } +} diff --git a/CloudDevelopment.sln b/CloudDevelopment.sln index cb48241d..70f9f020 100644 --- a/CloudDevelopment.sln +++ b/CloudDevelopment.sln @@ -5,6 +5,12 @@ VisualStudioVersion = 17.14.36811.4 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client.Wasm", "Client.Wasm\Client.Wasm.csproj", "{AE7EEA74-2FE0-136F-D797-854FD87E022A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.AppHost", "VehicleApp\VehicleApp.AppHost\VehicleApp.AppHost.csproj", "{5A32E624-1368-47E1-AE8C-C5D666C99826}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.ServiceDefaults", "VehicleApp\VehicleApp.ServiceDefaults\VehicleApp.ServiceDefaults.csproj", "{97B1F7F0-C53D-2D4D-3803-B1150F873870}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.Api", "VehicleApp.Api\VehicleApp.Api.csproj", "{54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +21,18 @@ Global {AE7EEA74-2FE0-136F-D797-854FD87E022A}.Debug|Any CPU.Build.0 = Debug|Any CPU {AE7EEA74-2FE0-136F-D797-854FD87E022A}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE7EEA74-2FE0-136F-D797-854FD87E022A}.Release|Any CPU.Build.0 = Release|Any CPU + {5A32E624-1368-47E1-AE8C-C5D666C99826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A32E624-1368-47E1-AE8C-C5D666C99826}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A32E624-1368-47E1-AE8C-C5D666C99826}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A32E624-1368-47E1-AE8C-C5D666C99826}.Release|Any CPU.Build.0 = Release|Any CPU + {97B1F7F0-C53D-2D4D-3803-B1150F873870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97B1F7F0-C53D-2D4D-3803-B1150F873870}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97B1F7F0-C53D-2D4D-3803-B1150F873870}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97B1F7F0-C53D-2D4D-3803-B1150F873870}.Release|Any CPU.Build.0 = Release|Any CPU + {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index dcaa5eb7..0d5463b8 100644 --- a/README.md +++ b/README.md @@ -1,128 +1,57 @@ -# Современные технологии разработки программного обеспечения -[Таблица с успеваемостью](https://docs.google.com/spreadsheets/d/1an43o-iqlq4V_kDtkr_y7DC221hY9qdhGPrpII27sH8/edit?usp=sharing) +# Лабораторная работа №1 — «Кэширование» -## Задание -### Цель -Реализация проекта микросервисного бекенда. +## Вариант 47 — «Транспортное средство» -### Задачи -* Реализация межсервисной коммуникации, -* Изучение работы с брокерами сообщений, -* Изучение архитектурных паттернов, -* Изучение работы со средствами оркестрации на примере .NET Aspire, -* Повторение основ работы с системами контроля версий, -* Интеграционное тестирование. +## Описание -### Лабораторные работы -
-1. «Кэширование» - Реализация сервиса генерации контрактов, кэширование его ответов -
- -В рамках первой лабораторной работы необходимо: -* Реализовать сервис генерации контрактов на основе Bogus, -* Реализовать кеширование при помощи IDistributedCache и Redis, -* Реализовать структурное логирование сервиса генерации, -* Настроить оркестрацию Aspire. - -
-
-2. «Балансировка нагрузки» - Реализация апи гейтвея, настройка его работы -
- -В рамках второй лабораторной работы необходимо: -* Настроить оркестрацию на запуск нескольких реплик сервиса генерации, -* Реализовать апи гейтвей на основе Ocelot, -* Имплементировать алгоритм балансировки нагрузки согласно варианту. +Реализован микросервисный бэкенд для генерации данных о транспортных средствах с кэшированием в Redis и оркестрацией через .NET Aspire. -
-
-
-3. «Интеграционное тестирование» - Реализация файлового сервиса и объектного хранилища, интеграционное тестирование бекенда -
+## Что реализовано -В рамках третьей лабораторной работы необходимо: -* Добавить в оркестрацию объектное хранилище, -* Реализовать файловый сервис, сериализующий сгенерированные данные в файлы и сохраняющий их в объектном хранилище, -* Реализовать отправку генерируемых данных в файловый сервис посредством брокера, -* Реализовать интеграционные тесты, проверяющие корректность работы всех сервисов бекенда вместе. +- Сервис генерации данных о транспортных средствах на основе Bogus +- Кэширование ответов при помощи `IDistributedCache` и Redis +- Структурное логирование сервиса генерации +- Оркестрация всех компонентов через .NET Aspire +- Blazor WebAssembly клиент для отображения данных -
-
-
-4. (Опционально) «Переход на облачную инфраструктуру» - Перенос бекенда в Yandex Cloud -
- -В рамках четвертой лабораторной работы необходимо перенестиервисы на облако все ранее разработанные сервисы: -* Клиент - в хостинг через отдельный бакет Object Storage, -* Сервис генерации - в Cloud Function, -* Апи гейтвей - в Serverless Integration как API Gateway, -* Брокер сообщений - в Message Queue, -* Файловый сервис - в Cloud Function, -* Объектное хранилище - в отдельный бакет Object Storage, +## Стек технологий -
-
+- .NET 8 +- .NET Aspire 9.5 +- Bogus — генерация данных +- Redis — распределённое кэширование +- RedisInsight — визуализация данных в Redis +- Blazor WebAssembly — клиентское приложение +- OpenTelemetry — метрики, трейсинг, логирование -## Задание. Общая часть -**Обязательно**: -* Реализация серверной части на [.NET 8](https://learn.microsoft.com/ru-ru/dotnet/core/whats-new/dotnet-8/overview). -* Оркестрация проектов при помощи [.NET Aspire](https://learn.microsoft.com/ru-ru/dotnet/aspire/get-started/aspire-overview). -* Реализация сервиса генерации данных при помощи [Bogus](https://github.com/bchavez/Bogus). -* Реализация тестов с использованием [xUnit](https://xunit.net/?tabs=cs). -* Создание минимальной документации к проекту: страница на GitHub с информацией о задании, скриншоты приложения и прочая информация. +## Структура проекта -**Факультативно**: -* Перенос бекенда на облачную инфраструктуру Yandex Cloud +| Проект | Описание | +|---|---| +| `VehicleApp.Api` | API-сервис генерации транспортных средств | +| `VehicleApp.AppHost` | Aspire-оркестратор | +| `VehicleApp.ServiceDefaults` | Общие настройки сервисов (OpenTelemetry, health checks) | +| `Client.Wasm` | Blazor WebAssembly клиент | -Внимательно прочитайте [дискуссии](https://github.com/itsecd/cloud-development/discussions/1) о том, как работает автоматическое распределение на ревью. -Сразу корректно называйте свои pr, чтобы они попали на ревью нужному преподавателю. +## Характеристики транспортного средства -По итогу работы в семестре должна получиться следующая информационная система: -
-C4 диаграмма -Современные_технологии_разработки_ПО_drawio -
+| № | Название | Тип данных | Источник Bogus | +|---|---|---|---| +| 1 | Идентификатор в системе | `int` | Параметр запроса | +| 2 | VIN-номер | `string` | `Vehicle.Vin()` | +| 3 | Производитель | `string` | `Vehicle.Manufacturer()` | +| 4 | Модель | `string` | `Vehicle.Model()` | +| 5 | Год выпуска | `int` | `Random.Int(1980, текущий год)` | +| 6 | Тип корпуса | `string` | `Vehicle.Type()` | +| 7 | Тип топлива | `string` | `Vehicle.Fuel()` | +| 8 | Цвет корпуса | `string` | `Commerce.Color()` | +| 9 | Пробег (км) | `double` | `Random.Double(0, 300000)` | +| 10 | Дата последнего ТО | `DateOnly` | `Date.Between(год выпуска, сегодня)` | -## Варианты заданий -Номер варианта задания присваивается в начале семестра. Изменить его нельзя. Каждый вариант имеет уникальную комбинацию из предметной области, базы данных и технологии для общения сервиса генерации данных и сервера апи. +## Скриншоты -[Список вариантов](https://docs.google.com/document/d/1WGmLYwffTTaAj4TgFCk5bUyW3XKbFMiBm-DHZrfFWr4/edit?usp=sharing) -[Список предметных областей и алгоритмов балансировки](https://docs.google.com/document/d/1PLn2lKe4swIdJDZhwBYzxqFSu0AbY2MFY1SUPkIKOM4/edit?usp=sharing) - -## Схема сдачи - -На каждую из лабораторных работ необходимо сделать отдельный [Pull Request (PR)](https://docs.github.com/en/pull-requests). - -Общая схема: -1. Сделать форк данного репозитория -2. Выполнить задание -3. Сделать PR в данный репозиторий -4. Исправить замечания после code review -5. Получить approve - -## Критерии оценивания - -Конкурентный принцип. -Так как задания в первой лабораторной будут повторяться между студентами, то выделяются следующие показатели для оценки: -1. Скорость разработки -2. Качество разработки -3. Полнота выполнения задания - -Быстрее делаете PR - у вас преимущество. -Быстрее получаете Approve - у вас преимущество. -Выполните нечто немного выходящее за рамки проекта - у вас преимущество. -Не укладываетесь в дедлайн - получаете минимально возможный балл. - -### Шкала оценивания - -- **3 балла** за качество кода, из них: - - 2 балла - базовая оценка - - 1 балл (но не более) можно получить за выполнение любого из следующих пунктов: - - Реализация факультативного функционала - - Выполнение работы раньше других: первые 5 человек из каждой группы, которые сделали PR и получили approve, получают дополнительный балл - -## Вопросы и обратная связь по курсу - -Чтобы задать вопрос по лабораторной, воспользуйтесь [соответствующим разделом дискуссий](https://github.com/itsecd/cloud-development/discussions/categories/questions) или заведите [ишью](https://github.com/itsecd/cloud-development/issues/new). -Если у вас появились идеи/пожелания/прочие полезные мысли по преподаваемой дисциплине, их можно оставить [здесь](https://github.com/itsecd/cloud-development/discussions/categories/ideas). +### Aspire Dashboard +![Aspire Dashboard](images/aspire.png) +### Клиент +![Client](images/client.png) diff --git a/TransportApp.Api/Controllers/WeatherForecastController.cs b/TransportApp.Api/Controllers/WeatherForecastController.cs new file mode 100644 index 00000000..09b50aea --- /dev/null +++ b/TransportApp.Api/Controllers/WeatherForecastController.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Mvc; + +namespace TransportApp.Api.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase +{ + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } +} diff --git a/TransportApp.Api/Program.cs b/TransportApp.Api/Program.cs new file mode 100644 index 00000000..edda8a7f --- /dev/null +++ b/TransportApp.Api/Program.cs @@ -0,0 +1,29 @@ +var builder = WebApplication.CreateBuilder(args); + +builder.AddServiceDefaults(); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +app.MapDefaultEndpoints(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/TransportApp.Api/Properties/launchSettings.json b/TransportApp.Api/Properties/launchSettings.json new file mode 100644 index 00000000..bd0d0fd5 --- /dev/null +++ b/TransportApp.Api/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:7866", + "sslPort": 44334 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5167", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7246;http://localhost:5167", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/TransportApp.Api/TransportApp.Api.csproj b/TransportApp.Api/TransportApp.Api.csproj new file mode 100644 index 00000000..3fe26a38 --- /dev/null +++ b/TransportApp.Api/TransportApp.Api.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/TransportApp.Api/TransportApp.Api.http b/TransportApp.Api/TransportApp.Api.http new file mode 100644 index 00000000..be82d019 --- /dev/null +++ b/TransportApp.Api/TransportApp.Api.http @@ -0,0 +1,6 @@ +@TransportApp.Api_HostAddress = http://localhost:5167 + +GET {{TransportApp.Api_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/TransportApp.Api/WeatherForecast.cs b/TransportApp.Api/WeatherForecast.cs new file mode 100644 index 00000000..c33fc50b --- /dev/null +++ b/TransportApp.Api/WeatherForecast.cs @@ -0,0 +1,12 @@ +namespace TransportApp.Api; + +public class WeatherForecast +{ + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } +} diff --git a/TransportApp.Api/appsettings.Development.json b/TransportApp.Api/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/TransportApp.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/TransportApp.Api/appsettings.json b/TransportApp.Api/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/TransportApp.Api/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/VehicleApp.Api/Models/Vehicle.cs b/VehicleApp.Api/Models/Vehicle.cs new file mode 100644 index 00000000..c668e7bd --- /dev/null +++ b/VehicleApp.Api/Models/Vehicle.cs @@ -0,0 +1,57 @@ +namespace VehicleApp.Api.Models; + +/// +/// Модель транспортного средства +/// +public class Vehicle +{ + /// + /// Идентификатор в системе + /// + public int Id { get; set; } + + /// + /// VIN-номер + /// + public string Vin { get; set; } = string.Empty; + + /// + /// Производитель + /// + public string Manufacturer { get; set; } = string.Empty; + + /// + /// Модель + /// + public string Model { get; set; } = string.Empty; + + /// + /// Год выпуска + /// + public int Year { get; set; } + + /// + /// Тип корпуса + /// + public string BodyType { get; set; } = string.Empty; + + /// + /// Тип топлива + /// + public string FuelType { get; set; } = string.Empty; + + /// + /// Цвет корпуса + /// + public string BodyColor { get; set; } = string.Empty; + + /// + /// Пробег (км) + /// + public double Mileage { get; set; } + + /// + /// Дата последнего техобслуживания + /// + public DateOnly LastServiceDate { get; set; } +} diff --git a/VehicleApp.Api/Program.cs b/VehicleApp.Api/Program.cs new file mode 100644 index 00000000..fe7825fb --- /dev/null +++ b/VehicleApp.Api/Program.cs @@ -0,0 +1,26 @@ +using VehicleApp.Api.Services; + +var builder = WebApplication.CreateBuilder(args); + +builder.AddServiceDefaults(); +builder.AddRedisDistributedCache("redis"); + +builder.Services.AddScoped(); +builder.Services.AddCors(options => + options.AddPolicy("AllowClient", policy => + policy.WithOrigins(builder.Configuration.GetSection("CorsSettings:AllowedOrigins").Get() ?? []) + .WithMethods("GET") + .AllowAnyHeader())); + +var app = builder.Build(); + +app.UseCors("AllowClient"); +app.MapDefaultEndpoints(); + +app.MapGet("/vehicles", async (int id, IVehicleService vehicleService) => +{ + var vehicle = await vehicleService.GetVehicleAsync(id); + return Results.Ok(vehicle); +}); + +app.Run(); diff --git a/VehicleApp.Api/Properties/launchSettings.json b/VehicleApp.Api/Properties/launchSettings.json new file mode 100644 index 00000000..398f7058 --- /dev/null +++ b/VehicleApp.Api/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:38320", + "sslPort": 44373 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5204", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7069;http://localhost:5204", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/VehicleApp.Api/Services/IVehicleService.cs b/VehicleApp.Api/Services/IVehicleService.cs new file mode 100644 index 00000000..b2d588ed --- /dev/null +++ b/VehicleApp.Api/Services/IVehicleService.cs @@ -0,0 +1,16 @@ +using VehicleApp.Api.Models; + +namespace VehicleApp.Api.Services; + +/// +/// Интерфейс сервиса для получения информации о транспортном средстве +/// +public interface IVehicleService +{ + /// + /// Получает транспортное средство по идентификатору из кэша или с помощью генератора + /// + /// Идентификатор ТС + /// Транспортное средство + public Task GetVehicleAsync(int id); +} diff --git a/VehicleApp.Api/Services/VehicleGenerator.cs b/VehicleApp.Api/Services/VehicleGenerator.cs new file mode 100644 index 00000000..3365dbd4 --- /dev/null +++ b/VehicleApp.Api/Services/VehicleGenerator.cs @@ -0,0 +1,32 @@ +using Bogus; +using VehicleApp.Api.Models; + +namespace VehicleApp.Api.Services; +/// +/// Генератор транспортных средств со случайными свойствами +/// +public static class VehicleGenerator +{ + private static readonly Faker _faker = new Faker() + .RuleFor(v => v.Vin, f => f.Vehicle.Vin()) + .RuleFor(v => v.Manufacturer, f => f.Vehicle.Manufacturer()) + .RuleFor(v => v.Model, f => f.Vehicle.Model()) + .RuleFor(v => v.Year, f => f.Random.Int(1980, DateTime.Now.Year)) + .RuleFor(v => v.BodyType, f => f.Vehicle.Type()) + .RuleFor(v => v.FuelType, f => f.Vehicle.Fuel()) + .RuleFor(v => v.BodyColor, f => f.Commerce.Color()) + .RuleFor(v => v.Mileage, f => Math.Round(f.Random.Double(0, 300000), 2)) + .RuleFor(v => v.LastServiceDate, (f, v) => DateOnly.FromDateTime(f.Date.Between(new DateTime(v.Year, 1, 1), DateTime.Now))); + + /// + /// Метод генерации ТС + /// + /// Идентификатор ТС + /// Транспортное средство + public static Vehicle GenerateVehicle(int id) + { + var vehicle = _faker.Generate(); + vehicle.Id = id; + return vehicle; + } +} diff --git a/VehicleApp.Api/Services/VehicleService.cs b/VehicleApp.Api/Services/VehicleService.cs new file mode 100644 index 00000000..9bf6d313 --- /dev/null +++ b/VehicleApp.Api/Services/VehicleService.cs @@ -0,0 +1,61 @@ +using System.Text.Json; +using Microsoft.Extensions.Caching.Distributed; +using VehicleApp.Api.Models; + +namespace VehicleApp.Api.Services; + +/// +/// Сервис для получения информации о транспортном средстве +/// +public class VehicleService(IDistributedCache cache, IConfiguration configuration, + ILogger logger) : IVehicleService +{ + /// + public async Task GetVehicleAsync(int id) + { + var cacheKey = $"vehicle-{id}"; + logger.LogInformation("Requesting vehicle {VehicleId} from cache", id); + var cachedData = await cache.GetStringAsync(cacheKey); + + if (!string.IsNullOrEmpty(cachedData)) + { + try + { + var cachedVehicle = JsonSerializer.Deserialize(cachedData); + + if (cachedVehicle != null) + { + logger.LogInformation("Vehicle {VehicleId} retrieved from cache", id); + return cachedVehicle; + } + logger.LogWarning("Vehicle {VehicleId} found in cache but deserialization returned null", id); + } + catch (Exception ex) + { + logger.LogError(ex, "Failed to deserialize vehicle {VehicleId} from cache", id); + } + } + + logger.LogInformation("Vehicle {VehicleId} not found in cache. Generating", id); + + var vehicle = VehicleGenerator.GenerateVehicle(id); + + try + { + var expirationMinutes = configuration.GetValue("CacheSettings:ExpirationMinutes", 15); + + var cacheOptions = new DistributedCacheEntryOptions + { + AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(expirationMinutes) + }; + + await cache.SetStringAsync(cacheKey, JsonSerializer.Serialize(vehicle), cacheOptions); + logger.LogInformation("Vehicle {VehicleId} generated and cached", id); + } + catch (Exception ex) + { + logger.LogWarning(ex, "Failed to cache vehicle {VehicleId}. Continuing without cache.", id); + } + return vehicle; + } +} diff --git a/VehicleApp.Api/VehicleApp.Api.csproj b/VehicleApp.Api/VehicleApp.Api.csproj new file mode 100644 index 00000000..cbf27ed2 --- /dev/null +++ b/VehicleApp.Api/VehicleApp.Api.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + diff --git a/VehicleApp.Api/appsettings.Development.json b/VehicleApp.Api/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/VehicleApp.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/VehicleApp.Api/appsettings.json b/VehicleApp.Api/appsettings.json new file mode 100644 index 00000000..584a50c8 --- /dev/null +++ b/VehicleApp.Api/appsettings.json @@ -0,0 +1,18 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "CorsSettings": { + "AllowedOrigins": [ + "http://localhost:5127", + "https://localhost:7282" + ] + }, + "CacheSettings": { + "ExpirationMinutes": 15 + } +} diff --git a/VehicleApp/VehicleApp.AppHost/AppHost.cs b/VehicleApp/VehicleApp.AppHost/AppHost.cs new file mode 100644 index 00000000..e9c68d71 --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/AppHost.cs @@ -0,0 +1,14 @@ +var builder = DistributedApplication.CreateBuilder(args); + +var redis = builder.AddRedis("redis") + .WithRedisInsight(); + +var api = builder.AddProject("vehicleapp-api") + .WithReference(redis) + .WaitFor(redis); + +builder.AddProject("client-wasm") + .WithReference(api) + .WaitFor(api); + +builder.Build().Run(); diff --git a/VehicleApp/VehicleApp.AppHost/Properties/launchSettings.json b/VehicleApp/VehicleApp.AppHost/Properties/launchSettings.json new file mode 100644 index 00000000..5d622e6b --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/Properties/launchSettings.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17086;http://localhost:15193", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21146", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22096" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15193", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19210", + "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20142" + } + } + } +} diff --git a/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj new file mode 100644 index 00000000..4bbbd173 --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj @@ -0,0 +1,23 @@ + + + + + + Exe + net8.0 + enable + enable + 2a828687-7a1a-4343-ae7d-1d2e46d714a8 + + + + + + + + + + + + + diff --git a/VehicleApp/VehicleApp.AppHost/appsettings.Development.json b/VehicleApp/VehicleApp.AppHost/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/VehicleApp/VehicleApp.AppHost/appsettings.json b/VehicleApp/VehicleApp.AppHost/appsettings.json new file mode 100644 index 00000000..31c092aa --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/VehicleApp/VehicleApp.ServiceDefaults/Extensions.cs b/VehicleApp/VehicleApp.ServiceDefaults/Extensions.cs new file mode 100644 index 00000000..b72c8753 --- /dev/null +++ b/VehicleApp/VehicleApp.ServiceDefaults/Extensions.cs @@ -0,0 +1,127 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.ServiceDiscovery; +using OpenTelemetry; +using OpenTelemetry.Metrics; +using OpenTelemetry.Trace; + +namespace Microsoft.Extensions.Hosting; + +// Adds common Aspire services: service discovery, resilience, health checks, and OpenTelemetry. +// This project should be referenced by each service project in your solution. +// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults +public static class Extensions +{ + private const string HealthEndpointPath = "/health"; + private const string AlivenessEndpointPath = "/alive"; + + public static TBuilder AddServiceDefaults(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.ConfigureOpenTelemetry(); + + builder.AddDefaultHealthChecks(); + + builder.Services.AddServiceDiscovery(); + + builder.Services.ConfigureHttpClientDefaults(http => + { + // Turn on resilience by default + http.AddStandardResilienceHandler(); + + // Turn on service discovery by default + http.AddServiceDiscovery(); + }); + + // Uncomment the following to restrict the allowed schemes for service discovery. + // builder.Services.Configure(options => + // { + // options.AllowedSchemes = ["https"]; + // }); + + return builder; + } + + public static TBuilder ConfigureOpenTelemetry(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Logging.AddOpenTelemetry(logging => + { + logging.IncludeFormattedMessage = true; + logging.IncludeScopes = true; + }); + + builder.Services.AddOpenTelemetry() + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation(); + }) + .WithTracing(tracing => + { + tracing.AddSource(builder.Environment.ApplicationName) + .AddAspNetCoreInstrumentation(tracing => + // Exclude health check requests from tracing + tracing.Filter = context => + !context.Request.Path.StartsWithSegments(HealthEndpointPath) + && !context.Request.Path.StartsWithSegments(AlivenessEndpointPath) + ) + // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package) + //.AddGrpcClientInstrumentation() + .AddHttpClientInstrumentation(); + }); + + builder.AddOpenTelemetryExporters(); + + return builder; + } + + private static TBuilder AddOpenTelemetryExporters(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); + + if (useOtlpExporter) + { + builder.Services.AddOpenTelemetry().UseOtlpExporter(); + } + + // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) + //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) + //{ + // builder.Services.AddOpenTelemetry() + // .UseAzureMonitor(); + //} + + return builder; + } + + public static TBuilder AddDefaultHealthChecks(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Services.AddHealthChecks() + // Add a default liveness check to ensure app is responsive + .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); + + return builder; + } + + public static WebApplication MapDefaultEndpoints(this WebApplication app) + { + // Adding health checks endpoints to applications in non-development environments has security implications. + // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. + if (app.Environment.IsDevelopment()) + { + // All health checks must pass for app to be considered ready to accept traffic after starting + app.MapHealthChecks(HealthEndpointPath); + + // Only health checks tagged with the "live" tag must pass for app to be considered alive + app.MapHealthChecks(AlivenessEndpointPath, new HealthCheckOptions + { + Predicate = r => r.Tags.Contains("live") + }); + } + + return app; + } +} diff --git a/VehicleApp/VehicleApp.ServiceDefaults/VehicleApp.ServiceDefaults.csproj b/VehicleApp/VehicleApp.ServiceDefaults/VehicleApp.ServiceDefaults.csproj new file mode 100644 index 00000000..1b6e209a --- /dev/null +++ b/VehicleApp/VehicleApp.ServiceDefaults/VehicleApp.ServiceDefaults.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + enable + enable + true + + + + + + + + + + + + + + + diff --git a/images/aspire.png b/images/aspire.png new file mode 100644 index 0000000000000000000000000000000000000000..a41265d4da33f83f77fa29f634b932cc8945c5c8 GIT binary patch literal 56139 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

4wnQz>e``swGS^dC&?_a6Hd!ccqkHZa5B< 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%0A}`raUZg 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 literal 0 HcmV?d00001 From c3caebcfb8a73deb6a7a1c7212c138169c38ffb8 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Wed, 4 Mar 2026 23:31:00 +0400 Subject: [PATCH 03/10] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B3=D1=80=D0=B5=D1=88?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client.Wasm/Components/StudentCard.razor | 2 +- VehicleApp.Api/Models/Vehicle.cs | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Client.Wasm/Components/StudentCard.razor b/Client.Wasm/Components/StudentCard.razor index 022071e9..0b462df5 100644 --- a/Client.Wasm/Components/StudentCard.razor +++ b/Client.Wasm/Components/StudentCard.razor @@ -7,7 +7,7 @@ Номер №1 "Кэширование" Вариант №47 "Транспортное средство" Выполнена Морозов Сергей Сергеевич 6513 - Ссылка на форк + Ссылка на форк diff --git a/VehicleApp.Api/Models/Vehicle.cs b/VehicleApp.Api/Models/Vehicle.cs index c668e7bd..76c261c9 100644 --- a/VehicleApp.Api/Models/Vehicle.cs +++ b/VehicleApp.Api/Models/Vehicle.cs @@ -13,37 +13,37 @@ public class Vehicle ///

/// VIN-номер /// - public string Vin { get; set; } = string.Empty; + public required string Vin { get; set; } /// /// Производитель /// - public string Manufacturer { get; set; } = string.Empty; + public required string Manufacturer { get; set; } /// /// Модель /// - public string Model { get; set; } = string.Empty; + public required string Model { get; set; } /// /// Год выпуска /// - public int Year { get; set; } + public required int Year { get; set; } /// /// Тип корпуса /// - public string BodyType { get; set; } = string.Empty; + public required string BodyType { get; set; } /// /// Тип топлива /// - public string FuelType { get; set; } = string.Empty; + public required string FuelType { get; set; } /// /// Цвет корпуса /// - public string BodyColor { get; set; } = string.Empty; + public required string BodyColor { get; set; } /// /// Пробег (км) From 57a4928cdb3cca053427ccd3243ae66caaa03f58 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Tue, 10 Mar 2026 23:38:10 +0400 Subject: [PATCH 04/10] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CloudDevelopment.AppHost/AppHost.cs | 5 - .../CloudDevelopment.AppHost.csproj | 15 --- .../Properties/launchSettings.json | 31 ----- .../appsettings.Development.json | 8 -- CloudDevelopment.AppHost/appsettings.json | 9 -- .../CloudDevelopment.ServiceDefaults.csproj | 22 --- .../Extensions.cs | 127 ------------------ .../Controllers/WeatherForecastController.cs | 32 ----- TransportApp.Api/Program.cs | 29 ---- .../Properties/launchSettings.json | 41 ------ TransportApp.Api/TransportApp.Api.csproj | 17 --- TransportApp.Api/TransportApp.Api.http | 6 - TransportApp.Api/WeatherForecast.cs | 12 -- TransportApp.Api/appsettings.Development.json | 8 -- TransportApp.Api/appsettings.json | 9 -- VehicleApp.Api/Program.cs | 2 +- VehicleApp.Api/Services/IVehicleService.cs | 2 +- 17 files changed, 2 insertions(+), 373 deletions(-) delete mode 100644 CloudDevelopment.AppHost/AppHost.cs delete mode 100644 CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj delete mode 100644 CloudDevelopment.AppHost/Properties/launchSettings.json delete mode 100644 CloudDevelopment.AppHost/appsettings.Development.json delete mode 100644 CloudDevelopment.AppHost/appsettings.json delete mode 100644 CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj delete mode 100644 CloudDevelopment.ServiceDefaults/Extensions.cs delete mode 100644 TransportApp.Api/Controllers/WeatherForecastController.cs delete mode 100644 TransportApp.Api/Program.cs delete mode 100644 TransportApp.Api/Properties/launchSettings.json delete mode 100644 TransportApp.Api/TransportApp.Api.csproj delete mode 100644 TransportApp.Api/TransportApp.Api.http delete mode 100644 TransportApp.Api/WeatherForecast.cs delete mode 100644 TransportApp.Api/appsettings.Development.json delete mode 100644 TransportApp.Api/appsettings.json diff --git a/CloudDevelopment.AppHost/AppHost.cs b/CloudDevelopment.AppHost/AppHost.cs deleted file mode 100644 index e5c8089c..00000000 --- a/CloudDevelopment.AppHost/AppHost.cs +++ /dev/null @@ -1,5 +0,0 @@ -var builder = DistributedApplication.CreateBuilder(args); - -builder.AddProject("transportapp-api"); - -builder.Build().Run(); diff --git a/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj b/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj deleted file mode 100644 index d44a2009..00000000 --- a/CloudDevelopment.AppHost/CloudDevelopment.AppHost.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - Exe - net8.0 - enable - enable - 064f7aae-2d43-4c3f-856d-ddcddc898ca2 - - - - - - - diff --git a/CloudDevelopment.AppHost/Properties/launchSettings.json b/CloudDevelopment.AppHost/Properties/launchSettings.json deleted file mode 100644 index e33e87ea..00000000 --- a/CloudDevelopment.AppHost/Properties/launchSettings.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:17115;http://localhost:15240", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "DOTNET_ENVIRONMENT": "Development", - "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21024", - "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "https://localhost:23070", - "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22014" - } - }, - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:15240", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "DOTNET_ENVIRONMENT": "Development", - "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19230", - "ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "http://localhost:18106", - "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20055" - } - } - } -} diff --git a/CloudDevelopment.AppHost/appsettings.Development.json b/CloudDevelopment.AppHost/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/CloudDevelopment.AppHost/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/CloudDevelopment.AppHost/appsettings.json b/CloudDevelopment.AppHost/appsettings.json deleted file mode 100644 index 31c092aa..00000000 --- a/CloudDevelopment.AppHost/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning", - "Aspire.Hosting.Dcp": "Warning" - } - } -} diff --git a/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj b/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj deleted file mode 100644 index 8ad67261..00000000 --- a/CloudDevelopment.ServiceDefaults/CloudDevelopment.ServiceDefaults.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - net8.0 - enable - enable - true - - - - - - - - - - - - - - - diff --git a/CloudDevelopment.ServiceDefaults/Extensions.cs b/CloudDevelopment.ServiceDefaults/Extensions.cs deleted file mode 100644 index b72c8753..00000000 --- a/CloudDevelopment.ServiceDefaults/Extensions.cs +++ /dev/null @@ -1,127 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Diagnostics.HealthChecks; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Diagnostics.HealthChecks; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.ServiceDiscovery; -using OpenTelemetry; -using OpenTelemetry.Metrics; -using OpenTelemetry.Trace; - -namespace Microsoft.Extensions.Hosting; - -// Adds common Aspire services: service discovery, resilience, health checks, and OpenTelemetry. -// This project should be referenced by each service project in your solution. -// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults -public static class Extensions -{ - private const string HealthEndpointPath = "/health"; - private const string AlivenessEndpointPath = "/alive"; - - public static TBuilder AddServiceDefaults(this TBuilder builder) where TBuilder : IHostApplicationBuilder - { - builder.ConfigureOpenTelemetry(); - - builder.AddDefaultHealthChecks(); - - builder.Services.AddServiceDiscovery(); - - builder.Services.ConfigureHttpClientDefaults(http => - { - // Turn on resilience by default - http.AddStandardResilienceHandler(); - - // Turn on service discovery by default - http.AddServiceDiscovery(); - }); - - // Uncomment the following to restrict the allowed schemes for service discovery. - // builder.Services.Configure(options => - // { - // options.AllowedSchemes = ["https"]; - // }); - - return builder; - } - - public static TBuilder ConfigureOpenTelemetry(this TBuilder builder) where TBuilder : IHostApplicationBuilder - { - builder.Logging.AddOpenTelemetry(logging => - { - logging.IncludeFormattedMessage = true; - logging.IncludeScopes = true; - }); - - builder.Services.AddOpenTelemetry() - .WithMetrics(metrics => - { - metrics.AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRuntimeInstrumentation(); - }) - .WithTracing(tracing => - { - tracing.AddSource(builder.Environment.ApplicationName) - .AddAspNetCoreInstrumentation(tracing => - // Exclude health check requests from tracing - tracing.Filter = context => - !context.Request.Path.StartsWithSegments(HealthEndpointPath) - && !context.Request.Path.StartsWithSegments(AlivenessEndpointPath) - ) - // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package) - //.AddGrpcClientInstrumentation() - .AddHttpClientInstrumentation(); - }); - - builder.AddOpenTelemetryExporters(); - - return builder; - } - - private static TBuilder AddOpenTelemetryExporters(this TBuilder builder) where TBuilder : IHostApplicationBuilder - { - var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); - - if (useOtlpExporter) - { - builder.Services.AddOpenTelemetry().UseOtlpExporter(); - } - - // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) - //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) - //{ - // builder.Services.AddOpenTelemetry() - // .UseAzureMonitor(); - //} - - return builder; - } - - public static TBuilder AddDefaultHealthChecks(this TBuilder builder) where TBuilder : IHostApplicationBuilder - { - builder.Services.AddHealthChecks() - // Add a default liveness check to ensure app is responsive - .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); - - return builder; - } - - public static WebApplication MapDefaultEndpoints(this WebApplication app) - { - // Adding health checks endpoints to applications in non-development environments has security implications. - // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. - if (app.Environment.IsDevelopment()) - { - // All health checks must pass for app to be considered ready to accept traffic after starting - app.MapHealthChecks(HealthEndpointPath); - - // Only health checks tagged with the "live" tag must pass for app to be considered alive - app.MapHealthChecks(AlivenessEndpointPath, new HealthCheckOptions - { - Predicate = r => r.Tags.Contains("live") - }); - } - - return app; - } -} diff --git a/TransportApp.Api/Controllers/WeatherForecastController.cs b/TransportApp.Api/Controllers/WeatherForecastController.cs deleted file mode 100644 index 09b50aea..00000000 --- a/TransportApp.Api/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace TransportApp.Api.Controllers; - -[ApiController] -[Route("[controller]")] -public class WeatherForecastController : ControllerBase -{ - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } -} diff --git a/TransportApp.Api/Program.cs b/TransportApp.Api/Program.cs deleted file mode 100644 index edda8a7f..00000000 --- a/TransportApp.Api/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -var builder = WebApplication.CreateBuilder(args); - -builder.AddServiceDefaults(); - -// Add services to the container. - -builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); - -var app = builder.Build(); - -app.MapDefaultEndpoints(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/TransportApp.Api/Properties/launchSettings.json b/TransportApp.Api/Properties/launchSettings.json deleted file mode 100644 index bd0d0fd5..00000000 --- a/TransportApp.Api/Properties/launchSettings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:7866", - "sslPort": 44334 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "http://localhost:5167", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "https://localhost:7246;http://localhost:5167", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/TransportApp.Api/TransportApp.Api.csproj b/TransportApp.Api/TransportApp.Api.csproj deleted file mode 100644 index 3fe26a38..00000000 --- a/TransportApp.Api/TransportApp.Api.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - - - - - diff --git a/TransportApp.Api/TransportApp.Api.http b/TransportApp.Api/TransportApp.Api.http deleted file mode 100644 index be82d019..00000000 --- a/TransportApp.Api/TransportApp.Api.http +++ /dev/null @@ -1,6 +0,0 @@ -@TransportApp.Api_HostAddress = http://localhost:5167 - -GET {{TransportApp.Api_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/TransportApp.Api/WeatherForecast.cs b/TransportApp.Api/WeatherForecast.cs deleted file mode 100644 index c33fc50b..00000000 --- a/TransportApp.Api/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace TransportApp.Api; - -public class WeatherForecast -{ - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} diff --git a/TransportApp.Api/appsettings.Development.json b/TransportApp.Api/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/TransportApp.Api/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/TransportApp.Api/appsettings.json b/TransportApp.Api/appsettings.json deleted file mode 100644 index 10f68b8c..00000000 --- a/TransportApp.Api/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/VehicleApp.Api/Program.cs b/VehicleApp.Api/Program.cs index fe7825fb..789a1acd 100644 --- a/VehicleApp.Api/Program.cs +++ b/VehicleApp.Api/Program.cs @@ -19,7 +19,7 @@ app.MapGet("/vehicles", async (int id, IVehicleService vehicleService) => { - var vehicle = await vehicleService.GetVehicleAsync(id); + var vehicle = await vehicleService.GetVehicle(id); return Results.Ok(vehicle); }); diff --git a/VehicleApp.Api/Services/IVehicleService.cs b/VehicleApp.Api/Services/IVehicleService.cs index b2d588ed..f1702ea6 100644 --- a/VehicleApp.Api/Services/IVehicleService.cs +++ b/VehicleApp.Api/Services/IVehicleService.cs @@ -12,5 +12,5 @@ public interface IVehicleService /// /// Идентификатор ТС /// Транспортное средство - public Task GetVehicleAsync(int id); + public Task GetVehicle(int id); } From a0d4e279bbdcff020072afc11cecad4dbdaba130 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Wed, 11 Mar 2026 10:52:31 +0400 Subject: [PATCH 05/10] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VehicleApp.Api/Services/VehicleService.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/VehicleApp.Api/Services/VehicleService.cs b/VehicleApp.Api/Services/VehicleService.cs index 9bf6d313..897cbc26 100644 --- a/VehicleApp.Api/Services/VehicleService.cs +++ b/VehicleApp.Api/Services/VehicleService.cs @@ -10,8 +10,9 @@ namespace VehicleApp.Api.Services; public class VehicleService(IDistributedCache cache, IConfiguration configuration, ILogger logger) : IVehicleService { + private readonly int _expirationMinutes = configuration.GetValue("CacheSettings:ExpirationMinutes", 15); /// - public async Task GetVehicleAsync(int id) + public async Task GetVehicle(int id) { var cacheKey = $"vehicle-{id}"; logger.LogInformation("Requesting vehicle {VehicleId} from cache", id); @@ -42,11 +43,11 @@ public async Task GetVehicleAsync(int id) try { - var expirationMinutes = configuration.GetValue("CacheSettings:ExpirationMinutes", 15); + var cacheOptions = new DistributedCacheEntryOptions { - AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(expirationMinutes) + AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(_expirationMinutes) }; await cache.SetStringAsync(cacheKey, JsonSerializer.Serialize(vehicle), cacheOptions); From 1bcc9fb4037b21e68c173bd125f9a1203eae8c82 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Wed, 11 Mar 2026 10:54:38 +0400 Subject: [PATCH 06/10] =?UTF-8?q?=D0=BE=D1=84=D0=BE=D1=80=D0=BC=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VehicleApp.Api/Services/VehicleService.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/VehicleApp.Api/Services/VehicleService.cs b/VehicleApp.Api/Services/VehicleService.cs index 897cbc26..3d592baf 100644 --- a/VehicleApp.Api/Services/VehicleService.cs +++ b/VehicleApp.Api/Services/VehicleService.cs @@ -42,14 +42,11 @@ public async Task GetVehicle(int id) var vehicle = VehicleGenerator.GenerateVehicle(id); try - { - - + { var cacheOptions = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(_expirationMinutes) }; - await cache.SetStringAsync(cacheKey, JsonSerializer.Serialize(vehicle), cacheOptions); logger.LogInformation("Vehicle {VehicleId} generated and cached", id); } From a7da401c4b61a089807265696c035cbf88794cab Mon Sep 17 00:00:00 2001 From: kingtuler Date: Wed, 25 Mar 2026 16:03:01 +0400 Subject: [PATCH 07/10] =?UTF-8?q?2=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BD=D0=B0=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client.Wasm/Components/StudentCard.razor | 2 +- Client.Wasm/wwwroot/appsettings.json | 2 +- CloudDevelopment.sln | 6 +++ README.md | 31 ++++++++++++-- VehicleApp.Api/Program.cs | 8 +--- VehicleApp.Api/appsettings.json | 6 --- VehicleApp.Gateway/Program.cs | 27 +++++++++++++ .../Properties/launchSettings.json | 38 ++++++++++++++++++ VehicleApp.Gateway/QueryBased.cs | 29 +++++++++++++ VehicleApp.Gateway/VehicleApp.Gateway.csproj | 17 ++++++++ .../appsettings.Development.json | 8 ++++ VehicleApp.Gateway/appsettings.json | 15 +++++++ VehicleApp.Gateway/ocelot.json | 25 ++++++++++++ VehicleApp/VehicleApp.AppHost/AppHost.cs | 16 +++++--- .../VehicleApp.AppHost.csproj | 1 + images/aspire.png | Bin 56139 -> 94650 bytes 16 files changed, 207 insertions(+), 24 deletions(-) create mode 100644 VehicleApp.Gateway/Program.cs create mode 100644 VehicleApp.Gateway/Properties/launchSettings.json create mode 100644 VehicleApp.Gateway/QueryBased.cs create mode 100644 VehicleApp.Gateway/VehicleApp.Gateway.csproj create mode 100644 VehicleApp.Gateway/appsettings.Development.json create mode 100644 VehicleApp.Gateway/appsettings.json create mode 100644 VehicleApp.Gateway/ocelot.json diff --git a/Client.Wasm/Components/StudentCard.razor b/Client.Wasm/Components/StudentCard.razor index 0b462df5..4ff3bc91 100644 --- a/Client.Wasm/Components/StudentCard.razor +++ b/Client.Wasm/Components/StudentCard.razor @@ -4,7 +4,7 @@ - Номер №1 "Кэширование" + Номер №2 "Балансировка нагрузки" Вариант №47 "Транспортное средство" Выполнена Морозов Сергей Сергеевич 6513 Ссылка на форк diff --git a/Client.Wasm/wwwroot/appsettings.json b/Client.Wasm/wwwroot/appsettings.json index 3de814bd..765ff8a3 100644 --- a/Client.Wasm/wwwroot/appsettings.json +++ b/Client.Wasm/wwwroot/appsettings.json @@ -6,5 +6,5 @@ } }, "AllowedHosts": "*", - "BaseAddress": "https://localhost:7069/vehicles" + "BaseAddress": "https://localhost:7163/vehicles" } diff --git a/CloudDevelopment.sln b/CloudDevelopment.sln index 70f9f020..4ba75281 100644 --- a/CloudDevelopment.sln +++ b/CloudDevelopment.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.ServiceDefaults" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.Api", "VehicleApp.Api\VehicleApp.Api.csproj", "{54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.Gateway", "VehicleApp.Gateway\VehicleApp.Gateway.csproj", "{CBFDC59A-3449-C88A-3139-3F56883062A4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +35,10 @@ Global {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {54C02CF3-616B-EC3E-6F35-EAF0ED92B6B0}.Release|Any CPU.Build.0 = Release|Any CPU + {CBFDC59A-3449-C88A-3139-3F56883062A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBFDC59A-3449-C88A-3139-3F56883062A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBFDC59A-3449-C88A-3139-3F56883062A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBFDC59A-3449-C88A-3139-3F56883062A4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index 0d5463b8..a7c36e38 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ -# Лабораторная работа №1 — «Кэширование» +# Лабораторные работы — «Облачная разработка» ## Вариант 47 — «Транспортное средство» -## Описание +--- + +## Лабораторная работа №1 — «Кэширование» + +### Описание Реализован микросервисный бэкенд для генерации данных о транспортных средствах с кэшированием в Redis и оркестрацией через .NET Aspire. -## Что реализовано +### Что реализовано - Сервис генерации данных о транспортных средствах на основе Bogus - Кэширование ответов при помощи `IDistributedCache` и Redis @@ -14,6 +18,24 @@ - Оркестрация всех компонентов через .NET Aspire - Blazor WebAssembly клиент для отображения данных +--- + +## Лабораторная работа №2 — «Балансировка нагрузки» + +### Описание + +Реализован API Gateway на основе Ocelot с кастомным алгоритмом балансировки нагрузки **Query Based**. + +### Что реализовано + +- Запуск 7 реплик сервиса генерации через .NET Aspire (порты 5000–5006) +- API Gateway на Ocelot с маршрутизацией `/vehicles` → `/api/vehicles` +- Кастомный балансировщик `QueryBased` — реплика выбирается по формуле `id % N`, где N — число реплик + +### Алгоритм балансировки + +Из query-параметра `id` вычисляется остаток от деления на количество реплик. Результат — индекс реплики, обрабатывающей запрос. + ## Стек технологий - .NET 8 @@ -28,7 +50,8 @@ | Проект | Описание | |---|---| -| `VehicleApp.Api` | API-сервис генерации транспортных средств | +| `VehicleApp.Api` | API-сервис генерации транспортных средств (7 реплик) | +| `VehicleApp.Gateway` | API Gateway на Ocelot с балансировкой Query Based | | `VehicleApp.AppHost` | Aspire-оркестратор | | `VehicleApp.ServiceDefaults` | Общие настройки сервисов (OpenTelemetry, health checks) | | `Client.Wasm` | Blazor WebAssembly клиент | diff --git a/VehicleApp.Api/Program.cs b/VehicleApp.Api/Program.cs index 789a1acd..cc60671c 100644 --- a/VehicleApp.Api/Program.cs +++ b/VehicleApp.Api/Program.cs @@ -6,18 +6,12 @@ builder.AddRedisDistributedCache("redis"); builder.Services.AddScoped(); -builder.Services.AddCors(options => - options.AddPolicy("AllowClient", policy => - policy.WithOrigins(builder.Configuration.GetSection("CorsSettings:AllowedOrigins").Get() ?? []) - .WithMethods("GET") - .AllowAnyHeader())); var app = builder.Build(); -app.UseCors("AllowClient"); app.MapDefaultEndpoints(); -app.MapGet("/vehicles", async (int id, IVehicleService vehicleService) => +app.MapGet("/api/vehicles", async (int id, IVehicleService vehicleService) => { var vehicle = await vehicleService.GetVehicle(id); return Results.Ok(vehicle); diff --git a/VehicleApp.Api/appsettings.json b/VehicleApp.Api/appsettings.json index 584a50c8..1b91a460 100644 --- a/VehicleApp.Api/appsettings.json +++ b/VehicleApp.Api/appsettings.json @@ -6,12 +6,6 @@ } }, "AllowedHosts": "*", - "CorsSettings": { - "AllowedOrigins": [ - "http://localhost:5127", - "https://localhost:7282" - ] - }, "CacheSettings": { "ExpirationMinutes": 15 } diff --git a/VehicleApp.Gateway/Program.cs b/VehicleApp.Gateway/Program.cs new file mode 100644 index 00000000..06df0922 --- /dev/null +++ b/VehicleApp.Gateway/Program.cs @@ -0,0 +1,27 @@ +using Ocelot.DependencyInjection; +using Ocelot.Middleware; +using VehicleApp.Gateway; + +var builder = WebApplication.CreateBuilder(args); + +builder.AddServiceDefaults(); +builder.Services.AddServiceDiscovery(); +builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true); +builder.Services.AddOcelot() + .AddCustomLoadBalancer((_, _, provider) => new(provider.GetAsync)); + +builder.Services.AddCors(options => + options.AddPolicy("AllowClient", policy => + policy.WithOrigins(builder.Configuration.GetSection("CorsSettings:AllowedOrigins").Get() ?? []) + .WithMethods("GET") + .AllowAnyHeader())); + +var app = builder.Build(); + +app.UseCors("AllowClient"); + +app.MapDefaultEndpoints(); + +await app.UseOcelot(); + +app.Run(); diff --git a/VehicleApp.Gateway/Properties/launchSettings.json b/VehicleApp.Gateway/Properties/launchSettings.json new file mode 100644 index 00000000..bb603fb5 --- /dev/null +++ b/VehicleApp.Gateway/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:38233", + "sslPort": 44380 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5262", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7163;http://localhost:5262", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/VehicleApp.Gateway/QueryBased.cs b/VehicleApp.Gateway/QueryBased.cs new file mode 100644 index 00000000..f950af7b --- /dev/null +++ b/VehicleApp.Gateway/QueryBased.cs @@ -0,0 +1,29 @@ +using Ocelot.LoadBalancer.Interfaces; +using Ocelot.Responses; +using Ocelot.Values; + +namespace VehicleApp.Gateway; + + +/// +/// Балансировщик нагрузки на основе параметра запроса. +/// Реплика выбирается по формуле: id % N, где N — количество реплик. +/// +/// Делегат для получения списка доступных реплик сервиса. +public class QueryBased(Func>> services) : ILoadBalancer +{ + public string Type => nameof(QueryBased); + + /// Выбирает реплику на основе query-параметра id. + /// HTTP-контекст входящего запроса. + /// Хост и порт выбранной реплики. + public async Task> LeaseAsync(HttpContext context) + { + var pool = await services(); + var id = int.TryParse(context.Request.Query["id"], out var v) ? v : 0; + var target = pool[Math.Abs(id) % pool.Count]; + return new OkResponse(target.HostAndPort); + } + + public void Release(ServiceHostAndPort hostAndPort) { } +} \ No newline at end of file diff --git a/VehicleApp.Gateway/VehicleApp.Gateway.csproj b/VehicleApp.Gateway/VehicleApp.Gateway.csproj new file mode 100644 index 00000000..d0340915 --- /dev/null +++ b/VehicleApp.Gateway/VehicleApp.Gateway.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/VehicleApp.Gateway/appsettings.Development.json b/VehicleApp.Gateway/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/VehicleApp.Gateway/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/VehicleApp.Gateway/appsettings.json b/VehicleApp.Gateway/appsettings.json new file mode 100644 index 00000000..6053d188 --- /dev/null +++ b/VehicleApp.Gateway/appsettings.json @@ -0,0 +1,15 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "CorsSettings": { + "AllowedOrigins": [ + "http://localhost:5127", + "https://localhost:7282" + ] + } +} diff --git a/VehicleApp.Gateway/ocelot.json b/VehicleApp.Gateway/ocelot.json new file mode 100644 index 00000000..c39ac284 --- /dev/null +++ b/VehicleApp.Gateway/ocelot.json @@ -0,0 +1,25 @@ +{ + "Routes": [ + { + "DownstreamPathTemplate": "/api/vehicles", + "DownstreamScheme": "https", + "UpstreamPathTemplate": "/vehicles", + "UpstreamHttpMethod": [ "GET" ], + "LoadBalancerOptions": { + "Type": "QueryBased" + }, + "DownstreamHostAndPorts": [ + { "Host": "localhost", "Port": 5000 }, + { "Host": "localhost", "Port": 5001 }, + { "Host": "localhost", "Port": 5002 }, + { "Host": "localhost", "Port": 5003 }, + { "Host": "localhost", "Port": 5004 }, + { "Host": "localhost", "Port": 5005 }, + { "Host": "localhost", "Port": 5006 } + ] + } + ], + "GlobalConfiguration": { + "BaseUrl": "https://localhost:7163" + } +} diff --git a/VehicleApp/VehicleApp.AppHost/AppHost.cs b/VehicleApp/VehicleApp.AppHost/AppHost.cs index e9c68d71..2b5fe414 100644 --- a/VehicleApp/VehicleApp.AppHost/AppHost.cs +++ b/VehicleApp/VehicleApp.AppHost/AppHost.cs @@ -3,12 +3,18 @@ var redis = builder.AddRedis("redis") .WithRedisInsight(); -var api = builder.AddProject("vehicleapp-api") - .WithReference(redis) - .WaitFor(redis); +var gateway = builder.AddProject("vehicleapp-gateway"); + +for (var i = 0; i < 7; i++) +{ + var service = builder.AddProject($"vehicleapp-api-{i}", launchProfileName: null) + .WithHttpsEndpoint(5000 + i) + .WithReference(redis) + .WaitFor(redis); + gateway.WaitFor(service); +} builder.AddProject("client-wasm") - .WithReference(api) - .WaitFor(api); + .WaitFor(gateway); builder.Build().Run(); diff --git a/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj index 4bbbd173..54a837ad 100644 --- a/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj +++ b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj @@ -18,6 +18,7 @@ + diff --git a/images/aspire.png b/images/aspire.png index a41265d4da33f83f77fa29f634b932cc8945c5c8..6983aa6615f80b2e7715fcadb0630845af540645 100644 GIT binary patch literal 94650 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�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 literal 56139 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

4wnQz>e``swGS^dC&?_a6Hd!ccqkHZa5B< zI?fpiba8T3R&7Lu+_RF|jAf^<9U8`!|LzB_Cu?tSv4y{;^aZ{GvwWxe$0%JhOP?0| z@l6&Q;8Rm_C&!+Fh^?N#oJ^BlVex=JJ~WnR26j#O+FAf(6B^)GWTM z)3cZWeO?orLdTW7WoI@Ve!o>#7yCXN^Ez&lo7Ul6oVvD4HCu}tiao)56rHYL(Q!>t`90iRRM=Gd zy9ca(I}hMOMqU1jjnWR$aj(D9Ptjk=iS9Cepc(Ii?Bp2qgbyRviEZDdfC{=uzv+>o zO)n)Zancfki2`_77&3Dek8-`mxJQ}x2p;WLkiAF#PRJvl1FoMQ|9$G4W$m-AvU-c4 zgCf{>qsid%x64IT`S!F>#`_589Vcr4gl zAh+QyuqwVGe))N7xYktd=7i74e!nU8Yv0%bXD4nkW^E>szDG|Sku%YbpT>tF>gk2E z{sSA%#;CgR;;e!yghk!m*9tkXKrz98Y>gC{a5$nzn?&(&45lb$<8>yc5y6Ozk z>1%O<_h6H&wO;%z8bQ(K+$Tj`<9_+j@NBib!>S<2<>BP*2vA2eNAd|dPSx&>2rT7C5 z!`9agjur)40T3vGjMCVmb~1}KK=wZxQ%`Gj{FJ??QjwCP+!1RqbBv{N(O5*E;r)Ce zNrsg{6Q2Q^Ph?qKrj1Ln>NmJ=$g2`1yq>~|ou^^62E5aLgotbUmg&bBex{_Ou2hl~ zH=jX9ub$!ZuVuuY7w6I|K*N)}y!+%oN9y=$Zq=63N7tzN`K7gsuGm6t^uY*w)6Gc#ff&8I&dXBPaLeCF~~;cdO&JMPKj(_;xkx`ZtE+0^5FYZy6i)TE4ESl zahg6Z%T9{#A}eT@slTJ;4mV;blm5_eDxfOMBot}lZ?);`>CoFL}q|qqyDt=tX;f3F|fDK#D%9Lpa zcpGRmyJ_Gfm1izc#fN6}x2}?#pO_e~MPFF7_(X%n!NqHA;p3jyMn%gWy_Nd%-o{T8 zU^LfYNUNIeIq9E~;NmMIx}Rp- z%Y!{<=ID-bImm_lC*}pj5!XSY-JLgT?WFoi+#Ol5#se{omZ%aH!#FFu@eFko5G>}b zxZOrc$GoA5$1WzXZZV!>HeNij31t6h3Gm2w2s@>(Tw>t#Lc@iLM(}*xHMdyi;)IN# zCJTn(M!vBvYZ+4xeucEe42l*GZ;@{$gx+}GdUHmP<;KD&HSoS%lkW%qDsZ>JwwA}L zt!CV}FtP#rTLtwcV<|qyY4FqQ=4`iLiQQUaOC`f|wcqyN5J_!elm^%M$AenEjNxbt zyO!WS#02aJRO^Usv9Q~B8qZ>vO}kvv7qYiZCyK}m2_IBys@neaMQp)LV)sMflU&=1 z2#E`g)cMufnZXGlk)52nBG>}#!NtlO8I11H!&WIb+lywGL!XzFcHREb^Y-ifbJj6S zJ0aoEtQ|TYUJVYr_Y0!Z2NSTt@iY*x`hx6uXa!39uorRdW2+kcK)~ZX#>Sst_Eg?l zw@0pr`|a%9D=TXtWLXrCW-JToe|J_}s5rO!iFr?bv#I#Jf*EPWK;+pEM7<^7N$aM- z4`Ctbz|Q+eNBTO;pms${1KXRi^{D}aQc?R(x;%dWq5M|*tE5QWkD=VXQ`chV=5=3B zd&A3nJ|!#9R10nL2AZpF*FlY_34P74MtE#O)#FuJd;jk@>flxsVv=Nd5vfOa3eL`5 z-adU5I5So0^=FaVYCgo@%^k834Z<@z1$_u|zZI)rh@b{@O_#u=-2sS*4HQ zKbn@eQ@gzg1(DF6Xd#$xjNyMwOMAtIa>IJ|$QgWQ`(yAs(U6T#i=>WAp9y zl{p~|bGw%OWLIyB(0b}WUXm~120^NymxFDxxl0!h{FL6N_q#CQYNPjL(6J#J}~oepfmCHauNVO-Py{KI~bQ5snBlpYLTQEsS1J z2nK3N_R%>AuK^wL`cQ#b>EPKrm3yQEQ13atH8_vBEvS8y%QYli9`l$Eo->hFVw-in zDj;G4J+@gHH+j23gw7%u2LIwp-6**DXpIvpI`RYcCRcy3b(H;%`a7Ish!XLrQl9B1 z(MXdeTW+Wr{7TjF6!oj@Hq6w)0M^ZEwDs2+zZ4XUE}X$#jdBy|sm>)l(-=ChXJ>$k zAy^USK=1E{>VY4_r`R~Qgsd0^wy*OCjsW$0 z0B6>$&8`i__{>&KQrwA@o}(U%btQ+Vb?-nW5SG(+ag&jtaFmI$+`p&&#Yo@Bp{D~k zjAU7|RL(>!Kd5$oih(;RUgisLI5lx@EB#n~+~kVjzHgyH7#=?j|A44ag0$~Sam!BK zq5^S4#xoIO%RFCcK&!)Uacc45AZXNg6i@4U$D?|9Zf15}6u|i0xtnuQUfPymW#S+d z71uU~oqg6c-`~~7eDX$a^np=@kVwOc0A+$8V*AGu2bSM;rl7pxAXHHMGY4?(p8k~8 zFv`-CS2Vm@zHtn5=U|0~1n_aQuHBo+@h^j8lC^>r+f_xgWKXJ1F}F4)X&Z4A{cF5@ z4_4KxliQ$S%xYeKQrorOuNihhBCX3s7U=>dQj!IPqM3R#w;^+xWY8(W)VgmuNI&;?(%fDVAp!)N;AP4GO(Ox1wD;9T+<{5ny8t_ zlDAkrY#Nay*erxxJo-vG$VQ9)^Y_wv#_QDGv({v=Us2nMGIGel_;I)`*zTFe3ifBA zyhyrCSx4RBFbiUNd&$fqAr zsycp2{y&0E^V9UA_;0yPnhCTauMX`j*wB>uFI-c=;Sa%DN-Csu8m%oeno>{p3aMn2 z2U(@((}AhE%E3tm(oU4q0UZMA65El=(xlzJAVet&{b_M&wyOPtGWTIPb$QlUMuL}G zFAY1J%5Xe9Zk>4AAGli(v59hnrC9)6fUZubs6B)YygV1ng!55fWybbgR;T9w%#pcy znU3FCzsBr;gE=v?r$RlkDPD6;0+JY@U;K^z=z_%JJngZ`^lexFIHgC#mCIRrr`3fh za68cu;A|}#_(SIJ8NZl&y8NJ9y0^J9@^45!CL=idvAfAjAL!bq77`RqT=?ZLJ#JYh<(zf4BfUnjeA)!*~4*Zw=!|8H;be@s63 z`;d40zKc6Op*6-o{=G@me=bLCeSCaa8tPnN0vEI%GfI;+uy@thQOAV+sxIGenYG)e z8@panvegk9p1Rfe`$|6LV0~xN&|`lU-o1 zMn~2zS-xxD1D<8mpJ)_3_f6m+saJ}a0$BRhn;emoPmijb-FX~_s?CnS>%VGz+tNuV zb6e_CT=87QJn0a#{jiB@X@hwoeIWEI10Y|Mw#5s7%QyZ>Yiw+2(@qp$!kFbiWzHzKlB4}-cJQd+!Bu!S;9%l!i2TzD1+^q z!F_`qdgES)Oe5y#Y|i)f>IoR+U7qbB-)6R{AzF(LLFc`m3jVENI_#H#e)d@yZ!^|# zy>prwrRTpvOUI&(PnOClWeUpmBvN&X_remqEooL~c`GgTwM6;SLK&X+q&o~j)6ZD8 zScW{q+L4RLy_6Xn0?mBcz>M^6=kt{|2jg+*OxE~Y_XQl5L?Fph{XFtFZ#JOZD5hNY z+Ad0t#_(OE<6Z?*6FLh_(az&q{MwahH{ufP4Xs{Q9KZ26vSb#?kDdK-kx`{DJcFCS*q(L(SPKeYN07J(>)W zzdV?2qA8&;&Y5=N5+eN(`C}J5EJ`B4sTNn9?;bWU#Miq8@MA3>5{4sT?M6igU8Kjl zQuW}6Qv#_5YqroxqN>{7ytgtg*7ZB2w(q#X!V(_rXJ8b5J~3kWnnP}Yfwqi>v2}0E zSMq!l4SA%af2Zrs4jQZA<%A3r3)aC_kimh_MIYz5|B~E8ZpY}N35@5<7J!bk5TDs- zH|f&>Ewr=~>N-n(z1YK}oDBg95&)JyqVYz*&(vsb9A!v5>K;UH?8$#i?1Av+Gf)y> zm%C=&YAPOZFw|xuxB5`cF@XYHmKi$zIBqsCHL-A>J|M6jdD#(!CnM}E{aXUffInvh z#z-UAMehor%5^;(UpE=Oqnfdh;26@_~;Z~2Oj_c2i2&B0?7uNHiO;+zC zNEj%88W@R8+g821MK?GWI_Xqj%)FXlU0Wd6JysWe6DNT!@z{3g_*$AJU#UL3J5d*` zo;H<(a+Ssoc^&!)32-02-o|z|%b2quF05pyCV(%`KuSa}h-oQn2oSt;SV)N@cxyA^ z0+W!K>(L-8q}XMu;99Wi2%d%zqo9#8`g+HR{hpWNPY$h_{ySdZ8pnL&w~zLh$B&)1 z;7&l~nC$&>tG~Ca6%ep|;G4}QV;Ok~E(5 zC-P1m*r=&2Z>UJ}@VRHaw05WyF&H{+nUNq(aWAO|2jix8u81BkJ%AuV>rw-$CB==o z7Nd`tpTocjIxFRyg_mP8mJ22#`fm54MjUd>XMaSEu{>AX^EaTNmzf$1Un5JB<$nv? zeS5~pbj9{gTqUAkJeAQ2#Z9;KfbPGDA%>}1g80InxWiKT`b}a~?@FkDtQ&g_+PYL% zA|GFQwK>ImCd+qHh}%q64ZgC9vu5Y*3ZPl;bo+dgUr zX{!xOzfQAH$AST-&SBHPQ(MXeeem{L#7lE*szm$Vb60Y*+%WYA!{VKZb`Zz?kkF*< z25a?yA^37C2~}+iP1tp4Ilc%r6!yaNONAYf#lqgey+&%w{fY2Tz4?yty^i*3UuiPZ z)IUFRC$&YxRZs5(fbZ;7y$}xi18vTn9zGO2*qOo)tEGHrpy=kh@UyU)X3O^!Ddq~S z!6fSw^>t$TOi+Q8^wc@!z&;}l_Xrmgt_Li zEa#@5N-axR0$Ak}FAEb`s_Y-l+^0;(kRC^REzB*4>Z5%BQk zckZz@rYW6&TIp4#nvGK10lhF|%@K^2yZ)Dun2s>Ww1rr2SFB!zvh0U$mE<0(1^PD` zQmU|_KwtY-+a2O)ooMAPew)3?L1cOlzhX_2SAJ;dT;kLzA`Szxyic13lo?|)rW8kJ z-FWM68I)*qj|JE5Ds!B9Vle`szWP)c<_3+bpYZN~Y4Yl&KnQEf??mJ}g&~Y*^-WT= zQ4PgrF%AwXbzny33kThZ4_04+KYINI@y|q++pp8onbKT_hp6q3NKpW zmMALT&@>mE;g68deUHEgUp!JQuPdW_!c0(J^(QY#N~J!froYBbRfun|v5h!xCPSi# zRyNmM0m(?+bb`cBhDxL3UIgi88LOOg4-K6)1de%-*H^hlsaW7GSenAthWTV9VT@7fykhhfr>$0dY4&~NbrnYRu3G)9N~8ZaRs{jb~v zRvC#imX;KjF{{H?;4d|ene7HSd9L;yG9y(Bx(2{At0HBd5slAFi)FCnqN~4-jN$rQ zu>xzdSxXmW`Y+56(984|2vUS@ft{+#z9GH0t1PywKoYg-4|ZKIGyIDx~t5Wa)U+kK8_=u1z-dc6BD&*;IY0D%iH8jNNczhm|}1!^v6k%f7}N2f>()cs_PXw`n<~ zXgWlp$zu4WE9t9tF(T}0m1YZpFj(yNO{2FftX`Ic&W4^QK)X#i_o+gGeC@K%%cPa? z;laXb7gAb=-3feya&k#TUxzbE$R#3Iwoe#k6a3Yo=-`KYr@iDq7 zt|jiAstoe7AHV4(_m6F=sAv32hgAk8`6tdod`vLFfGqFY6t$1>g_fF}v+$M~(w^IC z9Gb~~W2^t2_U8t+Ue$~ZZyDe@z827a*su8Z9J{?5|A76gF#-PJKvi|h!|w4jY%ik! zh2Of-Nyw$bJ0AbS`j1X(+x>Aqcj3#%WL((?kF)v&mC}KbLZ)zG3k~bFw!&IU|1~*o zvO3tm-m{>xL5>lSh<+A_UlYmcV?HuqbETIGDsA!JcyLKY2r}tJ4i;qSJh{Z7`5AFc z&DrZMj0&{YKE1jXZy`0s^6% z{xnu*v?uh|y-6cTCqppoGwg3?Cgmm+aJ!f7a~F0rA1}OAsb>lJ(EQ7E1Ug1wnHTO) zXuJ8cz55K&E{2MzWNuj@i4oF6}Qn>|+Q>Uu?G8VdguBI*Qa8GHJ5+An56 z{{`IaDvbeQ=g9XK%-ZE9Q{4Wk0El%1{-FR=9sF7b%J-qwH>f}_4a$fh!K;hiQA`Dr zQTvqF^C=Bc`q1X5%Ur5hUjBcn0F3Ex4PhJ$Qa1DXtSzrE0*75Yb~hAiT;>V~ZoIYE zcQ~fW?Q>5G6rlBMc9$GAUs)d4ITHRysbGe0zj{d1ZD%LoK^V$!;FTrG*U$NmTu?dU zvIXw^gl*ey1O!pKvg4Q1vTAGe*11edAIk6%g^qN}9Um+CUanomAJ)1$HB7XMOhlRc zb{YcgzuxkK83G!sj~LF)3XhSuoc#MTH-2LSK2>s?5RmYtj#-@T=y zV|7Nhz@4S4hk(0-p4Tr=-EY%>=_Kl%e&NG*L#aSD0K^fNM{-lCjeu_viB#~zxwOrh z&Z|uNay>E7^~FldP_aM@dPw~p#@S)&)H5jQ&M%P4yFmFew56>5pHe|`GN<&N4{&D8 zHQKQ*oXSk&XvILw#91y9_(cYFp%7G?cic_AyeB5LOtjMZKezIq4SX$PZ|#%2hd6RY z&u%6FwG>Dhe%02w7SD;y`4pfvLOW~s#&r8^Y~wUAr{KuTyzFY38Z|3(BcZ8_60E+P z$jd_;))|+vqzsSM;-4Zx=uxySN zB=_a_LGbv$hy=(@tUz~NYQ4m_%YDT9=Xe7${@U=5RSYPo z=t@(wm1BXmIpyIfycParehn1JL&Ky-D{1Lj3>?C4GeY{t)Acj^lgg@kc9$jPWtK`b zTLnVU{x-JJ)%ybV(~kx$=+nB=ZkEO*i~1@+?PB;%*!a5)@bmp~K+)H$B2Smn8Y?OE+7QxBM`O;8^jlx5_~5wCgF1 zKj)$DKsaVOnpeJ_oM6ieyqH<7t2iMHU}&r>?_TYYGc`Q1er|2`x@N$^}5_fk+MiI*IF>lf3>vnuT=5)fUKQ*lV`f{!uJdUJIZo&vr zQV*GVnAN8S4Zdp}JQzip76E<&Yu)Wtk(WMw=MH32Z~y8$wZ!iW*ni0cB%uG!1l$|> zGZRop7i0o}A2Q|quZ?D3!hjW#cL9qTzjY$aSVNYBp+>Ipi(^k~y`rsPxFGk`VL!EKNt*UT$ zx7d=Su36s)l9O6{Nb!G^Biy#9O;qvX=pZhZo0h;Wj-P~1&m;?5DM(Wcjt~UiM8V=Y z2$<5eHaBoykSvgTr6G!RYMsudNwR(JWL4|%B4VW5763b)l1`&ct)$jHD~Z|pvqNpu z-x2Thhsr)RZ46KoF&V|uj!7~gV*VUb|8H%=Q~sP-=}8>tq==8ST}vu09%nwxG`?8S zqveFsHc6>AaewAK*5GF_-c@EWmyQ%F*40p&{ci*0`Gyx*Nzu* zf&wSa{xh+8mH*(PTm%$`6ho$eA_7*tF37Sn@R`i{brQBY8`IFpFch#fgl0UcWAF(+ zE8Py-CAxBAV1wX|e5wd&Z58^+r7%Uj7aHqsGHTDqs_f|)IoEVdx8O~xO>R#_gPVp^ zgLapo199JnXPr55mi=MrKLDRW2&c}g7Z(Q&B6Q^y8!CT^jZj@EyScf(nE)geW+maq z`X`tBS7X-hb3@Hb@verL&nvjj%zNsVc1wTe3QSi8i__Z&orl|u?ONnpqdr7R&!+_k zu((yvk_clhItJ63G-+h{MGjU_1kfQWBcx{4NEhGX`eP7Za7pV7D;7nxJ%!h9~kHxL{NfrURgdo~bU#1;z8!E2jcUBM!(qii=B$9b~rf z-2aZ4G5n!RcJVuLSkuN)lEQ)@s!Q^}634?GLAy8eQUr_E>lw(h)HUn(nK-2#7mRh| zJx%n71gucr@zm2s+q=I8HFAt*i4255Kuvo(|0aVc^gcZ_7$(#>>|+M}@o1K!K{b-WVEU-Fli~y8|4}@_NaQ<}Ml=0k^ztqX+H0G$0Y&>*TbG|7 zqFgEeY-AMC5~vkW-XR+u;3I&^#BwFY#up}{XesYEtb#j1MWw7 z*ZeddI)9Mm1mBymSPHRIfq`yI{LiqP<=pu2_|u=tRNx&Xg|DuxL~J;ibKUVBc;PAnZp#03NOwo;55IU1G>qv?`?0sG7!fsIIH Date: Sat, 25 Apr 2026 17:06:04 +0400 Subject: [PATCH 08/10] =?UTF-8?q?=203=20=D0=BB/=D1=80=20=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=B4=D0=BD=D0=B8=D0=B5=20=D1=88=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D1=85=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client.Wasm/Components/StudentCard.razor | 2 +- CloudDevelopment.sln | 12 ++ File.Service/Controllers/S3Controller.cs | 47 +++++ .../Controllers/SnsWebhookController.cs | 69 +++++++ File.Service/File.Service.csproj | 22 +++ .../Messaging/SnsSubscriptionService.cs | 43 +++++ File.Service/Program.cs | 34 ++++ File.Service/Properties/launchSettings.json | 38 ++++ File.Service/Storage/IS3Service.cs | 32 ++++ File.Service/Storage/MinioS3Service.cs | 93 ++++++++++ File.Service/appsettings.Development.json | 8 + File.Service/appsettings.json | 12 ++ README.md | 34 +++- VehicleApp.Api/Program.cs | 7 + .../Services/Messaging/IVehiclePublisher.cs | 15 ++ .../Services/Messaging/SnsVehiclePublisher.cs | 42 +++++ VehicleApp.Api/Services/VehicleService.cs | 18 +- VehicleApp.Api/VehicleApp.Api.csproj | 11 +- VehicleApp.Api/appsettings.json | 3 + VehicleApp.AppHost.Tests/IntegrationTest.cs | 172 ++++++++++++++++++ .../VehicleApp.AppHost.Tests.csproj | 33 ++++ VehicleApp/VehicleApp.AppHost/AppHost.cs | 38 +++- .../CloudFormation/vehicle-sns.yaml | 29 +++ .../VehicleApp.AppHost.csproj | 11 +- .../VehicleApp.AppHost/appsettings.json | 3 + images/aspire.png | Bin 94650 -> 114038 bytes 26 files changed, 816 insertions(+), 12 deletions(-) create mode 100644 File.Service/Controllers/S3Controller.cs create mode 100644 File.Service/Controllers/SnsWebhookController.cs create mode 100644 File.Service/File.Service.csproj create mode 100644 File.Service/Messaging/SnsSubscriptionService.cs create mode 100644 File.Service/Program.cs create mode 100644 File.Service/Properties/launchSettings.json create mode 100644 File.Service/Storage/IS3Service.cs create mode 100644 File.Service/Storage/MinioS3Service.cs create mode 100644 File.Service/appsettings.Development.json create mode 100644 File.Service/appsettings.json create mode 100644 VehicleApp.Api/Services/Messaging/IVehiclePublisher.cs create mode 100644 VehicleApp.Api/Services/Messaging/SnsVehiclePublisher.cs create mode 100644 VehicleApp.AppHost.Tests/IntegrationTest.cs create mode 100644 VehicleApp.AppHost.Tests/VehicleApp.AppHost.Tests.csproj create mode 100644 VehicleApp/VehicleApp.AppHost/CloudFormation/vehicle-sns.yaml diff --git a/Client.Wasm/Components/StudentCard.razor b/Client.Wasm/Components/StudentCard.razor index 4ff3bc91..87b38c08 100644 --- a/Client.Wasm/Components/StudentCard.razor +++ b/Client.Wasm/Components/StudentCard.razor @@ -4,7 +4,7 @@ - Номер №2 "Балансировка нагрузки" + Номер №3 "Интеграционное тестирование" Вариант №47 "Транспортное средство" Выполнена Морозов Сергей Сергеевич 6513 Ссылка на форк diff --git a/CloudDevelopment.sln b/CloudDevelopment.sln index 4ba75281..0d6971ed 100644 --- a/CloudDevelopment.sln +++ b/CloudDevelopment.sln @@ -13,6 +13,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.Api", "VehicleAp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.Gateway", "VehicleApp.Gateway\VehicleApp.Gateway.csproj", "{CBFDC59A-3449-C88A-3139-3F56883062A4}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VehicleApp.AppHost.Tests", "VehicleApp.AppHost.Tests\VehicleApp.AppHost.Tests.csproj", "{D88DD2ED-1E2A-4997-80D5-BE76658A927B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "File.Service", "File.Service\File.Service.csproj", "{DF944664-05C9-E01F-B262-C8B381C1EFE1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +43,14 @@ Global {CBFDC59A-3449-C88A-3139-3F56883062A4}.Debug|Any CPU.Build.0 = Debug|Any CPU {CBFDC59A-3449-C88A-3139-3F56883062A4}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBFDC59A-3449-C88A-3139-3F56883062A4}.Release|Any CPU.Build.0 = Release|Any CPU + {D88DD2ED-1E2A-4997-80D5-BE76658A927B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D88DD2ED-1E2A-4997-80D5-BE76658A927B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D88DD2ED-1E2A-4997-80D5-BE76658A927B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D88DD2ED-1E2A-4997-80D5-BE76658A927B}.Release|Any CPU.Build.0 = Release|Any CPU + {DF944664-05C9-E01F-B262-C8B381C1EFE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF944664-05C9-E01F-B262-C8B381C1EFE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF944664-05C9-E01F-B262-C8B381C1EFE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF944664-05C9-E01F-B262-C8B381C1EFE1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/File.Service/Controllers/S3Controller.cs b/File.Service/Controllers/S3Controller.cs new file mode 100644 index 00000000..3ae5e61b --- /dev/null +++ b/File.Service/Controllers/S3Controller.cs @@ -0,0 +1,47 @@ +using System.Text.Json.Nodes; +using File.Service.Storage; +using Microsoft.AspNetCore.Mvc; + +namespace File.Service.Controllers; + +///

+/// HTTP-интерфейс на чтение содержимого бакета Minio. +/// Используется интеграционными тестами и для ручной проверки состояния хранилища +/// +/// Сервис доступа к бакету +/// Логгер HTTP-обращений +[ApiController] +[Route("api/s3")] +public class S3Controller(IS3Service s3Service, ILogger logger) : ControllerBase +{ + /// + /// Возвращает список ключей всех объектов в бакете + /// + [HttpGet] + public async Task>> ListFiles() + { + logger.LogInformation("ListFiles was called"); + var list = await s3Service.GetFileList(); + return Ok(list); + } + + /// + /// Возвращает содержимое объекта по ключу. Если объекта нет — 404 + /// + /// Ключ объекта в бакете, например vehicle_42.json + [HttpGet("{key}")] + public async Task> GetFile(string key) + { + logger.LogInformation("GetFile was called for {key}", key); + try + { + var node = await s3Service.DownloadFile(key); + return Ok(node); + } + catch (Exception ex) + { + logger.LogWarning(ex, "Failed to download {key}", key); + return NotFound(); + } + } +} diff --git a/File.Service/Controllers/SnsWebhookController.cs b/File.Service/Controllers/SnsWebhookController.cs new file mode 100644 index 00000000..1ffc78ad --- /dev/null +++ b/File.Service/Controllers/SnsWebhookController.cs @@ -0,0 +1,69 @@ +using System.Text; +using Amazon.SimpleNotificationService.Util; +using File.Service.Storage; +using Microsoft.AspNetCore.Mvc; + +namespace File.Service.Controllers; + +/// +/// Эндпоинт, на который SNS отправляет запросы подтверждения подписки и уведомления +/// +/// Сервис записи в Minio +/// Логгер входящих сообщений +[ApiController] +[Route("api/sns")] +public class SnsWebhookController(IS3Service s3Service, ILogger logger) : ControllerBase +{ + /// + /// Обрабатывает тело SNS-запроса. Для SubscriptionConfirmation выполняет GET + /// по SubscribeURL (с переписыванием адреса на LocalStack). Для Notification + /// передаёт сообщение в . Всегда отвечает 200, + /// чтобы SNS не помечал подписчика как недоступного + /// + [HttpPost] + public async Task ReceiveMessage() + { + logger.LogInformation("SNS webhook was called"); + using var reader = new StreamReader(Request.Body, Encoding.UTF8); + var body = await reader.ReadToEndAsync(); + + try + { + var message = Message.ParseMessage(body); + + if (message.Type == "SubscriptionConfirmation") + { + logger.LogInformation("Received SubscriptionConfirmation, confirming"); + using var http = new HttpClient(); + var builder = new UriBuilder(new Uri(message.SubscribeURL)) + { + Scheme = "http", + Host = "localhost", + Port = 4566 + }; + var confirmation = await http.GetAsync(builder.Uri); + if (!confirmation.IsSuccessStatusCode) + { + var text = await confirmation.Content.ReadAsStringAsync(); + logger.LogError("SubscriptionConfirmation returned {code}: {body}", confirmation.StatusCode, text); + } + else + { + logger.LogInformation("Subscription confirmed"); + } + return Ok(); + } + + if (message.Type == "Notification") + { + await s3Service.UploadFile(message.MessageText); + logger.LogInformation("Notification was processed and uploaded to Minio"); + } + } + catch (Exception ex) + { + logger.LogError(ex, "Failed to process SNS message"); + } + return Ok(); + } +} diff --git a/File.Service/File.Service.csproj b/File.Service/File.Service.csproj new file mode 100644 index 00000000..a4544c40 --- /dev/null +++ b/File.Service/File.Service.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + enable + enable + true + $(NoWarn);1591 + + + + + + + + + + + + + + diff --git a/File.Service/Messaging/SnsSubscriptionService.cs b/File.Service/Messaging/SnsSubscriptionService.cs new file mode 100644 index 00000000..2c9326e2 --- /dev/null +++ b/File.Service/Messaging/SnsSubscriptionService.cs @@ -0,0 +1,43 @@ +using System.Net; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; + +namespace File.Service.Messaging; + +/// +/// На старте приложения регистрирует HTTP-вебхук File.Service в SNS-топике +/// +/// SNS-клиент для вызова Subscribe +/// Источник ARN топика и URL подписчика +/// Логгер +public class SnsSubscriptionService( + IAmazonSimpleNotificationService snsClient, + IConfiguration configuration, + ILogger logger) +{ + private readonly string _topicArn = configuration["AWS:Resources:SNSTopicArn"] + ?? throw new KeyNotFoundException("SNS topic ARN was not found in configuration"); + private readonly string _endpoint = configuration["AWS:Resources:SNSUrl"] + ?? throw new KeyNotFoundException("SNS subscriber endpoint was not found in configuration"); + + /// + /// Отправляет в SNS запрос Subscribe. Подтверждение подписки + /// выполняется позже в + /// + public async Task SubscribeEndpoint() + { + logger.LogInformation("Subscribing endpoint {endpoint} to topic {topic}", _endpoint, _topicArn); + var request = new SubscribeRequest + { + TopicArn = _topicArn, + Protocol = "http", + Endpoint = _endpoint, + ReturnSubscriptionArn = true + }; + var response = await snsClient.SubscribeAsync(request); + if (response.HttpStatusCode != HttpStatusCode.OK) + logger.LogError("Failed to subscribe to {topic}: {code}", _topicArn, response.HttpStatusCode); + else + logger.LogInformation("Subscription request for {topic} accepted; awaiting confirmation", _topicArn); + } +} diff --git a/File.Service/Program.cs b/File.Service/Program.cs new file mode 100644 index 00000000..bc25a9ae --- /dev/null +++ b/File.Service/Program.cs @@ -0,0 +1,34 @@ +using Amazon.SimpleNotificationService; +using File.Service.Messaging; +using File.Service.Storage; +using LocalStack.Client.Extensions; + +var builder = WebApplication.CreateBuilder(args); + +builder.AddServiceDefaults(); + +builder.Services.AddControllers(); + +builder.Services.AddLocalStack(builder.Configuration); +builder.Services.AddAwsService(); +builder.Services.AddScoped(); + +builder.AddMinioClient("vehicle-minio"); +builder.Services.AddScoped(); + +var app = builder.Build(); + +app.MapDefaultEndpoints(); + +using (var scope = app.Services.CreateScope()) +{ + var s3 = scope.ServiceProvider.GetRequiredService(); + await s3.EnsureBucketExists(); + + var subscription = scope.ServiceProvider.GetRequiredService(); + await subscription.SubscribeEndpoint(); +} + +app.MapControllers(); + +app.Run(); diff --git a/File.Service/Properties/launchSettings.json b/File.Service/Properties/launchSettings.json new file mode 100644 index 00000000..f7034688 --- /dev/null +++ b/File.Service/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:11401", + "sslPort": 44341 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5238", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7017;http://localhost:5238", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/File.Service/Storage/IS3Service.cs b/File.Service/Storage/IS3Service.cs new file mode 100644 index 00000000..ec4d4f32 --- /dev/null +++ b/File.Service/Storage/IS3Service.cs @@ -0,0 +1,32 @@ +using System.Text.Json.Nodes; + +namespace File.Service.Storage; + +/// +/// Сервис работы с Minio-бакетом, в который сохраняются ТС из SNS-уведомлений +/// +public interface IS3Service +{ + /// + /// Создаёт бакет, если его ещё нет + /// + Task EnsureBucketExists(); + + /// + /// Сохраняет JSON-тело SNS-сообщения в бакет под ключом vehicle_{id}.json + /// + /// Сериализованное ТС + /// true при успешной загрузке + Task UploadFile(string fileData); + + /// + /// Возвращает список ключей всех объектов в бакете + /// + Task> GetFileList(); + + /// + /// Читает объект из бакета и парсит его как JSON + /// + /// Ключ объекта + Task DownloadFile(string key); +} diff --git a/File.Service/Storage/MinioS3Service.cs b/File.Service/Storage/MinioS3Service.cs new file mode 100644 index 00000000..af648cbf --- /dev/null +++ b/File.Service/Storage/MinioS3Service.cs @@ -0,0 +1,93 @@ +using System.Net; +using System.Text; +using System.Text.Json.Nodes; +using Minio; +using Minio.DataModel.Args; + +namespace File.Service.Storage; + +/// +/// Реализация на клиенте Minio. +/// Имя бакета берётся из ключа AWS:Resources:MinioBucketName +/// +/// Клиент Minio +/// Источник имени бакета +/// Логгер операций с бакетом +public class MinioS3Service(IMinioClient client, IConfiguration configuration, ILogger logger) : IS3Service +{ + private readonly string _bucketName = configuration["AWS:Resources:MinioBucketName"] + ?? throw new KeyNotFoundException("Minio bucket name was not found in configuration"); + + /// + public async Task EnsureBucketExists() + { + logger.LogInformation("Checking whether bucket {bucket} exists", _bucketName); + var exists = await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(_bucketName)); + if (exists) + { + logger.LogInformation("Bucket {bucket} already exists", _bucketName); + return; + } + logger.LogInformation("Creating bucket {bucket}", _bucketName); + await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(_bucketName)); + } + + /// + public async Task UploadFile(string fileData) + { + var root = JsonNode.Parse(fileData) ?? throw new ArgumentException("Passed string is not a valid JSON"); + var id = root["Id"]?.GetValue() + ?? root["id"]?.GetValue() + ?? throw new ArgumentException("Passed JSON has no 'Id' property"); + + var key = $"vehicle_{id}.json"; + var bytes = Encoding.UTF8.GetBytes(fileData); + using var stream = new MemoryStream(bytes); + + logger.LogInformation("Uploading {key} to bucket {bucket}", key, _bucketName); + var request = new PutObjectArgs() + .WithBucket(_bucketName) + .WithObject(key) + .WithStreamData(stream) + .WithObjectSize(bytes.Length); + var response = await client.PutObjectAsync(request); + + if (response.ResponseStatusCode != HttpStatusCode.OK) + { + logger.LogError("Failed to upload {key}: status {code}", key, response.ResponseStatusCode); + return false; + } + logger.LogInformation("Successfully uploaded {key}", key); + return true; + } + + /// + public async Task> GetFileList() + { + var keys = new List(); + var request = new ListObjectsArgs().WithBucket(_bucketName).WithRecursive(true); + logger.LogInformation("Listing objects in bucket {bucket}", _bucketName); + await foreach (var item in client.ListObjectsEnumAsync(request)) + keys.Add(item.Key); + return keys; + } + + /// + public async Task DownloadFile(string key) + { + logger.LogInformation("Downloading {key} from bucket {bucket}", key, _bucketName); + var memory = new MemoryStream(); + var request = new GetObjectArgs() + .WithBucket(_bucketName) + .WithObject(key) + .WithCallbackStream(async (s, ct) => + { + await s.CopyToAsync(memory, ct); + memory.Seek(0, SeekOrigin.Begin); + }); + await client.GetObjectAsync(request); + using var reader = new StreamReader(memory, Encoding.UTF8); + return JsonNode.Parse(reader.ReadToEnd()) + ?? throw new InvalidOperationException($"Downloaded {key} is not a valid JSON"); + } +} diff --git a/File.Service/appsettings.Development.json b/File.Service/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/File.Service/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/File.Service/appsettings.json b/File.Service/appsettings.json new file mode 100644 index 00000000..a3c034a8 --- /dev/null +++ b/File.Service/appsettings.json @@ -0,0 +1,12 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "LocalStack": { + "UseLocalStack": true + } +} diff --git a/README.md b/README.md index a7c36e38..843e87eb 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,34 @@ Из query-параметра `id` вычисляется остаток от деления на количество реплик. Результат — индекс реплики, обрабатывающей запрос. +--- + +## Лабораторная работа №3 — «Брокер сообщений и объектное хранилище» + +### Описание + +Расширен пайплайн генерации ТС: после генерации нового ТС сервис публикует его в брокер сообщений, отдельный файловый сервис забирает сообщение и кладёт JSON в объектное хранилище. + +Вариант **47** — **SNS + Minio**: брокер сообщений AWS SNS (эмулируется через LocalStack), хранилище — Minio с S3-совместимым API. + +### Что реализовано + +- **`VehicleApp.Api`** — при генерации нового ТС публикует JSON в SNS-топик (`SnsVehiclePublisher`). Если ТС взято из Redis — публикации нет. +- **`File.Service`** — новый сервис: + - `SnsSubscriptionService` подписывает эндпоинт `http://host.docker.internal:5280/api/sns` на SNS-топик при старте; + - `SnsWebhookController` принимает `SubscriptionConfirmation` и `Notification`; + - `MinioS3Service` создаёт бакет `vehicle-bucket` и складывает ТС под ключом `vehicle_{id}.json`; + - `S3Controller` отдаёт список ключей (`GET /api/s3`) и содержимое файла (`GET /api/s3/{key}`). +- **`VehicleApp.AppHost`** — добавлены контейнеры LocalStack (SNS, порт 4566) и Minio, CloudFormation-шаблон `CloudFormation/vehicle-sns.yaml` создаёт SNS-топик `vehicle-topic`, ARN пробрасывается в реплики API и в File.Service через `AWS:Resources:SNSTopicArn`. +- **`VehicleApp.AppHost.Tests`** — интеграционный тест `GatewayRequest_PublishesVehicleToMinio`: стучится в **гейтвей** с конкретным `id`, затем поллит `/api/s3/vehicle_{id}.json` в File.Service и сверяет содержимое с ответом гейтвея. + +### Стек технологий (дополнение) + +- LocalStack 2.x (эмуляция AWS SNS) +- AWSSDK.SimpleNotificationService +- Minio (.NET клиент `CommunityToolkit.Aspire.Minio.Client`) +- Aspire.Hosting CloudFormation (создание SNS-топика) + ## Стек технологий - .NET 8 @@ -50,9 +78,11 @@ | Проект | Описание | |---|---| -| `VehicleApp.Api` | API-сервис генерации транспортных средств (7 реплик) | +| `VehicleApp.Api` | API-сервис генерации транспортных средств (7 реплик), публикует ТС в SNS | | `VehicleApp.Gateway` | API Gateway на Ocelot с балансировкой Query Based | -| `VehicleApp.AppHost` | Aspire-оркестратор | +| `File.Service` | Подписчик SNS, сохраняет JSON в Minio | +| `VehicleApp.AppHost` | Aspire-оркестратор (Redis + LocalStack + Minio + сервисы) | +| `VehicleApp.AppHost.Tests` | Интеграционные тесты пайплайна | | `VehicleApp.ServiceDefaults` | Общие настройки сервисов (OpenTelemetry, health checks) | | `Client.Wasm` | Blazor WebAssembly клиент | diff --git a/VehicleApp.Api/Program.cs b/VehicleApp.Api/Program.cs index cc60671c..d17f7ccc 100644 --- a/VehicleApp.Api/Program.cs +++ b/VehicleApp.Api/Program.cs @@ -1,10 +1,17 @@ +using Amazon.SimpleNotificationService; +using LocalStack.Client.Extensions; using VehicleApp.Api.Services; +using VehicleApp.Api.Services.Messaging; var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); builder.AddRedisDistributedCache("redis"); +builder.Services.AddLocalStack(builder.Configuration); +builder.Services.AddAwsService(); +builder.Services.AddScoped(); + builder.Services.AddScoped(); var app = builder.Build(); diff --git a/VehicleApp.Api/Services/Messaging/IVehiclePublisher.cs b/VehicleApp.Api/Services/Messaging/IVehiclePublisher.cs new file mode 100644 index 00000000..bfd1f59b --- /dev/null +++ b/VehicleApp.Api/Services/Messaging/IVehiclePublisher.cs @@ -0,0 +1,15 @@ +using VehicleApp.Api.Models; + +namespace VehicleApp.Api.Services.Messaging; + +/// +/// Отправляет ТС во внешний брокер сообщений +/// +public interface IVehiclePublisher +{ + /// + /// Публикует ТС. Вызывается только при промахе кэша, чтобы не создавать дубли + /// + /// ТС для отправки подписчикам + public Task Publish(Vehicle vehicle); +} diff --git a/VehicleApp.Api/Services/Messaging/SnsVehiclePublisher.cs b/VehicleApp.Api/Services/Messaging/SnsVehiclePublisher.cs new file mode 100644 index 00000000..90d7e375 --- /dev/null +++ b/VehicleApp.Api/Services/Messaging/SnsVehiclePublisher.cs @@ -0,0 +1,42 @@ +using System.Net; +using System.Text.Json; +using Amazon.SimpleNotificationService; +using Amazon.SimpleNotificationService.Model; +using VehicleApp.Api.Models; + +namespace VehicleApp.Api.Services.Messaging; + +/// +/// Реализация через Amazon SNS. +/// ТС сериализуется в JSON и отправляется в топик, ARN которого берётся из конфигурации +/// +/// SNS-клиент AWS SDK (под LocalStack указывает на контейнер) +/// Конфигурация с ключом AWS:Resources:SNSTopicArn +/// Логгер для результата публикации +public class SnsVehiclePublisher( + IAmazonSimpleNotificationService client, + IConfiguration configuration, + ILogger logger) : IVehiclePublisher +{ + private readonly string _topicArn = configuration["AWS:Resources:SNSTopicArn"] + ?? throw new KeyNotFoundException("SNS topic ARN was not found in configuration"); + + /// + public async Task Publish(Vehicle vehicle) + { + try + { + var payload = JsonSerializer.Serialize(vehicle); + var request = new PublishRequest { TopicArn = _topicArn, Message = payload }; + var response = await client.PublishAsync(request); + if (response.HttpStatusCode == HttpStatusCode.OK) + logger.LogInformation("Vehicle {id} published to SNS topic", vehicle.Id); + else + logger.LogError("Failed to publish vehicle {id}: {code}", vehicle.Id, response.HttpStatusCode); + } + catch (Exception ex) + { + logger.LogError(ex, "Exception while publishing vehicle {id} to SNS", vehicle.Id); + } + } +} diff --git a/VehicleApp.Api/Services/VehicleService.cs b/VehicleApp.Api/Services/VehicleService.cs index 3d592baf..acdbed4c 100644 --- a/VehicleApp.Api/Services/VehicleService.cs +++ b/VehicleApp.Api/Services/VehicleService.cs @@ -1,16 +1,25 @@ using System.Text.Json; using Microsoft.Extensions.Caching.Distributed; using VehicleApp.Api.Models; +using VehicleApp.Api.Services.Messaging; namespace VehicleApp.Api.Services; /// /// Сервис для получения информации о транспортном средстве /// -public class VehicleService(IDistributedCache cache, IConfiguration configuration, - ILogger logger) : IVehicleService +/// Распределённый кэш +/// Публикатор ТС в брокер сообщений +/// Конфигурация приложения +/// Логгер +public class VehicleService( + IDistributedCache cache, + IVehiclePublisher publisher, + IConfiguration configuration, + ILogger logger) : IVehicleService { private readonly int _expirationMinutes = configuration.GetValue("CacheSettings:ExpirationMinutes", 15); + /// public async Task GetVehicle(int id) { @@ -23,7 +32,6 @@ public async Task GetVehicle(int id) try { var cachedVehicle = JsonSerializer.Deserialize(cachedData); - if (cachedVehicle != null) { logger.LogInformation("Vehicle {VehicleId} retrieved from cache", id); @@ -41,8 +49,10 @@ public async Task GetVehicle(int id) var vehicle = VehicleGenerator.GenerateVehicle(id); + await publisher.Publish(vehicle); + try - { + { var cacheOptions = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(_expirationMinutes) diff --git a/VehicleApp.Api/VehicleApp.Api.csproj b/VehicleApp.Api/VehicleApp.Api.csproj index cbf27ed2..4e1a8be2 100644 --- a/VehicleApp.Api/VehicleApp.Api.csproj +++ b/VehicleApp.Api/VehicleApp.Api.csproj @@ -4,12 +4,17 @@ net8.0 enable enable + true + $(NoWarn);1591 - - - + + + + + + diff --git a/VehicleApp.Api/appsettings.json b/VehicleApp.Api/appsettings.json index 1b91a460..3a756006 100644 --- a/VehicleApp.Api/appsettings.json +++ b/VehicleApp.Api/appsettings.json @@ -8,5 +8,8 @@ "AllowedHosts": "*", "CacheSettings": { "ExpirationMinutes": 15 + }, + "LocalStack": { + "UseLocalStack": true } } diff --git a/VehicleApp.AppHost.Tests/IntegrationTest.cs b/VehicleApp.AppHost.Tests/IntegrationTest.cs new file mode 100644 index 00000000..35819fd6 --- /dev/null +++ b/VehicleApp.AppHost.Tests/IntegrationTest.cs @@ -0,0 +1,172 @@ +using System.Text.Json; +using Aspire.Hosting; +using Microsoft.Extensions.Logging; +using VehicleApp.Api.Models; +using Xunit.Abstractions; + +namespace VehicleApp.AppHost.Tests; + +/// +/// Интеграционные тесты пайплайна Gateway → Api → SNS → File.Service → Minio +/// +/// Логгер xUnit для вывода в консоль теста +public class IntegrationTest(ITestOutputHelper output) : IAsyncLifetime +{ + private static readonly JsonSerializerOptions _json = new(JsonSerializerDefaults.Web); + + private IDistributedApplicationTestingBuilder? _builder; + private DistributedApplication? _app; + + /// + public async Task InitializeAsync() + { + var cancellationToken = CancellationToken.None; + _builder = await DistributedApplicationTestingBuilder.CreateAsync(cancellationToken); + _builder.Configuration["DcpPublisher:RandomizePorts"] = "false"; + _builder.Services.AddLogging(logging => + { + logging.AddXUnit(output); + logging.SetMinimumLevel(LogLevel.Debug); + logging.AddFilter("Aspire.Hosting.Dcp", LogLevel.Debug); + logging.AddFilter("Aspire.Hosting", LogLevel.Debug); + }); + + _app = await _builder.BuildAsync(cancellationToken); + await _app.StartAsync(cancellationToken); + } + + /// + /// Основной сценарий: запрос по id через гейтвей, затем проверка, что в Minio + /// лежит файл vehicle_{id}.json с теми же данными, что вернул API + /// + [Fact] + public async Task TestPipeline() + { + var random = new Random(); + var id = random.Next(1, 10_000); + + Assert.NotNull(_app); + using var gatewayClient = _app.CreateHttpClient("vehicleapp-gateway", "http"); + using var gatewayResponse = await gatewayClient.GetAsync($"/vehicles?id={id}"); + var apiVehicle = JsonSerializer.Deserialize(await gatewayResponse.Content.ReadAsStringAsync(), _json); + + await Task.Delay(5000); + using var fileClient = _app.CreateHttpClient("file-service", "http"); + using var listResponse = await fileClient.GetAsync("/api/s3"); + var vehicleList = JsonSerializer.Deserialize>(await listResponse.Content.ReadAsStringAsync(), _json); + using var s3Response = await fileClient.GetAsync($"/api/s3/vehicle_{id}.json"); + var s3Vehicle = JsonSerializer.Deserialize(await s3Response.Content.ReadAsStringAsync(), _json); + + Assert.NotNull(vehicleList); + Assert.Single(vehicleList); + Assert.NotNull(apiVehicle); + Assert.NotNull(s3Vehicle); + Assert.Equal(id, s3Vehicle.Id); + Assert.Equivalent(apiVehicle, s3Vehicle); + } + + /// + /// Проверяет, что файл в Minio сохраняется под ключом vehicle_{id}.json + /// + [Fact] + public async Task StoredKey_MatchesRequestedId() + { + var id = new Random().Next(1, 10_000); + + Assert.NotNull(_app); + using var gatewayClient = _app.CreateHttpClient("vehicleapp-gateway", "http"); + using var _ = await gatewayClient.GetAsync($"/vehicles?id={id}"); + + await Task.Delay(5000); + using var fileClient = _app.CreateHttpClient("file-service", "http"); + using var listResponse = await fileClient.GetAsync("/api/s3"); + var list = JsonSerializer.Deserialize>(await listResponse.Content.ReadAsStringAsync(), _json); + + Assert.NotNull(list); + Assert.Contains($"vehicle_{id}.json", list); + } + + /// + /// Запрос несуществующего ключа должен возвращать 404 + /// + [Fact] + public async Task GetFile_ReturnsNotFound_WhenKeyDoesNotExist() + { + Assert.NotNull(_app); + using var fileClient = _app.CreateHttpClient("file-service", "http"); + using var response = await fileClient.GetAsync("/api/s3/vehicle_999999.json"); + + Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); + } + + /// + /// Повторный запрос с тем же id отдаётся из кэша и не приводит к появлению + /// второго файла в Minio + /// + [Fact] + public async Task RepeatedRequest_DoesNotDuplicateFileInMinio() + { + var id = new Random().Next(1, 10_000); + + Assert.NotNull(_app); + using var gatewayClient = _app.CreateHttpClient("vehicleapp-gateway", "http"); + using var first = await gatewayClient.GetAsync($"/vehicles?id={id}"); + var firstVehicle = JsonSerializer.Deserialize(await first.Content.ReadAsStringAsync(), _json); + + await Task.Delay(5000); + + using var second = await gatewayClient.GetAsync($"/vehicles?id={id}"); + var secondVehicle = JsonSerializer.Deserialize(await second.Content.ReadAsStringAsync(), _json); + + await Task.Delay(3000); + + using var fileClient = _app.CreateHttpClient("file-service", "http"); + using var listResponse = await fileClient.GetAsync("/api/s3"); + var list = JsonSerializer.Deserialize>(await listResponse.Content.ReadAsStringAsync(), _json); + + Assert.NotNull(firstVehicle); + Assert.NotNull(secondVehicle); + Assert.Equivalent(firstVehicle, secondVehicle); + Assert.NotNull(list); + Assert.Single(list); + Assert.Equal($"vehicle_{id}.json", list[0]); + } + + /// + /// Содержимое файла в Minio совпадает с ответом API по всем полям ТС + /// + [Fact] + public async Task StoredVehicle_HasSameFieldsAsApiResponse() + { + var id = new Random().Next(1, 10_000); + + Assert.NotNull(_app); + using var gatewayClient = _app.CreateHttpClient("vehicleapp-gateway", "http"); + using var gatewayResponse = await gatewayClient.GetAsync($"/vehicles?id={id}"); + var apiVehicle = JsonSerializer.Deserialize(await gatewayResponse.Content.ReadAsStringAsync(), _json); + + await Task.Delay(5000); + using var fileClient = _app.CreateHttpClient("file-service", "http"); + using var s3Response = await fileClient.GetAsync($"/api/s3/vehicle_{id}.json"); + var s3Vehicle = JsonSerializer.Deserialize(await s3Response.Content.ReadAsStringAsync(), _json); + + Assert.NotNull(apiVehicle); + Assert.NotNull(s3Vehicle); + Assert.Equal(apiVehicle.Id, s3Vehicle.Id); + Assert.Equal(apiVehicle.Vin, s3Vehicle.Vin); + Assert.Equal(apiVehicle.Manufacturer, s3Vehicle.Manufacturer); + Assert.Equal(apiVehicle.Model, s3Vehicle.Model); + Assert.Equal(apiVehicle.Year, s3Vehicle.Year); + Assert.Equal(apiVehicle.BodyType, s3Vehicle.BodyType); + Assert.Equal(apiVehicle.FuelType, s3Vehicle.FuelType); + Assert.Equal(apiVehicle.BodyColor, s3Vehicle.BodyColor); + } + + /// + public async Task DisposeAsync() + { + await _app!.StopAsync(); + await _app.DisposeAsync(); + await _builder!.DisposeAsync(); + } +} diff --git a/VehicleApp.AppHost.Tests/VehicleApp.AppHost.Tests.csproj b/VehicleApp.AppHost.Tests/VehicleApp.AppHost.Tests.csproj new file mode 100644 index 00000000..b89d1ac5 --- /dev/null +++ b/VehicleApp.AppHost.Tests/VehicleApp.AppHost.Tests.csproj @@ -0,0 +1,33 @@ + + + + net8.0 + enable + enable + false + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VehicleApp/VehicleApp.AppHost/AppHost.cs b/VehicleApp/VehicleApp.AppHost/AppHost.cs index 2b5fe414..ac86d181 100644 --- a/VehicleApp/VehicleApp.AppHost/AppHost.cs +++ b/VehicleApp/VehicleApp.AppHost/AppHost.cs @@ -1,8 +1,31 @@ +using Amazon; +using Aspire.Hosting.LocalStack.Container; + var builder = DistributedApplication.CreateBuilder(args); var redis = builder.AddRedis("redis") .WithRedisInsight(); +var awsConfig = builder.AddAWSSDKConfig() + .WithProfile("default") + .WithRegion(RegionEndpoint.EUCentral1); + +var localstack = builder.AddLocalStack("vehicle-localstack", awsConfig: awsConfig, configureContainer: container => +{ + container.Lifetime = ContainerLifetime.Session; + container.DebugLevel = 1; + container.LogLevel = LocalStackLogLevel.Debug; + container.Port = 4566; + container.AdditionalEnvironmentVariables.Add("DEBUG", "1"); + container.AdditionalEnvironmentVariables.Add("SNS_CERT_URL_HOST", "sns.eu-central-1.amazonaws.com"); +}); + +var awsResources = builder + .AddAWSCloudFormationTemplate("vehicle-resources", "CloudFormation/vehicle-sns.yaml", "vehicle") + .WithReference(awsConfig); + +var minio = builder.AddMinioContainer("vehicle-minio"); + var gateway = builder.AddProject("vehicleapp-gateway"); for (var i = 0; i < 7; i++) @@ -10,11 +33,24 @@ var service = builder.AddProject($"vehicleapp-api-{i}", launchProfileName: null) .WithHttpsEndpoint(5000 + i) .WithReference(redis) - .WaitFor(redis); + .WithReference(awsResources) + .WaitFor(redis) + .WaitFor(awsResources); gateway.WaitFor(service); } builder.AddProject("client-wasm") .WaitFor(gateway); +builder.AddProject("file-service", launchProfileName: null) + .WithHttpEndpoint(port: 5280) + .WithReference(awsResources) + .WithReference(minio) + .WithEnvironment("AWS__Resources__MinioBucketName", "vehicle-bucket") + .WithEnvironment("AWS__Resources__SNSUrl", "http://host.docker.internal:5280/api/sns") + .WaitFor(awsResources) + .WaitFor(minio); + +builder.UseLocalStack(localstack); + builder.Build().Run(); diff --git a/VehicleApp/VehicleApp.AppHost/CloudFormation/vehicle-sns.yaml b/VehicleApp/VehicleApp.AppHost/CloudFormation/vehicle-sns.yaml new file mode 100644 index 00000000..004887f9 --- /dev/null +++ b/VehicleApp/VehicleApp.AppHost/CloudFormation/vehicle-sns.yaml @@ -0,0 +1,29 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: 'Cloud formation template for vehicle project (SNS topic)' + +Parameters: + TopicName: + Type: String + Description: Name for the SNS topic + Default: 'vehicle-topic' + +Resources: + VehicleTopic: + Type: AWS::SNS::Topic + Properties: + TopicName: !Ref TopicName + DisplayName: !Ref TopicName + Tags: + - Key: Name + Value: !Ref TopicName + - Key: Environment + Value: Lab3 + +Outputs: + SNSTopicName: + Description: Name of the SNS topic + Value: !GetAtt VehicleTopic.TopicName + + SNSTopicArn: + Description: ARN of the SNS topic + Value: !Ref VehicleTopic diff --git a/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj index 54a837ad..62c0e349 100644 --- a/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj +++ b/VehicleApp/VehicleApp.AppHost/VehicleApp.AppHost.csproj @@ -12,13 +12,22 @@ - + + + + + + + Always + + + diff --git a/VehicleApp/VehicleApp.AppHost/appsettings.json b/VehicleApp/VehicleApp.AppHost/appsettings.json index 31c092aa..a6b256bb 100644 --- a/VehicleApp/VehicleApp.AppHost/appsettings.json +++ b/VehicleApp/VehicleApp.AppHost/appsettings.json @@ -5,5 +5,8 @@ "Microsoft.AspNetCore": "Warning", "Aspire.Hosting.Dcp": "Warning" } + }, + "LocalStack": { + "UseLocalStack": true } } diff --git a/images/aspire.png b/images/aspire.png index 6983aa6615f80b2e7715fcadb0630845af540645..bb94f5dd4ab6069618ad376a9b7ea449afb44519 100644 GIT binary patch literal 114038 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 z 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 literal 94650 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�$?z>gDS~g+rS88_IuaLx>zhG$22^Ezm71k8t0R=r6fo^NG%gu2~*>$#gP0U^m zr^LjZOG1xs=b_WCj2mcAm$cLC-6og3U*&vL>AAkiMmoFN{|skq2kTo(Wg%X4tjbgH z`^+l_H!lNf?3y!LHy(+*0d?vLO3j%$Ed4+R{wvh5EMl7GqIcn5(U#W!g_bX(H$5Nd zqKo>V!I}>zG9*UY7d|J&S@4)$H9X+5Sz%+AY0&*h0lu4Y+&6e^Ypm|5(Dq}|yLh-K z*Gud;5Z_MPivlKSFHAmlG%?iKq2>$)UUfQ#T+DKeTk2-$m3#(}vWNPEjyZRBj9Hx3 z6?Sh?`#4sl=;e#X!f80msoQWMT(+lv8!XtwbI#Sb-(@4+VPK(8*ku5b#gLAboX^Y=aUng$8JWaP~EJLwX4|Ex1?5=sQN?Jjt zqUF1eUWr#xnO|{bR|Idi#hE(pefaWg^~6=I;pIV-)2l^TY%n&Z&CtD z_m4pSS*_Svh^DD9;8Nyauz77O&_+sHA0@gTI9j!^7|xj@hp#n%9|a%m(q^H>TC%yS zJw0+)t@4M6wtDy4>B0?iWV+5b#%}3)-r0L#VAGbAsH_L5x7D+49}F0K(v^^*H^*@O zfAr39O76ATY|BISGHbBZl4DaU%;q~hCs}ZBEm6z4-z^*qI~oZuA{KefIGDc_<1CN0 z0czg;d=}pARm=!dP3V5Mtn`U2mU?E58HKkgrZ(g(Vroy`QJCQ$KY4I&CS_=;!8@&d zX?AXeSM)dHrt3o~*T(RHp5bS9x~}Yt=Vg-&QVRno;wK7GEgAxRbxOu2*epZOk54^x zp+eqAAD};T^I^5SEKRXl$*FR*z@{r88bt;?|9eIi7wF4jI<(uBm!{}x9S0tZ_1v z&}|MBCU&5iO(xya?}H%%GPTOp6oqMWwH44cRu*rEBDCJP0T@mI7W`e*H)AfT4sMph zeLwNhaDTy4tQL4GOM>Uq_*^B-d?I#w08f9DQKiSdL|uhtdui}7O>46GXG>^p>@^q^TmAl}lnwqj46b^#Cj2WI~eIB$;LOD=4Y(lBnG6;V5`e0dDT9I)du`nJ%PhiVB##vP+QLyF}ypI z?ts4NpdzJ>es=3k>oo72>&*Zi&9OOx?E}&LgIi0?LE>-(ZQIkmjHF(R@m> zwST*-$JIi*?ri;4 zZHb-Vt8MdpnoFE&rB3)>lN~>oFu(u5PZG zEp`#shO@i#M*~xW5a1-e&1R@~KR90Tx;QU?%tm&;p|ymwXD`~W^y2zkSOTLRER|7s zfc#}w_cXILvANStkeT^Q*)PuLE zhT=tqpvO`Dg*{vZr!V_h>-Vl$pUSg#iT~!TW?_Z4P&)5R3a>j%|HD^p{|{fasIq%F zam(^*7C-w^P(yac@gA5y{^P;q?H zQP_zJ5^7N`B0A3-TZrv|Pm9*L_!xi&aJN7+fSOP3q@!v=`Bw{bekBNL2PeaZv5$j6jW8K=J2Yw&jGx$_*QAIt;*zWrY?Q){Vx#jx7*nK``BkUmz?tQ4`e zU!jNe`pTe@mwt=*%Z#iv#XZL6{32kN5_T1Aa~RDl@ea=bu=O!4zF~>vSH08Y8q6)a zRT8&ePXDy97G2^}e~q6F7dyvj>s-&JF(X1IC_rb19wGQXv4zK4006(eWFTGfh}L+w zU%btCAm_%uJokgser@A^=NGJ7bNyY>PfPXxagXzV81Jo(0p_q`O7c;-}iI>_pa6Kf=Q)?qb*a+ng6=S+;eSZ<=_(n@!bQ5ur4kx zUN?gr&X0932uSa;Y~tt#OV}OThnrK1fSc;Gr3Qo1pw2zYq5aqTCc~6yH!=k57k2zoS+kGM zm!kmJv8*RC$m%~({Bcz-E2Xm4y}M0_5?36aH`R!dXb=8iOlec{yS|Y&y~1N`jl-M4 z1;%IoqPI(Rc^Qo+S6GvNDm89x{{pwgiwt-tcdOpIWMQ?^U#^BhY@s8{OL!!XCw0c( z8*-MxYE!W_)M29|CtEj)bzYW#)LX)D8R{a;{&hoiD$8zyn#H_(J;S}+2!$NG1Ci(a zX51Ppg*6DMz)JiyXD)sL>jC9g>L?7Y>-<;;%MqD^)!Q;*ZcFveWC^5?!*F#*RnZ!& zg!PnJ(e)L!k7N%!&js- z&tIraGLkU{zfi)trX08Se>(9xY>i$aJnDWoe)pzaX|`!Q`#XV4Rs778cWiY89@LjG46+q-7FrBBIz$Nt!TW@@6)Tex62 z=~eJgld>o&U0sytQRV5cFh;P3q_>o4fcltA^uUf;jrHEIpmpffAiIj9VAd@AY*sSn zf3SC+QB9_c+K!?y7QnHf7%3wvDosI%bQqN)Rghj42)*|b5E#KiFQFGjKzb)6l!%P< z-fIF<0)!ByBtQs!FY2CgihIxOz1KPC$M?&%{NY-}0B^46dagT^Mq{53Rj+Q#0l{51 z4JuXzUT6C9(k1=v2PCl5Ot9b8v|TH6^#-n@+RN3;n^7>xqnm(ppjhT0XaSaOH*N>^-`yF;=> z+vuf5y~WqlYm$?XkwxvN&MxN`nZ#DAn6AWrzx(1zYcSWEKzYDpicaJ+rh3m3&1#b+ zd{oFGCp_sc;Luf#v2UdApzF<1Se~0kjnC`&Z1OsKi}a0(3tLyMn|*ihdE156@M&Yf z=lz!U;=dDYjnAPfSr@DWL!#1i6BRmK7?{yBD{`6TH z&at{y%5Hu&0CDzB%-a%+bjV2_0ey{^+8Qy}8Td7oE;+TY>5db>@6fdCrj3r&OSPAf z9WyO86>v&Z9tyE2)8DL3(_XgS)u#5Q$ZMGLGPWjs0_TR+Zog%wZwcbt_p`^T_tn@0 zXdb$9I`)qqo>Qi#*^<+3t`OE%1nzoDfAYR~V8wq-(W6|*7@07+Q4w7w&?&NeFbY^7~a zI~y*jcnY>NJxg+_Q(bGENU{U~*g~AGB|`jS%Q)V*37LOFuFeRytwqwP39niIUT5?D zUC}w~$^&IZMl$Gm+Mg2p=HvU;uFDs+-5tW$*X5aswKXAHP440F2G=i|`af|%atJUFkAQqbO6dmdYY zw?>^q(Ynx?-tw?ru5fKtCU+7ac)HqGtHjUp5XY;v7)Cu~FJi&JGJ|9m)1C+>TskJoV0T+DvMQJ!!Y zs;WVe|; zucLSR+l;fwPhc6)t&S^eVH;jN&B1r!2o` z`zA*(qQO!{Bd6ul8|agq+uHO!{a<6K;26IG2`0+u`J5N&JpsBH)j!i zTl-4ZTBa<}FEMqKbebY&@0IP17zAdl3OK_G#}1u$RhEl$*JqatglohY4}zdqJhU%c z4wbM*Pq0d;P8qdnt~=u^JcqA18yfJ|KDJh&6hq?=8aYm|U9Ool9q`85)?Cei1krY1 zXT&`T{tc{#jdG&KO=L)23tbc-p$xD_n6%O9<-#6*yX;K3@ z`ttW}3TgQ=R!*+_$*!yt{PX7HR;sHnR?P8^6=R}3u?n<$iLQ$=%wgT7?FvU$qQJ+* zqoRijO=lQRfC#7iP8Y4R%-&8DgYx^!&Xi=gnx!gTvaTii@^UgBVE%bdK&|v)C>iwt z>;rTu(!7JLVN zRQCAgTrN6y(_@9$@Tf?6HylUBo!6*UG}vvFa|l$hPku6k#u;5sih7>NV=Un0a%MOx z_q$g@92^Vx<)4`oER;~m;I*C~^3=^LYBy)#cLyr_A?I;?qj4qUn|92i_6}`T!aDMO z;qD4ll>%x)qUEu|CUBK!=wnkrlZg^ZJxqg&t2D|zye*_&h%^>(52~G3p5PwE=Z=^# z6+eo1dQAh|?HZ#?d32B48H0~}zq2JhTF=rD6=&B{=^=ra?B_^G_~>-3rJ890_ChLx z)_Ib4qntP#b;UM6%AF;Tu$ox@4*GhGB$wf9C)?EoJs3BDB=rXi)-suL5ab1y+7PNX z<0`&{-lbCs8qe9w}459iE8l!J(YeSG`O+mK`j3m1W^yVB1d(CUk$lA&z(eNqY0 zDl{nZcTP_sJdgE_(D`AS!3C3@Y%zvpfk59w>y4z^cTR@}shc8@)cb_48&npc^xWdJ z|G3OI3l_OM^wBR@;s@qE_Fssnby0dceW_D?%CktuuS)9ePq4nk_VF3RCfbCCDZxyZ z@+Ieq{Nc|jivbbIgF1yhT>?X;k?mM3=1^sbs$}t^`EnAGb7afkfG|B)m#=9)HZ+e1 zgY3@eX|)}u^j_0JCfbSs4(&O%VV3y?5<|f$>YN=*tnGE!Qc&k9Yv|BceMdk$EptUI zV2%MUEqW>L$ImY9f)zD6uEx1*&xZw~XBfYUbVn%)N9Deycp*#l&uth9qYR^m!0Ue> zy2$&=*L6CeyhE904h-TDQK9Rj3k7 zG%DafQs3p_P*JCB{KJODR0b(l1$ZPbrVJ9%8fC>yH=ll;YzR?0 z+x`KMBhLeL9V*4!lyE9(!RMt)Sc>!5E9&uVD|0a#&|E03u-=tBK24~O12UfAEaAfXtAlyvV`2Vx$dN7-07KOXB4NjqFL#=`^v^cOj}D4TPxMK{U*&Y`e0@p z><}u9&{t>6HD*3CX>q2RXEyUSRU?V4Me;95tOkDg39AX5xK7EYj}h@74^IwmSln5|`s?9tnl_d_7^D1k}te*bQARwmj z&)#flmW@MqTppWZzuH^nMnY^&yW1##V;6mM7Q(r-f!2Z%eX(?5$~e_M`5Yga8O%?e zQ@($|o+{xM$PN`lmw&WIYyg*{fb(NzquQ?>+F?MjYqjVQs-z2=OaUKxfjj`AI=Z>w#z9l6sf?G327`EL_Y zoRRG&PjseUIIT;?$<Cm7;w|Wis zOGAL0?CNsZ1OcMpKlnGd+?{Y;|;iXzM-R9Z^0RVWGl@^Ed)##Xa)pBn>HE}xG$ zSD$@yi3teUVE95R-Dq8DfQ$9!h>7D1_Tl`-2bR9Z`9<`LtM92sA=A*OY|!kgW!d-m&u&F;Zp z@!*AHU-32W!=?)lOTIE+L7@Lzyl_~Fg@uJ}cnDHM7(=uzE#?2V0+C*LD-gApEcps} z7D~4A{hEsSKi0bVHXCJntdXZVqV?wekAJzpQJf?qA|g>-WbZMCu#d~hxgt8q%95jJ zwqWl&zD*hQli(r7U`m}q#=bSHE$%aMh@IY}3K*U909TLP`-Hi$As=k8|MOep&BIls z3NcbVjrxomxp~X&Zp~ga=G<02WR@Z+Vw%m(JDR=x_{iy{GsPaqfWC>qUSfq%y<<+q zhL2sTbH6JYcfxN|>BOXM+Na*bLY!zO`H<+9hjNWsW#{?&69Ee9^{UFRY%O$D{<%!_ zm@zh9k=Q=`edLb~wzT@9XMg6I(1;?7V9L~A-guKFlFGji1He!j_tvnp2U}c8t?4Y* zMbL2hKYFgFKZnU|Qto~t5y4J5?5MN_Y& zg|@qoo-uqR3;gstqPT37W_hNY-oh9{X>uPf*>nefy_Vur`4aq+9HDbD=QgL(68(yp z_9`$jMs>7JjZJ1w^wz z(Hhu|7yAtM>QpYryAKvWvYaFiaAq{&{5i8{=QC`#Kc$T?L`Q`mI769TsODd3ba4vb zbS?#8wFCqJ*yX*;dVS|{Ky~0&ikrj!qAg5nc?~IFlK5t!e4JcxZ^YJ|@oNOTvdt^n zSN-F{0K023=Hp8nuPQfD5c|TvYC70aIl*Rl;!fmm9oO?P(PZ$w3>d#ebQFCWQs@D1 zI_qzm#s(~p_IHxC4$uQ)Vv!V)tt5{+T zIjaO#T1^SCn@7hP6zX0|f2OS;S8(ypMlxP+C$D$^#Chq}By|f#8gXp<6T?-OIp~$O zf%GLek1=ZlMn;DHAk%aK4*PRO&2J}AN_KHIAs4S^Y>Za<A?)bTj79bEwu zR{9uilr##lI27>rZgLd};biL$W*=RnQy3r>2bS)cfx-^(^aiEp? zX5IV^9xez^pWADFArWlHwSiK%KK?n3MIV1dC+hs_xleF52{~OP;G0@`OA@W=4fql~ zqpXOD&_U)h`m>9116+5W*+7sds4DED>DcJ4Quh-r-FRHz~aP1FpR-*rVMd!iO`FShbXG^hu z{i#VD#3OKWP&4-WFx2fNC`w*|UZpJ$dh?=6QhIt?q;>0RVN0TC7qQo=uFna3Hqs1C z*V<-v$hhO!08n-GRJM1-xFEJxkvaMyxbqcpJD%{~~j5G6b%Zj<@ojrjTh(Ze?ZDq6~PhrsT zDO8kg=i@7V!#)iTFoc5(4mSl-55QaFx#UK)_uCKv#c!_X>yC=hD{EPOv1xQ7V4|z; z(<=zhR+aSmDk#pX((al8P4y_*jwj2-Al`p^0UVp^dXO1Hjb5PVKucan_disArbqgQ z)jGi6@J~2xT5CQlag~h^k-hr(C1e?+XnjLc8EvCbO}HXIXGj(WR7KaNw!37FxT6OO zF+~zPT$HP+q!-mI?_%BBhinc(jnE;!J@nrRX7^mrUNDK$jT5B$Y*7l~AGz7ESHth5 z6uE1}MI2?kde4+XseS~MSarCm}05w5qj;?GxM0(fxk>-MHewBYu zv+MoOYAak`IEzs}*b$`GjHnw- z$^GD`zV9)^ByZc4(!Sc&Y7!Q&($(^l4hCRs-m~c`S~~A1reV9~;t=b{`^uCMC)>s_ z+bncev;+ItpMI8GgZ_QFRg$O@UP9?%)$z7_yKq{QUY;luStc1)U06nK3^EHcxqHa^ zL%HlsrZI4P;MY<^VvCp7jWaAIm$=*&>C)~+n1RWolhzqR9;-lLc&RFdtg75OKf_U* z#S^DwRE1ePOI_dE=fZhroEBQG1q5|KT3vfAPFJT|{-y0u{lJ&92M7J=Rr<-!?Flqv znVYNF<(8T?2$j81SzW=e427MDfEOynQr4cu6g*oV?`xE9Nr`DbvGe$}SHmMk zf*L?%Ox<;A)%&$hRh5sN;)@dql_7;F{7|KXtIdYgc#55G%DP(SbvFu2^l3aHd}4zK z%f0vRDHj9wfdD*PM(f;gjm3b?A?5ymuDU9c-zAq3J#okmN6JgKV+v{K!bn_;KzZ0W z^GkX7R^g!6Ll4|)$E9PZ&M~51d6cdnUzRdE1f@5I2LwNka$~_?A0bT9oZ6|d0W2=V zq~H{O+`w$FUKOdF(K?9nh^9W7?l9j?opp@6buQO2`g8?D1`*2kWa^5$3YMwHPnCAU z7Vx7vn$qN+x~t6CLlHUEgjy|OShEuYm4@cc`bwjR{h8aJ3PG8cn?JGGkH*%Va|non zirZt0?V&QmBMf4z=^Ocpz4dMv3+uH~5^ z1`k}>EvTySS!OQOkQuceW8l;-^k2XB8PK--8EcirvW;lR#MSBFTR97I7#LSHaF_EM zw2Oe{?V^eT{qRaOqyFi3;5%(xaRLs0PTQ(yJ`604r`sE7@Tm`>uOA=Zb6$ba^5*H* zteKb4Bf}x*SZFI>&8f0p|2J7}Z07X%QJU4-Wu8`tBbitItu6m!WZO9_eTnnt_{azs zuJ*_ywd-|~0_j4KH`%ZzxT2*=Yz>%f5#fgEDW z+;meff0<6~B$^P_=O}X!zoJlq1{!gsqY(;V0onV zlG~#TaUs5@n;v%@SU}f|ZUnl%Fq_Xk5{EfT)4PR=wUiPCgrf|u-4D*IMYIlrG+J%k z)-ragQ97Gu@w?U6n(?$A(-x$h`4cO4@;6foA&O9^P9-hT8z^S|O!jxzXbM>kl*<^e zN_5eR2!0q*=Z^E}Q)^z|r1lNYeFbbQ4^@sX{6=}@X!bdb)+&Sjuz%-l(Kue2tS3U|bftE+ops^N^x|25audTpH^ z1PS?+4YrKW*Y6NYi5X)9I)MypF5ba|&wQPK(-5XkLZzXBA)|Y(t$!4Rr5l7Uqg^U| zI~6cU^G<(*u33ex^cUb83>JPr3q4}#yF`fd7#YJ6Nb3qRMK_l#a%4u#L2m}~+WQUU zsEdsUEtCFnZ6E<99igefhfg<)m-N)yeDo=AKv7=6MJ{2qN3-K>B9^G&DmnmL1y; zq0_?SLq1gALNc1L3;&;&U9An061jb=Sro6}<{NZw1-ppf;-5RpJk2pGd;^{*vDRZf*OErY z!oo%HKxJuujVJ$N;l-sPEks!#-||xlVYg1(Xp%zmRdX?7YwIQAwwNZDHUlVLfZnN6 z?b$|{Yto^R{q(@MT^aBp9{{>4G}XFJ!ktgi+gUJ;aK95*%L;*`WOG$7GVUVF6%KRz zlNEAh_k&fk+Geq=7$mPj7b?BmiT+>f@9hNld$vMnm@YFAoOHe3m)Aopv+ug&7w z$o7M@Bh~dg*mW=ELapnA>G?Ju+$iS&3D=TznFf+N;NmLTy~Y=jdsWnKdUX&{nHEtrEo=&O@nN z*JQ1r=b^jh{%V{NdLMQqjqSTJDGL^9wStzhNy)(Qkb+PFZi*H(3kcp$rmBNia;FVB16$tBPnEcMRZfRF*0coK<@hnLe#i zbQ(AV+4!xlmrCox_^YfJ2hg;ZuXq*L>pT%PL@UW)*I5Hz2-hDxIw1pF;N?Bw>hIRQ zG_D{XX9Zob3bI@Du!^K}At+4?n_t`y>OK&F;(71S1!{3y8_PBwvDY_X;~kaF2m1`P zt8m*GZFp&BVQ-oM!P+B-_5jQQR~Ew2McNxx-gwE8Gyf*lec>be2n=Gb0D&&-|MHIx zeT8Trk@h+Xi%<&RuTYoW|Et^a#`oA2PCq~O73Te~rFy@OFF}8&4g4E#6KZZwIP>e5 zqVEU1h-dp#_FU;-|JH$e&-bh8!vBdZ@qgoMExrtdHCpTTGoAh=m8{oSX9of~rpn)z zz7KqT|GZuN$3_TgW5d31C8&IpyzcDBDY+Yb#Ek*e9_}u&8MeJLXq5P%MO0z$ydYkRD>I6`2=QxHeo6+uui>{OH?n+oWrLSu-rb?}*E;wQA7Nqx zENb9vLhuP?jYw6QGm4{iC5OYt4tR`Z8_B59%WcgnFTma^KRXjuvH;vYsFwI ztxo=>37jZ?Y2T5QuT#KB?U$p!7d<=s=MjUBRd?$8{Z8C?u;zk&N%l?dB=Y^8D6m0B zF5a8Pnv@Z{PHOO+6I||}o={6}@P&?EjiuN-#pCDKqlfJD_Dd;j%`Vu}@5Q=S-h3~5 z<@<62Aa!UDZ&DtXw;GDC85RD)-Fqmi2%`~0W3(LI;5N7oj>4tkBS*}sLQB4DF=C}Y z`pdqHXVdK0M9DvC<)=o~K*vmP&z+vh4E8b`4m;?FRZ^gqv}FgIH3`g?_3X{AVb6-H zAq_#=#(%e7Pz@+Q!Zl><{ev#C%HB0(#!O;g^->IQR_!HfzXmSvunF`Xfv3hiutzGh z7+#ix;^N6@$eZ=-eG>{}d;`FJEI^~3FYV}l6S`U8{mG$K&%hWu@Hi;GeV<()Y6*!r zI~*ripXY$B9_FEuodyhrVAQKBNo_an6|OR;Mb+Xs2KhKz_a(0&m1iz~*L~Rv(X8~Z zJ#9sVm%6ZfCapUEsJS_f(ixvx_8gv(MeD5JsI)ymo$zawmI!|z;vVX0j@OF+6P$Z( zbr0v7)6=qkT`hV$2Kp8jjH`1oh9>)t5P=tc8gO_2#YkP5 z=+JiMq0vT9>Nqp-x#Lry_k4@YEBjz)jzyr0DW|LHYyv)%&W!4?G8=g_NnTOAo0&(W z3eshQ<`KvwE>WJf+x8c3nvrT<4N4e~g)S|)@-x&r_y0kxMKTT6qdFfW(&5 z9SYnMbBRDQjj~iVunR1YB_@3EEogZ~h|Wo#$-0dq+KV@jqJCJ=)rxq^f+6V+H8h+6 zftY_+DtHRSdxdz7t`2M6tCp;ghNplT18aiQnByRDyNKli5upq2`Bz%3r|VBOr2|iF zEu)>2;}Vw{Z|XD!`-xqNi_4ll0eH^W-1FdACg{WtAk?ZFZa0=Q*X=weCR)bsY}p&y zh~%BFy0;fn)n%^Ib=t)3s+OC~hD>;sztROl`O{rZg<561Gp3!iU5Q32`rRF-20`^E>CA!r*E#n5 zrFL1Xj7?GNHqzrZdRw4Os<$Z43-uqF@r+}|R& zl;*~m=EVF2@-{CI4j;E<@Hx&48a#TB3egUazMku1pt0J%604JYHiWx5;n`#X?X^sY zd>Nz}+F)ucg?P+qY>r;KF}LM*Sc2hmiulWsR{Bw6ey6t84xB|2>oVLdDw5)Yg5FM= zZ6#8FUXk0C3iDm)e07ySj&8Oc88g0frO04!=qc8svh2`!;li_y!>sck3zJlE$-Nz* zN1Gq${G3$cBPkV&!z>E`T-UmRO?3Skw8gQ^L(T}uS>ir#T@)8VPmW{`|qPy$C=n#O@8 z65uutW!d&gud;1&WO!z^Tjf+{=8}KkB;eF#_1rL(=O?4Ej=cE%$?=U*F1iy2?-?Lr zpM6^~!Y%jN=UjyNqLJh6K(C(q5`4@`Im1M`ujxVsFPA|P-Ea75g<-=-Y@*}BxJ$>js{L7*gEL|-Rl6$tTjN3@5Hc{0xa z++Qr(Ydz{Tvi2CSRMcZs#3tn)P`~=_kPDvdL>U9l0~o*Ezoo?aQHCB27KYL3Af=CK zW#@$NLPxj33SS}xrRHlbJ8Fhb4_dy>ZwFKoIto3I$(A=t&Gir0cZd+hYo|JygyAju3!k8lm>u)L|zVos+Hw>K?u zNv2nC7s0h+^?mIvr`s{@o$P&$X#a72sn_|yIRMfmO7K$$mtuFf7lD^sFOh2-nu9J` z16Ah0YZIrPJL_;MIH4xOb6+WLnA6SCqSpw%4gXl>gsQ%=xQ3%hrXia4;Ah9%&%WV4 z$av%;L1fURbgY5y>bCVruCHCK5ThvLhDMx%{nTimL_RZ#Pydr=TdZ?>-4k1o<1~L( zDz4_73u&`ne3qD6$K$b^eiSv=Q z#QogL%sL=8+EW)Y+v(mm>=~%n*wJz~(YHo#(a(y|mCwy`I_^RGtbnsXEOYalbp)`v zADcqUV?w1U;t%1QjiS+i9C(Q!~3iA9e;GgM=x(4+!p7+rbv_9#c_7LrArE$NiL zCJwl6JGiDB5n9eUP|Sz@vBXhwvqGT^Ps7^4kHq+P$-x~%%HA#dzPa^r%y&k~{&~KB zO1JfQpeh;VWW-1@D?Mx2bEAhh3vW2RSxW-*Fy||>RY&qSgb7;exMg0JtjMVQesg3@ z`k3ICGdjuaXa5@B0-mUbD6Bz+zRenVx+3~O_tStB|6ID2PD29O0^IRG z3+9X#QiyDA-j7+C5qNyuK+j_FsqszVijpt1o9_iCq7I?WTaS`7!Zk+cQWLV!w{QZ@ z+CN79lYA}RnXBPCp<$d-0l@Ci$MO(}^YWoCZ{<0Re!q^2zEq>BHWSs**I)Bn04swJaY}&60q{s~36>pas9rk26TPeMnnYZq2 zxY8-^%&_FeYt(D42C+ETz4OEtB$}l(%J;Dp(KR$5cLvnW@cS7!MCc85Nb}nPph{b1 z79UIN9Qde^mk1>{elt-Jb7~nJ+mpM#=u}Zk-Ue&Fg9Hw4LULceOrWC%lM+iEW{=we z1TU}s#}5Lm`UOP-Z^sx+>{P9>@un%1(luO7@oq2EV8-mjiC~c$ z=Ld{9iT2p9It8P2ryp*W7B1q1W}#?rikimms%xQmty@ZBC3OmjeoXBwJXvUic-8e; z_XLDAnGN9^&Pqdm$ck}Zo63K23zhl=cpIgu&emvP z8v9dgK9}bB8|D}c)l*)!wRr@5ho_f&U@CgSX%o>@yX*MmiivqEqfrRFbv137Oc{5g zOe-4Y*QoOS^FV>X!?l_x>OuBi=DI7CB7V`s@pQUS&lb@hn+dPkSl1Cveph;;v6E`s zHOXacK7FZsAQg>YPu4H0sr_ph_kPFvyfDmJ`I&T5jdg&0CoEn-@|!dVYZ`D|aY5N^1y%3PLTp z`N;j6eZ?MMfn4_Vuk>6ibbeOM$Gru(e_ASleD|<%RRN54dybV6SbI`4vo_$pka|i%$JHh|4le91!F5*l?YK8RpQ;qZQ=O3E z#_DRq+xipBDYFv(U8j_GYwA(J(PxN_07%>7Z#QXAm@W)v>@(nb=VQ_>;aGvK(}g?+ zcceXc1FowvbTkjBwRHg3YR-OVSaah@4>3Fj+yZ)3`CTh~$VbYdu1LIyfGpVUzQQaQ z-u2>un=L_`6LdjYwQ=~+<;tut%WumESO)$&(WTFQx&H{@uH?bPn(TvgC& z&i^jK_$KbR6^aEeFolrRnnU0fqL5Gbi3yslZT~BS*WBd zIwY{xQ1Elo_jp<(Hcz|J&iWtM9~YUMZPBCk1VL}!0xsqrNZs4Q+DE^LLCzs;{i-2q z>_d0{zpM*z#ouAr|1azQlaR!p$+~Q>G@B`y5A~&brY%W+e2`cu;T$NQjp(z&vN>CT zzR?in4sVX)Qkdbehus$08wmUYbBl+6=d=@R$$mUvS?$kBIo?xm4~o)qvzjg%a-40a z-r0>{_TA*$mEF|nN_E(-9YBm_j%ETtSE+4SLR8lb@O1HeE!u3;@~$x6s~vWMr7tr2 z_+eK4V<;(pi(};XIKI|c6~pUA0|3cQ7!py!9qhxehBNnJB<`^`*3{1ETEc)}!6j;e z*79D2c49T;OR%6NIs5JAdM9>$NL@G$cA}sc`#$HEBYH+===I{3VUyu1z7`l_5^SQj zmseQrDun@YlPWjb2;;rL?0=+5YpJ!Yx!kG{s;b2r9kq; zczoyG#;{nYWoCAUNqPJh&wk1z8+N(6K;-Rx{Pi?-yIhTnHzU9YtZlxAz0 zC=WhatJRMHuFnfOh+eK$b}*lbZAqj!Oso&5k8QAmgO~}?9}{A1HWb13h7Uh_0wc(n zqN2R>l=58x@C8AEDXMO?{1~UYaEsDY7cAB*qQdo7Z$%;d3DFutMPYC-CkVvfoe&8L z+iMxy*-TtQC>S<|4SxhT&nkQ*KlqDrf>@jzJv@6h)VW}HmmkEA0fg9=gaq}u^)zY^ zBL_3maSx$hP(N+)2uQtBy%dUIr`D%F-f~)DV3 zU+VTb@0xcYInDAUHx3?=f0>Or;dBf-Zy;4>)%tm5ldXG(tC0Fm*Gi?5o0*|g(U{|; zh`0MhwX1*&*Fxziae3gi1nWUcd>sQRTZW?NOvxB23TN0fyGU61i|mw5CMsGOEN1O1 z?kEk3c4ejw_lE+@&ms3s(@1TV>sPMSux_KqoqrrBmOZwv%Bu_07?p@@(URE?K7W<1 zu)C}KFw?U6ovXSBaPM>pVI@Th{LpWqQ@v%R6RaL}wX5g{3RRYX6ke$__OySp%@Sw} zmEFglP~PvLnuXBEXbCv6jl>_ep)Y^wOmxj{Jngu#F19MW(R+>?Txt`F? zR&EV?8KxPQS*Ha^yYPJckBn)d@ ziGtgHkg*}PK5hI2bjFv^g>RCMk_qgK{YQ+GRM$~Q?e0Ic`Jv_dsxHjpDj(VqJz)Av zpg`62#6S#)0f1dW_cSkX$0bI;hu21eWfM{i_#ez!UKzOG!5=ag)TSJnY@n&Y!$jbY z!<1i7ka0r-v&t>B5bv!@d9PNuRlizTX2{xYyH3xvT@R#q3g5|EM>145W7BcVOmEay zfs8*wrwBLZ=M;sj&elT`Ui?_DIy6c6gz*LlWV=thwn<1P| zmpW*(3kMIE9*WeYCOA1<+s^m*!h{9j0uU`zOx;y9OM}@2Xq-LCqF!c3kVW)O8!F{ekvE z5Adve!By-OtqY$m`u?d6+bn(Odg$^|@1_)#PWg~VSrfPMzU#B9d-GrjMv;9P+H*BS z9Pg;>Y&B=buXB4Yz-D6@0ZHYF&w z531XhY@U5%=ee{v*Us(-6-J)G*$U;$1|p{4$DIk|3O#p?Iwzw*%hlIp_o}_vL`fHJ zu(xgc+WxjL$?e$fj^<~X7Zb#BT{-XJWH>eQhu+VXhy`V@h;d7i9g`6>}Oad+27v3;~ z0|d2p%(qQZOJrv!X!%-m^-KpEm>hrk+w|*WX5pznq+e^4CB3EoS-2o*?T_Jt9?DN? zuw%%nDgl$Gq$}QZ<>BAdVFkCaH9Nm0s!7h_DVho%7-xR++{;d{_xt%THI&YiSB{jQ zUrHJ@ox4O95o$iiP;`ZmZkC3Jz9SXD%VEq#f0wDsDG5c#=8a@UJ5d@w`cL?$+7Y{T zd+e77?~O14|4;M!B~Z5lwsG!en}~aQ@-!&-Qw=L^zE@_1fswD-xWd6M0929Ng^Te> zANeBrKO_x^wnhe>Nye1BgD=M2oy^#pfFHT{{xJPDpVgbcAfRQrV8&8@bhW6OD9{)4 z8MPMOGWc6+tPuOz?>ofiCCi6m9&^PxSl>YFnlS~WeVnv{rI^iv4W~W?kR=)Cg0LDG zMY_UX*&}QfMLvm-^ZX|ezPkm9Fr4oOj;*pNaf-Tw-dhHP^tZDk4rIVD*$bvw`R+Zd z-KKO2QE!Y6z1eSaw{CC=t*gMVGA6-eo1lYOtFp#w&m_J{UVXcxpr;)Uf9}e*_(9o2 zTsi1s_wg}^t(*BBqn@XzunI=rpTEi-WPZ*aco9TSiJf^3+$o@Bb7b*h=Qr&XOYw*K zS>p_f7_AlmtO*NlQ6$0F_f*+ad#WrW%!Q_^hnoP$6mu6FjcNg=tR?nq;2QActOa*- ziTO)eefrz9_@}P#+pgT@_CP%=T0BhH%-sZFL~j4?CHgeEvKvBlId-(+~sYq5(I9y&5<9&>9J)H z1D*4Q>#qBc_``J!SCnt)Aq+ju3@T$44H`t_&-L@Shf^Tddy`JhhMZZiQz14NI-S=<=N4jFkAWbr)R#uYf@O9&l?62__TB=%>Zp(hu zxLuPyOI8oCWG_}Ku7(0})ozBw6z?3IS_ij5M>pW`@vJ;5thF3x-z&i8{iuq#Bj#|B zeI(4662nai&BHg`Q6Qu0hh$TeDxHf}VN-aW1mEcp;PyWEg)fU-z!h?Eclxq7f(jpZ z*(Cg%1=yM9-h;&(k@t>(q|WcfUhk+5Ir97>TY^9qjC;XZyUN`!_uTgY+VLk}aXO}h zr7k7fUqxeqDKL&-r@;RAg9uB%F|6I(27f#1r8@LNdSdVHKkXMb2>da`HXHZr@)vvk zS8_1u|8NlD`CFjHvBYKU_`_d*{eO#``}<>9tiv<&G@E<%w3BW3?p zNp>oLg@y@uUwyJ<Z33IiYYrIGz_`aCo14}8~C_% z89~Q%{#&N3sF`eNz>J8uS$9~4R$0>p;}?BcuQm|F?8kP_}?M2o-5F1MGYk~(Ch`HYoW}#%n`*WTCSp~<% z87|20zEI~c_FWmZRRCGYqs6EN`*a*@)LCynsNK~G1Hd;%RbH<}}=y=yz*n+gY5Sl8+6V2v3cYg@?CIs2EJIhWg@C=c(~SHc27P+W|Fe zszpb~N+yZbmN}Acn`^~O9$7v@{8-BjisYMEBHg3M9OR;|8%O79Zxkm{r$v{Bx2sJi zpd+qbaqZ}in*z>v!?r)DbfC3>eLp6yRz4#dv}>1v)2=i2^G?raAor`}tfn%{VN&l83%!$J23;TIBbWIG zM}h?-ZV+hwc}^IQvPakBmeOMA!^1tT=@KCuUeaoMr32`s--xon^O?6M(<^qcsa{&j zAoLd5UBNMnJwa3t+eYi|L9zIe24%IEoV}2K#CTud8*HA6On4WKigH_z?AV5%e06E5 z{H2RTS{FenPc0ct{68~grL_K~DT_5T_mU_PGuvM~>v{qxEjS4Ni&-z&w!2+iHQRIa zk&~u4D`2q~jpB|fy3akV1zi028#`XB#yx+6b4Mu-XR27>K6e7QB+I1L1g2-ZK2hC} zwVwc6^N@<7Ts>vol~6Vf-=!q}R*yw9h4UYkA3_BvE`6vRLa|N&OG=O`|IUya$C~p; z-0?z4gB5=G>yY=>(<_-9l>v5FYOiOv{@a)THez|2| z%*ttUe*u*{moUp!c3<#}PK3azdOdpMyHnbsPHn!`Z`Vb!Kg?8ifCEA_qMx1^$O|qVPlVcHv3VoqAGb0^qjQ_}Sz`onYEG2w8aKjX zRE5^dk-W$%=Uwti#8T+^&DN!U zU&{6-GT}afKg6rSEL*OVcMK`X_n)N=2GsOu--0zN?2hjr>iwUI8^ClH7!>$8mqauz zEiDpaOty*}{s-2(YBxn09BPjmOY4mFT{O2jgo*3SH0`sKoEO=Sfv@p=)uH`JF%SJ5 zp|$Ws)O%q_je(^d)r~WCdMi$EIz=6}Yb3=Rmt}z@9`flk{x`p(UK@1DgMVr3XjQy#8y=nmSe%YPh7l@G1wNLUknescu;=@KV#>~hC`)`cWzD`eWr2F`F^jN6 zKhb~+6O(fA3>Bqr(YMD61M|K}*D`0zH2}Zv1s+YNbPNnh%g<#Zw!YD#{R^1)PhzyO zIzYFW=q@q+H2Kgr+#U{WznS0Oa=S^$xhg0e=PHv>*BSuUn3Fl{Z=mlNyKgkS!>7G& zg$C8OYvrlYGE0UFbuM*ypzS5uXRuOsg6#c3+<5$YOJYl`LT@4ra?x_NUGXnzvIlVa zPep5C!tD`x6{%-1n?7ZSZXaw49$gBP!W(HccJ?+vNPemr^u zT?IpP53<`mU6E@{h2n&U#0R@?PYqH1-yTuctR+u0=J9)(Sbz*xoVrJFbmSN`a9%P= z4dkD<<06iOg?Db>t?@qZCs3_4VN0xSUAP5zo@YA)DvX0Pw!w1#q)nT8jjMk;fAvG8 zwB)pAU}B`Nz98j(^0&3w15%WCYwz$rvcf%_|K7Y;*PPj%E}w&LR1oaOcS^>mL32ra zZxs2iQTkH*btAIt2m9L3SLrzrH7lhWv)st1=nY>WdeAU=8Bd2#$La~88_&Q=-9y#D)%+I{`Ms~%{PpX=q=Ng_1}=KLc(x3mnZ)}Uu128Rk1Kc^`SJloJVL!d(Fq*a1hM>ACxz3O+PFE$Ln&HmS; z2c#C@QdsIk4v>%g!<0Euthyqkr-;pVm#CI zo#HYc80$L8@x0UYjr$6|qhtvtAX{p~==p;itnZ3ijNni@C9u4UwnmM4uD*v$^)u4U z3(YtZ&;$HuQ|!`xjR(5MAy}2tbs+T9gn;Q3bXFGi>|L0@1_-mi!d>ssknX?5b~QRf zV84=GVpG+x`(C}iPvdHVy*2dDb*Oz0KvHd21zb<7p;3;~qtNVqtH5k6*Z_IWdaGSS z*Gq>^J!q4>&EMWiKfkyl(w_*=u)~v@9tUwkq~v z!$hFv;*0Ve?t<~RVK1%rv1R5~Fbf_hh#WhtS0m%X@T9o-etLOvYoH0-(?vQj=gYz8-H0y*OCWc3ZK?LJ_6|y zCAQZIh*F-vzk6$ia=meUvjmuqSyfnVU#&6GSRGjSf6bkFJe2+a?-h|E_nljXq*9VS zVzSdhAxhb|3S%8(mt7Remc6k@2pO^)hETS#Z)0W{WM5_mgTYwNMcwz^{rjHZ_xCvG zaen8VKg~SGT-Q9Vx#s%3-mmNV{2>`rh0>}0MCUS{9R|?3+NwaVXeyNYLo$|T+3z35 z<+A&EydVK-_>vP>IWKRtUG!5lmbw#DB7y7N8LRW_uC;0Uxaw!C_0{^PXsl7?dgiRn zndq33lMn@5X`huT?eVayn+7F2HbSkkX1LN)3-Czq1bk;A%J#5x=W(2f>r5XbIv(>&}ZpfMFEsX?^yiWT~obN zL(p3~CPMF`o2$>ADWr28VKRxi%vmavf2cL%tdF4Q*8xRy(X`tlTycG;ot+XmFAYfU zo5nt>pF$Ovqpi&-gV#Lz4F`?UmUoiR=P-I=(L&ahOpPn0;>0Vb=VjlJgm6&+f59-4 zZTk;ch1Nf>}%sDS@b{X+bbPkA^xU42;HA@k#%#4KqiS;MP) zm3`fJoS0iM#ic16|oZlZz# z{z7=dYg?aG?Lpn?!Uc=@FL8h@H`*FD72%$NL9De2ER+_Q&vW4GCmDqrYr5+6In7D* zR6mNqktzeJ1topVlAa6d9`+|)7x9CxO91G)E>{oey2kc~2_0`FJ>DiXoGrfc!k>Gi z&$f8>mg7}K#G3G;r>#XM?trVSsd^8WFG-55_>-$ER&s@PU6Yf~^>Ec4(kQ^yof?S> zFUJ_h=u}<3+bUH)S+aHB{Gn<-Ke{|{A?G554z(ED;p^Qy{WGqBA36PB06I=C` z2BBs^b(eR)y6c@%7nZ%i=Fw@LPw6&Gnp)N^Dc>$Z6P7z;ECI_{wUfB*A1KCZuK(751gliyEV63y5tfzDj)0lL?wso`1BK5d#~r0nWCc_$ zuNmMpA8=97)VEXI$Qntb(r|#U>$&$x+>L3UuPY%UUYJts^RIl}g3+DGmGvr6g5EE+ zUCKUVH-+9wM%eA0qWw&y4B>HTDEC)a=$AhjXAje0L(}bJwx=W^BVAg6V(g@%vJeeT zuHuh2aC6)*d1|`c(fMbe5rezGAa+0e7l_@f|3C|9h5eF7(|kDd4{pP?U!rW9x6giI z`_i2M_RD6_D8Bheg#E`qBJ6+rhC>o5DJdizS`7~zK9k#<4ySh};mFO?`{{D+%e+{%i7Hv|NU;7Dz>xsq;ZE2F0)HnB$3|0z2 zt_&4GWp%2#-HoMxF5WE0`^7NLuYI<4$Rv~R6oM8e@cl05T zRnEZT6}<%SU3M8hHkYdPH)pYeEVbqgxhWGX&(QZaOWlPwze6s2Y^&`!wL~QPHLk2a zLOSi<^J90DbGS(~y>=nZckz?c97N0b#i)9o zMmO{RFZK3UxsGOYMYU>sNI8lQsRd^l2Fkd}^EBV_B<7c}B$1Oi=}s`ADw#!L9$fEY z7b9532B9hdguye54<_URwS6-;%FiiwN6JILnJSqoUbBPeq}G$Cf?HQ{EQ#wPXXt>!4sLgvbB9*NM=hSJ=cIOiuJ;O=9l z?uO|JWMOH`t_YxxsCK50-=+Y?22CHQOxUTpY!G&G<7hqahY0YjWPY4A z?X6K*tP`){PlztTAAsmSeILAaapufEL>GP{$V1tkV%^@#5w|-N8m(V9KyM%Xp^K3i z=IfWYE^jAB3u@_q@jEO`$@ZS1XhbLtDQtV=KMjZ-gjbls5FuTlxP z9zhmJq_}LFBhJ6Fj!LaIWGODU*F&H^s5m#MPr<^}I3tZeliSo}nb~K-VZ(~H`(jro zasdj17{2yFDd05o0i0$E;=j{BW08}*P$+~uFIQnRT4ZPRC_dpzfI!3rcE2(~+v))4 zYUXIo-&&3UIkV?CW*}!C-Q7ICvWNz&QwBu5aZI7qW^Os0i;hUq<9+l3US{u0?HlRG zXCh1gMCkJGBXmUpgf5SGd8j5Q7YU59(ywM`cZZe|xLIa0jm?uAyRIM0=5)80rjpgq z<)GfDnc8}Agck}SWQk6oM9T*0kKaeFl0Nct9W^p0!M!T%gY1(v@(Dzfh=28*wG?f( zKN*eS9=%AdO)1|xbM(V4HH;0&;_@Tm5I<_$D98qaqXn7Y!F$U&*6!ZAcZ5?mwBvxF zJHU6(HlR{!jyXFepbGhU1p+}YR;@c4F6 zC2n3ks1kb?hHgjHOP3&N-f9@wJXbckKEmkHPj_S|Y?un|eEq34$x)Nk?^G-9gyx8v z0!wp%j`(Yec2gb&a;D@dD#lcnRlIDk=<)=wHQkl9zU?1 zH7xzKofR(S^ZR@S2}qm$FQrd7Em)8($@RDW}tXGF#IF zRaRm+Xc7isbhpN1YmnJE(^0h>cTdph_NMKwaXnQgn(mIsxy?4D*UwdggAW$1Nk=dh zd)t|NJgg$yF&+iGn<_bz6ot)dUPI6s_=}MbCp!*3LI}5iS+=@YDcbT86gFJ^<;YbC zhO^2s7Wba8zBzHc1ctRZvlfIp5fuP*w}j#s`F^&E5m6KRtqee$xI)#<^Q&+uc=rbA zB{PXk(T>kqaA;j{hh|G~q?s$0gGZ*Wsu4Bz`MIelI&}EGY#WgJ-@>nc_)_Rg29#%F zkX!BpCHZz~2MC5k?A2YrB6LB79|+w~XGgy`XTWt4tg0=Ck4FIr23X9>Y7c;5XpA2H z8^N%yo^*|WCrQQJW+z>t&_^Fu`HWy|cCF`!?~L5b3i!^7fB4Q~&kh{;&X(29T31`f zgsu?8uEeQ930UWic%w=dU1N%26_?kYT8kO93s3`{J<%4lgdH{yT&G2riOaQqgQ-bn4gUH$hN^L{P~YbIL?u_6yP0Lk5vR6ziVsm;S(304 z2+g|!8m_F8YR>+?)`CaksWVDS*qw2GSDbUSjVW7PuUp2u*6*Y?oD z?h;+~x!JffOATp4L*CQ5YW>MomY6?F#fXq-JM08qsKj%uz>1ORZtFcMs4~;tt~a@D zPS(5&ke(+lUlVKWk{RVQ`A|^2ZD3(|d_8AfzDg&csRT~Su_t`9y980VY#}4)^YC@g z9U25HQ!0yXaq)HmdWzM)NKOaLN#n2ykW(x2&6)zUEdwsVzr(_sAt_TyxS`6Q(Px|^_8eI`0lah%PTMamK~;e z?S7(l4FI&RXA? zA0yfVBOkZPCaDj4j_#-{$#a{RCw8^8sCHOeRWjAap>;duc*?}gkrp^29ZI6;9Q~WL za5`c%f=c$;a9oz0EvTh-U?0-}MLzujZ#{mRUn!PN1NLrj zvq1qSXq*MB`leq8F`m-U?LgLNfi!OO)=m5^MJweTjt)7Zl@t|Ymo1ppS6;!J(#gDK zm4JTll=(x7W|0ehY~t5ft3DaAk7`Is5?V07+_AV2wUuT-6`#nO;0G0EP9@|+@rQIx zo4=iCJ&SsIXyiCf`0)==Ln%y#=Le`k`zNSDs$Z#9o;!GIVjUj<5Oo-}%7){3L(%nEQ2U>6JhdY>9Nu9ash=D2cDeKUV2Nfuua4c{J zk-H{PnbBF6BmZemNJ+j}78V5AJf)^BaR>X!s|@ zwXA(J+N+vXL`Tq?)soxI?URl7vZ83SFFBN&7l}a@mD`wPu1~B!yXX7N%O`UM3O%CK zpZv*4C!QQ<_~4QmWNA;u(m3!RY2hahLTID_Nyw}4&k&mE z+dvn%u2TkmcWU`Z2>pzsTjFvAp(-bJsYW+b&gi^FL%H>Ru)SxYSz!D4Qev;0!FrXw z&L_!%r>4BW#Lt|vvhVt4U1-;6^L?jlH+`cExrYWMYY8YD*Fm4~^4ddBS}WI-^{q`g zcm;Gz?&nNq%eB53smGrqb#vH)fD{mu*xh75tDgI#TimvJK2uVI7Euw`@UvT7$EE)Pbdz&rEL#s8q`)>u{_dDRcM*Lquy zdHThh=Oa$}wD5L&DJ;Kqwb%_1TPcht4}+j8_PIfmq@S1fJIQ>gWRd+9y{VGrl_20y&+t9=iquey9D zIMPbFXCR%LbsN_uN%*TwY`0$~?i!N(vrN4A{70F1U2SBue}-Xvc=78~_R)vd6jrMc zNRlK8ax1Dl9h)04uWyLpg}pci8gVS@1% zkixzuVu9Jp$BIwY@UAy>N*a;>Ono(8RrBMExfn}e$h8fBaZTv3oCdDJ;JZPCn~$p; zr41V@*|(YHE9Kc_%nM1l@u>Crpv8J;H|6D2{EpZFv^j8|#y{TrZAqNgS57p9SM=C* zMPLPVf-Pc5w|4*P{$I0S2Hwk@f1!6(A}j@_M%O*|9PaX&<@CWMEgHMX(#~crP-he* zQk)9jzKIl!$s#WK1RAPp9Tl?=SDwhq%3wc0X{YPuFCfW$v9@1J_>Yc;w zB0?p@%RkG-DL>1_vhOY4Q8xc97yD+N-wInD_$@Y$Ir2_L@`wAzf>!pe==6NH#W(Sh z1D&Z<&4dGS9(t|v+PGV7S4f3h4If*46Nt{05@bV!S)p}g*>dGOUrt&Cyl}1H- z4=q)!NtuUV4YS?AaG50`m=2QO&p3Gs>Bq3h9Ph3oi3LON8%$-NzdSP(-8CQh_RiIU zJR|f8c-ouN-vvt^U8G>TY@Ur4{-2M3ZM}+iw~=t&NvWIy{H;hxe6wi>cBRXtq8Tu& zh4_L9MEz^%#Q|m1gIIEBCDr*++Kn5K*y=DF3W!eI6(gbIHdgva9FH@jEym}w`;U7G=>u1U7`8#livVVJh#)7{z-P4o=Yx4 z&Xneh)-nd?jv{t>>r2CT{JEmlX%P%{6xU56%L(j-P}KZD{?u@lb2*Ei>|dfauhCQm zcw6s)6DsjNXRNge2asv*i`GtiiuAYl4ls?he{R3XGW##0wO&FCNV8=n(!_*Q7^@8M zcmWCoyA1vDfz!2#2{3fL>S1~sK>+T%-|XF&RRK-o{hur0)55X;n>lc=9i#tc|1bj@ z8ZDp=eM$hRe+v8(xhi_?w~t*5c8>oYlit1XOM0vKM@#R1J^A$C&;P$pe*c-2ezujC zkr}NhOsIk2%3C+dGZ5~-H`U1J2bDK9wcO|LM;+GwLFN7bYk&UpSQnu3njo?Npz;Fy z^zYMk<30>#v(^VW34A#BvvYDFrd~z{sZnaM$W|}>C`;|~qq*nRcK>}bu-|%BiqqAY z&$qm}riul<#z|ARpxgZ?tb-4+%Ut8b%v66MU6A2>rq^V-axvI8oMqMpsU=;czty~W zo+kIb((nqzqN?Ac^+ZT74Rl(siSGG6xwR zwCBWCy(PKc9Y=7vRWOXGMfV4pm8;R%h*<~z`EgKJuCXj9w<{= zo0;*-rsZP#_#-#2e$}RsPUDlK783^Xhq!Qvd9|hf{e{BGpbK>t!?wl zj>XX07se{TZ!f*Kq6El=w{F!zq0h_a`Fq`4^KeJsE z;r+V~`0BimY-cREPZo@r?zfS-+?FF0qSK(Y9Ve!rvyYL@;C7z|PSM*QR&+2&!Z6UViIJb{=vV@N2Aw!V}{tcqXc$_aX}xgr;}3&~wAj!~)9Xv+8&dD%MM8f+T**tC@JPIL>ADH191u{4Qmfoq3Ec*&j~70Zvv-Zfutk5qs$2clo@uASaRx72RIe z1tzW>F~)9-$(OtnJa9TS9#G>)v5%sHSx(JKKK1QmU70N?2N4H3EwUIFb$!vQqJDZ? z*SpV#CGoXp%Mqa&FXq^*P@4n+r8#BNk=_D~KitLwTeVTLjaGlV?rb_|lSkb}btRq` z^~VBJMT`h^qq4?lh8t7MCsg<8dQtuh)09&*(>KLkk_OsJU%V%&t4hTboKQSurT-6Ok-+bob6Zg_$ATnD!xd41(XY+NM z)W;XufN+Y=s^`{~tXYW92o+K%u@uaCN!+Wq^|9t@V|keH-KPd0W{B(Z8zApXBA5xD z0sR&HwfEAE>@-D>|6_U_m5x7YMw_IPLX!%%v+33eL^=i{u{cQ34K+>~L?r4pS5%Sw5@etv0)9S4MUb5bb32x0!3JY?|A}El#Gxuhzl%`G+jt5giFSVo!LolK^zUzEfjZ-aLqeRH)Fz6E+06` zJ7>h17KxIJ)E#tRA)WK~-QGS|yx`Z~DZVZI+2X#ZrZ?)aKc51Qe5X%aj7|d8Ywiy} zh@ngMeQj^YkIL%7bkxRtff38x=o5J?sjI2mLpxl&uUY(1u!WhnayIikTjU^L#iEGr zjlBOfgtU00MBTtZiYICPd1D7+xuReRX#IJ8j@m-{;e&AIP_}Od{58-QeH_`bLSOduT=y~faRI^c=CXJYPv>s^;6-EmkURcut6*D=nd)THzzx-a$Cj?lS!_XTE`wh^&-!T zPzgspC$+UMk58GGonm}d4x#F%u zk(K%azD;c}cS{xfeAkldiVLHyIT87(#uilXj`%0*%q>Gc_KF{+fPC^kcT7K`#-;8V zg{Oq169HW|dx#bo(I)(U_;}3!B>r}|MM;}3-Z?q_7e_-uL=NC+!~z@*A!ea<1L5(+ zjwSdUJygm%K`PhCGX`A}6%5)x#`WD{sOaiP=*Ew$(80BfT7!0@!Z>>eZ{yjSq%}!? zl^i4`NNN2k&??C$Qzwh#CKNjsW;W{Xw|lpVZKljm1k<~W^!D;J@0eb0e<0bYV*Z_3 zd}tfv3bOTZ22TqD zEavmr_oCGiBd&h3^%vU*lE|spnDB(~0mY|AU)*T6HV9Cb&Ik#SYX!Mp0jE4@Fa>$O9 zC}}9@v-@Gg-W5VJmc^LllM~{=BeRviOL-1*ZfMonQL?={N-YZsuvL=1=>@$sM89{t zr#+g%1RK8x(VNIAZgD@?cZk?!D(mGVCj+BhsnwTtQ)6%H6*~gqd)7(w)jwD$uMWYm zS&w%(TZpBeDg~ogkIa=|*t&GZ!j;`M?_R59pG4+})Oak8-e@x)(G);U9-0w9$N%mN zbPBAWxy+b1SPvBc1PriFR@E|^LPy@kai(wv{qBm+1t*(d@`_R5O<;q`nlRO6n!>yA zFC$}nSH-or%X_v@ChT_HVC&L5l*r1`?Q6cyvmVFYZM@7Pkf$naYA|@C1XRJ(;(`%a zDFD;nWcw?pw@?sk4t%ngFMn!IJ_l6(;?;feIr^-bj(`%<=8L3xpB|Ri)=vPF@F!{j z_t0!~OvQ7m)4TVB-@W}ee-o&e^;Xkpt8ct%T^+IZZgG9-#T!6nyb|y6we?w{aDsgB zg1$iX00;dWq>p=bNxN%XUVe+T&emqR&l56U8?@C-=X1uwAGSPX6Iy&4{%Ij}Ur)aGUol=oNU; zbS~g3tfx%FV~Uc@G#q(O;S{~MgbanY{O@T%<|Xfw_*m6`yBA~Ak!WkFajWxX>{6}Z zHmwzIRQ|0T=RkSvl&jU5ORi95SZ|YSc-sOLn-DU*?AeFeH1di;m|$8T)Ww5N;PX+2 zhMBGgf=57(LN=^5N->iD$v)5f%;p z#8;5hd57ydVr_-7VY$DPDj$JD*Yj-F-yIP=KW!udEWeOGMGrA%G2u9%fwNB|!OEXx zuKg+@#r=f1Dm_@`W}thbFs|2~Yrzt}l@%s{;#u(I!8B?&nP|2jgMV~HdLbUOB}-Uz zbx7UVdJtb%h_%3~V}i1xT;(tc1KT7+PoDKT#)VTf@X7>}1N!sL z`>##oD>T6Aqslg};B?0Mj{Zvdeyvh%LTE%=9g>aiA!qDcR}@XsO1*Qp1N(J8(8U~Q zgPZ@Tgo4GEj9K`tp#q&q&*k!{wpMrsXu?{u@Pkx5w%ah7G4*D(T(b ztJrmKIA0iV23JYTJMDuV7Glh499j?t5W%Cy`IV|Ez5Kl-us-%a!z8@dXQN zyaJ#N_ogLg{i_L!+D?HBGfN>%JE&V7Dc5jY>@W!cDM>3b5WH0b4%Wdb! zK@pn<$xSmm>`_4HW=mJSkjKe)AGT5c{jOm12+$ItB-O1UDtxLAQQmE0d4VYu;Edan ziaZT!+1ZCxHv}Ks)*2It^dJ}T&k+1b*m>mXFGk@$7yVuW)L-Dpog6W^3<<8CvuR5yVuzB z6ALwT1-wLdKh&6h7v|@YbJrCfW;j8NOT8O!les+5em^TL>D6Sy*zs>AbgMxrKCq8H z(h{Jt;$AOH$@c3#<==|k*QGJc%VEDOkQ=kIw#;`-Fx6S+I2C#W^7!{)fQ{HINPb@);_h1fWIKAgswk|g`5#62x|P6D`42+k zNwI7>>yav*rqi+<<)+vM;J3;=FkzGH^N$e-A=sb^G_F*gCuu%`PC4klrw%-sYiIN_ zS?emnaMk<51Wn?UxsQHwNAyjFe+oUbM_p|T0ufyEcifc=4IQ(4)=DTxc)`xSUKzT@ zM0fW()1_(|0yE3mv*dV`p`{9c-3vxy^+i}uqZknaT8q%0rryRrE3ac@xqrB_H@-?g zl{T9hlWw#GXJ`@t)PzG;ViyB@3w@QrH624i7Qv=}4M^rYC~(nP5P!_K;!gxu)pooz zZ=@#*vEWHMJ3%+JS~49QhjCyJnzFVW))elqV#tOdn~DMAu@nlEd_l^U7opB^-SiyY zUF6hpT*BI-=aWJ^109hE(vkCa0zHt6RcGBNwE7wAs&?s-af|pUm=(1`dbfvxej2)e zQo&PvD^GrvV6Ty|E^<|lc#g_(lM|h8?}OKkJw4jDyYwLpy}`BSr4oNHhsBpdPdd^q zd!RRbK7r_|S}X?u-92iNP(UiQU7Ok<7ech@9lXxjx8X7kVt{YJ!|4Jmz~nM(CS{J*ocksXy*|*KF(|vzN;)x@Mk^kZkiZQB)n!0@Hc4EwI9@K z&{$gj{vjFdrhgxURl=<5T(F~E?beUF?-k(a5fw5oX|^M&WyTJZ{HR;E2+)FtN(F4D zNv_C?T~b+QEOO=gKqb)@rQkJk4p1fXZjF>yTi&sb(1(S`zvr7taiq*-^F!Kd`$beF zHu5HH%t^k_?qqA^j$IElk-9YphHr38zyR9UXTzUVxLD0iZ5Xp0F_erw7$Wv+=b{#%qd9uVEbc1|0 zHt7vd&ss%04BCAJr}N09D;O2i`eV+!@URuSm1GiAMQny3UY)<;=X$^v9q(2 zLRh#A1%^Iia&i#rbR>A%CjO^;Q7y1MB%iQ8z)v2s@;)9Q<{EyuK{pPpzIi#3GagH4 z^AFHWsLwH)ZZLDUAVAEWS18=$6|+7NXq!9J){F z8v*@mp6gZ$)^M zUkdKcPL+*k5MCf&NOr6=Hh_Km-qlf20WJk2R@CVrh{gC8Nplah$-NgUDqZy3Pl624 zytY>itgb_hPdE{9Q`!0{p(@>{Kys5Uw{1< iW10Vs{V}+>$NhpR!~5CJXJ&sp?%mP24Zry$;C}$6mB07^ From 8bab1622d8793a35cfe34934104f0d3db2247b45 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Thu, 30 Apr 2026 14:09:48 +0400 Subject: [PATCH 09/10] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- File.Service/File.Service.csproj | 1 + File.Service/Program.cs | 13 ++++++++++++- File.Service/Properties/launchSettings.json | 21 +++++++-------------- VehicleApp/VehicleApp.AppHost/AppHost.cs | 3 +-- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/File.Service/File.Service.csproj b/File.Service/File.Service.csproj index a4544c40..96aa422e 100644 --- a/File.Service/File.Service.csproj +++ b/File.Service/File.Service.csproj @@ -13,6 +13,7 @@ + diff --git a/File.Service/Program.cs b/File.Service/Program.cs index bc25a9ae..29e4c9aa 100644 --- a/File.Service/Program.cs +++ b/File.Service/Program.cs @@ -2,10 +2,16 @@ using File.Service.Messaging; using File.Service.Storage; using LocalStack.Client.Extensions; +using System.Reflection; var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); +builder.Services.AddSwaggerGen(options => +{ + var assembly = Assembly.GetExecutingAssembly(); + options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{assembly.GetName().Name}.xml")); +}); builder.Services.AddControllers(); @@ -18,6 +24,12 @@ var app = builder.Build(); +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + app.MapDefaultEndpoints(); using (var scope = app.Services.CreateScope()) @@ -30,5 +42,4 @@ } app.MapControllers(); - app.Run(); diff --git a/File.Service/Properties/launchSettings.json b/File.Service/Properties/launchSettings.json index f7034688..aa554908 100644 --- a/File.Service/Properties/launchSettings.json +++ b/File.Service/Properties/launchSettings.json @@ -1,31 +1,24 @@ { - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:11401", - "sslPort": 44341 - } - }, "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "applicationUrl": "http://localhost:5238", + "applicationUrl": "http://localhost:5280", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "launchUrl": "swagger" }, "https": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "applicationUrl": "https://localhost:7017;http://localhost:5238", + "applicationUrl": "https://localhost:7017;http://localhost:5280", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "launchUrl": "swagger" }, "IIS Express": { "commandName": "IISExpress", @@ -35,4 +28,4 @@ } } } -} +} \ No newline at end of file diff --git a/VehicleApp/VehicleApp.AppHost/AppHost.cs b/VehicleApp/VehicleApp.AppHost/AppHost.cs index ac86d181..e3418c79 100644 --- a/VehicleApp/VehicleApp.AppHost/AppHost.cs +++ b/VehicleApp/VehicleApp.AppHost/AppHost.cs @@ -42,8 +42,7 @@ builder.AddProject("client-wasm") .WaitFor(gateway); -builder.AddProject("file-service", launchProfileName: null) - .WithHttpEndpoint(port: 5280) +builder.AddProject("file-service") .WithReference(awsResources) .WithReference(minio) .WithEnvironment("AWS__Resources__MinioBucketName", "vehicle-bucket") From 1a9973aee5cf92972b67578066850d219e0aaab0 Mon Sep 17 00:00:00 2001 From: kingtuler Date: Thu, 30 Apr 2026 14:13:46 +0400 Subject: [PATCH 10/10] =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B0=D1=80=D0=BE?= =?UTF-8?q?=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- File.Service/Program.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/File.Service/Program.cs b/File.Service/Program.cs index 29e4c9aa..841e64ca 100644 --- a/File.Service/Program.cs +++ b/File.Service/Program.cs @@ -32,14 +32,13 @@ app.MapDefaultEndpoints(); -using (var scope = app.Services.CreateScope()) -{ - var s3 = scope.ServiceProvider.GetRequiredService(); - await s3.EnsureBucketExists(); +using var scope = app.Services.CreateScope(); + +var s3 = scope.ServiceProvider.GetRequiredService(); +await s3.EnsureBucketExists(); +var subscription = scope.ServiceProvider.GetRequiredService(); +await subscription.SubscribeEndpoint(); - var subscription = scope.ServiceProvider.GetRequiredService(); - await subscription.SubscribeEndpoint(); -} app.MapControllers(); app.Run();