namespace Tnsu.ApprovalRoute.Infrastructure.TnsuPortal; public interface ITnsuPortalClient { /// /// Все записи сотрудника по email — /Employee/ByEmail отдаёт массив: сотрудник может /// числиться в нескольких компаниях одновременно (один Id/Fio/Email, разные Company/ /// CompanyId/Section/DepartmentId/Position на каждую). Пусто, если не найден вовсе. /// Task> GetEmployeeByEmailAsync(string email, CancellationToken cancellationToken); Task GetEmployeeByPositionAsync(string position, string company, CancellationToken cancellationToken); /// /// Весь справочник сотрудников с email — /Employee/All. Нужен там, где известно /// только ФИО, а email ещё нет: точечного поиска по ФИО в api.tnsu.kz нет вовсе /// (эндпоинта /Employee/ByFio не существует), поэтому приходится тянуть базу /// целиком и искать в ней локально. ВРЕМЕННОЕ решение — как только на стороне /// api.tnsu.kz появится поиск по ФИО, этот вызов заменится точечным. /// Task> GetAllEmployeesAsync(CancellationToken cancellationToken); /// Справочник компаний — /Dictionary/Companies. Task> GetCompaniesAsync(CancellationToken cancellationToken); /// Справочник отделов — /Dictionary/Departments. Task> GetDepartmentsAsync(CancellationToken cancellationToken); Task GetManagerAsync(string email, string managerType, CancellationToken cancellationToken); /// /// Весь справочник сотрудников — /Employee/FullBase. Единственный источник, где /// есть дата увольнения (DismissalDate): нужен, чтобы не напоминать про /// испытательный срок сотрудника, который уже уволен. /// Task> GetFullBaseAsync(CancellationToken cancellationToken); Task> GetProjectExecutorsAsync(Guid projectId, CancellationToken cancellationToken); /// Email руководителя указанного отдела (для HeadType.DepartmentHead) — null, если не найден. Task GetDepartmentHeadEmailAsync(Guid departmentId, CancellationToken cancellationToken); }