From dedac5da3a21497bd8827519b0e573aaf1256acb Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Sat, 13 Dec 2025 17:25:07 +0100 Subject: [PATCH] Improved exception handling and logging in SearchdomainController --- .../Controllers/SearchdomainController.cs | 21 ++++++++++++++++--- src/Shared/Models/SearchdomainResults.cs | 13 ++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/Server/Controllers/SearchdomainController.cs b/src/Server/Controllers/SearchdomainController.cs index d3e54ef..4b45bbd 100644 --- a/src/Server/Controllers/SearchdomainController.cs +++ b/src/Server/Controllers/SearchdomainController.cs @@ -1,5 +1,6 @@ using ElmahCore; using Microsoft.AspNetCore.Mvc; +using Server.Exceptions; using Shared.Models; namespace Server.Controllers; @@ -46,7 +47,7 @@ public class SearchdomainController : ControllerBase } catch (Exception) { _logger.LogError("Unable to create Searchdomain {searchdomain}", [searchdomain]); - return Ok(new SearchdomainCreateResults() { Id = null, Success = false }); + return Ok(new SearchdomainCreateResults() { Id = null, Success = false, Message = $"Unable to create Searchdomain {searchdomain}" }); } } @@ -55,19 +56,29 @@ public class SearchdomainController : ControllerBase { bool success; int deletedEntries; + string? message = null; try { success = true; deletedEntries = _domainManager.DeleteSearchdomain(searchdomain); } + catch (SearchdomainNotFoundException ex) + { + _logger.LogError("Unable to delete searchdomain {searchdomain} - not found", [searchdomain]); + success = false; + deletedEntries = 0; + message = $"Unable to delete searchdomain {searchdomain} - not found"; + ElmahExtensions.RaiseError(ex); + } catch (Exception ex) { _logger.LogError("Unable to delete searchdomain {searchdomain}", [searchdomain]); success = false; deletedEntries = 0; + message = ex.Message; ElmahExtensions.RaiseError(ex); } - return Ok(new SearchdomainDeleteResults(){Success = success, DeletedEntities = deletedEntries}); + return Ok(new SearchdomainDeleteResults(){Success = success, DeletedEntities = deletedEntries, Message = message}); } [HttpGet("Update")] @@ -83,10 +94,14 @@ public class SearchdomainController : ControllerBase {"id", searchdomain_.id} }; searchdomain_.helper.ExecuteSQLNonQuery("UPDATE searchdomain set name = @name, settings = @settings WHERE id = @id", parameters); + } catch (SearchdomainNotFoundException) + { + _logger.LogError("Unable to update searchdomain {searchdomain} - not found", [searchdomain]); + return Ok(new SearchdomainUpdateResults() { Success = false, Message = $"Unable to update searchdomain {searchdomain} - not found" }); } catch (Exception) { _logger.LogError("Unable to update searchdomain {searchdomain}", [searchdomain]); - return Ok(new SearchdomainUpdateResults() { Success = false }); + return Ok(new SearchdomainUpdateResults() { Success = false, Message = $"Unable to update searchdomain {searchdomain}" }); } return Ok(new SearchdomainUpdateResults(){Success = true}); } diff --git a/src/Shared/Models/SearchdomainResults.cs b/src/Shared/Models/SearchdomainResults.cs index f98a3d2..2ccf500 100644 --- a/src/Shared/Models/SearchdomainResults.cs +++ b/src/Shared/Models/SearchdomainResults.cs @@ -6,6 +6,9 @@ public class SearchdomainListResults { [JsonPropertyName("Searchdomains")] // Otherwise the api returns {"searchdomains": [...]} and the client requires {"Searchdomains": [...]} public required List Searchdomains { get; set; } + + [JsonPropertyName("Message")] + public string? Message { get; set; } } public class SearchdomainCreateResults @@ -13,6 +16,9 @@ public class SearchdomainCreateResults [JsonPropertyName("Success")] public required bool Success { get; set; } + [JsonPropertyName("Message")] + public string? Message { get; set; } + [JsonPropertyName("Id")] public int? Id { get; set; } } @@ -21,12 +27,19 @@ public class SearchdomainUpdateResults { [JsonPropertyName("Success")] public required bool Success { get; set; } + + [JsonPropertyName("Message")] + public string? Message { get; set; } } public class SearchdomainDeleteResults { [JsonPropertyName("Success")] public required bool Success { get; set; } + + [JsonPropertyName("Message")] + public string? Message { get; set; } + [JsonPropertyName("DeletedEntities")] public required int DeletedEntities { get; set; } }