feat: подробное отображение ошибок синхронизации

This commit is contained in:
2026-05-12 00:18:47 +03:00
parent fb8ad6de7c
commit 9b28a09253
5 changed files with 122 additions and 6 deletions
@@ -23,7 +23,8 @@ public class ModeusApiClient : IModeusApiClient
{
var body = new { specialtyCode = request.SpecialtyCode, timeMin = request.TimeMin, timeMax = request.TimeMax, typeId = request.TypeId };
var response = await _http.PostAsJsonAsync("/api/proxy/events/search", body);
response.EnsureSuccessStatusCode();
await EnsureSuccessAsync(response, "Modeus events search",
$"specialtyCode={request.SpecialtyCode ?? "<empty>"}, timeMin={request.TimeMin:O}, timeMax={request.TimeMax:O}, typeId=[{string.Join(", ", request.TypeId ?? [])}]");
return await response.Content.ReadFromJsonAsync<ModeusEventsResponse>() ?? new(new());
}
@@ -46,7 +47,8 @@ public class ModeusApiClient : IModeusApiClient
};
var response = await _http.PostAsJsonAsync("/api/proxy/rooms/search", body);
response.EnsureSuccessStatusCode();
await EnsureSuccessAsync(response, "Modeus rooms search",
$"name=<empty>, sort=+building.name,+name, size={pageSize}, page={page}, deleted=false");
var payload = await response.Content.ReadFromJsonAsync<ModeusRoomsResponse>() ?? new ModeusRoomsResponse();
allRooms.AddRange(payload.RoomItems);
@@ -59,6 +61,20 @@ public class ModeusApiClient : IModeusApiClient
return new ModeusRoomsResponse { Rooms = allRooms };
}
private static async Task EnsureSuccessAsync(HttpResponseMessage response, string operation, string requestSummary)
{
if (response.IsSuccessStatusCode) return;
var responseBody = await response.Content.ReadAsStringAsync();
if (responseBody.Length > 2000)
responseBody = string.Concat(responseBody.AsSpan(0, 2000), "...<truncated>");
throw new HttpRequestException(
$"{operation} failed with HTTP {(int)response.StatusCode} {response.ReasonPhrase}. Request: {requestSummary}. Response body: {responseBody}",
null,
response.StatusCode);
}
public async Task<List<ModeusEmployee>> SearchEmployeeAsync(string fullname)
{
var response = await _http.GetFromJsonAsync<List<ModeusEmployee>>(