mnemo_cards/mnemo_cards_backend/lib/database/tables/packs.dart
Dmitry fb7780c215
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
time
2025-12-14 00:40:59 +03:00

91 lines
3.7 KiB
Dart

import 'package:drift/drift.dart';
import '../converters.dart' show generateUuid, IntListConverter, StringListConverter;
import '../postgres_constants.dart';
/// Таблица CardPacks - наборы карточек
class CardPacks extends Table {
TextColumn get id => text().withDefault(const Constant('gen_random_uuid()'))();
// Основная информация
TextColumn get title => text()();
TextColumn get subtitle => text()();
TextColumn get description => text().nullable()();
// Визуальное оформление
TextColumn get color => text().nullable()();
TextColumn get cover => text().nullable()(); // URL обложки
// Параметры
IntColumn get size => integer()(); // количество карточек
TextColumn get version => text().nullable()();
IntColumn get order => integer().withDefault(const Constant(0))();
BoolColumn get enabled => boolean().withDefault(const Constant(true))();
// Порядок карточек (JSON array of IDs)
TextColumn get cardsOrder => text()
.withDefault(const Constant('[]'))
.map(const StringListConverter())();
// Store IDs для покупок
TextColumn get googlePlayId => text().nullable()();
TextColumn get rustoreId => text().nullable()();
TextColumn get appStoreId => text().nullable()();
// Цена
TextColumn get price => text().nullable()();
TextColumn get currency => text().withDefault(const Constant('RUB'))();
// Audit
DateTimeColumn get createdAt => dateTime().withDefault(currentTimestamp)();
DateTimeColumn get updatedAt => dateTime().withDefault(currentTimestamp)();
BoolColumn get isDeleted => boolean().withDefault(const Constant(false))();
@override
Set<Column> get primaryKey => {id};
}
/// Таблица GameCards - карточки для изучения
class GameCards extends Table {
TextColumn get id => text().withDefault(const Constant('gen_random_uuid()'))();
TextColumn get packId => text().references(CardPacks, #id, onDelete: KeyAction.cascade)();
// Основной контент
TextColumn get original => text()(); // слово на иностранном языке
TextColumn get translation => text()(); // перевод
TextColumn get mnemo => text().nullable()(); // мнемоническая подсказка
// Изображения
TextColumn get image => text()(); // основное изображение
TextColumn get imageBack => text().nullable()(); // изображение на обратной стороне
// Произношение
TextColumn get transcription => text().nullable()();
TextColumn get transcriptionMnemo => text().nullable()();
// Дополнительная информация
TextColumn get back => text().nullable()(); // дополнительный текст
// Audit
DateTimeColumn get createdAt => dateTime().withDefault(currentTimestamp)();
DateTimeColumn get updatedAt => dateTime().withDefault(currentTimestamp)();
BoolColumn get isDeleted => boolean().withDefault(const Constant(false))();
@override
Set<Column> get primaryKey => {id};
}
/// Таблица VoiceModels - голосовые файлы для карточек
class VoiceModels extends Table {
TextColumn get id => text().withDefault(const Constant('gen_random_uuid()'))();
TextColumn get cardId => text().references(GameCards, #id, onDelete: KeyAction.cascade)();
TextColumn get voiceUrl => text()(); // URL аудиофайла
TextColumn get language => text()(); // язык озвучки
DateTimeColumn get createdAt => dateTime().withDefault(currentTimestamp)();
@override
Set<Column> get primaryKey => {id};
}
// IntListConverter импортирован из converters.dart