Files
Remever/lib/database/tables.dart

74 lines
2.1 KiB
Dart

// 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<Column>? get primaryKey => <TextColumn>{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>(DateTime(1950))))
.withDefault(currentDateAndTime)();
/// Дата последней модификации
DateTimeColumn get updatedAt =>
dateTime()
.named('updated_at')
.check(updatedAt.isBiggerThan(Constant<DateTime>(DateTime(1950))))
.withDefault(currentDateAndTime)();
}
///
/// Примесь для добавления полей даты удаления
///
mixin _Deletable on Table {
/// Дата удаления
DateTimeColumn get deletedAt =>
dateTime()
.named('deleted_at')
.nullable()
.check(deletedAt.isBiggerThan(Constant<DateTime>(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))();
}