mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 09:08:40 +00:00
82 lines
2.5 KiB
Dart
82 lines
2.5 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:twonly/src/database/tables/contacts.table.dart';
|
|
import 'package:twonly/src/database/tables/groups.table.dart';
|
|
import 'package:twonly/src/database/tables/mediafiles.table.dart';
|
|
|
|
enum MessageType { media, text }
|
|
|
|
@DataClassName('Message')
|
|
class Messages extends Table {
|
|
TextColumn get groupId =>
|
|
text().references(Groups, #groupId, onDelete: KeyAction.cascade)();
|
|
TextColumn get messageId => text()();
|
|
|
|
// in case senderId is null, it was send by user itself
|
|
IntColumn get senderId =>
|
|
integer().nullable().references(Contacts, #userId)();
|
|
|
|
TextColumn get type => textEnum<MessageType>()();
|
|
|
|
TextColumn get content => text().nullable()();
|
|
TextColumn get mediaId => text()
|
|
.nullable()
|
|
.references(MediaFiles, #mediaId, onDelete: KeyAction.cascade)();
|
|
|
|
BoolColumn get mediaStored => boolean().withDefault(const Constant(false))();
|
|
|
|
BlobColumn get downloadToken => blob().nullable()();
|
|
|
|
TextColumn get quotesMessageId =>
|
|
text().nullable().references(Messages, #messageId)();
|
|
|
|
BoolColumn get isDeletedFromSender =>
|
|
boolean().withDefault(const Constant(false))();
|
|
|
|
DateTimeColumn get openedAt => dateTime().nullable()();
|
|
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
|
|
DateTimeColumn get modifiedAt => dateTime().nullable()();
|
|
|
|
@override
|
|
Set<Column> get primaryKey => {messageId};
|
|
}
|
|
|
|
enum MessageActionType {
|
|
openedAt,
|
|
ackByUserAt,
|
|
ackByServerAt,
|
|
}
|
|
|
|
@DataClassName('MessageAction')
|
|
class MessageActions extends Table {
|
|
TextColumn get messageId =>
|
|
text().references(Messages, #messageId, onDelete: KeyAction.cascade)();
|
|
|
|
IntColumn get contactId =>
|
|
integer().references(Contacts, #contactId, onDelete: KeyAction.cascade)();
|
|
|
|
TextColumn get type => textEnum<MessageActionType>()();
|
|
|
|
DateTimeColumn get actionAt => dateTime().withDefault(currentDateAndTime)();
|
|
|
|
@override
|
|
Set<Column> get primaryKey => {messageId, contactId, type};
|
|
}
|
|
|
|
@DataClassName('MessageHistory')
|
|
class MessageHistories extends Table {
|
|
IntColumn get id => integer().autoIncrement()();
|
|
|
|
TextColumn get messageId =>
|
|
text().references(Messages, #messageId, onDelete: KeyAction.cascade)();
|
|
|
|
IntColumn get contactId => integer()
|
|
.nullable()
|
|
.references(Contacts, #contactId, onDelete: KeyAction.cascade)();
|
|
|
|
TextColumn get content => text().nullable()();
|
|
|
|
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
|
|
|
|
@override
|
|
Set<Column> get primaryKey => {id};
|
|
}
|