Neda/admin_panel/lib/services/api/group_api_service.dart
2026-03-07 19:18:52 +03:30

62 lines
1.9 KiB
Dart

import '../../models/group_model.dart';
import '../../models/group_member_model.dart';
import '../interfaces/group_service.dart';
import 'api_client.dart';
/// Real API implementation.
/// NOTE: The backend has no list-groups or list-members endpoint.
/// Groups and members are tracked in memory per session.
class GroupApiService implements GroupService {
final ApiClient _client;
final List<GroupModel> _sessionGroups = [];
final Map<String, List<GroupMemberModel>> _sessionMembers = {};
GroupApiService(this._client);
@override
Future<List<GroupModel>> getGroups() async {
return List.unmodifiable(_sessionGroups);
}
@override
Future<GroupModel> createGroup(String name, String? description) async {
final body = <String, dynamic>{'name': name};
if (description != null && description.isNotEmpty) {
body['description'] = description;
}
final data = await _client.post('/groups/', body);
final group = GroupModel.fromJson(data as Map<String, dynamic>);
_sessionGroups.add(group);
_sessionMembers[group.id] = [];
return group;
}
@override
Future<GroupMemberModel> addMember(
String groupId,
String userId,
GroupRole role,
) async {
final data = await _client.post('/groups/$groupId/members', {
'user_id': userId,
'role': role.apiValue,
});
final member = GroupMemberModel.fromJson(data as Map<String, dynamic>);
_sessionMembers.putIfAbsent(groupId, () => []).add(member);
// Update member count on the cached group
final idx = _sessionGroups.indexWhere((g) => g.id == groupId);
if (idx != -1) {
_sessionGroups[idx] = _sessionGroups[idx].copyWith(
memberCount: (_sessionMembers[groupId]?.length ?? 1),
);
}
return member;
}
@override
Future<List<GroupMemberModel>> getGroupMembers(String groupId) async {
return List.unmodifiable(_sessionMembers[groupId] ?? []);
}
}