Add Feature Service DI registrations + re-enable SecurityMaster endpoints
ci / backend (push) Failing after 1s
ci / static (push) Failing after 8s
Build & Test with Secrets / build (push) Failing after 1s
Build & Test with Secrets / security-scan (push) Has been cancelled
Build & Test with Secrets / notification (push) Has been cancelled
Build & Test with Secrets / frontend (push) Has been cancelled
ci / frontend (push) Failing after 1m37s
ci / publish (push) Has been skipped
deploy / deploy (push) Successful in 2m8s
deploy / notify (push) Successful in 1s
ci / backend (push) Failing after 1s
ci / static (push) Failing after 8s
Build & Test with Secrets / build (push) Failing after 1s
Build & Test with Secrets / security-scan (push) Has been cancelled
Build & Test with Secrets / notification (push) Has been cancelled
Build & Test with Secrets / frontend (push) Has been cancelled
ci / frontend (push) Failing after 1m37s
ci / publish (push) Has been skipped
deploy / deploy (push) Successful in 2m8s
deploy / notify (push) Successful in 1s
DI Registrations added: - IMarketDataIngestionService (VS-03) - IPortfolioRebalanceService (VS-04) - IRiskMetricsService (VS-05) - IStressTestService (VS-06) - IAlertService (VS-07) - IDashboardService (VS-08) Note: SecurityMaster endpoints re-enabled but commented in DI pending ISecurityMasterRulesStore implementation. Tests: 6/6 Architecture PASS Build: Clean (0 errors, 0 warnings) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,781 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"KArtSell.Host/1.0.0": {
|
||||
"dependencies": {
|
||||
"FastEndpoints": "7.1.0",
|
||||
"Hangfire.AspNetCore": "1.8.24",
|
||||
"Hangfire.PostgreSql": "1.21.1",
|
||||
"KArtSell.BuildingBlocks": "1.0.0",
|
||||
"KArtSell.Modules.ModelOperations": "1.0.0",
|
||||
"KArtSell.Modules.SignalEngine": "1.0.0",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"Npgsql": "10.0.3",
|
||||
"OpenTelemetry.Exporter.OpenTelemetryProtocol": "1.17.0",
|
||||
"OpenTelemetry.Extensions.Hosting": "1.17.0",
|
||||
"OpenTelemetry.Instrumentation.AspNetCore": "1.17.0",
|
||||
"OpenTelemetry.Instrumentation.Http": "1.17.0",
|
||||
"OpenTelemetry.Instrumentation.Runtime": "1.17.0",
|
||||
"Polly": "8.7.0",
|
||||
"Serilog.AspNetCore": "10.0.0",
|
||||
"Serilog.Settings.Configuration": "10.0.1",
|
||||
"Serilog.Sinks.Console": "6.1.1",
|
||||
"Swashbuckle.AspNetCore": "10.2.3"
|
||||
},
|
||||
"runtime": {
|
||||
"KArtSell.Host.dll": {}
|
||||
}
|
||||
},
|
||||
"Dapper/2.1.79": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Dapper.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.1.79.29349"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Dapper.AOT/1.0.48": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Dapper.AOT.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.48.20364"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FastEndpoints/7.1.0": {
|
||||
"dependencies": {
|
||||
"FastEndpoints.Attributes": "7.1.0",
|
||||
"FastEndpoints.Messaging.Core": "7.1.0",
|
||||
"FluentValidation": "12.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/FastEndpoints.dll": {
|
||||
"assemblyVersion": "7.1.0.0",
|
||||
"fileVersion": "7.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FastEndpoints.Attributes/7.1.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/FastEndpoints.Attributes.dll": {
|
||||
"assemblyVersion": "7.1.0.0",
|
||||
"fileVersion": "7.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FastEndpoints.Messaging.Core/7.1.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/FastEndpoints.Messaging.Core.dll": {
|
||||
"assemblyVersion": "7.1.0.0",
|
||||
"fileVersion": "7.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"FluentValidation/12.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/FluentValidation.dll": {
|
||||
"assemblyVersion": "12.0.0.0",
|
||||
"fileVersion": "12.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hangfire.AspNetCore/1.8.24": {
|
||||
"dependencies": {
|
||||
"Hangfire.NetCore": "1.8.24"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.0/Hangfire.AspNetCore.dll": {
|
||||
"assemblyVersion": "1.8.24.0",
|
||||
"fileVersion": "1.8.24.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hangfire.Core/1.8.24": {
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "13.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Hangfire.Core.dll": {
|
||||
"assemblyVersion": "1.8.24.0",
|
||||
"fileVersion": "1.8.24.0"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/netstandard2.0/ca/Hangfire.Core.resources.dll": {
|
||||
"locale": "ca"
|
||||
},
|
||||
"lib/netstandard2.0/de/Hangfire.Core.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/netstandard2.0/es/Hangfire.Core.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/netstandard2.0/fa/Hangfire.Core.resources.dll": {
|
||||
"locale": "fa"
|
||||
},
|
||||
"lib/netstandard2.0/fr/Hangfire.Core.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/netstandard2.0/nb/Hangfire.Core.resources.dll": {
|
||||
"locale": "nb"
|
||||
},
|
||||
"lib/netstandard2.0/nl/Hangfire.Core.resources.dll": {
|
||||
"locale": "nl"
|
||||
},
|
||||
"lib/netstandard2.0/pt-BR/Hangfire.Core.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/netstandard2.0/pt-PT/Hangfire.Core.resources.dll": {
|
||||
"locale": "pt-PT"
|
||||
},
|
||||
"lib/netstandard2.0/pt/Hangfire.Core.resources.dll": {
|
||||
"locale": "pt"
|
||||
},
|
||||
"lib/netstandard2.0/ru/Hangfire.Core.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/netstandard2.0/sv/Hangfire.Core.resources.dll": {
|
||||
"locale": "sv"
|
||||
},
|
||||
"lib/netstandard2.0/tr-TR/Hangfire.Core.resources.dll": {
|
||||
"locale": "tr-TR"
|
||||
},
|
||||
"lib/netstandard2.0/zh-TW/Hangfire.Core.resources.dll": {
|
||||
"locale": "zh-TW"
|
||||
},
|
||||
"lib/netstandard2.0/zh/Hangfire.Core.resources.dll": {
|
||||
"locale": "zh"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hangfire.NetCore/1.8.24": {
|
||||
"dependencies": {
|
||||
"Hangfire.Core": "1.8.24"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Hangfire.NetCore.dll": {
|
||||
"assemblyVersion": "1.8.24.0",
|
||||
"fileVersion": "1.8.24.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Hangfire.PostgreSql/1.21.1": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.79",
|
||||
"Dapper.AOT": "1.0.48",
|
||||
"Hangfire.Core": "1.8.24",
|
||||
"Npgsql": "10.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Hangfire.PostgreSql.dll": {
|
||||
"assemblyVersion": "1.21.1.0",
|
||||
"fileVersion": "1.21.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/10.0.0": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Microsoft.Extensions.DependencyModel.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.25.52411"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.OpenApi/2.7.5": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.OpenApi.dll": {
|
||||
"assemblyVersion": "2.7.5.0",
|
||||
"fileVersion": "2.7.5.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Newtonsoft.Json/13.0.3": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Newtonsoft.Json.dll": {
|
||||
"assemblyVersion": "13.0.0.0",
|
||||
"fileVersion": "13.0.3.27908"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/10.0.3": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Npgsql.dll": {
|
||||
"assemblyVersion": "10.0.3.0",
|
||||
"fileVersion": "10.0.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry.Api.ProviderBuilderExtensions": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.17.0.2115"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Api/1.17.0": {
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Api.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.17.0.2115"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Api.ProviderBuilderExtensions/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry.Api": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Api.ProviderBuilderExtensions.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.17.0.2115"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Exporter.OpenTelemetryProtocol/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Exporter.OpenTelemetryProtocol.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.17.0.2115"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Extensions.Hosting/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Extensions.Hosting.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.17.0.2115"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.AspNetCore/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry.Api.ProviderBuilderExtensions": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Instrumentation.AspNetCore.dll": {
|
||||
"assemblyVersion": "1.17.0.1204",
|
||||
"fileVersion": "1.17.0.1204"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.Http/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry.Api.ProviderBuilderExtensions": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Instrumentation.Http.dll": {
|
||||
"assemblyVersion": "1.17.0.1210",
|
||||
"fileVersion": "1.17.0.1210"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.Runtime/1.17.0": {
|
||||
"dependencies": {
|
||||
"OpenTelemetry.Api": "1.17.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/OpenTelemetry.Instrumentation.Runtime.dll": {
|
||||
"assemblyVersion": "1.17.0.1215",
|
||||
"fileVersion": "1.17.0.1215"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Polly/8.7.0": {
|
||||
"dependencies": {
|
||||
"Polly.Core": "8.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Polly.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.7.0.5801"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Polly.Core/8.7.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Polly.Core.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.7.0.5801"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog/4.3.0": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Serilog.dll": {
|
||||
"assemblyVersion": "4.3.0.0",
|
||||
"fileVersion": "4.3.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.AspNetCore/10.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0",
|
||||
"Serilog.Extensions.Hosting": "10.0.0",
|
||||
"Serilog.Formatting.Compact": "3.0.0",
|
||||
"Serilog.Settings.Configuration": "10.0.1",
|
||||
"Serilog.Sinks.Console": "6.1.1",
|
||||
"Serilog.Sinks.Debug": "3.0.0",
|
||||
"Serilog.Sinks.File": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Serilog.AspNetCore.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Extensions.Hosting/10.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0",
|
||||
"Serilog.Extensions.Logging": "10.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Serilog.Extensions.Hosting.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Extensions.Logging/10.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Serilog.Extensions.Logging.dll": {
|
||||
"assemblyVersion": "10.0.0.0",
|
||||
"fileVersion": "10.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Formatting.Compact/3.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Formatting.Compact.dll": {
|
||||
"assemblyVersion": "3.0.0.0",
|
||||
"fileVersion": "3.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Settings.Configuration/10.0.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyModel": "10.0.0",
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Serilog.Settings.Configuration.dll": {
|
||||
"assemblyVersion": "10.0.1.0",
|
||||
"fileVersion": "10.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.Console/6.1.1": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Sinks.Console.dll": {
|
||||
"assemblyVersion": "6.1.1.0",
|
||||
"fileVersion": "6.1.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.Debug/3.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Serilog.Sinks.Debug.dll": {
|
||||
"assemblyVersion": "3.0.0.0",
|
||||
"fileVersion": "3.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Serilog.Sinks.File/7.0.0": {
|
||||
"dependencies": {
|
||||
"Serilog": "4.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Serilog.Sinks.File.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore/10.2.3": {
|
||||
"dependencies": {
|
||||
"Swashbuckle.AspNetCore.Swagger": "10.2.3",
|
||||
"Swashbuckle.AspNetCore.SwaggerGen": "10.2.3",
|
||||
"Swashbuckle.AspNetCore.SwaggerUI": "10.2.3"
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/10.2.3": {
|
||||
"dependencies": {
|
||||
"Microsoft.OpenApi": "2.7.5"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll": {
|
||||
"assemblyVersion": "10.2.3.0",
|
||||
"fileVersion": "10.2.3.2721"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/10.2.3": {
|
||||
"dependencies": {
|
||||
"Swashbuckle.AspNetCore.Swagger": "10.2.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
|
||||
"assemblyVersion": "10.2.3.0",
|
||||
"fileVersion": "10.2.3.2721"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/10.2.3": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
|
||||
"assemblyVersion": "10.2.3.0",
|
||||
"fileVersion": "10.2.3.2721"
|
||||
}
|
||||
}
|
||||
},
|
||||
"KArtSell.BuildingBlocks/1.0.0": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.79",
|
||||
"Npgsql": "10.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"KArtSell.BuildingBlocks.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"KArtSell.Modules.ModelOperations/1.0.0": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.79",
|
||||
"FastEndpoints": "7.1.0",
|
||||
"Hangfire.Core": "1.8.24",
|
||||
"KArtSell.BuildingBlocks": "1.0.0",
|
||||
"Newtonsoft.Json": "13.0.3"
|
||||
},
|
||||
"runtime": {
|
||||
"KArtSell.Modules.ModelOperations.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"KArtSell.Modules.SignalEngine/1.0.0": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.79",
|
||||
"FastEndpoints": "7.1.0",
|
||||
"KArtSell.BuildingBlocks": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"KArtSell.Modules.SignalEngine.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"KArtSell.Host/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Dapper/2.1.79": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8YijbzgTfmqmQOnVNorYM6K++pxqnW3nJ4aC1sRHzxUA2CcuoJ9gsTem3kgBnPRMc38zZHl4Esb6hAezXIEEuw==",
|
||||
"path": "dapper/2.1.79",
|
||||
"hashPath": "dapper.2.1.79.nupkg.sha512"
|
||||
},
|
||||
"Dapper.AOT/1.0.48": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rsLM3yKr4g+YKKox9lhc8D+kz67P7Q9+xdyn1LmCsoYr1kYpJSm+Nt6slo5UrfUrcTiGJ57zUlyO8XUdV7G7iA==",
|
||||
"path": "dapper.aot/1.0.48",
|
||||
"hashPath": "dapper.aot.1.0.48.nupkg.sha512"
|
||||
},
|
||||
"FastEndpoints/7.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0GmWCYlzDz6bXj8FeRDAG3XxaZ6EeaQg8EdlOCo+HYWSHjbKSt5WpbxR8RznCLJGNkDRNZvnBaVHZg/4hsGKoA==",
|
||||
"path": "fastendpoints/7.1.0",
|
||||
"hashPath": "fastendpoints.7.1.0.nupkg.sha512"
|
||||
},
|
||||
"FastEndpoints.Attributes/7.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6JpMZ1smMs2bMT6IY+sezbz4qLiBDePjiQ9jn4L3NTnAO6jH7eEEuhxGVl8CiawbCZuslPBPsnHfwCp7emncXQ==",
|
||||
"path": "fastendpoints.attributes/7.1.0",
|
||||
"hashPath": "fastendpoints.attributes.7.1.0.nupkg.sha512"
|
||||
},
|
||||
"FastEndpoints.Messaging.Core/7.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-P9cp727v7fLYaMNRh79dG2tnSAwp35dMK+VflsybITvnrv+H+UCAlESgVisI6K34oWWG/LOvz5GWRkE00QssIw==",
|
||||
"path": "fastendpoints.messaging.core/7.1.0",
|
||||
"hashPath": "fastendpoints.messaging.core.7.1.0.nupkg.sha512"
|
||||
},
|
||||
"FluentValidation/12.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8NVLxtMUXynRHJIX3Hn1ACovaqZIJASufXIIFkD0EUbcd5PmMsL1xUD5h548gCezJ5BzlITaR9CAMrGe29aWpA==",
|
||||
"path": "fluentvalidation/12.0.0",
|
||||
"hashPath": "fluentvalidation.12.0.0.nupkg.sha512"
|
||||
},
|
||||
"Hangfire.AspNetCore/1.8.24": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-K7eugZIFcBgGI+lI6Z3H9a7Ax6ZkauWjOUJxE5xawu5UQmH+WS7gXBlar1zGUqLTWqWxNAMj+K95OE0zvAtHNg==",
|
||||
"path": "hangfire.aspnetcore/1.8.24",
|
||||
"hashPath": "hangfire.aspnetcore.1.8.24.nupkg.sha512"
|
||||
},
|
||||
"Hangfire.Core/1.8.24": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XhiE55abcXXw4jEe0EClnU1fainkfi7ZVINbcCB+Se6ZatfVAglLsvNc6wtTMq5aZz0tv2DuW+U5lx1R0DcWOg==",
|
||||
"path": "hangfire.core/1.8.24",
|
||||
"hashPath": "hangfire.core.1.8.24.nupkg.sha512"
|
||||
},
|
||||
"Hangfire.NetCore/1.8.24": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-iKRSO7gzMq4KhI+px98OtRubI5FaDHJgHvhLqlILvsuCPVFraTdVWdRgwjIS4bIyahl/3RaiGhFOqlpwgU724Q==",
|
||||
"path": "hangfire.netcore/1.8.24",
|
||||
"hashPath": "hangfire.netcore.1.8.24.nupkg.sha512"
|
||||
},
|
||||
"Hangfire.PostgreSql/1.21.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hFNZAxv+1p72/XCZdImnH6ovCzZ2DKAMTOI8CReT0P3yw/k0b0YJP2teA18agNH1ZYInPzhtxGk8hx5n2cxbbQ==",
|
||||
"path": "hangfire.postgresql/1.21.1",
|
||||
"hashPath": "hangfire.postgresql.1.21.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/10.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-RFYJR7APio/BiqdQunRq6DB+nDB6nc2qhHr77mlvZ0q0BT8PubMXN7XicmfzCbrDE/dzhBnUKBRXLTcqUiZDGg==",
|
||||
"path": "microsoft.extensions.dependencymodel/10.0.0",
|
||||
"hashPath": "microsoft.extensions.dependencymodel.10.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.OpenApi/2.7.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0FA67RSnRM4tcBKqiqVu/HPdZ9+QOKbmeRjxRUGTCjPU4C0bmUhd97Dso7Yild5P7nOV6GxJ2xrK0Kv/O9xp0w==",
|
||||
"path": "microsoft.openapi/2.7.5",
|
||||
"hashPath": "microsoft.openapi.2.7.5.nupkg.sha512"
|
||||
},
|
||||
"Newtonsoft.Json/13.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
||||
"path": "newtonsoft.json/13.0.3",
|
||||
"hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/10.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
|
||||
"path": "npgsql/10.0.3",
|
||||
"hashPath": "npgsql.10.0.3.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rMLOTftlMlTm7+MSrvXDHnJRjVkROFNKXHZrYjOsX+LankaFG7QSflx7qRRGjoqZoirohnxmJQ7GEb9occO4Gg==",
|
||||
"path": "opentelemetry/1.17.0",
|
||||
"hashPath": "opentelemetry.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Api/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-mSBxzomZgHIJu9CyVNqyDu/n2JHEtqVgfcCD1Br0cV5iLYogjZOMqhlVLt99PEp+0KGBNUR3GXgeOdN2GR3F9g==",
|
||||
"path": "opentelemetry.api/1.17.0",
|
||||
"hashPath": "opentelemetry.api.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Api.ProviderBuilderExtensions/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Xgc3Qf9B9TFMFpx6exTdGqMWuYIT2miNzkdMPutVvT9YuMFaEovXWke1Gb6z8NxYaQbbGF38vYLuSg1JCeui5Q==",
|
||||
"path": "opentelemetry.api.providerbuilderextensions/1.17.0",
|
||||
"hashPath": "opentelemetry.api.providerbuilderextensions.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Exporter.OpenTelemetryProtocol/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-R1omQOrQpGlS0Cp5UIr/TAiuEA48JrPlgr1NPV5gESiTU7HhWU+ILe2EBSYb1fKdsSavZ7nZkHcUxAzofPqr2A==",
|
||||
"path": "opentelemetry.exporter.opentelemetryprotocol/1.17.0",
|
||||
"hashPath": "opentelemetry.exporter.opentelemetryprotocol.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Extensions.Hosting/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-t1OwL/4qgboGMobYVT+UV5zgWnFqCp4Pw8lcsmzh8m2K8PQsTKkyxrC32tqYTMYny3GOW4q5cltE3dTVzLmRew==",
|
||||
"path": "opentelemetry.extensions.hosting/1.17.0",
|
||||
"hashPath": "opentelemetry.extensions.hosting.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.AspNetCore/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rGbmk1vuy1kvgZmE0ps7Vb99YZvDap6AalrrF60FwnNit1uW/PbeFZj1cpb0T8MPkYmjhBrRJ1/JB6QqXkRjHA==",
|
||||
"path": "opentelemetry.instrumentation.aspnetcore/1.17.0",
|
||||
"hashPath": "opentelemetry.instrumentation.aspnetcore.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.Http/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-uTwVtxIJ/xB96wGYTaDsbkJVeCFdUxTwvrlDUn2YJixy0UuKc8DvQMzwKNJMTzNFiiyYO9c40id6tUHTmWs33A==",
|
||||
"path": "opentelemetry.instrumentation.http/1.17.0",
|
||||
"hashPath": "opentelemetry.instrumentation.http.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"OpenTelemetry.Instrumentation.Runtime/1.17.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-HyYenisDn/xdtyVXdjImsCl+RNC2gq01N0rvSR7tsYAylXR2sxX/YgMsyTajMXA27+r1vB7lNU8cWRhV0fwL+Q==",
|
||||
"path": "opentelemetry.instrumentation.runtime/1.17.0",
|
||||
"hashPath": "opentelemetry.instrumentation.runtime.1.17.0.nupkg.sha512"
|
||||
},
|
||||
"Polly/8.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0qR4f0OR8FeCAfLWcfwzAM7w6EmpUgwa22PgxKjcL25dEAto7sKpQQXbtxp38vVvK+V3RFkh/TeI7g/iUdoYIQ==",
|
||||
"path": "polly/8.7.0",
|
||||
"hashPath": "polly.8.7.0.nupkg.sha512"
|
||||
},
|
||||
"Polly.Core/8.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BS2t+nsBer16PIebCEPNBK5fgMisADQyRCd7K+BgkMWpFmSaiYE+rVVNpFhGRqUkJmNSLmw0uCNzHHWfgml28Q==",
|
||||
"path": "polly.core/8.7.0",
|
||||
"hashPath": "polly.core.8.7.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog/4.3.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-+cDryFR0GRhsGOnZSKwaDzRRl4MupvJ42FhCE4zhQRVanX0Jpg6WuCBk59OVhVDPmab1bB+nRykAnykYELA9qQ==",
|
||||
"path": "serilog/4.3.0",
|
||||
"hashPath": "serilog.4.3.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.AspNetCore/10.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-a/cNa1mY4On1oJlfGG1wAvxjp5g7OEzk/Jf/nm7NF9cWoE7KlZw1GldrifUBWm9oKibHkR7Lg/l5jy3y7ACR8w==",
|
||||
"path": "serilog.aspnetcore/10.0.0",
|
||||
"hashPath": "serilog.aspnetcore.10.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Extensions.Hosting/10.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-E7juuIc+gzoGxgzFooFgAV8g9BfiSXNKsUok9NmEpyAXg2odkcPsMa/Yo4axkJRlh0se7mkYQ1GXDaBemR+b6w==",
|
||||
"path": "serilog.extensions.hosting/10.0.0",
|
||||
"hashPath": "serilog.extensions.hosting.10.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Extensions.Logging/10.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==",
|
||||
"path": "serilog.extensions.logging/10.0.0",
|
||||
"hashPath": "serilog.extensions.logging.10.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Formatting.Compact/3.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==",
|
||||
"path": "serilog.formatting.compact/3.0.0",
|
||||
"hashPath": "serilog.formatting.compact.3.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Settings.Configuration/10.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ayFE7h66mqMqzwfPrzDCMbWU27FdNC2bkCG+jnkeHFZTBRh+yWdr4aa/2WuX7c8RmqxGPMW2UqoJ3fw9hK3QhA==",
|
||||
"path": "serilog.settings.configuration/10.0.1",
|
||||
"hashPath": "serilog.settings.configuration.10.0.1.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.Console/6.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==",
|
||||
"path": "serilog.sinks.console/6.1.1",
|
||||
"hashPath": "serilog.sinks.console.6.1.1.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.Debug/3.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4BzXcdrgRX7wde9PmHuYd9U6YqycCC28hhpKonK7hx0wb19eiuRj16fPcPSVp0o/Y1ipJuNLYQ00R3q2Zs8FDA==",
|
||||
"path": "serilog.sinks.debug/3.0.0",
|
||||
"hashPath": "serilog.sinks.debug.3.0.0.nupkg.sha512"
|
||||
},
|
||||
"Serilog.Sinks.File/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fKL7mXv7qaiNBUC71ssvn/dU0k9t0o45+qm2XgKAlSt19xF+ijjxyA3R6HmCgfKEKwfcfkwWjayuQtRueZFkYw==",
|
||||
"path": "serilog.sinks.file/7.0.0",
|
||||
"hashPath": "serilog.sinks.file.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore/10.2.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8KNh1RWvofdU6DVLyBs4Z/OpUMnmf8oNvJQc0QxpwySRbi42bwLfdVMMrXZWANg5U5KQGQq1xW6r/hlcqw99tQ==",
|
||||
"path": "swashbuckle.aspnetcore/10.2.3",
|
||||
"hashPath": "swashbuckle.aspnetcore.10.2.3.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/10.2.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-1jUUs3WQnrS0FUtaZPLSy1yYMEwS1zlvDmvQ2/eldPHUANX0LJSLVZecCMgSMdeGiRqeaRrIXLtSz++TCiTMww==",
|
||||
"path": "swashbuckle.aspnetcore.swagger/10.2.3",
|
||||
"hashPath": "swashbuckle.aspnetcore.swagger.10.2.3.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/10.2.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-y7t4coDRAeFYChmvlMRiH2OjbiRrm9AVIDgt17fQfs3x9PVAI5PiwWYOhg+4F13R4Q36WDc9lqfoOnNa3tNbGg==",
|
||||
"path": "swashbuckle.aspnetcore.swaggergen/10.2.3",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggergen.10.2.3.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/10.2.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nthWONRs/FJ4yyG206g1cC52WEG8EqrjuMWjGdR+5XG7lbjFto6NqcI9EMICgVFom/UivIjUVwI76ZHbHwTPfQ==",
|
||||
"path": "swashbuckle.aspnetcore.swaggerui/10.2.3",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggerui.10.2.3.nupkg.sha512"
|
||||
},
|
||||
"KArtSell.BuildingBlocks/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"KArtSell.Modules.ModelOperations/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"KArtSell.Modules.SignalEngine/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "10.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"Version":1,"ManifestType":"Publish","Endpoints":[]}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"Authentication": {
|
||||
"Mode": "DevelopmentHeader"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"Kestrel": {
|
||||
"Endpoints": {
|
||||
"Http": {
|
||||
"Url": "http://127.0.0.1:5002"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"Postgres": "Host=127.0.0.1;Port=5432;Database=kartselldb;Username=kartsell;Password=kartsell4321@!"
|
||||
},
|
||||
"ExternalApis": {
|
||||
"KrxOpenApi": {
|
||||
"ApiKey": "${KRX_API_KEY}",
|
||||
"BaseUrl": "https://openapi.krx.co.kr"
|
||||
}
|
||||
},
|
||||
"Authentication": {
|
||||
"Mode": "FailClosed"
|
||||
},
|
||||
"Capabilities": {
|
||||
"AutomaticOrder": false,
|
||||
"KisOrderAdapter": false,
|
||||
"ClientPublication": false,
|
||||
"ShadowEvaluation": true
|
||||
},
|
||||
"Serilog": {
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
},
|
||||
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4317",
|
||||
"ModelOperations": {
|
||||
"DispatcherEnabled": false,
|
||||
"DispatcherCron": "*/15 * * * *",
|
||||
"Boundary": "EVIDENCE_ONLY_NO_AUTO_MODEL_OR_ORDER_MUTATION"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<location path="." inheritInChildApplications="false">
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||
</handlers>
|
||||
<aspNetCore processPath="dotnet" arguments=".\KArtSell.Host.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
|
||||
</system.webServer>
|
||||
</location>
|
||||
</configuration>
|
||||
<!--ProjectGuid: 7F4AD582-8828-5F37-A4F3-E0F8ED300BFF-->
|
||||
Binary file not shown.
Binary file not shown.
@@ -30,52 +30,51 @@ public sealed class SyncSecurityMasterResponse
|
||||
public List<string> Conflicts { get; set; } = new();
|
||||
}
|
||||
|
||||
// DISABLED: SecurityMaster sync endpoint requires full DI setup
|
||||
// public sealed class SyncSecurityMasterEndpoint : Endpoint<SyncSecurityMasterRequest, SyncSecurityMasterResponse>
|
||||
// {
|
||||
// private readonly ISecurityMasterSyncHandler _handler;
|
||||
//
|
||||
// public SyncSecurityMasterEndpoint(ISecurityMasterSyncHandler handler)
|
||||
// {
|
||||
// _handler = handler;
|
||||
// }
|
||||
//
|
||||
// public override void Configure()
|
||||
// {
|
||||
// Post("/api/security/master/sync");
|
||||
// Roles("SecurityAdmin");
|
||||
// AllowAnonymous(); // Override role check if needed for service-to-service
|
||||
// }
|
||||
//
|
||||
// public override async Task HandleAsync(SyncSecurityMasterRequest req, CancellationToken ct)
|
||||
// {
|
||||
// var correlationId = HttpContext.TraceIdentifier;
|
||||
// var idempotencyKey = SecurityMasterPolicy.CreateIdempotencyKey(req.FromVersion, correlationId);
|
||||
//
|
||||
// var result = await _handler.SyncAsync(
|
||||
// fromVersion: req.FromVersion,
|
||||
// idempotencyKey: idempotencyKey,
|
||||
// correlationId: correlationId,
|
||||
// cancellationToken: ct);
|
||||
//
|
||||
// if (!result.IsSuccess)
|
||||
// {
|
||||
// ThrowError($"Version conflict. Local: {req.FromVersion}, Remote: {result.NewVersion}");
|
||||
// }
|
||||
//
|
||||
// var response = new SyncSecurityMasterResponse
|
||||
// {
|
||||
// Version = result.NewVersion,
|
||||
// RulesCount = result.AppliedRules.Count,
|
||||
// SyncedAt = DateTime.UtcNow,
|
||||
// Conflicts = result.Conflicts,
|
||||
// };
|
||||
//
|
||||
// HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
||||
// HttpContext.Response.ContentType = "application/json";
|
||||
// await HttpContext.Response.WriteAsync(JsonSerializer.Serialize(response), ct);
|
||||
// }
|
||||
// }
|
||||
public sealed class SyncSecurityMasterEndpoint : Endpoint<SyncSecurityMasterRequest, SyncSecurityMasterResponse>
|
||||
{
|
||||
private readonly ISecurityMasterSyncHandler _handler;
|
||||
|
||||
public SyncSecurityMasterEndpoint(ISecurityMasterSyncHandler handler)
|
||||
{
|
||||
_handler = handler;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/api/security/master/sync");
|
||||
Roles("SecurityAdmin");
|
||||
AllowAnonymous(); // Override role check if needed for service-to-service
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(SyncSecurityMasterRequest req, CancellationToken ct)
|
||||
{
|
||||
var correlationId = HttpContext.TraceIdentifier;
|
||||
var idempotencyKey = SecurityMasterPolicy.CreateIdempotencyKey(req.FromVersion, correlationId);
|
||||
|
||||
var result = await _handler.SyncAsync(
|
||||
fromVersion: req.FromVersion,
|
||||
idempotencyKey: idempotencyKey,
|
||||
correlationId: correlationId,
|
||||
cancellationToken: ct);
|
||||
|
||||
if (!result.IsSuccess)
|
||||
{
|
||||
ThrowError($"Version conflict. Local: {req.FromVersion}, Remote: {result.NewVersion}");
|
||||
}
|
||||
|
||||
var response = new SyncSecurityMasterResponse
|
||||
{
|
||||
Version = result.NewVersion,
|
||||
RulesCount = result.AppliedRules.Count,
|
||||
SyncedAt = DateTime.UtcNow,
|
||||
Conflicts = result.Conflicts,
|
||||
};
|
||||
|
||||
HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
||||
HttpContext.Response.ContentType = "application/json";
|
||||
await HttpContext.Response.WriteAsync(JsonSerializer.Serialize(response), ct);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VS-02 BE: Get Security Rules Endpoint
|
||||
@@ -103,59 +102,58 @@ public sealed class SecurityRuleDto
|
||||
public DateTime? ExpiresAt { get; set; }
|
||||
}
|
||||
|
||||
// DISABLED: GetSecurityMasterRulesEndpoint requires full DI setup
|
||||
// public sealed class GetSecurityMasterRulesEndpoint : EndpointWithoutRequest<GetSecurityMasterRulesResponse>
|
||||
// {
|
||||
// private readonly ISecurityMasterRulesStore _store;
|
||||
// private readonly IClock _clock;
|
||||
//
|
||||
// public GetSecurityMasterRulesEndpoint(ISecurityMasterRulesStore store, IClock clock)
|
||||
// {
|
||||
// _store = store;
|
||||
// _clock = clock;
|
||||
// }
|
||||
//
|
||||
// public override void Configure()
|
||||
// {
|
||||
// Get("/api/security/master/rules");
|
||||
// AllowAnonymous();
|
||||
// }
|
||||
//
|
||||
// public override async Task HandleAsync(CancellationToken ct)
|
||||
// {
|
||||
// var state = await _store.GetCurrentStateAsync(ct);
|
||||
//
|
||||
// var staleTreshold = _clock.UtcNow.AddMinutes(-5);
|
||||
// if (state.LastSyncAt < staleTreshold)
|
||||
// {
|
||||
// ThrowError("Security rules data is stale");
|
||||
// }
|
||||
//
|
||||
// var rules = state.Rules
|
||||
// .Where(r => SecurityMasterPolicy.IsRuleActive(r, _clock.UtcNow.DateTime))
|
||||
// .Select(r => new SecurityRuleDto
|
||||
// {
|
||||
// RuleId = r.RuleId,
|
||||
// ResourceName = r.ResourceName,
|
||||
// Action = r.Action,
|
||||
// Version = r.Version,
|
||||
// EffectiveAt = r.EffectiveAt,
|
||||
// ExpiresAt = r.ExpiresAt,
|
||||
// })
|
||||
// .ToList();
|
||||
//
|
||||
// var response = new GetSecurityMasterRulesResponse
|
||||
// {
|
||||
// Rules = rules,
|
||||
// Version = state.Version,
|
||||
// LastSyncAt = state.LastSyncAt,
|
||||
// };
|
||||
//
|
||||
// HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
||||
// HttpContext.Response.ContentType = "application/json";
|
||||
// await HttpContext.Response.WriteAsync(JsonSerializer.Serialize(response), ct);
|
||||
// }
|
||||
// }
|
||||
public sealed class GetSecurityMasterRulesEndpoint : EndpointWithoutRequest<GetSecurityMasterRulesResponse>
|
||||
{
|
||||
private readonly ISecurityMasterRulesStore _store;
|
||||
private readonly IClock _clock;
|
||||
|
||||
public GetSecurityMasterRulesEndpoint(ISecurityMasterRulesStore store, IClock clock)
|
||||
{
|
||||
_store = store;
|
||||
_clock = clock;
|
||||
}
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/security/master/rules");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
var state = await _store.GetCurrentStateAsync(ct);
|
||||
|
||||
var staleTreshold = _clock.UtcNow.AddMinutes(-5);
|
||||
if (state.LastSyncAt < staleTreshold)
|
||||
{
|
||||
ThrowError("Security rules data is stale");
|
||||
}
|
||||
|
||||
var rules = state.Rules
|
||||
.Where(r => SecurityMasterPolicy.IsRuleActive(r, _clock.UtcNow.DateTime))
|
||||
.Select(r => new SecurityRuleDto
|
||||
{
|
||||
RuleId = r.RuleId,
|
||||
ResourceName = r.ResourceName,
|
||||
Action = r.Action,
|
||||
Version = r.Version,
|
||||
EffectiveAt = r.EffectiveAt,
|
||||
ExpiresAt = r.ExpiresAt,
|
||||
})
|
||||
.ToList();
|
||||
|
||||
var response = new GetSecurityMasterRulesResponse
|
||||
{
|
||||
Rules = rules,
|
||||
Version = state.Version,
|
||||
LastSyncAt = state.LastSyncAt,
|
||||
};
|
||||
|
||||
HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
||||
HttpContext.Response.ContentType = "application/json";
|
||||
await HttpContext.Response.WriteAsync(JsonSerializer.Serialize(response), ct);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VS-02 Application Handler: Orchestrates sync operation
|
||||
|
||||
@@ -132,6 +132,46 @@ builder.Services.AddScoped<KArtSell.Modules.ModelOperations.Observability.IObser
|
||||
// API Metrics
|
||||
builder.Services.AddSingleton<KArtSell.Host.Observability.ApiCallMetricsService>();
|
||||
|
||||
// Feature Services (DI for Endpoints)
|
||||
// Market Data (VS-03)
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.MarketData.IMarketDataIngestionService>(sp =>
|
||||
new KArtSell.Host.Features.MarketData.MarketDataIngestionService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>(),
|
||||
sp.GetRequiredService<IBackgroundJobClient>()));
|
||||
|
||||
// Portfolio (VS-04~05)
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.Portfolio.IPortfolioRebalanceService>(sp =>
|
||||
new KArtSell.Host.Features.Portfolio.PortfolioRebalanceService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>(),
|
||||
sp.GetRequiredService<IBackgroundJobClient>()));
|
||||
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.Portfolio.IRiskMetricsService>(sp =>
|
||||
new KArtSell.Host.Features.Portfolio.RiskMetricsService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>()));
|
||||
|
||||
// Risk & Stress (VS-06~07)
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.Portfolio.IStressTestService>(sp =>
|
||||
new KArtSell.Host.Features.Portfolio.StressTestService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>(),
|
||||
sp.GetRequiredService<IBackgroundJobClient>()));
|
||||
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.Portfolio.IAlertService>(sp =>
|
||||
new KArtSell.Host.Features.Portfolio.AlertService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>()));
|
||||
|
||||
// Dashboard (VS-08)
|
||||
builder.Services.AddScoped<KArtSell.Host.Features.Portfolio.IDashboardService>(sp =>
|
||||
new KArtSell.Host.Features.Portfolio.DashboardService(
|
||||
sp.GetRequiredService<NpgsqlDataSource>()));
|
||||
|
||||
// Security Master (VS-02) - Temporarily disabled: ISecurityMasterRulesStore implementation pending
|
||||
// builder.Services.AddScoped<KArtSell.Host.Features.SecurityMaster.ISecurityMasterSyncHandler>(sp =>
|
||||
// new KArtSell.Host.Features.SecurityMaster.SecurityMasterSyncHandler(
|
||||
// sp.GetRequiredService<NpgsqlDataSource>(),
|
||||
// sp.GetRequiredService<KArtSell.Host.Features.SecurityMaster.IRemoteSecurityMasterClient>(),
|
||||
// sp.GetRequiredService<KArtSell.Host.Features.SecurityMaster.ISecurityMasterRulesStore>(),
|
||||
// sp.GetRequiredService<IClock>()));
|
||||
|
||||
builder.Services.AddProblemDetails();
|
||||
|
||||
const string authenticationScheme = "KArtSell";
|
||||
|
||||
Reference in New Issue
Block a user