Перейти до вмісту

Що система зберігає і як довго

Політика зберігання даних і аудиту. Живе в репозиторії, а не в локальних нотатках, бо її виконує код (AuditCleanupBackgroundService) і про неї треба знати, читаючи цей код.

1. Аудит проб і вмілостей

Section titled “1. Аудит проб і вмілостей”

Що: BadgeProgressAuditEvent, ProbeProgressAuditEvent. Скільки: 180 днів від OccurredAtUtc, далі — жорстке видалення.

Знімок виконавця обмежений цим переліком і нічим більше:

Поле Навіщо
ActorUserKey звʼязати з людиною, якщо вона ще існує
ActorName незмінний знімок імені на момент дії
ActorRole незмінний знімок ролі на момент дії
Note необовʼязковий коментар виконавця

Імʼя й роль зберігаються знімком навмисно: запис аудиту має лишатися читабельним і тоді, коли людина пішла з куреня або змінила діловодство.

Що: WaitlistEntry, Invitation. Скільки:

  • WaitlistEntry — 30 днів після кінцевого стану (Rejected, або ApprovedForInvitation, чиє запрошення вже використане чи протерміноване);
  • Invitation — 30 днів після UsedAtUtc або ExpiresAtUtc.

Жорстке видалення. Це персональні дані (пошта, імена) людей, які не завершили онбординг — тримати їх довше немає підстави.

Живе в логах застосунку й прибирається зовнішнім провайдером (Application Insights), очікувано — 365 днів. На рівні застосунку прибирати нічого не треба.

Що: DuesEntry (операції каси гуртка й куреня) і DuesEntryEvent (слід кожної зміни). Скільки: безстроково. Прибиральник їх не чіпає.

Це гроші: курінь звітує станиці, і запис, на який спирається поданий звіт, не може зникнути через пів року. Тому операцію не видаляють навіть рукою скарбника — її позначають видаленою (DeletedAtUtc), а кожна зміна лишає DuesEntryEvent зі знімком операції після зміни й ключем того, хто її зробив.

Що: ScoreAttendance (відмітки присутності), ScoreEntry (бали вручну), PrivateScoreEntry (книга КВ) і ScoreTrailEvent (слід кожної зміни відмітки, бала, тарифу, етапу чи запису КВ). Скільки: безстроково, як курінна історія: рейтинг минулих років лишається відкритим.

Відмітку знімають, а запис видаляють позначкою (RemovedAtUtc, DeletedAtUtc), не рядком — слід показує, хто й коли поставив чи зняв бал.

Записи, привʼязані до активного розслідування безпеки чи розгляду скарги, мали б виключатися з прибирання прапорцем IsRetainedForInvestigation. Не реалізовано: зараз збереження таких записів понад строк робиться руками в базі.

IHostedService, раз на добу в неробочі години (≈03:00 UTC). Видаляє пакетами, щоб не тримати блокувань на таблицях.