public bool ExecuteEmail(EbApi Api, RabbitMqProducer MessageProducer3)
        {
            bool status;

            try
            {
                EbEmailTemplate emailTemplate = Api.GetEbObject <EbEmailTemplate>(this.Reference, Api.Redis, Api.ObjectsDB);

                List <Param> InputParams = EbApiHelper.GetEmailParams(emailTemplate, Api.Redis, Api.ObjectsDB);

                Api.FillParams(InputParams);

                MessageProducer3.Publish(new EmailAttachmentRequest()
                {
                    ObjId      = Convert.ToInt32(this.Reference.Split(CharConstants.DASH)[3]),
                    Params     = InputParams,
                    UserId     = Api.UserObject.UserId,
                    UserAuthId = Api.UserObject.AuthId,
                    SolnId     = Api.SolutionId,
                    RefId      = this.Reference
                });

                status = true;

                string msg = $"The mail has been sent successfully to {emailTemplate.To} with subject {emailTemplate.Subject} and cc {emailTemplate.Cc}";

                Api.ApiResponse.Message.Description = msg;
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteEmail], " + ex.Message);
            }
            return(status);
        }
        public object ExecuteDataWriter(EbApi Api)
        {
            List <DbParameter> dbParams = new List <DbParameter>();

            try
            {
                EbDataWriter dataWriter = Api.GetEbObject <EbDataWriter>(Reference, Api.Redis, Api.ObjectsDB);

                List <Param> InputParams = dataWriter.GetParams(null);

                Api.FillParams(InputParams);

                foreach (Param param in InputParams)
                {
                    dbParams.Add(Api.DataDB.GetNewParameter(param.Name, (EbDbTypes)Convert.ToInt32(param.Type), param.ValueTo));
                }

                int status = Api.DataDB.DoNonQuery(dataWriter.Sql, dbParams.ToArray());

                if (status > 0)
                {
                    Api.ApiResponse.Message.Description = status + "row inserted";
                    return(true);
                }
                else
                {
                    Api.ApiResponse.Message.Description = status + "row inserted";
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteDataWriter], " + ex.Message);
            }
        }
        public object ExecuteDataReader(EbApi Api)
        {
            EbDataSet dataSet;

            try
            {
                EbDataReader dataReader = Api.GetEbObject <EbDataReader>(this.Reference, Api.Redis, Api.ObjectsDB);

                List <DbParameter> dbParameters = new List <DbParameter>();

                List <Param> InputParams = dataReader.GetParams((RedisClient)Api.Redis);

                Api.FillParams(InputParams);

                foreach (Param param in InputParams)
                {
                    dbParameters.Add(Api.DataDB.GetNewParameter(param.Name, (EbDbTypes)Convert.ToInt32(param.Type), param.ValueTo));
                }

                dataSet = Api.DataDB.DoQueries(dataReader.Sql, dbParameters.ToArray());
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteDataReader], " + ex.Message);
            }
            return(dataSet);
        }
        public object ExecuteConnectApi(EbApi Api, Service Service)
        {
            ApiResponse resp = null;

            try
            {
                EbApi apiObject = Api.GetEbObject <EbApi>(this.Reference, Api.Redis, Api.ObjectsDB);

                if (apiObject.Name.Equals(Api.Name))
                {
                    Api.ApiResponse.Message.ErrorCode   = ApiErrorCode.ResourceCircularRef;
                    Api.ApiResponse.Message.Description = "Calling Api from the same not allowed, terminated due to circular reference";

                    throw new ApiException("[ExecuteConnectApi], Circular refernce");
                }
                else
                {
                    List <Param> InputParam = EbApiHelper.GetReqJsonParameters(apiObject.Resources, Api.Redis, Api.ObjectsDB);


                    Api.FillParams(InputParam);

                    Dictionary <string, object> d = InputParam.Select(p => new { prop = p.Name, val = p.Value }).ToDictionary(x => x.prop, x => x.val as object);

                    string version = this.Version.Replace(".w", "");

                    resp = Service.Gateway.Send(new ApiMqRequest
                    {
                        Name       = this.RefName,
                        Version    = version,
                        Data       = d,
                        SolnId     = Api.SolutionId,
                        UserAuthId = Api.UserObject.AuthId,
                        UserId     = Api.UserObject.UserId
                    });

                    if (resp.Message.ErrorCode == ApiErrorCode.NotFound)
                    {
                        Api.ApiResponse.Message.ErrorCode   = ApiErrorCode.ResourceNotFound;
                        Api.ApiResponse.Message.Description = resp.Message.Description;

                        throw new ApiException("[ExecuteConnectApi], resource api not found");
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteConnectApi], " + ex.Message);
            }
            return(resp);
        }
        public object ExecuteSqlFunction(EbApi Api)
        {
            SqlFuncTestResponse response;

            try
            {
                EbSqlFunction sqlFunc = Api.GetEbObject <EbSqlFunction>(this.Reference, Api.Redis, Api.ObjectsDB);

                List <Param> InputParams = sqlFunc.GetParams(null);

                Api.FillParams(InputParams);

                response = EbObjectsHelper.SqlFuncTest(InputParams, sqlFunc.Name, Api.ObjectsDB);
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteSqlFunction], " + ex.Message);
            }
            return(response);
        }
        public static string ExecuteDecrypt(String ciphertext, string KeyName, string Refid, EbApi Api, EncryptionAlgorithm EncryptionAlgorithm)
        {
            string pri_key   = "";
            string plaintext = "";

            try
            {
                if (!String.IsNullOrEmpty(KeyName))
                {
                    pri_key = Api.Redis.Get <string>("privatekey_" + Api.SolutionId + "_" + KeyName);
                }

                if (String.IsNullOrEmpty(pri_key) && !String.IsNullOrEmpty(Refid))
                {
                    EbDataReader dataReader = Api.GetEbObject <EbDataReader>(Refid, Api.Redis, Api.ObjectsDB);

                    List <DbParameter> dbParameters = new List <DbParameter> {
                        Api.DataDB.GetNewParameter("keyname", EbDbTypes.String, KeyName)
                    };

                    EbDataSet dataSet = Api.DataDB.DoQueries(dataReader.Sql, dbParameters.ToArray());
                    pri_key = dataSet.Tables?[0].Rows[0]["key"].ToString();

                    Api.Redis.Set <string>("privatekey_" + Api.SolutionId + "_" + KeyName, pri_key);
                }

                if (EncryptionAlgorithm == EncryptionAlgorithm.RSA)
                {
                    plaintext = RSADecrypt(ciphertext, pri_key);
                }
            }
            catch (Exception ex)
            {
                throw new ApiException("[ExecuteEncrypt], " + ex.Message);
            }
            return(plaintext);
        }