getMessagesFromServer static method

Future<List> getMessagesFromServer()

Implementation

static Future<List> getMessagesFromServer() async {
  if (kDebugMode) print('🌐 getMessagesFromServer: consultando mensajes al servidor...');
  final pref = await SharedPreferences.getInstance();
  List savedMessages = await ChatSocketRepository.getLocalMessages();

  try {
    var requestBody = {
      "query": [
        {
          "value": pref.getString(IdentifierType.integrationId.name),
          "key": "integrationId"
        },
        {
          "value": [
            {"recipientId": pref.getString(IdentifierType.userId.name)},
            {"senderId": pref.getString(IdentifierType.userId.name)},
          ],
          "key": "\$or",
        },
        if (savedMessages.isNotEmpty)
          {
            "value": {"\$gt": savedMessages[savedMessages.length - 1]["messageDate"]},
            "key": "createdAt",
          },
      ],
      "sort": "DESC",
      "pageSize": 20,
      "page": 1,
    };

    if (kDebugMode) print('🌐 getMessagesFromServer: payload → ${jsonEncode(requestBody)}');

    var response = await ApiManager.post(
        '${SocketUrls.baseBrokerEndpoint}${SocketUrls.obtainMessagesEndpoint}',
        body: jsonEncode(requestBody));

    if (kDebugMode) print('🌐 getMessagesFromServer: statusCode=${response.statusCode} | body=${response.body}');

    if (response.statusCode == 200) {
      var responseDecoded = jsonDecode(response.body)["data"] ?? [];
      List newMessages = responseDecoded.map((e) => Message.fromJson(e)).toList();
      if (kDebugMode) print('🌐 getMessagesFromServer: mensajes nuevos recibidos → ${newMessages.length}');
      return newMessages;
    } else {
      return [];
    }
  } catch (e) {
    if (kDebugMode) print('🌐 getMessagesFromServer: error → $e');
    return [];
  }
}