♻️ Refactor post draft with drift db

This commit is contained in:
2025-06-24 23:39:09 +08:00
parent 2287995cb4
commit 568d70fffb
11 changed files with 2263 additions and 639 deletions

26
lib/database/draft.dart Normal file
View File

@ -0,0 +1,26 @@
import 'package:drift/drift.dart';
class ComposeDrafts extends Table {
TextColumn get id => text()();
TextColumn get title => text().withDefault(const Constant(''))();
TextColumn get description => text().withDefault(const Constant(''))();
TextColumn get content => text().withDefault(const Constant(''))();
TextColumn get attachmentIds => text().withDefault(const Constant('[]'))(); // JSON array as string
TextColumn get visibility => text().withDefault(const Constant('public'))();
DateTimeColumn get lastModified => dateTime()();
@override
Set<Column> get primaryKey => {id};
}
class ArticleDrafts extends Table {
TextColumn get id => text()();
TextColumn get title => text().withDefault(const Constant(''))();
TextColumn get description => text().withDefault(const Constant(''))();
TextColumn get content => text().withDefault(const Constant(''))();
TextColumn get visibility => text().withDefault(const Constant('public'))();
DateTimeColumn get lastModified => dateTime()();
@override
Set<Column> get primaryKey => {id};
}

View File

@ -1,16 +1,17 @@
import 'dart:convert';
import 'package:drift/drift.dart';
import 'package:island/database/message.dart';
import 'package:island/database/draft.dart';
part 'drift_db.g.dart';
// Define the database
@DriftDatabase(tables: [ChatMessages])
@DriftDatabase(tables: [ChatMessages, ComposeDrafts, ArticleDrafts])
class AppDatabase extends _$AppDatabase {
AppDatabase(super.e);
@override
int get schemaVersion => 2;
int get schemaVersion => 3;
@override
MigrationStrategy get migration => MigrationStrategy(
@ -22,6 +23,11 @@ class AppDatabase extends _$AppDatabase {
// Add isRead column with default value false
await m.addColumn(chatMessages, chatMessages.isRead);
}
if (from < 3) {
// Add draft tables
await m.createTable(composeDrafts);
await m.createTable(articleDrafts);
}
},
);
@ -91,4 +97,52 @@ class AppDatabase extends _$AppDatabase {
isRead: dbMessage.isRead,
);
}
// Methods for compose drafts
Future<List<ComposeDraft>> getAllComposeDrafts() {
return (select(composeDrafts)
..orderBy([(d) => OrderingTerm.desc(d.lastModified)]))
.get();
}
Future<ComposeDraft?> getComposeDraft(String id) {
return (select(composeDrafts)..where((d) => d.id.equals(id)))
.getSingleOrNull();
}
Future<int> saveComposeDraft(ComposeDraftsCompanion draft) {
return into(composeDrafts).insert(draft, mode: InsertMode.insertOrReplace);
}
Future<int> deleteComposeDraft(String id) {
return (delete(composeDrafts)..where((d) => d.id.equals(id))).go();
}
Future<int> clearAllComposeDrafts() {
return delete(composeDrafts).go();
}
// Methods for article drafts
Future<List<ArticleDraft>> getAllArticleDrafts() {
return (select(articleDrafts)
..orderBy([(d) => OrderingTerm.desc(d.lastModified)]))
.get();
}
Future<ArticleDraft?> getArticleDraft(String id) {
return (select(articleDrafts)..where((d) => d.id.equals(id)))
.getSingleOrNull();
}
Future<int> saveArticleDraft(ArticleDraftsCompanion draft) {
return into(articleDrafts).insert(draft, mode: InsertMode.insertOrReplace);
}
Future<int> deleteArticleDraft(String id) {
return (delete(articleDrafts)..where((d) => d.id.equals(id))).go();
}
Future<int> clearAllArticleDrafts() {
return delete(articleDrafts).go();
}
}

File diff suppressed because it is too large Load Diff