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);
}