From a9fd99bab860f71b603194053fde30dda8e8cd3a Mon Sep 17 00:00:00 2001 From: "HOME-LAPTOP\\kshkulev" Date: Sat, 1 Nov 2025 19:55:37 +0900 Subject: [PATCH] Implement registry update --- .../NsiCommon/ExportNsiItemGetter_15_7_0_1.cs | 35 +++++++++++++++++-- Hcs.WebApp/Data/Hcs/RegistryElement.cs | 2 +- Hcs.WebApp/Services/HeadquartersService.cs | 11 ++++++ Hcs.WebApp/Services/RegistryService.cs | 11 ++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/Hcs.WebApp/BackgroundServices/ResultGetters/NsiCommon/ExportNsiItemGetter_15_7_0_1.cs b/Hcs.WebApp/BackgroundServices/ResultGetters/NsiCommon/ExportNsiItemGetter_15_7_0_1.cs index 2bae6bb..4a76f3c 100644 --- a/Hcs.WebApp/BackgroundServices/ResultGetters/NsiCommon/ExportNsiItemGetter_15_7_0_1.cs +++ b/Hcs.WebApp/BackgroundServices/ResultGetters/NsiCommon/ExportNsiItemGetter_15_7_0_1.cs @@ -1,6 +1,7 @@ using Hcs.Broker; using Hcs.WebApp.Data.Hcs; using Hcs.WebApp.Services; +using Newtonsoft.Json; namespace Hcs.WebApp.BackgroundServices.ResultGetters.NsiCommon { @@ -16,9 +17,39 @@ namespace Hcs.WebApp.BackgroundServices.ResultGetters.NsiCommon if (result.Success) { + var headquartersService = scope.ServiceProvider.GetRequiredService(); var registryService = scope.ServiceProvider.GetRequiredService(); - var registry = await registryService.GetRegistryByOperationIdAsync(operation.Id); - // TODO + + using var context = headquartersService.GetNewContext(); + using var transaction = await context.Database.BeginTransactionAsync(); + try + { + var registry = await registryService.GetRegistryByOperationIdAsync(context, operation.Id, true); + registry.Elements.Clear(); + await context.SaveChangesAsync(); + + foreach (var element in result.Result!.NsiElement) + { + var registryElement = new RegistryElement() + { + Code = element.Code, + GUID = element.GUID, + Json = JsonConvert.SerializeObject(element) + }; + registry.Elements.Add(registryElement); + } + await context.SaveChangesAsync(); + + await headquartersService.SetOperationEndedAsync(context, operation.Id); + + await transaction.CommitAsync(); + } + catch + { + transaction?.Rollback(); + + throw; + } return true; } diff --git a/Hcs.WebApp/Data/Hcs/RegistryElement.cs b/Hcs.WebApp/Data/Hcs/RegistryElement.cs index 0b294d4..f337b9a 100644 --- a/Hcs.WebApp/Data/Hcs/RegistryElement.cs +++ b/Hcs.WebApp/Data/Hcs/RegistryElement.cs @@ -12,6 +12,6 @@ public string GUID { get; set; } - public virtual string Xml { get; set; } + public virtual string Json { get; set; } } } diff --git a/Hcs.WebApp/Services/HeadquartersService.cs b/Hcs.WebApp/Services/HeadquartersService.cs index 2320d31..cd00dce 100644 --- a/Hcs.WebApp/Services/HeadquartersService.cs +++ b/Hcs.WebApp/Services/HeadquartersService.cs @@ -122,6 +122,17 @@ namespace Hcs.WebApp.Services } } + public async Task SetOperationEndedAsync(HcsDbContext context, int operationId) + { + var operation = await context.Operations.FirstOrDefaultAsync(x => x.Id == operationId); + if (operation != null) + { + operation.EndedAt = DateTime.UtcNow; + + await context.SaveChangesAsync(); + } + } + public async Task SetOperationEndedWithFailAsync(int operationId, string failureReason) { using var context = GetNewContext(); diff --git a/Hcs.WebApp/Services/RegistryService.cs b/Hcs.WebApp/Services/RegistryService.cs index 12205b9..1783376 100644 --- a/Hcs.WebApp/Services/RegistryService.cs +++ b/Hcs.WebApp/Services/RegistryService.cs @@ -21,6 +21,17 @@ namespace Hcs.WebApp.Services public async Task GetRegistryByOperationIdAsync(int operationId) { using var context = GetNewContext(); + return await GetRegistryByOperationIdAsync(context, operationId); + } + + public async Task GetRegistryByOperationIdAsync(HcsDbContext context, int operationId, bool includeElements = false) + { + if (includeElements) + { + return await context.Registries + .Include(x => x.Elements) + .SingleAsync(x => x.LastSyncOperationId == operationId); + } return await context.Registries.SingleAsync(x => x.LastSyncOperationId == operationId); }