Merge pull request #203 from LD-Reborn/feature/issue_82_ReturnModels_Location

Add dedicated Models and improved logging for loactions Controller
This commit is contained in:
LD50
2025-10-31 07:44:02 +01:00
committed by GitHub
3 changed files with 55 additions and 18 deletions

View File

@@ -20,14 +20,22 @@ public class LocationsController : Controller
}
[HttpGet("Index")]
public async Task<IEnumerable<LocationModel>> Index()
public async Task<LocationsIndexResponseModel> Index()
{
try
{
IEnumerable<LocationModel> list = await _ldap.ListLocationsAsync();
return list;
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<bool> Create([FromBody]LocationsCreateRequestModel model)
public async Task<LocationsCreateResponseModel> 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<LocationsDeleteRequestModel> DeleteAsync(string cn)
public async Task<LocationsDeleteResponseModel> 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<bool> Update([FromBody]LocationsModifyRequestModel requestModel)
public async Task<LocationsUpdateResponseModel> 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 };
}
}
}

View File

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

View File

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