diff --git a/src/Controllers/AssetsController.cs b/src/Controllers/AssetsController.cs index 2d3002c..463a23d 100644 --- a/src/Controllers/AssetsController.cs +++ b/src/Controllers/AssetsController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Berufsschule_HAM.Models; using Berufsschule_HAM.Services; +using Berufsschule_HAM.Helpers; using System.Text.Json; using Novell.Directory.Ldap; using Microsoft.AspNetCore.Authorization; @@ -79,36 +80,7 @@ public class AssetsController : Controller } if (assetModel.Description != null) { - var assetDescription = new AssetDescription(); - - if (assetModel.Description.Type != null) - { - assetDescription.Type = assetModel.Description.Type; - } - if (assetModel.Description.Purchase != null) - { - var purchase = new AssetPurchase(); - if (assetModel.Description.Purchase.PurchasedAt != null) - { - purchase.PurchasedAt = assetModel.Description.Purchase.PurchasedAt; - } - if (assetModel.Description.Purchase.PurchaseDate != null) - { - purchase.PurchaseDate = assetModel.Description.Purchase.PurchaseDate; - } - if (assetModel.Description.Purchase.PurchasedBy != null) - { - purchase.PurchasedBy = assetModel.Description.Purchase.PurchasedBy; - } - if (assetModel.Description.Purchase.PurchaseValue != null) - { - purchase.PurchaseValue = assetModel.Description.Purchase.PurchaseValue; - } - - assetDescription.Purchase = purchase; - } - - attributeSet.Add(new LdapAttribute("description", JsonSerializer.Serialize(assetDescription))); + attributeSet.Add(new LdapAttribute("description", JsonSerializer.Serialize(assetModel.Description))); } await _ldap.CreateAsset(attributeSet); @@ -188,25 +160,8 @@ public class AssetsController : Controller if (requestModel.Description is not null) { AssetModel? asset = null; - if (requestModel.Description.Type is null) - { - asset ??= await _ldap.GetAssetByCnAsync(cn); - requestModel.Description.Type = asset.Description?.Type; - } - if (requestModel.Description.Purchase is not null) - { - asset ??= await _ldap.GetAssetByCnAsync(cn); - requestModel.Description.Purchase.PurchasedAt ??= asset.Description?.Purchase?.PurchasedAt; - requestModel.Description.Purchase.PurchaseDate ??= asset.Description?.Purchase?.PurchaseDate; - requestModel.Description.Purchase.PurchasedBy ??= asset.Description?.Purchase?.PurchasedBy; - requestModel.Description.Purchase.PurchaseValue ??= asset.Description?.Purchase?.PurchaseValue; - } - - if (requestModel.Description.Purchase is null) - { - asset ??= await _ldap.GetAssetByCnAsync(cn); - requestModel.Description.Purchase = asset.Description?.Purchase; - } + asset = await _ldap.GetAssetByCnAsync(cn); + AttributesHelper.UpdateNonNullProperties(requestModel.Description, asset.Description); await _ldap.UpdateAsset(cn, "description", JsonSerializer.Serialize(requestModel.Description)); } diff --git a/src/Helpers/AttributesHelper.cs b/src/Helpers/AttributesHelper.cs new file mode 100644 index 0000000..385a574 --- /dev/null +++ b/src/Helpers/AttributesHelper.cs @@ -0,0 +1,32 @@ +namespace Berufsschule_HAM.Helpers; + +public static class AttributesHelper +{ + public static void UpdateNonNullProperties(object source, object target) + { + if (source == null || target == null) return; + + var sourceProperties = source.GetType().GetProperties(); + var targetProperties = target.GetType().GetProperties(); + + foreach (var sourceProperty in sourceProperties) + { + if (sourceProperty.CanRead) + { + var sourceValue = sourceProperty.GetValue(source); + + if (sourceValue == null) continue; + + var targetProperty = targetProperties.FirstOrDefault(p => + p.Name == sourceProperty.Name && + p.CanWrite && + p.PropertyType == sourceProperty.PropertyType); + + if (targetProperty != null) + { + targetProperty.SetValue(target, sourceValue); + } + } + } + } +} \ No newline at end of file diff --git a/src/Models/AssetsModel.cs b/src/Models/AssetsModel.cs index ed0832b..632776f 100644 --- a/src/Models/AssetsModel.cs +++ b/src/Models/AssetsModel.cs @@ -34,6 +34,9 @@ public class AssetModel public class AssetDescription { public string? Type { get; set; } + public string? Make { get; set; } + public string? Model { get; set; } + public Dictionary? Attributes { get; set; } public AssetPurchase? Purchase { get; set; } } diff --git a/src/Models/AssetsRequestModels.cs b/src/Models/AssetsRequestModels.cs index 2bdda96..6c63102 100644 --- a/src/Models/AssetsRequestModels.cs +++ b/src/Models/AssetsRequestModels.cs @@ -1,9 +1,12 @@ +using Microsoft.AspNetCore.Mvc; + namespace Berufsschule_HAM.Models; public class AssetsModifyRequestModel { public required string Cn { get; set; } public string? NewCn { get; set; } = null; + [FromBody] public AssetDescription? Description { get; set; } = null; public string? Location { get; set; } = null; public string? Name { get; set; } = null;