import 'package:flutter/foundation.dart'; import 'package:sqflite/sqflite.dart'; import '../../models/data_models.dart'; import '../database_helper.dart'; /// 书籍摘抄数据访问对象 class BookExcerptDao { final DatabaseHelper _dbHelper = DatabaseHelper.instance; Future _wrap(String op, Future Function() fn) async { try { return await fn(); } catch (e) { debugPrint('[BookExcerptDao] $op error: $e'); rethrow; } } /// 获取书籍的所有摘抄 Future> getExcerptsByBookId(String bookId) => _wrap('getExcerptsByBookId', () async { final db = await _dbHelper.database; final maps = await db.query( 'book_excerpts', where: 'book_id = ? AND is_deleted = 0', whereArgs: [bookId], orderBy: 'created_at DESC', ); return maps.map((map) => BookExcerpt.fromJson(map)).toList(); }); /// 根据ID获取摘抄 Future getExcerptById(String id) => _wrap('getExcerptById', () async { final db = await _dbHelper.database; final maps = await db.query( 'book_excerpts', where: 'id = ? AND is_deleted = 0', whereArgs: [id], ); if (maps.isNotEmpty) return BookExcerpt.fromJson(maps.first); return null; }); /// 插入摘抄 Future insertExcerpt(BookExcerpt excerpt) => _wrap('insertExcerpt', () async { final db = await _dbHelper.database; await db.insert( 'book_excerpts', excerpt.toJson(), conflictAlgorithm: ConflictAlgorithm.replace, ); return excerpt.id; }); /// 更新摘抄 Future updateExcerpt(BookExcerpt excerpt) => _wrap('updateExcerpt', () async { final db = await _dbHelper.database; await db.update( 'book_excerpts', excerpt.toJson(), where: 'id = ?', whereArgs: [excerpt.id], ); }); /// 删除摘抄(软删除) Future deleteExcerpt(String id) => _wrap('deleteExcerpt', () async { final db = await _dbHelper.database; await db.update( 'book_excerpts', {'is_deleted': 1, 'updated_at': DateTime.now().toUtc().toIso8601String()}, where: 'id = ?', whereArgs: [id], ); }); /// 彻底删除摘抄 Future permanentDeleteExcerpt(String id) => _wrap('permanentDeleteExcerpt', () async { final db = await _dbHelper.database; await db.delete( 'book_excerpts', where: 'id = ?', whereArgs: [id], ); }); /// 获取摘抄数量 Future getExcerptCount(String bookId) => _wrap('getExcerptCount', () async { final db = await _dbHelper.database; final result = await db.rawQuery( 'SELECT COUNT(*) as count FROM book_excerpts WHERE book_id = ? AND is_deleted = 0', [bookId], ); return result.first['count'] as int? ?? 0; }); /// 获取所有已删除的摘抄 Future> getDeletedExcerpts() => _wrap('getDeletedExcerpts', () async { final db = await _dbHelper.database; final maps = await db.query( 'book_excerpts', where: 'is_deleted = 1', orderBy: 'updated_at DESC', ); return maps.map((map) => BookExcerpt.fromJson(map)).toList(); }); /// 恢复已删除的摘抄 Future restoreExcerpt(String id) => _wrap('restoreExcerpt', () async { final db = await _dbHelper.database; await db.update( 'book_excerpts', {'is_deleted': 0}, where: 'id = ?', whereArgs: [id], ); }); }