import 'package:sqflite/sqflite.dart'; import 'package:worldhopper/database/database.dart'; import 'package:worldhopper/database/tables/series_cover_page_table.dart'; /// Repository for managing per-series "first page is cover" overrides class SeriesCoverPageRepository { final DatabaseHelper _dbHelper; SeriesCoverPageRepository({DatabaseHelper? dbHelper}) : _dbHelper = dbHelper ?? DatabaseHelper.instance; /// Get database instance Future get _db async => await _dbHelper.database; /// Get the cover page override for a series, or null if none set. /// Updates last_accessed_at when a row is found. Future getCoverPage(String seriesFeedUrl) async { final db = await _db; final List> maps = await db.query( SeriesCoverPageTable.tableName, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); if (maps.isEmpty) return null; // Update last_accessed_at await db.update( SeriesCoverPageTable.tableName, {'last_accessed_at': DateTime.now().toUtc().toIso8601String()}, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); return (maps.first['first_page_is_cover'] as int) == 1; } /// Set (insert or update) the cover page override for a series. /// Preserves created_at on updates. Future setCoverPage(String seriesFeedUrl, bool value) async { final db = await _db; final now = DateTime.now().toUtc().toIso8601String(); await db.rawInsert(''' INSERT INTO ${SeriesCoverPageTable.tableName} (series_feed_url, first_page_is_cover, created_at, last_accessed_at) VALUES (?, ?, ?, ?) ON CONFLICT(series_feed_url) DO UPDATE SET first_page_is_cover = excluded.first_page_is_cover, last_accessed_at = excluded.last_accessed_at ''', [seriesFeedUrl, value ? 1 : 0, now, now]); } /// Delete the cover page override for a series Future deleteCoverPage(String seriesFeedUrl) async { final db = await _db; await db.delete( SeriesCoverPageTable.tableName, where: 'series_feed_url = ?', whereArgs: [seriesFeedUrl], ); } }