readful/lib/services/book_repository.dart
ddshi bef0de5909 feat: 完成文件导入功能和Book模型扩展
## 新增功能
- EPUB文件导入功能:支持文件选择、解析和存储
- 文件重复检测:避免重复导入同一文件
- 导入状态反馈:成功/失败消息提示

## 模型扩展
- Book模型新增多作者支持(authors字段)
- 新增章节数统计(chapterCount字段)
- 新增语言标识(language字段)
- 新增EPUB标识符(identifier字段)
- 优化TypeAdapter序列化支持

## 服务优化
- 新增EpubParserService:EPUB文件解析服务
- 改进DatabaseService:错误处理和数据迁移
- 优化BookRepository:调试日志和错误追踪

## 依赖更新
- 新增epubx ^4.0.0:EPUB电子书解析库
- 更新pubspec.lock:同步依赖版本

## UI改进
- AppHeader组件集成完整导入功能
- SafeArea适配:避免系统状态栏重叠
- 优化测试数据结构

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 20:34:16 +08:00

72 lines
1.9 KiB
Dart

import '../models/book.dart';
import 'database_service.dart';
class BookRepository {
final DatabaseService _databaseService = DatabaseService.instance;
/// 获取所有书籍
Future<List<Book>> getAllBooks() async {
// 实现获取所有书籍的逻辑
try {
print('🔍 开始获取所有书籍...');
final booksBox = _databaseService.getBooksBox();
final books = booksBox.values.toList();
print('📚 成功获取 ${books.length} 本书籍');
return books;
} catch (e) {
print('❌ 获取所有书籍失败: $e');
print('❌ 错误详情: ${StackTrace.current}');
rethrow;
}
}
/// 根据ID获取书籍
Future<Book?> getBookById(String id) async {
// 实现根据ID获取书籍的逻辑
try {
final booksBox = _databaseService.getBooksBox();
return booksBox.get(id);
} catch (e) {
print('❌ 根据ID获取书籍失败: $e');
rethrow;
}
}
/// 添加新书
Future<void> addBook(Book book) async {
// 实现添加书籍的逻辑
try {
final booksBox = _databaseService.getBooksBox();
await booksBox.put(book.id, book);
print('✅ 书籍添加成功: ${book.title}');
} catch (e) {
print('❌ 添加书籍失败: $e');
rethrow;
}
}
/// 更新书籍信息
Future<void> updateBook(Book book) async {
try {
final booksBox = _databaseService.getBooksBox();
await booksBox.put(book.id, book);
print('✅ 书籍更新成功: ${book.title}');
} catch (e) {
print('❌ 更新书籍失败: $e');
rethrow;
}
}
/// 删除书籍
Future<void> deleteBook(String id) async {
try {
final booksBox = _databaseService.getBooksBox();
await booksBox.delete(id);
print('✅ 书籍删除成功: $id');
} catch (e) {
print('❌ 删除书籍失败: $e');
rethrow;
}
}
}