Логін оператора
Вхід оператора: перевірки допуску → конект нашого сокета → приходить список анкет (TU). Це не лише автентифікація — на вході кладемо в пам’ять і на диск дані, з якими працює вся сесія (профіль, ключ перекладача, версія). Поки перевірки не пройдені — до логіну ТЮ не пускає. Однаково для всіх проектів (логін у наш сервер, нічого проектного).
Логіка
- Креденшели → автентифікація (JWT).
- Перевірка версії — застаріла версія не заходить; зміна версії або зміна оператора чистить локальну базу (див. нижче).
- Перевірка часу сервера — дрейф від
20 споказує попередження, від50 сзакриває програму. - Конект нашого сокета → подія
connectionResultприносить список анкет (TU) зі статусами. - Перевірки пройдені → оператор може логінити ТЮ (Логін ТЮ). У роботу йдуть лише анкети
AVAILABLE.
Stack API
| Операція | Частота |
|---|---|
| Логін оператора | 1 / логін |
| Перевірка версії | 1 / логін, далі 1 / 15 хв |
| Час сервера | 1 / запуск програми |
| Сесія оператора | 1 постійний socket + reconnect |
Дані / стан
Найважливіше, що тримаємо (як у коді)
- Профіль оператора —
{ id, ім'я, family, supervisor }- Перекладач (DeepL) —
{ ключ, мова }
| Дані | Де | Оновлення |
|---|---|---|
| JWT токен | пам’ять + рендер | на логіні; далі в кожен запит (Bearer) і в хендшейк сокета |
| Профіль оператора (id, ім’я, family, supervisor) | пам’ять | на логіні |
| Ключ перекладача (DeepL) + мова | пам’ять → сервіс перекладу | з логін-відповіді; ключ порожній, якщо не підтверджений; мова за замовч. UK |
| Креденшели (email + пароль) | диск, зашифровано | на логіні, для префілу форми входу |
| Версія програми | локальна база (SQLite) | на логіні; зміна версії → дроп/реініт таблиць; зміна оператора → чистка всіх даних |
| Стан сокета (реконект, sleepMode) | пам’ять | під час сесії |
| Список анкет (TU) + статуси | рендер + runner | connectionResult; реконект діфить; наживо setLady / dropLady |
Не тримаємо: зсув часу (лише звіряємо на старті), refresh-токен (тільки в рендері), роль/картку оператора.
Статуси анкет (TU)
Приходять у списку на конекті сокета; визначають, кого запускати:
- AVAILABLE — доступна; лише такі йдуть у роботу.
- OCCUPIED — зайнята (за іншим оператором).
- WILL_BE_AVAILABLE — скоро звільниться (визначено, але фактично не проставляється — під питанням, чи лишаємо).
Оновлення: на реконекті — діф набору AVAILABLE (DROP/SET); наживо — команди setLady / dropLady. Рендер тримає ще окремі прапорці isOnline / isReady — це не статус із сервера.
Зв’язки
- Далі: Логін ТЮ — логін кожної анкети на сайт.
- Наш сокет — канал списку анкет і координації сесії.