Merge pull request #94 from LD-Reborn/88-feature-add-missing-attributes-to-the-asset-model

88 feature add missing attributes to the asset model
This commit is contained in:
LD50
2025-10-09 09:55:39 +02:00
committed by GitHub
5 changed files with 43 additions and 49 deletions

View File

@@ -14,6 +14,7 @@
| **Version:** | 3.0 |
| **Projektlaufzeit:** | 09.10.2025 - 01.12.2025 |
| **Budget:** | 40.000 € |
**Kontaktperson Kunde:**
- Name: Jochen Walhöfer
- Abteilung: IT-Abteilung

View File

@@ -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));
}

View File

@@ -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);
}
}
}
}
}

View File

@@ -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<string, string>? Attributes { get; set; }
public AssetPurchase? Purchase { get; set; }
}

View File

@@ -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;