更新测试案例

This commit is contained in:
Happi (哈比)
2026-03-09 13:03:44 +08:00
parent 56112e1fe3
commit 7b78da86e7
11 changed files with 721 additions and 278 deletions

View File

@@ -0,0 +1,78 @@
import 'package:im_app/data/local/drift/app_database.dart';
import 'package:im_app/domain/entities/user.dart';
/// 用户仓储接口
///
/// ## 职责
/// - StorageSdkApi ↔ Domain User 映射
/// - CRUD 操作(通过 StorageSdkApi不直接接触 DB
/// - 实时监听(单个 / 多个 / 全部)
///
/// ## 数据流
/// ```
/// 写入Domain User → _toCompanion() → StorageSdkApi → DB
/// 读取DB row (DriftUser) → _toEntity() → Domain User
/// 监听DB 变化 → stream → Domain User → UI
/// ```
abstract class UserRepository {
// ── 监听 ─────────────────────────────────────────────────────────────────
/// 监听单个用户DB 变化自动反映
Stream<User?> watchUser(int uid);
/// 监听指定 uid 列表,任一变化自动反映
Stream<List<User>> watchUsers(List<int> uids);
/// 监听所有用户,任一变化自动反映
Stream<List<User>> watchAllUsers();
// ── 读取 ─────────────────────────────────────────────────────────────────
/// 从 DB 读取单个用户,不存在返回 null
Future<User?> getUser(int uid);
/// 从 DB 读取所有用户
Future<List<User>> getAllUsers();
/// 分页读取用户
///
/// [offset] 起始偏移量
/// [limit] 每页数量
///
/// 示例:
/// ```dart
/// // 第一页
/// final page1 = await repo.getUsers(offset: 0, limit: 50);
/// // 第二页
/// final page2 = await repo.getUsers(offset: 50, limit: 50);
/// ```
Future<List<User>> getUsers({required int offset, required int limit});
/// 统计 DB 中用户总数
Future<int> countUsers();
// ── 写入 ─────────────────────────────────────────────────────────────────
/// 保存完整用户insert or replace
/// 调用方决定是否持久化
Future<void> saveUser(User user);
/// 批量保存用户insert or replace
Future<void> saveUsers(List<User> users);
/// 仅更新指定字段,不影响其他列
///
/// 示例:
/// ```dart
/// await repo.updateFields(uid, UsersCompanion(
/// nickname: Value('New Name'),
/// lastOnline: Value(DateTime.now().millisecondsSinceEpoch),
/// ));
/// ```
Future<void> updateFields(int uid, UsersCompanion companion);
// ── 删除 ─────────────────────────────────────────────────────────────────
/// 删除指定用户
Future<void> deleteUser(int uid);
}