flow auth

Login

Логін оператора

OperatorAuthService.login() · src/main/auth/operator-auth.service.ts

Головний процес входу в програму. Запускається після кліку на Login в UI через IPC.

UI-екран — Login screen.

Чому так: Весь процес входу зосереджений в одному методі-оркестраторі щоб UI міг відслідковувати кожен крок (updateRendererStage) і показувати прогрес.

Захист від подвійного логіну: флаг isAuthenticating — якщо логін вже йде, повторний виклик ігнорується.


Кроки

  1. Авторизація — відправка credentials, отримання даних користувача
  2. Перевірка версії програми — чи актуальна
  3. Підключення сокету до серверу — отримання списку анкет
  4. Запуск ранера оператора — старт всіх логік

Якщо будь-який крок падає — логін зупиняється, UI показує помилку.


1. Авторизація

performLogin()stackService.operatorLogin(credentials)

Відправляє credentials на сервер і отримує у відповідь дані користувача.

Що повертає сервер (ISuccessLogin)

ПолеТипПризначення
tokenstringJWT access token
tokenRefreshstringJWT refresh token
user.emailstringEmail оператора
user.name / user.surnamestringІм’я та прізвище
user.rolestringРоль (operator)
user.accessstringРівень доступу (development, etc.)
user.isBlockedbooleanЧи заблокований оператор
user.deepL.apiKeystringAPI-ключ DeepL для перекладу
user.deepL.languagestringМова перекладу за замовчуванням
user.golden.idstringoperatorFamilyId — передається в OperatorRunner.start()
user.golden.ladiesnumber[]Список id анкет оператора
user.golden.isWSAccessbooleanЧи є доступ до WebSocket
user.golden.supervisorstringID супервайзера
user.cardobjectКартка оператора (country, instagram, motivation, review тощо)

Що використовується далі

  • loginResponse.user.golden.idoperatorFamilyId в OperatorRunner
  • loginResponse повністю → IAuthResult.data до renderer (для профілю і налаштувань)
  • user.deepL.apiKey / user.deepL.languageDeepLService

2. Перевірка версії програми

checkVersion()updateService.checkForUpdates(true)

Перевіряє чи версія актуальна одразу після успішної авторизації.

Чому саме тут: доступ до API з’являється тільки після авторизації. Оператор не повинен починати роботу на застарілій версії.

Детально — updateService. Також на цьому кроці: TimeSyncService, VersionManagerService, settingsService.


3. Підключення сокету до серверу

connectSocket()stackSocket.initialize()

Встановлює WebSocket-з’єднання і отримує початковий список анкет та їх статуси.

Чому так: Сокет — основний канал для подій в реальному часі (нові таски, зміни статусів). Підключення дає список ladiesStatus — які анкети AVAILABLE і готові до роботи.

Після підключення: фільтруємо анкети — у ранер передаються тільки зі статусом AVAILABLE. Решта ігнорується.

Детально — StackSocket.


4. Запуск ранера оператора

operatorRunner.start({ ladies: readyLadies, operatorFamilyId })

Передає відфільтровані анкети і id оператора в OperatorRunner для старту всіх логік.

Чому так: До цього моменту є все необхідне — токен, актуальна версія, список робочих анкет. Якщо будь-який попередній крок впав — ранер не стартує.

Детально — OperatorRunner.