From 39cb63a78d7175a335aa2eb4d8d00b2d5c283752 Mon Sep 17 00:00:00 2001 From: OlgunR Date: Wed, 15 Apr 2026 11:27:48 +0200 Subject: [PATCH] Refactor UpsertAsync to use ApiResult for error handling MassDataApiClient.UpsertAsync now returns ApiResult to standardize success and error reporting, including detailed error extraction from API responses. Updated MassDataGrid.razor to handle the new result type and display error messages accordingly. Removed obsolete try-catch logic in favor of the new pattern. --- .../Components/MassDataGrid.razor | 17 +++++------ .../Services/MassDataApiClient.cs | 30 ++++++++++++++++--- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/DbFirst.BlazorWebApp/Components/MassDataGrid.razor b/DbFirst.BlazorWebApp/Components/MassDataGrid.razor index 249026f..cc8686a 100644 --- a/DbFirst.BlazorWebApp/Components/MassDataGrid.razor +++ b/DbFirst.BlazorWebApp/Components/MassDataGrid.razor @@ -305,18 +305,17 @@ else Category = editModel.Category, StatusFlag = editModel.StatusFlag }; - try + + var result = await Api.UpsertAsync(dto); + if (!result.Success) { - var saved = await Api.UpsertAsync(dto); - infoMessage = editModel.IsNew ? "MassData angelegt." : "MassData aktualisiert."; - focusedRowKey = saved.Id; - await LoadPage(pageIndex); - } - catch (Exception ex) - { - errorMessage = $"Fehler beim Speichern: {ex.Message}"; + errorMessage = result.Error ?? "Speichern fehlgeschlagen."; e.Cancel = true; + return; } + infoMessage = editModel.IsNew ? "MassData angelegt." : "MassData aktualisiert."; + focusedRowKey = result.Value?.Id; + await LoadPage(pageIndex); } private void AddValidationError(MassDataEditModel editModel, string fieldName, string message) diff --git a/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs b/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs index 2ee4cbe..6854dce 100644 --- a/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs +++ b/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs @@ -36,12 +36,34 @@ public class MassDataApiClient return result ?? new List(); } - public async Task UpsertAsync(MassDataWriteDto dto) + public async Task> UpsertAsync(MassDataWriteDto dto) { var response = await _httpClient.PostAsJsonAsync($"{Endpoint}/upsert", dto); - response.EnsureSuccessStatusCode(); - var payload = await response.Content.ReadFromJsonAsync(); - return payload ?? new MassDataReadDto(); + if (response.IsSuccessStatusCode) + { + var payload = await response.Content.ReadFromJsonAsync(); + return ApiResult.Ok(payload); + } + + var error = await ReadErrorAsync(response); + return ApiResult.Fail(error); + } + + private static async Task ReadErrorAsync(HttpResponseMessage response) + { + try + { + var problem = await response.Content.ReadFromJsonAsync(); + if (problem != null && !string.IsNullOrWhiteSpace(problem.Title)) + return problem.Detail ?? problem.Title ?? response.ReasonPhrase ?? "Unbekannter Fehler"; + } + catch { } + + var body = await response.Content.ReadAsStringAsync(); + if (!string.IsNullOrWhiteSpace(body)) + return body; + + return $"Fehler {(int)response.StatusCode} {response.ReasonPhrase}".Trim(); } public async Task GetByCustomerNameAsync(string customerName)