import 'package:drift/drift.dart'; import '../converters.dart' show JsonMapConverter, JsonListConverter; import '../postgres_constants.dart'; import 'users.dart'; /// Таблица SubscriptionPlans - планы подписки class SubscriptionPlans extends Table { TextColumn get id => text().withDefault(const Constant('gen_random_uuid()'))(); // UI информация (JSON) TextColumn get ui => text().nullable().map(const JsonMapConverter())(); // Цена и валюта TextColumn get price => text()(); TextColumn get currency => text()(); IntColumn get durationDays => integer()(); // Функции подписки (JSON array) TextColumn get features => text() .withDefault(const Constant('[]')) .map(const JsonListConverter())(); // Платежная система TextColumn get paymentId => text().nullable()(); TextColumn get paymentSystem => text()(); // enum as string // Audit DateTimeColumn get createdAt => dateTime().withDefault(currentTimestamp)(); DateTimeColumn get updatedAt => dateTime().withDefault(currentTimestamp)(); BoolColumn get isDeleted => boolean() .withDefault(const Constant(false)) .customConstraint('')(); // PostgreSQL использует нативный BOOLEAN, не нужен CHECK @override Set get primaryKey => {id}; } /// Таблица UserSubscriptions - подписки пользователей class UserSubscriptions extends Table { TextColumn get id => text().withDefault(const Constant('gen_random_uuid()'))(); TextColumn get userId => text().unique().references(Users, #id, onDelete: KeyAction.cascade)(); DateTimeColumn get start => dateTime()(); DateTimeColumn get finish => dateTime()(); // Функции подписки (JSON array) TextColumn get features => text() .withDefault(const Constant('[]')) .map(const JsonListConverter())(); // Audit DateTimeColumn get createdAt => dateTime().withDefault(currentTimestamp)(); DateTimeColumn get updatedAt => dateTime().withDefault(currentTimestamp)(); @override Set get primaryKey => {id}; } // Конвертеры импортированы из converters.dart