CRUD - Assets create

This commit is contained in:
anomny
2025-10-04 14:37:10 +02:00
parent a34534eb62
commit ef3be7cb41
3 changed files with 71 additions and 4 deletions

View File

@@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc;
using Berufsschule_HAM.Models; using Berufsschule_HAM.Models;
using Berufsschule_HAM.Services; using Berufsschule_HAM.Services;
using System.Text.Json; using System.Text.Json;
using Novell.Directory.Ldap;
[Route("[controller]")] [Route("[controller]")]
public class AssetsController : Controller public class AssetsController : Controller
@@ -22,6 +23,55 @@ public class AssetsController : Controller
return list; return list;
} }
[HttpPost("Create")]
public async Task<bool> Create(AssetsCreateRequestModel assetModel)
{
if (assetModel is null)
{
_logger.LogError("Unable to create an asset because the AssetModel is null.");
return false;
}
try
{
var ownerDn = $"uid={assetModel.Owner},ou=people,dc=example,dc=com";
var attributeSet = new LdapAttributeSet();
attributeSet.Add(new LdapAttribute("objectClass", new[] {
"top",
"device",
"extensibleObject"
}));
attributeSet.Add(new LdapAttribute("cn", assetModel.Cn));
attributeSet.Add(new LdapAttribute("serialNumber", assetModel.SerialNumber));
attributeSet.Add(new LdapAttribute("l", assetModel.Location));
attributeSet.Add(new LdapAttribute("owner", ownerDn));
attributeSet.Add(new LdapAttribute("name", assetModel.Name));
attributeSet.Add(new LdapAttribute(
"description",
JsonSerializer.Serialize(new AssetDescription()
{
Type = assetModel.Description.Type,
Purchase = new AssetPurchase
{
PurchasedAt = assetModel.Description.Purchase.PurchasedAt,
PurchaseDate = assetModel.Description.Purchase.PurchaseDate,
PurchaseValue = assetModel.Description.Purchase.PurchaseValue
}
})
));
await _ldap.CreateAsset(attributeSet);
return true;
}
catch (Exception e)
{
_logger.LogError("Unable to create an asset because the Exception: " + e.Message);
return false;
}
}
[HttpGet("Delete")] [HttpGet("Delete")]
public async Task<bool> Delete(string cn) public async Task<bool> Delete(string cn)
{ {

View File

@@ -0,0 +1,11 @@
namespace Berufsschule_HAM.Models;
public class AssetsCreateRequestModel
{
public required string Cn { get; set; }
public AssetDescription? Description { get; set; } = null;
public string? Location { get; set; } = null;
public string? Name { get; set; } = null;
public string? Owner { get; set; } = null;
public string? SerialNumber { get; set; } = null;
}

View File

@@ -175,10 +175,16 @@ public partial class LdapService : IDisposable
await CreateObject(dn, attributeSet); await CreateObject(dn, attributeSet);
} }
public async Task CreateAsset(LdapAttributeSet attributeSet) public async Task CreateAsset(LdapAttributeSet attributeSet)
{ {
await CreateObject(AssetsBaseDn, attributeSet); string? cn = attributeSet.GetAttribute("cn")?.StringValue;
}
if (string.IsNullOrEmpty(cn))
throw new ArgumentException("AttributeSet must contain a cn attribute.");
string dn = PrependRDN($"cn={cn}", AssetsBaseDn);
await CreateObject(dn, attributeSet);
}
public async Task CreateLocation(LdapAttributeSet attributeSet) public async Task CreateLocation(LdapAttributeSet attributeSet)
{ {