业务更新User所需(企业成员、聊天室群组成员)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user