79 lines
2.2 KiB
Dart
79 lines
2.2 KiB
Dart
import 'package:uuid/uuid.dart';
|
|
import '../../models/group_model.dart';
|
|
import '../../models/group_member_model.dart';
|
|
import '../interfaces/group_service.dart';
|
|
import '../api/api_client.dart';
|
|
import 'mock_data.dart';
|
|
|
|
class MockGroupService implements GroupService {
|
|
final List<GroupModel> _groups = List.from(MockData.groups);
|
|
final Map<String, List<GroupMemberModel>> _members = {
|
|
for (final e in MockData.memberships.entries)
|
|
e.key: List.from(e.value),
|
|
};
|
|
final _uuid = const Uuid();
|
|
|
|
@override
|
|
Future<List<GroupModel>> getGroups() async {
|
|
await Future.delayed(const Duration(milliseconds: 400));
|
|
return List.unmodifiable(_groups);
|
|
}
|
|
|
|
@override
|
|
Future<GroupModel> createGroup(String name, String? description) async {
|
|
await Future.delayed(const Duration(milliseconds: 500));
|
|
|
|
final group = GroupModel(
|
|
id: 'g-${_uuid.v4().substring(0, 8)}',
|
|
name: name,
|
|
description: description,
|
|
isActive: true,
|
|
type: GroupType.group,
|
|
createdAt: DateTime.now(),
|
|
memberCount: 0,
|
|
);
|
|
_groups.add(group);
|
|
_members[group.id] = [];
|
|
return group;
|
|
}
|
|
|
|
@override
|
|
Future<GroupMemberModel> addMember(
|
|
String groupId,
|
|
String userId,
|
|
GroupRole role,
|
|
) async {
|
|
await Future.delayed(const Duration(milliseconds: 400));
|
|
|
|
final groupIdx = _groups.indexWhere((g) => g.id == groupId);
|
|
if (groupIdx == -1) {
|
|
throw const ApiException(statusCode: 404, message: 'گروه یافت نشد');
|
|
}
|
|
|
|
final existingMembers = _members.putIfAbsent(groupId, () => []);
|
|
if (existingMembers.any((m) => m.userId == userId)) {
|
|
throw const ApiException(statusCode: 400, message: 'کاربر قبلاً عضو این گروه است');
|
|
}
|
|
|
|
final member = GroupMemberModel(
|
|
userId: userId,
|
|
groupId: groupId,
|
|
role: role,
|
|
joinedAt: DateTime.now(),
|
|
);
|
|
existingMembers.add(member);
|
|
|
|
_groups[groupIdx] = _groups[groupIdx].copyWith(
|
|
memberCount: existingMembers.length,
|
|
);
|
|
|
|
return member;
|
|
}
|
|
|
|
@override
|
|
Future<List<GroupMemberModel>> getGroupMembers(String groupId) async {
|
|
await Future.delayed(const Duration(milliseconds: 300));
|
|
return List.unmodifiable(_members[groupId] ?? []);
|
|
}
|
|
}
|