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)