diff --git a/src/Controllers/LocationsController.cs b/src/Controllers/LocationsController.cs index 02e62e9..f4d639d 100644 --- a/src/Controllers/LocationsController.cs +++ b/src/Controllers/LocationsController.cs @@ -20,14 +20,22 @@ public class LocationsController : Controller } [HttpGet("Index")] - public async Task> Index() + public async Task Index() { - IEnumerable list = await _ldap.ListLocationsAsync(); - return list; + try + { + IEnumerable list = await _ldap.ListLocationsAsync(); + return new LocationsIndexResponseModel { Locations = list }; + } + catch (Exception ex) + { + _logger.LogError("Unable to list locations: {Message} - {StackTrace}", ex.Message, ex.StackTrace); + return new LocationsIndexResponseModel { Locations = [] }; + } } [HttpPost("Create")] - public async Task Create([FromBody]LocationsCreateRequestModel model) + public async Task Create([FromBody]LocationsCreateRequestModel model) { try { @@ -42,19 +50,23 @@ public class LocationsController : Controller ]; await _ldap.CreateLocation(attributeSet); - return true; + return new LocationsCreateResponseModel { Success = true }; } catch (Exception ex) { - _logger.LogError("Unable to create location: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); - return false; + _logger.LogError("Unable to create location: {Message} - {StackTrace}", ex.Message, ex.StackTrace); + return new LocationsCreateResponseModel { Success = false, ErrorMessage = ex.Message }; } } [HttpGet("Delete")] - public async Task DeleteAsync(string cn) + public async Task DeleteAsync(string cn) { - if (cn is null) { return new(false); } + if (cn is null) + { + _logger.LogError("Unable to delete location: cn parameter is null"); + return new(false, "cn parameter is null"); + } try { await _ldap.DeleteLocationAsync(cn); @@ -62,17 +74,18 @@ public class LocationsController : Controller } catch (Exception ex) { + _logger.LogError("Unable to delete location {Cn}: {Message} - {StackTrace}", cn, ex.Message, ex.StackTrace); return new(false, ex.Message); } } [HttpPost("Update")] - public async Task Update([FromBody]LocationsModifyRequestModel requestModel) + public async Task Update([FromBody]LocationsModifyRequestModel requestModel) { if (requestModel is null) { _logger.LogError("Unable to update a location because the LocationsModifyRequestModel is null"); - return false; + return new LocationsUpdateResponseModel { Success = false, ErrorMessage = "Request model is null" }; } try { @@ -82,12 +95,12 @@ public class LocationsController : Controller await _ldap.UpdateLocation(location, "description", JsonSerializer.Serialize(room)); await _ldap.UpdateLocation(location, "l", newLocation); - return true; + return new LocationsUpdateResponseModel { Success = true }; } catch (Exception ex) { - _logger.LogError("Unable to update location: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); - return false; + _logger.LogError("Unable to update location {Location}: {Message} - {StackTrace}", requestModel?.Location ?? "unknown", ex.Message, ex.StackTrace); + return new LocationsUpdateResponseModel { Success = false, ErrorMessage = ex.Message }; } } } diff --git a/src/Models/LocationsRequestModels.cs b/src/Models/LocationsRequestModels.cs index 522913e..bbf6cfe 100644 --- a/src/Models/LocationsRequestModels.cs +++ b/src/Models/LocationsRequestModels.cs @@ -16,9 +16,8 @@ public class LocationsModifyRequestModel public required LocationsDescription Description { get; set; } } -public class LocationsDeleteRequestModel(bool successful, string exception = "None") +public class LocationsDeleteRequestModel { - public bool Success { get; set; } = successful; - - public string? Exception { get; set; } = exception; + [JsonPropertyName("cn")] + public required string Cn { get; set; } } \ No newline at end of file diff --git a/src/Models/LocationsResponseModels.cs b/src/Models/LocationsResponseModels.cs new file mode 100644 index 0000000..bc84892 --- /dev/null +++ b/src/Models/LocationsResponseModels.cs @@ -0,0 +1,25 @@ +namespace Berufsschule_HAM.Models; + +public class LocationsDeleteResponseModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public string? Exception { get; set; } = exception; +} + +public class LocationsIndexResponseModel +{ + public required IEnumerable Locations { get; set; } +} + +public class LocationsCreateResponseModel +{ + public required bool Success { get; set; } + public string? ErrorMessage { get; set; } +} + +public class LocationsUpdateResponseModel +{ + public required bool Success { get; set; } + public string? ErrorMessage { get; set; } +}