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