diff --git a/src/Controllers/AssetsController.cs b/src/Controllers/AssetsController.cs index d961049..2d3002c 100644 --- a/src/Controllers/AssetsController.cs +++ b/src/Controllers/AssetsController.cs @@ -4,6 +4,7 @@ using Berufsschule_HAM.Services; using System.Text.Json; using Novell.Directory.Ldap; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc.ModelBinding; [Authorize] [Route("[controller]")] @@ -18,20 +19,34 @@ public class AssetsController : Controller _logger = logger; } - [HttpGet("Index")] - public async Task> Index() + [HttpGet("GetAll")] + public async Task GetAllAssetModelAsync() { - var list = await _ldap.ListDeviceAsync(); - return list; + AssetsIndexResponseModel result; + try + { + var assetList = await _ldap.ListDeviceAsync(); + result = new AssetsIndexResponseModel(successful: true, assetsModel: assetList); + } + catch (Exception e) + { + result = new AssetsIndexResponseModel(successful: false, exception: e.Message); + } + + return result; } [HttpPost("Create")] - public async Task Create(AssetsCreateRequestModel assetModel) + public async Task Create(AssetsCreateRequestModel assetModel) { + AssetsCreateResponseModel result; if (assetModel is null) { - _logger.LogError("Unable to create an asset because the AssetModel is null."); - return false; + result = new AssetsCreateResponseModel( + successful: false, + exception: "Unable to create an asset because the AssetsCreateRequestModel is null."); + + return result; } try @@ -52,7 +67,7 @@ public class AssetsController : Controller if (assetModel.Location != null) { attributeSet.Add(new LdapAttribute("l", assetModel.Location)); - } + } if (assetModel.Owner != null) { var ownerDn = $"uid={assetModel.Owner}"; @@ -97,97 +112,111 @@ public class AssetsController : Controller } await _ldap.CreateAsset(attributeSet); - - return true; + result = new AssetsCreateResponseModel(successful: true); } catch (Exception e) { - _logger.LogError($"Unable to create an asset because of the exception: {e.Message}", e); - return false; - } + result = new AssetsCreateResponseModel(successful: false, exception: e.Message); + } + + return result; } - [HttpGet("Delete")] - public async Task Delete(string cn) + [HttpDelete("Delete")] + public async Task Delete([BindRequired] string cn) { AssetsDeleteResponseModel response; return await Task.Run(async () => { if (cn is null) { - response = new AssetsDeleteResponseModel(false, AssetsDeleteErrorEnum.CnIsNull); + response = new AssetsDeleteResponseModel(successful: false, exception: "Cn was not provided."); return response; } try { await _ldap.DeleteAssetAsync(cn); - response = new AssetsDeleteResponseModel(true, AssetsDeleteErrorEnum.None); + response = new AssetsDeleteResponseModel(true); } catch (Exception e) { - response = new AssetsDeleteResponseModel(false, AssetsDeleteErrorEnum.UnableToDeleteAsset, e.Message); + response = new AssetsDeleteResponseModel(successful: false, exception: e.Message); } return response; }); } - [HttpPost("Update")] - public async Task Update(AssetsModifyRequestModel requestModel) + [HttpPatch("Update")] + public async Task Update(AssetsModifyRequestModel requestModel) { + AssetsUpdateResponseModel result; if (requestModel is null) { - _logger.LogError("Unable to update an asset because the AssetsModifyRequestModel is null"); - return false; - } - string cn = requestModel.Cn; + result = new AssetsUpdateResponseModel( + successful: false, + exception: "Unable to update an asset because the AssetsModifyRequestModel is null"); - if (requestModel.NewCn is not null) - { - await _ldap.UpdateAsset(cn, "cn", requestModel.NewCn); - cn = requestModel.NewCn; + return result; } - if (requestModel.Location is not null) + + try { - await _ldap.UpdateAsset(cn, "l", requestModel.Location); - } - if (requestModel.Name is not null) - { - await _ldap.UpdateAsset(cn, "name", requestModel.Name); - } - if (requestModel.Owner is not null) - { - await _ldap.UpdateAsset(cn, "owner", requestModel.Owner); - } - if (requestModel.SerialNumber is not null) - { - await _ldap.UpdateAsset(cn, "serialNumber", requestModel.SerialNumber); - } - if (requestModel.Description is not null) - { - AssetModel? asset = null; - if (requestModel.Description.Type is null) + var cn = requestModel.Cn; + if (requestModel.NewCn is not null) { - asset ??= await _ldap.GetAssetByCnAsync(cn); - requestModel.Description.Type = asset.Description?.Type; + await _ldap.UpdateAsset(cn, "cn", requestModel.NewCn); + cn = requestModel.NewCn; } - if (requestModel.Description.Purchase is not null) + if (requestModel.Location 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; + await _ldap.UpdateAsset(cn, "l", requestModel.Location); + } + if (requestModel.Name is not null) + { + await _ldap.UpdateAsset(cn, "name", requestModel.Name); + } + if (requestModel.Owner is not null) + { + await _ldap.UpdateAsset(cn, "owner", requestModel.Owner); + } + if (requestModel.SerialNumber is not null) + { + await _ldap.UpdateAsset(cn, "serialNumber", requestModel.SerialNumber); + } + 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; + } + await _ldap.UpdateAsset(cn, "description", JsonSerializer.Serialize(requestModel.Description)); } - if (requestModel.Description.Purchase is null) - { - asset ??= await _ldap.GetAssetByCnAsync(cn); - requestModel.Description.Purchase = asset.Description?.Purchase; - } - await _ldap.UpdateAsset(cn, "description", JsonSerializer.Serialize(requestModel.Description)); + result = new AssetsUpdateResponseModel(successful: true); } - return true; + catch (Exception e) + { + result = new AssetsUpdateResponseModel(successful: false, exception: e.Message); + } + + return result; } } \ No newline at end of file diff --git a/src/Models/AssetsDeleteResponseModel.cs b/src/Models/AssetsDeleteResponseModel.cs deleted file mode 100644 index 590991f..0000000 --- a/src/Models/AssetsDeleteResponseModel.cs +++ /dev/null @@ -1,14 +0,0 @@ -public class AssetsDeleteResponseModel(bool successful, AssetsDeleteErrorEnum errorReason, string exception = "none") -{ - public bool Success { get; set; } = successful; - public AssetsDeleteErrorEnum Reason { get; set; } = errorReason; - - public string? Exception { get; set; } = exception; -} - -public enum AssetsDeleteErrorEnum -{ - None, - CnIsNull, - UnableToDeleteAsset -} \ No newline at end of file diff --git a/src/Models/AssetsResponseModel.cs b/src/Models/AssetsResponseModel.cs new file mode 100644 index 0000000..e9a899e --- /dev/null +++ b/src/Models/AssetsResponseModel.cs @@ -0,0 +1,32 @@ +using Berufsschule_HAM.Models; + +public class AssetsCreateResponseModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public string? Exception { get; set; } = exception; +} + +public class AssetsUpdateResponseModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public string? Exception { get; set; } = exception; +} + +public class AssetsDeleteResponseModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public string? Exception { get; set; } = exception; +} + +public class AssetsIndexResponseModel(bool successful, IEnumerable? assetsModel = null, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public IEnumerable? AssetsModel { get; set; } = assetsModel; + + public string? Exception { get; set; } = exception; +} +