import 'package:result_monad/result_monad.dart'; import '../../models/connection.dart'; import '../../models/exec_error.dart'; import '../../models/timeline_grouping_list_data.dart'; import '../interfaces/circles_repo_intf.dart'; class MemoryCirclesRepo implements ICirclesRepo { final _circlesForConnection = >{}; final _connectionsForCircle = >{}; final _myCircles = {}; @override void clear() { _circlesForConnection.clear(); _connectionsForCircle.clear(); _myCircles.clear(); } @override Result, ExecError> getCirclesForUser( String id) { if (!_circlesForConnection.containsKey(id)) { return Result.error(ExecError( type: ErrorType.notFound, message: '$id not a known user ID', )); } return Result.ok(_circlesForConnection[id]!); } @override List getMyCircles() { return _myCircles.toList(); } @override Result, ExecError> getCircleMembers( TimelineGroupingListData circle) { if (_connectionsForCircle.containsKey(circle.id)) { return Result.ok(_connectionsForCircle[circle.id]!.toList()); } return buildErrorResult( type: ErrorType.notFound, message: 'Circle ${circle.id} not found', ); } @override void clearMyCircles() { _myCircles.clear(); } @override void addConnectionToCircle( TimelineGroupingListData circle, Connection connection) { _connectionsForCircle.putIfAbsent(circle.id, () => {}).add(connection); _circlesForConnection[connection.id]?.add(circle); } @override void removeConnectionFromCircle( TimelineGroupingListData circle, Connection connection) { _connectionsForCircle.putIfAbsent(circle.id, () => {}).remove(connection); _circlesForConnection[connection.id]?.remove(circle); } @override void addAllCircles(List circle) { _myCircles.addAll(circle); } @override bool updateConnectionCircleData( String id, List currentCircles) { _circlesForConnection[id] = currentCircles; return true; } @override void upsertCircle(TimelineGroupingListData circle) { _connectionsForCircle.putIfAbsent(circle.id, () => {}); _myCircles.remove(circle); _myCircles.add(circle); } @override void deleteCircle(TimelineGroupingListData circle) { for (final conCircles in _circlesForConnection.values) { conCircles.remove(circle); } _connectionsForCircle.remove(circle.id); _myCircles.remove(circle); } }