diff --git a/lib/src/service/database.dart b/lib/src/service/database.dart index 3e37925..d89a651 100644 --- a/lib/src/service/database.dart +++ b/lib/src/service/database.dart @@ -8,6 +8,7 @@ import 'package:anitrack/src/service/migrations/0000_score.dart'; import 'package:anitrack/src/service/migrations/0001_anime_watcher.dart'; import 'package:anitrack/src/service/migrations/0002_anilist.dart'; import 'package:anitrack/src/service/migrations/0003_other_titles.dart'; +import 'package:anitrack/src/service/migrations/0004_fix_constraints.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; @@ -73,8 +74,8 @@ Future _createDatabase(Database db, int version) async { name TEXT NOT NULL, anime TEXT NOT NULL, CONSTRAINT pk_watcher_join_table PRIMARY KEY(name, anime), - CONSTRAINT fk_watcher FOREIGN KEY (name) REFERENCES $animeWatcherTable(name), - CONSTRAINT fk_anime FOREIGN KEY (anime) REFERENCES $animeTable(id) + CONSTRAINT fk_watcher FOREIGN KEY (name) REFERENCES $animeWatcherTable(name) ON DELETE CASCADE, + CONSTRAINT fk_anime FOREIGN KEY (anime) REFERENCES $animeTable(id) ON DELETE CASCADE )''', ); } @@ -106,7 +107,7 @@ class DatabaseService { print('Opening database at $databasePath'); _db = await openDatabase( databasePath, - version: 6, + version: 7, onConfigure: (db) async { // In order to do schema changes during database upgrades, we disable foreign // keys in the onConfigure phase, but re-enable them here. @@ -134,6 +135,9 @@ class DatabaseService { if (oldVersion < 6) { await migrateFromV5ToV6(db); } + if (oldVersion < 7) { + await migrateFromV6ToV7(db); + } }, ); } diff --git a/lib/src/service/migrations/0004_fix_constraints.dart b/lib/src/service/migrations/0004_fix_constraints.dart new file mode 100644 index 0000000..e4649a3 --- /dev/null +++ b/lib/src/service/migrations/0004_fix_constraints.dart @@ -0,0 +1,22 @@ +import 'package:anitrack/src/service/database.dart'; +import 'package:sqflite/sqflite.dart'; + +Future migrateFromV6ToV7(Database db) async { + await db.execute( + ''' + CREATE TABLE ${animeWatcherJoinTable}_2 ( + name TEXT NOT NULL, + anime TEXT NOT NULL, + CONSTRAINT pk_watcher_join_table PRIMARY KEY(name, anime), + CONSTRAINT fk_watcher FOREIGN KEY (name) REFERENCES $animeWatcherTable(name) ON DELETE CASCADE, + CONSTRAINT fk_anime FOREIGN KEY (anime) REFERENCES $animeTable(id) ON DELETE CASCADE + );''', + ); + await db.execute( + 'INSERT INTO ${animeWatcherJoinTable}_2 SELECT * from $animeWatcherJoinTable;', + ); + await db.execute('DROP TABLE $animeWatcherJoinTable'); + await db.execute( + 'ALTER TABLE ${animeWatcherJoinTable}_2 RENAME TO $animeWatcherJoinTable', + ); +} diff --git a/lib/src/ui/pages/main_page.dart b/lib/src/ui/pages/main_page.dart deleted file mode 100644 index 0446a85..0000000 --- a/lib/src/ui/pages/main_page.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:anitrack/src/ui/helpers.dart'; -import 'package:flutter/material.dart'; - -/// A page that renders the anime list and the calendar as nested views. -class MainPage extends StatelessWidget { - const MainPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - drawer: getDrawer(context), - ); - } -}