mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 18:43:32 +00:00
85 lines
2.1 KiB
Dart
85 lines
2.1 KiB
Dart
import 'package:result_monad/result_monad.dart';
|
|
|
|
import '../../models/connection.dart';
|
|
import '../../models/exec_error.dart';
|
|
import '../../models/group_data.dart';
|
|
import '../interfaces/groups_repo.intf.dart';
|
|
|
|
class MemoryGroupsRepo implements IGroupsRepo {
|
|
final _groupsForConnection = <String, List<GroupData>>{};
|
|
final _connectionsForGroup = <String, Set<Connection>>{};
|
|
final _myGroups = <GroupData>{};
|
|
|
|
@override
|
|
void clear() {
|
|
_groupsForConnection.clear();
|
|
_connectionsForGroup.clear();
|
|
_myGroups.clear();
|
|
}
|
|
|
|
@override
|
|
Result<List<GroupData>, ExecError> getGroupsForUser(String id) {
|
|
if (!_groupsForConnection.containsKey(id)) {
|
|
return Result.error(ExecError(
|
|
type: ErrorType.notFound,
|
|
message: '$id not a known user ID',
|
|
));
|
|
}
|
|
|
|
return Result.ok(_groupsForConnection[id]!);
|
|
}
|
|
|
|
@override
|
|
List<GroupData> getMyGroups() {
|
|
return _myGroups.toList();
|
|
}
|
|
|
|
@override
|
|
Result<List<Connection>, ExecError> getGroupMembers(GroupData group) {
|
|
if (_connectionsForGroup.containsKey(group.id)) {
|
|
return Result.ok(_connectionsForGroup[group.id]!.toList());
|
|
}
|
|
|
|
return buildErrorResult(
|
|
type: ErrorType.notFound,
|
|
message: 'Group ${group.id} not found',
|
|
);
|
|
}
|
|
|
|
@override
|
|
void clearMyGroups() {
|
|
_myGroups.clear();
|
|
}
|
|
|
|
@override
|
|
void addConnectionToGroup(GroupData group, Connection connection) {
|
|
_connectionsForGroup.putIfAbsent(group.id, () => {}).add(connection);
|
|
}
|
|
|
|
@override
|
|
void addAllGroups(List<GroupData> groups) {
|
|
_myGroups.addAll(groups);
|
|
}
|
|
|
|
@override
|
|
bool updateConnectionGroupData(String id, List<GroupData> currentGroups) {
|
|
_groupsForConnection[id] = currentGroups;
|
|
return true;
|
|
}
|
|
|
|
@override
|
|
void upsertGroup(GroupData group) {
|
|
_connectionsForGroup.putIfAbsent(group.id, () => {});
|
|
_myGroups.remove(group);
|
|
_myGroups.add(group);
|
|
}
|
|
|
|
@override
|
|
void deleteGroup(GroupData group) {
|
|
for (final conGroups in _groupsForConnection.values) {
|
|
conGroups.remove(group);
|
|
}
|
|
_connectionsForGroup.remove(group.id);
|
|
_myGroups.remove(group);
|
|
}
|
|
}
|