From 543aa1e9ffef218643083b598bd463164852d4a1 Mon Sep 17 00:00:00 2001 From: Jostein Date: Thu, 15 Aug 2024 12:35:47 +0200 Subject: [PATCH 1/2] add context-types to put endpoint --- .../OnboardApp/OnboardAppCommand.cs | 4 ++-- .../UpdateOnboardedAppCommand.cs | 21 ++++++++++++++++--- .../Controllers/OnboardedAppController.cs | 4 ++++ .../ApiUpdateOnboardedAppRequest.cs | 4 +++- .../OnboardedAppControllerTests.cs | 5 ++++- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/OnboardApp/OnboardAppCommand.cs b/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/OnboardApp/OnboardAppCommand.cs index ac871c6e3..386b885da 100644 --- a/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/OnboardApp/OnboardAppCommand.cs +++ b/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/OnboardApp/OnboardAppCommand.cs @@ -10,7 +10,7 @@ namespace Equinor.ProjectExecutionPortal.Application.Commands.OnboardedApps.Onbo public class OnboardAppCommand : IRequest { - public OnboardAppCommand(string appKey, bool isLegacy, IList contextTypes) + public OnboardAppCommand(string appKey, bool isLegacy, IList? contextTypes) { AppKey = appKey; IsLegacy = isLegacy; @@ -19,7 +19,7 @@ public OnboardAppCommand(string appKey, bool isLegacy, IList contextType public string AppKey { get; } public bool IsLegacy { get; } - public IList ContextTypes { get; set; } + public IList? ContextTypes { get; set; } public class Handler : IRequestHandler { diff --git a/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/UpdateOnboardedApp/UpdateOnboardedAppCommand.cs b/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/UpdateOnboardedApp/UpdateOnboardedAppCommand.cs index d544b0857..c537e59d8 100644 --- a/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/UpdateOnboardedApp/UpdateOnboardedAppCommand.cs +++ b/backend/src/Equinor.ProjectExecutionPortal.Application/Commands/OnboardedApps/UpdateOnboardedApp/UpdateOnboardedAppCommand.cs @@ -1,4 +1,5 @@ -using Equinor.ProjectExecutionPortal.Domain.Common.Exceptions; +using Equinor.ProjectExecutionPortal.Application.Services.ContextTypeService; +using Equinor.ProjectExecutionPortal.Domain.Common.Exceptions; using Equinor.ProjectExecutionPortal.Domain.Entities; using Equinor.ProjectExecutionPortal.Infrastructure; using MediatR; @@ -8,27 +9,32 @@ namespace Equinor.ProjectExecutionPortal.Application.Commands.OnboardedApps.Upda public class UpdateOnboardedAppCommand : IRequest { - public UpdateOnboardedAppCommand(string appKey, bool isLegacy) + public UpdateOnboardedAppCommand(string appKey, bool isLegacy, IList? contextTypes) { AppKey = appKey; IsLegacy = isLegacy; + ContextTypes = contextTypes; } public string AppKey { get; } public bool IsLegacy { get; } + public IList? ContextTypes { get; set; } public class Handler : IRequestHandler { private readonly IReadWriteContext _readWriteContext; + private readonly IContextTypeService _contextTypeService; - public Handler(IReadWriteContext readWriteContext) + public Handler(IReadWriteContext readWriteContext, IContextTypeService contextTypeService) { _readWriteContext = readWriteContext; + _contextTypeService = contextTypeService; } public async Task Handle(UpdateOnboardedAppCommand command, CancellationToken cancellationToken) { var entity = await _readWriteContext.Set() + .Include(x => x.ContextTypes) .FirstOrDefaultAsync(x => x.AppKey == command.AppKey, cancellationToken); if (entity == null) @@ -38,6 +44,15 @@ public async Task Handle(UpdateOnboardedAppCommand command, CancellationTo entity.Update(command.IsLegacy); + try + { + entity.AddContextTypes(await _contextTypeService.GetContextTypesByContextTypeKey(command.ContextTypes, cancellationToken)); + } + catch (InvalidActionException ex) + { + throw new InvalidOperationException(ex.Message); + } + await _readWriteContext.SaveChangesAsync(cancellationToken); return entity.Id; diff --git a/backend/src/Equinor.ProjectExecutionPortal.WebApi/Controllers/OnboardedAppController.cs b/backend/src/Equinor.ProjectExecutionPortal.WebApi/Controllers/OnboardedAppController.cs index dbed47a8c..1c317c756 100644 --- a/backend/src/Equinor.ProjectExecutionPortal.WebApi/Controllers/OnboardedAppController.cs +++ b/backend/src/Equinor.ProjectExecutionPortal.WebApi/Controllers/OnboardedAppController.cs @@ -92,6 +92,10 @@ public async Task> UpdateOnboardedApp([FromRoute] string appK { return FusionApiError.NotFound(appKey, ex.Message); } + catch (InvalidOperationException ex) + { + return FusionApiError.InvalidOperation("400", ex.Message); + } catch (Exception) { return FusionApiError.InvalidOperation("500", "An error occurred while updating the onboarded app"); diff --git a/backend/src/Equinor.ProjectExecutionPortal.WebApi/ViewModels/OnboardedApp/ApiUpdateOnboardedAppRequest.cs b/backend/src/Equinor.ProjectExecutionPortal.WebApi/ViewModels/OnboardedApp/ApiUpdateOnboardedAppRequest.cs index b5a5e55f4..bcfc7f6a8 100644 --- a/backend/src/Equinor.ProjectExecutionPortal.WebApi/ViewModels/OnboardedApp/ApiUpdateOnboardedAppRequest.cs +++ b/backend/src/Equinor.ProjectExecutionPortal.WebApi/ViewModels/OnboardedApp/ApiUpdateOnboardedAppRequest.cs @@ -1,4 +1,5 @@ using Equinor.ProjectExecutionPortal.Application.Commands.OnboardedApps.UpdateOnboardedApp; +using Equinor.ProjectExecutionPortal.Application.Queries.OnboardedContexts.GetOnboardedContext; using FluentValidation; namespace Equinor.ProjectExecutionPortal.WebApi.ViewModels.OnboardedApp @@ -6,10 +7,11 @@ namespace Equinor.ProjectExecutionPortal.WebApi.ViewModels.OnboardedApp public class ApiUpdateOnboardedAppRequest { public bool IsLegacy { get; set; } + public IList? ContextTypes { get; set; } public UpdateOnboardedAppCommand ToCommand(string appKey) { - return new UpdateOnboardedAppCommand(appKey, IsLegacy); + return new UpdateOnboardedAppCommand(appKey, IsLegacy, ContextTypes); } public class ApiUpdateOnboardedAppRequestValidator : AbstractValidator diff --git a/backend/src/tests/Equinor.ProjectExecutionPortal.Tests.WebApi/IntegrationTests/OnboardedAppControllerTests.cs b/backend/src/tests/Equinor.ProjectExecutionPortal.Tests.WebApi/IntegrationTests/OnboardedAppControllerTests.cs index cdb88429c..8c809513c 100644 --- a/backend/src/tests/Equinor.ProjectExecutionPortal.Tests.WebApi/IntegrationTests/OnboardedAppControllerTests.cs +++ b/backend/src/tests/Equinor.ProjectExecutionPortal.Tests.WebApi/IntegrationTests/OnboardedAppControllerTests.cs @@ -187,7 +187,9 @@ public async Task Update_OnboardedApp_AsAdministratorUser_ShouldReturnOk() var payload = new ApiUpdateOnboardedAppRequest { - IsLegacy = false + IsLegacy = false, + ContextTypes = new List() {} + }; // Act @@ -200,6 +202,7 @@ public async Task Update_OnboardedApp_AsAdministratorUser_ShouldReturnOk() Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(theOneToUpdate.AppKey, theOneAfterUpdate.AppKey); Assert.AreEqual(theOneToUpdate.IsLegacy, theOneAfterUpdate.IsLegacy); + Assert.AreEqual(theOneToUpdate.Contexts.Count, theOneAfterUpdate.Contexts.Count); } [TestMethod] From 06db452e93aec4abb40b86c72b99e0c115a46fbf Mon Sep 17 00:00:00 2001 From: Jossilainen Date: Thu, 15 Aug 2024 10:47:32 +0000 Subject: [PATCH 2/2] chore: create pr-702-2020907790.md --- .changeset/pr-702-2020907790.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pr-702-2020907790.md diff --git a/.changeset/pr-702-2020907790.md b/.changeset/pr-702-2020907790.md new file mode 100644 index 000000000..367f6d522 --- /dev/null +++ b/.changeset/pr-702-2020907790.md @@ -0,0 +1,5 @@ + +--- +"fusion-project-portal": patch +--- +Context types can be added in OnboardedApp PUT endpoint