diff --git a/backend/src/Tnsu.ApprovalRoute.Infrastructure/TnsuPortal/HttpTnsuPortalClient.cs b/backend/src/Tnsu.ApprovalRoute.Infrastructure/TnsuPortal/HttpTnsuPortalClient.cs index 0c46637..5805898 100644 --- a/backend/src/Tnsu.ApprovalRoute.Infrastructure/TnsuPortal/HttpTnsuPortalClient.cs +++ b/backend/src/Tnsu.ApprovalRoute.Infrastructure/TnsuPortal/HttpTnsuPortalClient.cs @@ -56,15 +56,18 @@ public sealed class HttpTnsuPortalClient( return executors; } - // STUB(department-head): в api.tnsu.kz пока нет эндпоинта «руководитель отдела - // по Id отдела» — до его появления просто возвращаем захардкоженный email, - // чтобы можно было отладить всю остальную логику HeadType.DepartmentHead - // (resolve, warning-и, UI) не дожидаясь портала. Когда эндпоинт появится — - // заменить тело этого метода на реальный вызов через GetAsync (по - // образцу остальных методов этого класса); сигнатуру и вызывающий код - // (TemplateRouteService.ResolveStepAsync) менять не придётся. - public Task GetDepartmentHeadEmailAsync(Guid departmentId, CancellationToken cancellationToken) => - Task.FromResult("gorbenko.pavel@tnsu.kz"); + // Ответ — {"managerEmail": "..."} (та же форма, что у /Employee/Manager), + // а НЕ форма сотрудника (EmployeeResponse) — проверено живым вызовом + // (GET /Employee/DepartmentHead?departmentId=... на отделе "АУП"/"ТОО + // Монтажник-Т" вернул именно managerEmail). 404 с телом {"error": "..."} + // на отделах без руководителя уже отфильтровывается общим GetAsync. + public async Task GetDepartmentHeadEmailAsync(Guid departmentId, CancellationToken cancellationToken) + { + var manager = await GetAsync( + $"/Employee/DepartmentHead?departmentId={Uri.EscapeDataString(departmentId.ToString())}", cancellationToken); + + return manager?.ManagerEmail; + } private async Task GetAsync(string requestUri, CancellationToken cancellationToken) where T : class {