insertRecord method

Future<Map<String, dynamic>> insertRecord({
  1. Map<String, dynamic> insertParams = const {},
})

Implementation

Future<Map<String,dynamic>> insertRecord({Map<String,dynamic> insertParams=const {}}) async{
    Map<String,dynamic> result={"status":"failure","message":"nothing executed","operation":"INSERT"};
    try{
        String primaryKeyField="id";
        result[attributePrimaryKey]="id";
        formatValues();
        String validateStatus=validateValues();
        if(validateStatus=="success"){
            Map<String,dynamic> values=new Map();
            Map<String,dynamic> userDefinedFunctions=new Map();
            String uniqueCondition="1=1";
            List<String> uniqueFields=[];
            fields.forEach((name,field){
                String type=field[fieldType];
                List attributes=getFieldAttributes(name);
                if(attributes.contains(attributeUniqueKey)||attributes.contains(attributeCheckUnique)){
                    if(attributes.contains(attributeUniqueKey)){
                        uniqueFields.add(name);
                    }
                    uniqueCondition+=" AND $name="+getFieldSQLValue(name);
                }
                userDefinedFunctions=updateUserDefinedFunction(userDefinedFunctions,name);
                if(!attributes.contains(attributeAutoIncrement)&&!attributes.contains(attributeTimestamp)&&type!=typeUserDefinedFunction){
                    values[name]=getFieldValue(name);
                }
            });
            bool uniqueResult=true;
            if(uniqueCondition!="1=1"){
                Map<String,dynamic> uniqueResponse=await fetchRecords(condition: uniqueCondition);
                if(uniqueResponse.getString("status").equalsIgnoreCase("success")){
                    List uniqueRecords=uniqueResponse["records"];
                    if(uniqueRecords.isNotEmpty){
                        uniqueResult=false;
                        result["message"]=uniqueFields.join(",");
                    }
                }
                else{
                    uniqueResult=false;
                    result["unique-response"]=uniqueResponse;
                    result["message"]=uniqueResponse["message"];
                }
            }
            if(uniqueResult){
                Map<String,dynamic> response=await dbHandler!.insertRecords(table: table,values: values,userDefinedFunctions:userDefinedFunctions);
                if(response.getString("status").equalsIgnoreCase("success")){
                    result["status"]="success";
                    result["message"]=" record inserted successfully";
                    if(primaryKeyField!=""){
                        result[resultPrimaryKeyValue]=response["record_id"].toString();
                        Map<String,dynamic> fetchResponse=await fetchRecords(condition: "$primaryKeyField=${response["record_id"]}");
                        result["fetchResponse"]=fetchResponse;
                        if(fetchResponse.getString("status").equalsIgnoreCase("success")){
                            List records=fetchResponse["records"];
                            if(records.isNotEmpty){
                                result["record"]=records.first;
                            }
                            else{
                                result["message"]="fetch count 0";
                            }
                        }
                        else{
                            result["fetch-response"]=fetchResponse;
                            result["message"]=fetchResponse["message"];
                        }
                    }
                }
                else{
                    result["message"]=response["message"];
                }
            }
        }
        else{
            result["message"]=validateStatus;
        }
    }
    catch(ex,stack){
        result["message"]=Simplify.getExceptionMessage(ex,stack: stack);
    }
    return result;
}