diff --git a/PRODUCTION_DEPENDENCIES.md b/PRODUCTION_DEPENDENCIES.md index 3c9b585d99..7baedbfc25 100644 --- a/PRODUCTION_DEPENDENCIES.md +++ b/PRODUCTION_DEPENDENCIES.md @@ -40,7 +40,7 @@ | [express](https://github.com/expressjs/express) | 4.19.2 | MIT | | [graphql-sse](https://github.com/enisdenjo/graphql-sse) | 2.5.3 | MIT | | [graphql](https://github.com/graphql/graphql-js) | 16.8.1 | MIT | -| [highlight.js](https://github.com/highlightjs/highlight.js) | 11.9.0 | BSD-3-Clause | +| [highlight.js](https://github.com/highlightjs/highlight.js) | 11.10.0 | BSD-3-Clause | | [include-media](https://github.com/eduardoboucas/include-media) | 2.0.0 | MIT | | [jwt-decode](https://github.com/auth0/jwt-decode) | 4.0.0 | MIT | | [libphonenumber-js](git+https://gitlab.com/catamphetamine/libphonenumber-js) | 1.10.60 | MIT | diff --git a/apps/dh/api-dh/source/DataHub.WebApi.Tests/Integration/HealthCheck/HealthCheckFixture.cs b/apps/dh/api-dh/source/DataHub.WebApi.Tests/Integration/HealthCheck/HealthCheckFixture.cs index 1e6592c97a..4848d17566 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi.Tests/Integration/HealthCheck/HealthCheckFixture.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi.Tests/Integration/HealthCheck/HealthCheckFixture.cs @@ -31,6 +31,7 @@ public sealed class HealthCheckFixture : IDisposable "/wholesaleorchestrations/api/monitor/live", "/esett/monitor/live", "/edib2capi/monitor/live", + "/settlement-reports/monitor/live" ]; public HealthCheckFixture() @@ -40,6 +41,7 @@ public HealthCheckFixture() Environment.SetEnvironmentVariable("ApiClientSettings__WholesaleOrchestrationsBaseUrl", "http://localhost:8080/wholesaleorchestrations"); Environment.SetEnvironmentVariable("ApiClientSettings__ESettExchangeBaseUrl", "http://localhost:8080/esett"); Environment.SetEnvironmentVariable("ApiClientSettings__EdiB2CWebApiBaseUrl", "http://localhost:8080/edib2capi"); + Environment.SetEnvironmentVariable("ApiClientSettings__SettlementReportsAPIBaseUrl", "http://localhost:8080/settlement-reports"); SetServicesAsHealthy(); } diff --git a/apps/dh/api-dh/source/DataHub.WebApi.Tests/Snapshots/SchemaTests.ChangeTest.verified.graphql b/apps/dh/api-dh/source/DataHub.WebApi.Tests/Snapshots/SchemaTests.ChangeTest.verified.graphql index 2b763e6c66..2846abe763 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi.Tests/Snapshots/SchemaTests.ChangeTest.verified.graphql +++ b/apps/dh/api-dh/source/DataHub.WebApi.Tests/Snapshots/SchemaTests.ChangeTest.verified.graphql @@ -541,6 +541,7 @@ type SettlementReport { progress: Float! statusType: SettlementReportStatusType! executionTime: DateRange! + fromApi: Boolean! splitReportPerGridArea: Boolean! includeMonthlyAmount: Boolean! gridAreas: [String!]! @@ -827,6 +828,7 @@ input RequestSettlementReportInput { preventLargeTextFiles: Boolean! includeMonthlySums: Boolean! includeBasisData: Boolean! + useApi: Boolean! energySupplier: String csvLanguage: String } diff --git a/apps/dh/api-dh/source/DataHub.WebApi/ApiClientSettings.cs b/apps/dh/api-dh/source/DataHub.WebApi/ApiClientSettings.cs index 215ededd79..1f33ca8fc4 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/ApiClientSettings.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/ApiClientSettings.cs @@ -31,4 +31,6 @@ public class ApiClientSettings public string EdiB2CWebApiBaseUrl { get; set; } = string.Empty; public string ImbalancePricesBaseUrl { get; set; } = string.Empty; + + public string SettlementReportsAPIBaseUrl { get; set; } = string.Empty; } diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/RequestedSettlementReportDto.cs b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/RequestedSettlementReportDto.cs index 153318615b..b02b0441ff 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/RequestedSettlementReportDto.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/RequestedSettlementReportDto.cs @@ -30,4 +30,5 @@ public sealed record RequestedSettlementReportDto( bool IncludeMonthlyAmount, IReadOnlyDictionary GridAreas, DateTimeOffset CreatedDateTime, - DateTimeOffset? EndedDateTime); + DateTimeOffset? EndedDateTime, + SettlementReportJobId? JobId); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportJobId.cs b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportJobId.cs new file mode 100644 index 0000000000..27c340ee17 --- /dev/null +++ b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportJobId.cs @@ -0,0 +1,17 @@ +// Copyright 2020 Energinet DataHub A/S +// +// Licensed under the Apache License, Version 2.0 (the "License2"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace Energinet.DataHub.WebApi.Clients.Wholesale.SettlementReports.Dto; + +public sealed record SettlementReportJobId(long Id); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportRequestDto.cs b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportRequestDto.cs index 7702a4b6e7..51b583250c 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportRequestDto.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/Dto/SettlementReportRequestDto.cs @@ -19,4 +19,5 @@ public sealed record SettlementReportRequestDto( bool PreventLargeTextFiles, bool IncludeBasisData, bool IncludeMonthlyAmount, + bool UseAPI, SettlementReportRequestFilterDto Filter); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/SettlementReportsClient.cs b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/SettlementReportsClient.cs index 511ecd95e4..5e74f2c197 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/SettlementReportsClient.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/Clients/Wholesale/SettlementReports/SettlementReportsClient.cs @@ -21,35 +21,50 @@ namespace Energinet.DataHub.WebApi.Clients.Wholesale.SettlementReports; public sealed class SettlementReportsClient : ISettlementReportsClient { private readonly HttpClient _httpClient; + private readonly HttpClient _apiHttpClient; - public SettlementReportsClient(string baseUrl, HttpClient httpClient) + public SettlementReportsClient(string baseUrl, HttpClient httpClient, HttpClient apiHttpClient) { ArgumentException.ThrowIfNullOrWhiteSpace(baseUrl); ArgumentNullException.ThrowIfNull(httpClient); + ArgumentNullException.ThrowIfNull(apiHttpClient); _httpClient = httpClient; + _apiHttpClient = apiHttpClient; } public async Task RequestAsync(SettlementReportRequestDto requestDto, CancellationToken cancellationToken) { - using var request = new HttpRequestMessage(HttpMethod.Post, "api/RequestSettlementReport"); - request.Content = new StringContent( - JsonConvert.SerializeObject(requestDto), - Encoding.UTF8, - "application/json"); + using var request = requestDto.UseAPI + ? new HttpRequestMessage(HttpMethod.Post, "settlement-reports/RequestSettlementReport") + : new HttpRequestMessage(HttpMethod.Post, "api/RequestSettlementReport"); - using var response = await _httpClient.SendAsync(request, cancellationToken); - response.EnsureSuccessStatusCode(); + request.Content = new StringContent( + JsonConvert.SerializeObject(requestDto), + Encoding.UTF8, + "application/json"); + + using var response = await (requestDto.UseAPI + ? _apiHttpClient.SendAsync(request, cancellationToken) + : _httpClient.SendAsync(request, cancellationToken)); + + response.EnsureSuccessStatusCode(); } public async Task> GetAsync(CancellationToken cancellationToken) { + using var requestApi = new HttpRequestMessage(HttpMethod.Get, "settlement-reports/list"); using var request = new HttpRequestMessage(HttpMethod.Get, "api/ListSettlementReports"); + using var actualResponseApi = await _apiHttpClient.SendAsync(requestApi, cancellationToken); using var actualResponse = await _httpClient.SendAsync(request, cancellationToken); + + actualResponseApi.EnsureSuccessStatusCode(); actualResponse.EnsureSuccessStatusCode(); - return await actualResponse.Content.ReadFromJsonAsync>(cancellationToken) ?? []; + var actualResponseContent = await actualResponse.Content.ReadFromJsonAsync>(cancellationToken) ?? []; + var actualResponseApiContent = await actualResponseApi.Content.ReadFromJsonAsync>(cancellationToken) ?? []; + return actualResponseContent.Concat(actualResponseApiContent).OrderByDescending(x => x.CreatedDateTime); } public async Task DownloadAsync(SettlementReportRequestId requestId, CancellationToken cancellationToken) diff --git a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Mutation/SettlementReportMutation.cs b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Mutation/SettlementReportMutation.cs index 76892b9c5f..76bf859872 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Mutation/SettlementReportMutation.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Mutation/SettlementReportMutation.cs @@ -40,6 +40,7 @@ await client.RequestAsync( requestSettlementReportInput.PreventLargeTextFiles, requestSettlementReportInput.IncludeBasisData, requestSettlementReportInput.IncludeMonthlySums, + requestSettlementReportInput.UseApi, requestFilter), default); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Query/SettlementReportsQuery.cs b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Query/SettlementReportsQuery.cs index e0e5f4a351..6139a32e1d 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Query/SettlementReportsQuery.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Query/SettlementReportsQuery.cs @@ -56,6 +56,7 @@ public async Task> GetSettlementReportsAsync( report.Progress, settlementReportStatusType, new Interval(Instant.FromDateTimeOffset(report.CreatedDateTime), report.EndedDateTime != null ? Instant.FromDateTimeOffset(report.EndedDateTime.Value) : null), + report.JobId is not null, report.SplitReportPerGridArea, report.IncludeMonthlyAmount, report.GridAreas.Select(ga => ga.Key).ToArray())); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/RequestSettlementReportInput.cs b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/RequestSettlementReportInput.cs index e51a65ad83..0f126b71d3 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/RequestSettlementReportInput.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/RequestSettlementReportInput.cs @@ -24,5 +24,6 @@ public record RequestSettlementReportInput( bool PreventLargeTextFiles, bool IncludeMonthlySums, bool IncludeBasisData, + bool UseApi, string? EnergySupplier, string? CsvLanguage); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/SettlementReport.cs b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/SettlementReport.cs index 85d29aacae..a31fd3d8a2 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/SettlementReport.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/GraphQL/Types/SettlementReports/SettlementReport.cs @@ -29,6 +29,7 @@ public sealed record SettlementReport( double Progress, SettlementReportStatusType StatusType, Interval ExecutionTime, + bool FromApi, bool SplitReportPerGridArea, bool IncludeMonthlyAmount, string[] GridAreas); diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Registration/DomainRegistrationExtensions.cs b/apps/dh/api-dh/source/DataHub.WebApi/Registration/DomainRegistrationExtensions.cs index 4f3f6cd607..0d5aeeb9da 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/Registration/DomainRegistrationExtensions.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/Registration/DomainRegistrationExtensions.cs @@ -40,7 +40,8 @@ public static IServiceCollection AddDomainClients(this IServiceCollection servic .AddWholesaleOrchestrationsClient( GetBaseUri(apiClientSettings.WholesaleOrchestrationsBaseUrl)) .AddSettlementReportsClient( - GetBaseUri(apiClientSettings.WholesaleOrchestrationSettlementReportsBaseUrl)) + GetBaseUri(apiClientSettings.WholesaleOrchestrationSettlementReportsBaseUrl), + GetBaseUri(apiClientSettings.SettlementReportsAPIBaseUrl)) .AddESettClient( GetBaseUri(apiClientSettings.ESettExchangeBaseUrl)) .AddEdiWebAppClient( @@ -81,12 +82,13 @@ private static IServiceCollection AddWholesaleOrchestrationsClient(this IService provider.GetRequiredService().CreateClient(baseUri))); } - private static IServiceCollection AddSettlementReportsClient(this IServiceCollection serviceCollection, Uri baseUri) + private static IServiceCollection AddSettlementReportsClient(this IServiceCollection serviceCollection, Uri baseUri, Uri apiBaseUri) { return serviceCollection.AddScoped( provider => new SettlementReportsClient( baseUri.ToString(), - provider.GetRequiredService().CreateClient(baseUri))); + provider.GetRequiredService().CreateClient(baseUri), + provider.GetRequiredService().CreateClient(apiBaseUri))); } private static IServiceCollection AddESettClient(this IServiceCollection serviceCollection, Uri baseUri) diff --git a/apps/dh/api-dh/source/DataHub.WebApi/Registration/HealthEndpointRegistrationExtensions.cs b/apps/dh/api-dh/source/DataHub.WebApi/Registration/HealthEndpointRegistrationExtensions.cs index 4119b3f946..6c64f40922 100644 --- a/apps/dh/api-dh/source/DataHub.WebApi/Registration/HealthEndpointRegistrationExtensions.cs +++ b/apps/dh/api-dh/source/DataHub.WebApi/Registration/HealthEndpointRegistrationExtensions.cs @@ -26,6 +26,7 @@ public static void SetupHealthEndpoints(this IServiceCollection services, ApiCli .AddServiceHealthCheck("wholesale", CreateHealthEndpointUri(settings.WholesaleBaseUrl)) .AddServiceHealthCheck("wholesaleOrchestrations", CreateHealthEndpointUri(settings.WholesaleOrchestrationsBaseUrl, isAzureFunction: true)) .AddServiceHealthCheck("eSettExchange", CreateHealthEndpointUri(settings.ESettExchangeBaseUrl)) + .AddServiceHealthCheck("settlementReportsAPI", CreateHealthEndpointUri(settings.SettlementReportsAPIBaseUrl)) .AddServiceHealthCheck("ediB2CWebApi", CreateHealthEndpointUri(settings.EdiB2CWebApiBaseUrl)); private static Uri CreateHealthEndpointUri(string baseUri, bool isAzureFunction = false) diff --git a/bun.lockb b/bun.lockb old mode 100755 new mode 100644 index 4b92326bc3..191aab9cde Binary files a/bun.lockb and b/bun.lockb differ diff --git a/libs/dh/shared/data-access-mocks/src/lib/data/wholesale-settlement-reports.ts b/libs/dh/shared/data-access-mocks/src/lib/data/wholesale-settlement-reports.ts index c1f4711f24..06766659f6 100644 --- a/libs/dh/shared/data-access-mocks/src/lib/data/wholesale-settlement-reports.ts +++ b/libs/dh/shared/data-access-mocks/src/lib/data/wholesale-settlement-reports.ts @@ -53,6 +53,7 @@ export const wholesaleSettlementReportsQueryMock = ( end: executionTimeEnd_Days, }, settlementReportDownloadUrl: `${apiBase}/v1/WholesaleSettlementReport/DownloadReport`, + fromApi: true, }, { __typename: 'SettlementReport', @@ -73,6 +74,7 @@ export const wholesaleSettlementReportsQueryMock = ( end: executionTimeStart_Hours, }, settlementReportDownloadUrl: `${apiBase}/v1/WholesaleSettlementReport/DownloadReport`, + fromApi: true, }, { __typename: 'SettlementReport', @@ -93,6 +95,7 @@ export const wholesaleSettlementReportsQueryMock = ( end: executionTimeStart_Minutes, }, settlementReportDownloadUrl: `${apiBase}/v1/WholesaleSettlementReport/DownloadReport`, + fromApi: true, }, { __typename: 'SettlementReport', @@ -113,6 +116,7 @@ export const wholesaleSettlementReportsQueryMock = ( end: null, }, settlementReportDownloadUrl: `${apiBase}/v1/WholesaleSettlementReport/DownloadReport`, + fromApi: true, }, ], }); diff --git a/libs/dh/wholesale/data-access-graphql/query/get-settlement-reports.graphql b/libs/dh/wholesale/data-access-graphql/query/get-settlement-reports.graphql index 29ae24c555..ede22aa286 100644 --- a/libs/dh/wholesale/data-access-graphql/query/get-settlement-reports.graphql +++ b/libs/dh/wholesale/data-access-graphql/query/get-settlement-reports.graphql @@ -13,5 +13,6 @@ query getSettlementReports { statusType settlementReportDownloadUrl executionTime + fromApi } } diff --git a/libs/dh/wholesale/feature-settlement-reports/src/lib/modal/dh-request-settlement-report-modal.component.ts b/libs/dh/wholesale/feature-settlement-reports/src/lib/modal/dh-request-settlement-report-modal.component.ts index 14c56132dd..b452c18336 100644 --- a/libs/dh/wholesale/feature-settlement-reports/src/lib/modal/dh-request-settlement-report-modal.component.ts +++ b/libs/dh/wholesale/feature-settlement-reports/src/lib/modal/dh-request-settlement-report-modal.component.ts @@ -306,6 +306,7 @@ export class DhRequestSettlementReportModalComponent extends WattTypedModal { preventLargeTextFiles: !allowLargeTextFiles, energySupplier: energySupplier == ALL_ENERGY_SUPPLIERS ? null : energySupplier, csvLanguage: translate('selectedLanguageIso'), + useApi: true, }, }, refetchQueries: (result) => { diff --git a/package.json b/package.json index 901a1c0d7c..78e0dee539 100644 --- a/package.json +++ b/package.json @@ -218,7 +218,7 @@ "source-map-explorer": "2.5.3", "storybook-addon-pseudo-states": "2.1.0", "ts-jest": "29.1.2", - "typescript": "^5.5.3", + "typescript": "~5.5.3", "typescript-eslint": "^7.16.0" }, "volta": {