fix: /api/request-manage/search падал 400 на пустом поле поиска
Tests / backend-test (pull_request) Successful in 2m29s
Tests / frontend-test (pull_request) Successful in 3m54s

[ApiController] с Nullable enable считал string query обязательным
параметром модели, а IHttpClient.buildUrl вырезает из URL пустые
query-параметры целиком — пустое поле поиска (обычное состояние при
открытии комбобокса выбора заявки) уходило вовсе без query и падало
400 ещё до контроллера. query и statuses — string?.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-09-25 11:00:25 +05:00
parent d9d68405ab
commit e6a330ba27
@@ -23,7 +23,12 @@ public sealed class RequestManageController(RequestManageService service) : Cont
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Search(
[FromQuery] int requestTypeId,
[FromQuery] string query,
// string? (не string) — [ApiController] с Nullable enable иначе считает
// query обязательным параметром модели, а IHttpClient.buildUrl (см.
// httpClient.ts) вырезает из URL пустые query-параметры целиком: пустое
// поле поиска (обычное состояние при открытии комбобокса) присылало
// запрос вовсе БЕЗ query, и такой запрос падал 400 ещё до контроллера.
[FromQuery] string? query,
[FromQuery] int page,
[FromQuery] int? pageSize,
CancellationToken ct) =>
@@ -45,7 +50,7 @@ public sealed class RequestManageController(RequestManageService service) : Cont
[HttpGet("by-approver")]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<UserApprovalRowDto>>), StatusCodes.Status200OK)]
public async Task<IActionResult> ByApprover(
[FromQuery] string approverEmail, [FromQuery] string statuses, CancellationToken ct)
[FromQuery] string approverEmail, [FromQuery] string? statuses, CancellationToken ct)
{
var activeStatuses = (statuses ?? string.Empty)
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)