From dc56f9a6613ececfc2af038c5345420ee10d54e9 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Mon, 10 Aug 2026 06:10:56 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B5=D0=B7=D0=B4=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=82=D0=B0=D0=BB=D0=B0=20=D1=81=20=D0=B4=D0=B5=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=B0=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20(#10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: gorbenko.pavel Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/10 --- .../Tnsu.ApprovalRoute.Api/appsettings.json | 1 - .../TnsuPortal/HttpTnsuPortalClient.cs | 21 +++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/backend/src/Tnsu.ApprovalRoute.Api/appsettings.json b/backend/src/Tnsu.ApprovalRoute.Api/appsettings.json index f974e4b..12fe82b 100644 --- a/backend/src/Tnsu.ApprovalRoute.Api/appsettings.json +++ b/backend/src/Tnsu.ApprovalRoute.Api/appsettings.json @@ -9,7 +9,6 @@ "Postgres": "Host=db-master.tnsu.kz;Database=tnsu_approval_route;Username=dbuser;Password=p}{6{Pa]{JQwP1H" }, "Entra": { - "TenantId": "b4c2af35-bfd6-4cff-9af9-556efb53e65a", "Audience": "9232d9e2-9807-4753-808f-07250e5474b0" }, 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 {