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