mnemo_cards/mnemo_cards_backend/lib/database/tables/audit.dart

49 lines
2.2 KiB
Dart
Raw Normal View History

2025-12-14 20:36:05 +00:00
import 'package:drift/drift.dart';
import 'package:drift_postgres/drift_postgres.dart';
import '../converters.dart' show generateUuid;
/// Таблица AuditLogs - audit trail для отслеживания изменений
2025-12-20 18:26:15 +00:00
///
2025-12-14 20:36:05 +00:00
/// ⚠️ ВАЖНО: Инфраструктура создается, но пока НЕ используется в коде.
/// Вызовы auditDao.log() будут добавлены позже, когда определим
/// какие операции нужно логировать.
2025-12-20 18:26:15 +00:00
///
2025-12-14 20:36:05 +00:00
/// Планируемые операции для логирования:
/// - Критичные: платежи, удаления пользователей, изменения подписок
/// - Retention policy: автоматическая очистка записей старше 90 дней
class AuditLogs extends Table {
// ID как String, но фактически UUID (генерируется PostgreSQL на стороне БД)
2025-12-20 18:26:15 +00:00
TextColumn get id =>
text().withDefault(const CustomExpression('gen_random_uuid()::text'))();
2025-12-14 20:36:05 +00:00
// Какая таблица и запись изменена
// например: 'Users', 'Payments'
2025-12-14 21:10:06 +00:00
TextColumn get table => text()();
2025-12-14 20:36:05 +00:00
// ID записи, которая изменилась
TextColumn get recordId => text()();
2025-12-20 18:26:15 +00:00
2025-12-14 20:36:05 +00:00
// Тип операции: 'INSERT', 'UPDATE', 'DELETE', 'SOFT_DELETE', 'RESTORE'
TextColumn get action => text()();
2025-12-20 18:26:15 +00:00
2025-12-14 20:36:05 +00:00
// Кто сделал изменение
// ID пользователя (null для системных операций)
TextColumn get userId => text().nullable()();
2025-12-20 18:26:15 +00:00
2025-12-14 20:36:05 +00:00
// Данные до и после (JSON as TEXT)
// JSON данные до изменения
TextColumn get oldData => text().nullable()();
// JSON данные после изменения
TextColumn get newData => text().nullable()();
2025-12-20 18:26:15 +00:00
2025-12-14 20:36:05 +00:00
// Дополнительная информация
TextColumn get ipAddress => text().nullable()();
TextColumn get userAgent => text().nullable()();
2025-12-20 18:26:15 +00:00
2025-12-14 20:36:05 +00:00
// Audit
2025-12-20 18:26:15 +00:00
Column<PgDateTime> get createdAt =>
customType(PgTypes.timestampWithTimezone).withDefault(now())();
2025-12-14 20:36:05 +00:00
@override
Set<Column> get primaryKey => {id};
}