Skip to content

Commit

Permalink
Implementing transaction-style toolbox backend
Browse files Browse the repository at this point in the history
  • Loading branch information
davidreneuw committed Feb 12, 2025
1 parent 3b0245b commit 5c07091
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 165 deletions.
22 changes: 22 additions & 0 deletions Portal/src/Datahub.Application/Services/Toolbox/IToolboxService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace Datahub.Application.Services.Toolbox
{
public interface IToolboxService
{
public List<ToolboxTransaction> BeginTransaction();
}

public class ToolboxTransaction
{
public string Tool { get; set; }
public ToolboxTransactionType Type { get; set; }
public dynamic? OriginalData { get; set; }
public dynamic? UpdatedData { get; set; }
}

public enum ToolboxTransactionType
{
Add,
Remove,
Update
}
}
3 changes: 3 additions & 0 deletions Portal/src/Datahub.Infrastructure/ConfigureServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Datahub.Application.Services.ResourceGroups;
using Datahub.Application.Services.ReverseProxy;
using Datahub.Application.Services.Subscriptions;
using Datahub.Application.Services.Toolbox;
using Datahub.Application.Services.UserManagement;
using Datahub.Core;
using Datahub.Core.Services.CatalogSearch;
Expand All @@ -23,6 +24,7 @@
using Datahub.Infrastructure.Services.ReverseProxy;
using Datahub.Infrastructure.Services.Storage;
using Datahub.Infrastructure.Services.Subscriptions;
using Datahub.Infrastructure.Services.Toolbox;
using Datahub.Infrastructure.Services.UserManagement;
using MassTransit;
using Microsoft.Extensions.Azure;
Expand Down Expand Up @@ -54,6 +56,7 @@ public static IServiceCollection AddDatahubInfrastructureServices(this IServiceC
services.AddScoped<IDatahubAzureSubscriptionService, DatahubAzureSubscriptionService>();
services.AddScoped<IUserInformationService, UserInformationService>();
services.AddScoped<IUserSettingsService, UserSettingsService>();
services.AddSingleton<IToolboxService, ToolboxService>();


services.AddAzureResourceManager(configuration);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using System.Reflection;
using Datahub.Application.Services.Toolbox;
using Datahub.Shared.Entities;

namespace Datahub.Infrastructure.Services.Toolbox
{
public class ToolboxService : IToolboxService
{
public List<ToolboxTransaction> BeginTransaction()
{
return new List<ToolboxTransaction>();
}
}

public static class ToolboxTransactionExtensions
{
public static ToolboxTransaction AddTool(this List<ToolboxTransaction> transactions, string tool)
{
var transaction = new ToolboxTransaction
{
Tool = tool,
Type = ToolboxTransactionType.Add
};
transactions.Add(transaction);
return transaction;
}

public static ToolboxTransaction RemoveTool(this List<ToolboxTransaction> transactions, string tool)
{
var transaction = new ToolboxTransaction
{
Tool = tool,
Type = ToolboxTransactionType.Remove
};
transactions.Add(transaction);
return transaction;
}

public static ToolboxTransaction UpdateTool(this List<ToolboxTransaction> transactions, string tool)
{
var transaction = new ToolboxTransaction
{
Tool = tool,
Type = ToolboxTransactionType.Update
};
transactions.Add(transaction);
return transaction;
}

public static void Revert(this List<ToolboxTransaction> transactions, ToolboxTransaction transaction)
{
transactions.Remove(transaction);
}

public static Dictionary<string, (object Original, object? Updated)> Diff(this ToolboxTransaction transaction)
{
if (transaction.OriginalData == null || transaction.UpdatedData == null)
{
throw new InvalidOperationException("OriginalData and UpdatedData must be set before calling Diff");
}

if (transaction.OriginalData!.GetType() != transaction.UpdatedData!.GetType())
{
throw new InvalidOperationException("OriginalData and UpdatedData must be of same type");
}

// Diff the data
PropertyInfo[] originalProperties = transaction.OriginalData.GetType()
.GetProperties();

PropertyInfo[] updatedProperties = transaction.UpdatedData.GetType()
.GetProperties();

var differences = originalProperties
.Where(prop => updatedProperties.All(p => p.Name != prop.Name) ||
!Equals(prop.GetValue(transaction.OriginalData), prop.GetValue(transaction.UpdatedData)))
.ToDictionary(prop => prop.Name,
prop => (Original: prop.GetValue(transaction.OriginalData),
Updated: updatedProperties.First(p => p.Name == prop.Name).GetValue(transaction.UpdatedData)));


return differences;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
<MudDialog Style="width: 100%">
<MudDialog>
<TitleContent>
<MudStack Row AlignItems="AlignItems.Center">
<DHIcon Icon="@Icon"/>
<MudText Typo="Typo.h2">@Title</MudText>
</MudStack>
</TitleContent>
<DialogContent>
<MudStack Class="pa-8">
<MudStack Class="pa-8" Style="min-height: 600px">
<MudStack Row AlignItems="AlignItems.Center">
<DHIcon Icon="@Icon"/>
<MudText Typo="Typo.h2">@Title</MudText>

<MudSpacer/>
<MudStack Spacing="0">
<MudText Style="font-style: italic">@Category</MudText>
Expand Down
Loading

0 comments on commit 5c07091

Please sign in to comment.