insertRecord method

Future<Map<String, dynamic>> insertRecord(
  1. Map<String, dynamic> data
)

Implementation

Future<Map<String,dynamic>> insertRecord(Map<String, dynamic> data) async {
  Map<String,dynamic> result = {"status": "failure","message": "nothing executed","operation": "INSERT"};
  Map<String,dynamic> callbackData={"table":table,"data":data};
  try {
    String primaryKeyField = "";
    bool autoGeneratePrimaryKeyValue=false;
    dynamic primaryKeyValue;
    formatValues();
    String validateStatus = validateValues();
    if (validateStatus == "success") {
      Map<String,dynamic >values = Map();
      Map<String,dynamic >userDefinedFunctions = Map();
      fields.forEach((field, value) {
        if (fields[field][fieldAttributes].contains(attributePrimaryKey)) {
          primaryKeyField = fields[field][fieldName];
          result[attributePrimaryKey] = primaryKeyField;
          if (!fields[field][fieldAttributes].contains(
              attributeAutoIncrement)) {
            if (fields[field][fieldType] == typeString) {
              autoGeneratePrimaryKeyValue = true;
            }
          }
        }
        if(data.containsKey(field)){
          values[field] = data[field].toString();
        }
      });
      if(values.isNotEmpty){
        if(autoGeneratePrimaryKeyValue){
          primaryKeyValue=await generateUniqueRecordId();
          values[primaryKeyField]=primaryKeyValue;
        }
        callbackData["values"]=values;
        Simplify.debug(table);
        Simplify.debug(values);
        Map response = await dbHandler.insertRecords(
            table: table,
            values: values,
            userDefinedFunctions: userDefinedFunctions);
        if (response.getString("status").equalsIgnoreCase("success")) {
          result["status"] = "success";
          result["message"] = " record inserted successfully";
          callbackData[resultPrimaryKeyField]=primaryKeyField;
          callbackData[resultPrimaryKeyValue]=primaryKeyValue;
          if (primaryKeyField != "") {
            if(!Simplify.validPrimaryKeyValue(primaryKeyValue)){
              primaryKeyValue = response["record_id"];
            }
            result[resultPrimaryKeyValue] = primaryKeyValue;
            Map fetchResponse = await fetchRecords(condition: "$primaryKeyField=$primaryKeyValue");
            result["fetchResponse"] = fetchResponse;
            if (fetchResponse.getString("status").equalsIgnoreCase("success")) {
              List records = fetchResponse["records"];
              if (records.isNotEmpty) {
                result["record"] = records.first;
                callbackData["record"]=result["record"];
              } else {
                result["message"] = "fetch count 0";
              }
            } else {
              result["fetch-response"] = fetchResponse;
              result["message"] = fetchResponse["message"];
            }
          }
          callbackData["result"]=result;
        } else {
          result["message"] = response["message"];
        }
      }
      else{
        result["fields"]=fields;
        result["message"]="no valid field to insert";
      }
    }
  } catch (ex, stack) {
    result["message"] = Simplify.getExceptionMessage(ex, stack: stack);
    result["exception"] = ex;
  }
  callbackData["result"]=result;
  await Simplify.executeFunctions("insert",_functions,callbackData);
  return result;
}