execute static method

Future<Map<String, List<Map<String, Object?>?>?>> execute(
  1. String query, {
  2. Map<String, Object?>? params,
  3. bool formatJson = false,
  4. bool isCache = false,
})

Implementation

static Future<Map<String, List<Map<String, Object?>?>?>> execute(String query,
    {Map<String, Object?>? params,
    bool formatJson = false,
    bool isCache = false}) async {
  if (iSQLService != null) {
    return await iSQLService?.execute(query,
            params: params, formatJson: formatJson) ??
        {};
  }

  String jparamsString = jsonEncode(
      setupDefaultParameter(query, params, formatJson: formatJson));
  var queryParameters = {
    'query': query,
    'jParam': jparamsString,
  };
  if (kDebugMode) {
    print('Execute query: $query, jParam $jparamsString');
  }
  Map<
      String, // table namme
      List< // list row -> data tabl
          Map<String, Object?>? //data row
          >?> retVal = {};
  try {
    var response =
        await http.post(Methods.getURI('/data/exec'), body: queryParameters);
    if (response.statusCode == 200) {
      if (response.body == '') {
        String log =
            '$query queryParameters $queryParameters response.body is empty';
        LogController.setLog(
          log: log,
          titleLog: '$SQLService.execute',
        );
        if (kDebugMode) {
          print('[EMPTY RESPONSE]: $log');
        }
        return retVal;
      }
      var body = response.body;

      //--> return data set
      Map<String, dynamic> jsonData = json.decode(body);

      jsonData.forEach((key, value) {
        List<dynamic> table = value;
        List<Map<String, Object>> rsTable = [];
        for (int i = 0; i < table.length; i++) {
          rsTable.add(Map<String, Object>.from(table[i]));
        }
        retVal[key] = rsTable;
      });
      if (kDebugMode) {
        print(
          '$SQLService.execute query: $query, result length: ${retVal.length.toString()}',
        );
      }
    } else {
      String log =
          '$SQLService.execute with $query response status code = ${response.statusCode.toString()}';
      LogController.setLog(
        log: log,
        titleLog: '$SQLService.execute',
      );
      if (kDebugMode) {
        print(log);
      }
    }
  } catch (e) {
    String log = '$SQLService.execute $query with exception: $e';
    LogController.setLog(
      log: log,
      titleLog: '$SQLService.execute',
    );
    if (kDebugMode) {
      print(log);
    }
  }

  if (retVal.isNotEmpty && retVal.containsKey('Exception')) {
    var dataException = Methods.getList(retVal, 'Exception');
    if (dataException.isNotEmpty && dataException[0].containsKey('Message')) {
      var exception = Methods.getString(dataException[0], 'Message');
      if (exception != '') {
        if (kDebugMode) {
          print(
              '==================>[Exception]<==================\n==================> Query:$query\n==================> Parameter:$params\n==================> Message:$exception');
        }
      }
    }
  }

  // save cache data
  if (isCache && retVal.isNotEmpty) {
    if (kDebugMode) {
      print('Save cache data');
    }
    CacheData.cache(query, retVal, jParam: params);
  }

  // Get data cache when there is no internet
  if (Get.isRegistered<AuthController>() && isCache) {
    AuthController authController = Get.find();
    if (!authController.isOnline) {
      if (kDebugMode) {
        print('Get data cache');
      }
      return await CacheData.getData(query, jParam: params);
    }
  }
  return retVal;
}