业务更新User所需(企业成员、聊天室群组成员)

This commit is contained in:
Happi (哈比)
2026-03-09 19:15:51 +08:00
parent c278d1329e
commit 8f77a14818
22 changed files with 1030 additions and 238 deletions

View File

@@ -0,0 +1,39 @@
import 'package:im_app/domain/entities/user.dart';
import 'package:im_app/domain/repositories/user_repository.dart';
/// 删除前10个用户用例
///
/// ## 职责
/// - 取前10个用户
/// - 按 uid 逐条删除
///
/// ## 数据流
/// ```
/// ViewModel
/// → DeleteUsersUseCase.execute(users)
/// → 取前10条
/// → UserRepository.deleteUser(uid) × n
/// ← 已删除的用户列表
/// ```
class DeleteUsersUseCase {
final UserRepository _repo;
DeleteUsersUseCase({required UserRepository userRepository})
: _repo = userRepository;
/// 删除前10个用户
///
/// [users] 当前用户列表取前10条删除
/// 返回已删除的用户列表,供 ViewModel 从 UI 中移除
Future<List<User>> execute(List<User> users) async {
if (users.isEmpty) return [];
final targets = users.take(10).toList();
for (final user in targets) {
await _repo.deleteUser(user.uid);
}
return targets;
}
}

View File

@@ -44,7 +44,7 @@ class InsertUsersUseCase {
final end = (completed + _chunkSize).clamp(0, total);
final chunk = deduped.sublist(completed, end);
await _repo.saveUsers(chunk);
await _repo.insertOrReplaceUsers(chunk);
completed += chunk.length;
onProgress?.call(completed, total, chunk);

View File

@@ -0,0 +1,53 @@
import 'dart:math';
import 'package:im_app/domain/entities/user.dart';
import 'package:im_app/domain/repositories/user_repository.dart';
/// 更新前10个用户名称用例
///
/// ## 职责
/// - 取前10个用户
/// - 随机生成新昵称6位随机字母 + uid
/// - 批量更新到 DB
///
/// ## 数据流
/// ```
/// ViewModel
/// → UpdateUsersUseCase.execute(users)
/// → 取前10条
/// → 随机生成昵称
/// → UserRepository.updateUsersBatch(targets)
/// ← 更新后的用户列表
/// ```
class UpdateUsersUseCase {
final UserRepository _repo;
final _random = Random();
UpdateUsersUseCase({required UserRepository userRepository})
: _repo = userRepository;
String _randomWord() {
const letters = 'abcdefghijklmnopqrstuvwxyz';
return List.generate(
6,
(_) => letters[_random.nextInt(letters.length)],
).join();
}
/// 更新前10个用户的昵称
///
/// [users] 当前用户列表取前10条更新
/// 返回更新后的前10个用户供 ViewModel 直接反映到 UI
Future<List<User>> execute(List<User> users) async {
if (users.isEmpty) return [];
final targets = users
.take(10)
.map((u) => u.copyWith(nickname: '${_randomWord()}_${u.uid}'))
.toList();
await _repo.updateUsersBatch(targets);
return targets;
}
}