// ignore_for_file: recursive_getters // Dart imports: import 'dart:convert'; import 'dart:ffi'; // Package imports: import 'package:drift/drift.dart'; import 'package:uuid/uuid.dart'; /// /// Примесь для добавления основного ключа в виде текста /// Для хранения uuid /// mixin _UuidPrimaryKey on Table { @override // ignore: always_specify_types Set? get primaryKey => {id}; /// Идентификатор записи TextColumn get id => text() .withLength(min: 36, max: 36) .clientDefault(() => const Uuid().v6())(); } /// /// Примесь для добавления полей даты /// mixin _Timestampable on Table { /// Дата создания DateTimeColumn get createdAt => dateTime() .named('created_at') .check(createdAt.isBiggerThan(Constant(DateTime(1950)))) .withDefault(currentDateAndTime)(); /// Дата последней модификации DateTimeColumn get updatedAt => dateTime() .named('updated_at') .check(updatedAt.isBiggerThan(Constant(DateTime(1950)))) .withDefault(currentDateAndTime)(); } /// /// Примесь для добавления полей даты удаления /// mixin _Deletable on Table { /// Дата удаления DateTimeColumn get deletedAt => dateTime() .named('deleted_at') .nullable() .check(deletedAt.isBiggerThan(Constant(DateTime(1950))))(); } /// -- Таблицы -- /// /// /// @DataClassName('Collection') class Collections extends Table with _UuidPrimaryKey, _Timestampable { TextColumn get title => text()(); TextColumn get desc => text()(); TextColumn get image => text().nullable()(); TextColumn get payload => text().nullable()(); IntColumn get likesCount => integer().withDefault(Constant(0))(); BoolColumn get isLiked => boolean().withDefault(Constant(false))(); BoolColumn get isPublic => boolean().withDefault(Constant(false))(); BoolColumn get includeInTraining => boolean().withDefault(Constant(false))(); } /// /// /// @DataClassName('Ticket') class Tickets extends Table with _UuidPrimaryKey, _Timestampable { TextColumn get question => text()(); TextColumn get questionImage => text().named('question_image').nullable()(); TextColumn get answer => text()(); TextColumn get answerImage => text().named('answer_image').nullable()(); TextColumn get collectionId => text().references(Collections, #id, onDelete: KeyAction.cascade)(); RealColumn get progress => real().withDefault(Constant(0))(); }