更新测试案例
This commit is contained in:
78
apps/im_app/lib/domain/repositories/user_repository.dart
Normal file
78
apps/im_app/lib/domain/repositories/user_repository.dart
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user