From 3d28f0d2eba541e52cdf2b68675365a61cd7deaf Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 11 May 2026 11:07:19 -0400 Subject: [PATCH] feat(management): handler + authorization for TemplateFolder commands --- .../ManagementActor.cs | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/ScadaLink.ManagementService/ManagementActor.cs b/src/ScadaLink.ManagementService/ManagementActor.cs index 5527acc..11e770d 100644 --- a/src/ScadaLink.ManagementService/ManagementActor.cs +++ b/src/ScadaLink.ManagementService/ManagementActor.cs @@ -110,7 +110,10 @@ public class ManagementActor : ReceiveActor or CreateSharedScriptCommand or UpdateSharedScriptCommand or DeleteSharedScriptCommand or CreateDatabaseConnectionDefCommand or UpdateDatabaseConnectionDefCommand or DeleteDatabaseConnectionDefCommand or CreateApiMethodCommand or UpdateApiMethodCommand or DeleteApiMethodCommand - or UpdateAreaCommand => "Design", + or UpdateAreaCommand + or CreateTemplateFolderCommand or RenameTemplateFolderCommand + or MoveTemplateFolderCommand or DeleteTemplateFolderCommand + or MoveTemplateToFolderCommand => "Design", // Deployment operations CreateInstanceCommand or MgmtDeployInstanceCommand or MgmtEnableInstanceCommand @@ -150,6 +153,14 @@ public class ManagementActor : ReceiveActor AddTemplateCompositionCommand cmd => await HandleAddComposition(sp, cmd, user.Username), DeleteTemplateCompositionCommand cmd => await HandleDeleteComposition(sp, cmd, user.Username), + // Template folders + ListTemplateFoldersCommand => await HandleListTemplateFolders(sp), + CreateTemplateFolderCommand cmd => await HandleCreateTemplateFolder(sp, cmd, user.Username), + RenameTemplateFolderCommand cmd => await HandleRenameTemplateFolder(sp, cmd, user.Username), + MoveTemplateFolderCommand cmd => await HandleMoveTemplateFolder(sp, cmd, user.Username), + DeleteTemplateFolderCommand cmd => await HandleDeleteTemplateFolder(sp, cmd, user.Username), + MoveTemplateToFolderCommand cmd => await HandleMoveTemplateToFolder(sp, cmd, user.Username), + // Instances ListInstancesCommand cmd => await HandleListInstances(sp, cmd, user), GetInstanceCommand cmd => await HandleGetInstance(sp, cmd), @@ -430,6 +441,51 @@ public class ManagementActor : ReceiveActor return validationResult; } + // ======================================================================== + // Template folder handlers + // ======================================================================== + + private static async Task HandleListTemplateFolders(IServiceProvider sp) + { + var repo = sp.GetRequiredService(); + return await repo.GetAllFoldersAsync(); + } + + private static async Task HandleCreateTemplateFolder(IServiceProvider sp, CreateTemplateFolderCommand cmd, string user) + { + var svc = sp.GetRequiredService(); + var result = await svc.CreateFolderAsync(cmd.Name, cmd.ParentFolderId, user); + return result.IsSuccess ? result.Value : throw new InvalidOperationException(result.Error); + } + + private static async Task HandleRenameTemplateFolder(IServiceProvider sp, RenameTemplateFolderCommand cmd, string user) + { + var svc = sp.GetRequiredService(); + var result = await svc.RenameFolderAsync(cmd.FolderId, cmd.NewName, user); + return result.IsSuccess ? result.Value : throw new InvalidOperationException(result.Error); + } + + private static async Task HandleMoveTemplateFolder(IServiceProvider sp, MoveTemplateFolderCommand cmd, string user) + { + var svc = sp.GetRequiredService(); + var result = await svc.MoveFolderAsync(cmd.FolderId, cmd.NewParentFolderId, user); + return result.IsSuccess ? result.Value : throw new InvalidOperationException(result.Error); + } + + private static async Task HandleDeleteTemplateFolder(IServiceProvider sp, DeleteTemplateFolderCommand cmd, string user) + { + var svc = sp.GetRequiredService(); + var result = await svc.DeleteFolderAsync(cmd.FolderId, user); + return result.IsSuccess ? result.Value : throw new InvalidOperationException(result.Error); + } + + private static async Task HandleMoveTemplateToFolder(IServiceProvider sp, MoveTemplateToFolderCommand cmd, string user) + { + var svc = sp.GetRequiredService(); + var result = await svc.MoveTemplateAsync(cmd.TemplateId, cmd.NewFolderId, user); + return result.IsSuccess ? result.Value : throw new InvalidOperationException(result.Error); + } + // ======================================================================== // Instance handlers // ========================================================================