Матриця змін даних
Єдиний реєстр даних, які можуть змінюватися у програмі. За цією таблицею пізніше визначаємо: звичайний запит, батч-синк, retry, локальна черга або відсутність збереження.
Зміни
| Сутність | Поле / дані | Джерело зміни | Тип | Локальна дія | Збереження на сервер | Помилка / старі дані | Статус |
|---|---|---|---|---|---|---|---|
| Favorite TU+RU | створення фаворита | нова витрата у статистиці / Prime-логіці | авто | додати в FavoriteService | TODO | TODO | джерело Prime не спроєктоване |
| Favorite TU+RU | firstPaidAt, lastPaidAt, profit, gifts, paidActions | статистика / Prime-логіка | авто | оновити base/overlay | Golden/Chathouse — серверна статистика; Prime — TODO | лишити останній коректний стан | частково визначено |
| Favorite TU+RU | isActive | зміна lastPaidAt або часу | авто, похідне | перерахувати | TODO: зберігати чи рахувати | повторно рахується з вихідних даних | TODO |
| Favorite TU+RU | isFreeloader | сума/тип кредитів/кількість платних дій | авто, похідне | перерахувати | TODO: хто оновлює поле в БД | TODO | правила проєктів визначені |
| Favorite TU+RU | isWhite | активність, глобальний баланс, senderIgnore | авто, похідне | перерахувати | TODO | TODO | правила визначені |
| Favorite TU+RU | isWhite | дія оператора | ручна | оновити у програмі | одразу | TODO: rollback чи pending retry | TODO |
| Favorite TU+RU | blockedByTU | дія оператора | ручна | оновити у програмі | одразу | TODO: rollback чи pending retry; не перезаписати новіший серверний стан | TODO |
| Favorite TU+RU | blockedByRU | партнерське API / dialogs / relation | авто | оновити Favorite | TODO: bulk змін | TODO: повтор після помилки | TODO |
| Favorite TU+RU | type, note, language, contactDetails | дія оператора | ручна | оновити Favorite | TODO: одразу чи батч | TODO | перевірити однаковість полів |
| Global Favorite RU | senderIgnore | дія оператора | ручна | оновити глобальний стан RU | одразу | TODO: rollback чи pending retry | TODO |
| Global RU profile | ім’я, вік, аватар, isSatellite | профіль із сайту | авто | upsert у RU-сервіс | TODO: батч змінених профілів | не втратити зміну при закритті програми; не записати старіший профіль | TODO |
| Blocks TU | blockedByRU не-фаворитів | Golden block-list API | авто, повний знімок | замінити список | TODO: не зберігати / full snapshot / delta | при помилці лишити останній коректний список | TODO |
| Task TU+RU | створення / закриття / зміна стану | API, socket, таймер або оператор | авто / ручна | оновити Task Factory | TODO | TODO | буде деталізовано в Task Factory |
| Sender history TU+RU | успішна чат/мейл-відправка | сендер | авто, подія | запис у SQLite | поточний DataSync, 60 с | delete-on-ack; 3 фейли поспіль → закриття програми | реалізовано |
| Sender answer TU+RU | відповідь RU на sender-відправку | вхідне повідомлення після sender externalMessageId | авто, подія | запис у SQLite | DataSync → SenderAnalyticsService | delete-on-ack; серверний dedup за відправкою | спроєктовано |
| Operator actions | дія оператора | UI | авто, подія | запис у SQLite | поточний DataSync, 60 с | delete-on-ack; 3 фейли поспіль → закриття програми | реалізовано |
| TU online | інтервал онлайну | TU-online сервіс | авто, подія | запис у SQLite | поточний DataSync, 60 с | delete-on-ack; 3 фейли поспіль → закриття програми | реалізовано |
| Golden streams/views | інтервали / перегляди | Golden-логіки | авто, подія | запис у SQLite | поточний DataSync, 60 с | delete-on-ack; 3 фейли поспіль → закриття програми | реалізовано |
| Critical logs | лог | усі сервіси | авто, подія | запис у SQLite | поточний DataSync, 60 с | delete-on-ack; 3 фейли поспіль → закриття програми | реалізовано |
Що треба вирішити для кожної зміни
- Де source of truth.
- Чи потрібна зміна наступному оператору одразу.
- Чи важлива кожна подія, чи достатньо останнього значення.
- Допустима затримка збереження.
- Що бачить програма до відповіді сервера.
- Які помилки повторюємо, а які відкочують зміну.
- Як локальні дані після аварійного вимкнення звіряються з актуальним сервером.
Поки матриця не заповнена, не додаємо updatedAt / version у всі таблиці та не обираємо один складний механізм синку для всіх даних.