fetchProductPermissions method

Future<Map<String, dynamic>> fetchProductPermissions({
  1. required String tenantId,
  2. required String tenantProductId,
})

Fetch permissions from backend

Implementation

Future<Map<String, dynamic>> fetchProductPermissions({
  required String tenantId,
  required String tenantProductId,
}) async {
  const query = r'''
    query GetProductPermissions($tenantId: ID!, $tenantProductId: ID!) {
      productPermissions(tenantId: $tenantId, tenantProductId: $tenantProductId) {
        success
        message
        productPermissions {
          id
          tenantRole {
            id
            roleName
          }
          feature {
            id
            featureName
            icon {
              id
              iconName
              iconURL
            }
          }
          tenantProductId
          tenantId
          createdAt
          updatedAt
        }
        total
      }
    }
  ''';

  try {
    final res = await _api.graphql(query, {
      'tenantId': tenantId,
      'tenantProductId': tenantProductId,
    });

    final data = res['productPermissions'];

    if (data == null || data['success'] != true) {
      print('❌ Permission fetch failed: ${data?['message']}');
      return {'success': false, 'message': data?['message'] ?? 'Unknown error'};
    }

    // ✅ Cache permissions locally (clears old ones first)
    await _cachePermissions(data['productPermissions'] ?? []);

    return {
      'success': true,
      'permissions': data['productPermissions'] ?? [],
      'total': data['total'] ?? 0,
    };
  } catch (e) {
    print('❌ Error fetching permissions: $e');
    return {'success': false, 'message': e.toString()};
  }
}