/// <summary>
        /// Method: Update
        /// Description: It is used to update DeDupSettings by ccid in DeDupSettings table
        /// </summary>
        /// <param name="item"></param>
        public void Update(DeDupSettings item)
        {
            //Get DeDupSettings by ccid
            var entity = Find(item.ccid);

            if (entity != null)
            {
                entity.database_config_json  = item.database_config_json;
                _context.Entry(entity).State = EntityState.Modified;
                _context.SaveChanges();
            }
        }
        /// <summary>
        /// Method: AddEditDatabaseConfig
        /// Description: It is used to insert/update database config by ccid
        /// </summary>
        /// <param name="databaseSetting"></param>
        public void AddEditDatabaseConfig(DatabaseConfig databaseSetting)
        {
            //Get DeDupSettings by ccid
            var entity = Find(databaseSetting.ccid);
            var isNew  = false;

            if (entity == null)
            {
                isNew = true;
                //Create new DeDupSettings and assign ccid
                entity = new DeDupSettings()
                {
                    ccid = databaseSetting.ccid
                };
            }

            List <DatabaseConfig> dbConfigs = entity.ToModel <List <DatabaseConfig> >();

            if (dbConfigs != null && dbConfigs.FirstOrDefault(p => p.databaseType == databaseSetting.databaseType) != null)
            {
                dbConfigs.FirstOrDefault(p => p.databaseType == databaseSetting.databaseType).syncDefaultDatabaseUrl = databaseSetting.syncDefaultDatabaseUrl;
                // dbConfigs.FirstOrDefault(p => p.databaseType == databaseSetting.databaseType).syncFollowerDatabaseUrl = databaseSetting.syncFollowerDatabaseUrl;
            }
            else
            {
                if (dbConfigs == null)
                {
                    dbConfigs = new List <DatabaseConfig>();
                }
                dbConfigs.Add(databaseSetting);
            }

            //Assign database config as json
            entity.database_config_json = JsonConvert.SerializeObject(dbConfigs);

            //Add/Update DeDupSettings entity
            if (isNew)
            {
                _context.DeDupSettings.Add(entity);
            }
            else
            {
                _context.Entry(entity).State = EntityState.Modified;
            }

            _context.SaveChanges();
        }
Exemple #3
0
        //public ConnectorsRepository()
        //{
        //    _context = (DeDupContext)Utilities.AppServiceProvider.GetService(typeof(DeDupContext));
        //}

        /// <summary>
        /// Method: GetMaxID
        /// Description: It is used to get max of connector id in connectors table by ccid
        /// </summary>
        /// <param name="ccid"></param>
        /// <param name="dedupSettings"></param>
        /// <returns>max connector id as int</returns>
        private int GetMaxID(string ccid, ref DeDupSettings dedupSettings)
        {
            int connectorId = 0;

            if (_context.Connectors.Where(r => r.ccid == ccid).Count() > 0)
            {
                var entity = _context.Connectors.Where(r => r.ccid == ccid).OrderByDescending(r => r.connector_id).FirstOrDefault();
                _context.Entry(entity).Reference(e => e.DeDupSetting).Load();
                dedupSettings = entity.DeDupSetting;
                connectorId   = entity.connector_id;
            }
            else if (_context.DeDupSettings.FirstOrDefault(r => r.ccid == ccid) != null)
            {
                dedupSettings = _context.DeDupSettings.FirstOrDefault(r => r.ccid == ccid);
            }
            return(connectorId);
        }
        /// <summary>
        /// Method: AddEditDatabaseConfig
        /// Description: It is used to insert/update database config property by ccid
        /// </summary>
        /// <param name="ccid"></param>
        /// <param name="fieldName"></param>
        /// <param name="fieldValue"></param>
        public void AddEditDatabaseConfig(string ccid, string fieldName, string fieldValue)
        {
            var isNew = false;
            //Get DeDupSettings by ccid
            var entity = Find(ccid);

            //Get DatabaseConfig by ccid
            var dbConfig = entity.ToModel <DatabaseConfig>(ccid);

            if (entity == null)
            {
                isNew = true;
                //Create new DeDupSettings and assign ccid
                entity = new DeDupSettings()
                {
                    ccid = ccid
                };
            }

            //Update DatabaseConfig property value by name
            if (dbConfig != null && dbConfig.GetType().GetProperty(fieldName) != null)
            {
                var propertyInfo = dbConfig.GetType().GetProperty(fieldName);
                propertyInfo.SetValue(dbConfig, fieldValue, null);
            }
            //Assign database config as json
            entity.database_config_json = JsonConvert.SerializeObject(dbConfig);

            //Add/Update DeDupSettings entity
            if (isNew)
            {
                _context.DeDupSettings.Add(entity);
            }
            else
            {
                _context.Entry(entity).State = EntityState.Modified;
            }
            _context.SaveChanges();
        }
Exemple #5
0
        /// <summary>
        /// Method: AddEditDatabaseConfig
        /// Description: It is used to insert/update database config property by ccid
        /// </summary>
        /// <param name="ccid"></param>
        /// <param name="fieldName"></param>
        /// <param name="fieldValue"></param>
        public void AddEditDatabaseConfig(DatabaseConfig dbConfig, int?id)
        {
            DeDupSettings dedupSettings = null;

            if (dbConfig.databaseType == DatabaseType.None)
            {
                dbConfig.databaseType = DatabaseType.Heroku_Postgres;
            }
            if (id.HasValue)
            {
                //get connector by id
                Connectors entity = Find(dbConfig.ccid, id);

                //assign DeDupsettings
                dedupSettings = entity.DeDupSetting;

                //save sync db config
                if (dedupSettings != null && string.IsNullOrEmpty(dedupSettings.database_config_json))
                {
                    dedupSettings.database_config_json  = JsonConvert.SerializeObject(dbConfig);
                    _context.Entry(dedupSettings).State = EntityState.Modified;
                }

                if (entity.sync_src == DataSource.Heroku_Postgres ||
                    entity.sync_src == DataSource.Azure_Postgres ||
                    entity.sync_src == DataSource.AWS_Postgres ||
                    entity.sync_src == DataSource.Azure_SQL)
                {
                    entity.src_config_json = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                    {
                        dbConfig
                    }));
                }
                if (entity.connector_type == ConnectorType.Heroku_Postgres ||
                    entity.connector_type == ConnectorType.Azure_Postgres ||
                    entity.connector_type == ConnectorType.AWS_Postgres ||
                    entity.connector_type == ConnectorType.Azure_SQL)
                {
                    entity.dest_config_json = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                    {
                        dbConfig
                    }));
                }

                _context.Entry(entity).State = EntityState.Modified;
            }
            else
            {
                if (_context.DeDupSettings.Where(r => r.ccid == dbConfig.ccid).Count() > 0)
                {
                    dedupSettings = _context.DeDupSettings.Where(r => r.ccid == dbConfig.ccid).FirstOrDefault();
                    //get latest database value
                    _context.Entry <DeDupSettings>(dedupSettings).GetDatabaseValues();

                    dedupSettings.database_config_json = JsonConvert.SerializeObject(dbConfig);

                    _context.Entry(dedupSettings).State = EntityState.Modified;
                }
                else
                {
                    //Create new DeDupSettings and assign ccid
                    dedupSettings = new DeDupSettings()
                    {
                        ccid = dbConfig.ccid
                    };

                    dedupSettings.database_config_json = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                    {
                        dbConfig
                    }));

                    _context.DeDupSettings.Add(dedupSettings);
                }
            }

            _context.SaveChanges();
        }
Exemple #6
0
        /// <summary>
        /// Method: AddEditExtensionsConfig
        /// Description: It is used to add/update connector in connectors table
        /// </summary>
        /// <param name="connectorConfig"></param>
        public void AddEditExtensionsConfig(ConnectorConfig connectorConfig)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                Connectors    entity;
                DeDupSettings dedupSettings          = null;
                bool          isNew                  = false;
                int           isSyncTableExist       = 0;
                int           isSyncGoldenTableExist = 0;
                if (connectorConfig.connectorId.HasValue)
                {
                    entity = Find(connectorConfig.ccid, connectorConfig.connectorId);
                    if (entity != null)
                    {
                        //delete sync process if it is in progress while updating connector
                        if (!string.IsNullOrEmpty(entity.job_id) ||
                            entity.schedule_type != ScheduleType.MANUAL_SYNC)
                        {
                            //delete old jobs
                            JobScheduler.Instance.DeleteJob(ccid: entity.ccid, connectorId: entity.connector_id, jobId: entity.job_id, scheduleType: entity.schedule_type);

                            //reset job id once deleted
                            entity.job_id = string.Empty;
                            if (entity.sync_status == 1)
                            {
                                //set status interrupted
                                entity.sync_status = 10;
                            }
                            else if (entity.sync_status.HasValue)
                            {
                                //reset sync status
                                entity.sync_status = 0;
                            }
                        }
                        else if (entity.sync_status.HasValue)
                        {
                            //reset sync status
                            entity.sync_status = 0;
                        }

                        if (entity.sync_status != 2 && entity.sync_status != 10)
                        {
                            entity.sync_count           = null;
                            entity.unique_records_count = null;
                            entity.sync_updated_count   = null;
                            entity.total_records_count  = null;
                            entity.sync_log_json        = null;
                            entity.sync_started_at      = null;
                            entity.sync_ended_at        = null;
                            entity.last_sync_at         = null;
                            entity.last_sync_status     = null;
                        }

                        dedupSettings = entity.DeDupSetting;
                        //check table exist or not. if not then create table and sync
                        isSyncTableExist       = SyncRepository.SyncTableIsExist(connectorConfig);
                        isSyncGoldenTableExist = SyncRepository.SyncGoldenTableIsExist(connectorConfig);
                    }
                }
                else
                {
                    isNew  = true;
                    entity = new Connectors()
                    {
                        ccid = connectorConfig.ccid
                    };
                    //Set next connector id
                    entity.connector_id = GetMaxID(entity.ccid, ref dedupSettings) + 1;
                }

                entity.connector_name = connectorConfig.connectorName;
                if (isNew)
                {
                    entity.sync_src        = connectorConfig.dataSource;
                    entity.src_object_name = connectorConfig.sourceObjectName;
                    //commented by Kathir on 12-Aug-2020
                    // entity.src_object_fields_json = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                    if (entity.sync_src == DataSource.Heroku_Postgres ||
                        entity.sync_src == DataSource.Azure_Postgres ||
                        entity.sync_src == DataSource.AWS_Postgres ||
                        entity.sync_src == DataSource.Azure_SQL)
                    {
                        entity.src_config_json = JsonConvert.SerializeObject(connectorConfig.dbConfig);
                    }
                    if (connectorConfig.dedup_type != DedupType.Full_Dedup)
                    {
                        entity.connector_type   = (ConnectorType)connectorConfig.syncDestination;
                        entity.dest_object_name = connectorConfig.destObjectName;
                    }
                    else
                    {
                        if (connectorConfig.dataSource == DataSource.Heroku_Postgres)
                        {
                            entity.connector_type = ConnectorType.Heroku_Postgres;
                        }
                        if (connectorConfig.dataSource == DataSource.AWS_Postgres)
                        {
                            entity.connector_type = ConnectorType.AWS_Postgres;
                        }
                        if (connectorConfig.dataSource == DataSource.Azure_Postgres)
                        {
                            entity.connector_type = ConnectorType.Azure_Postgres;
                        }
                        entity.dest_object_name = string.Empty;
                    }
                    entity.src_schema        = connectorConfig.dbSchema;
                    entity.dedup_type        = connectorConfig.dedup_type;
                    entity.dedup_source_type = connectorConfig.dedupSourceType;
                    if ((connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                    {
                        entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.compareObjectFieldsMapping);
                        entity.compare_config_json   = JsonConvert.SerializeObject(connectorConfig.dbConfig_compare);
                    }

                    //if (IsMultipleConfigSupported)
                    {
                        if (entity.connector_type == ConnectorType.Heroku_Postgres ||
                            entity.connector_type == ConnectorType.Azure_Postgres ||
                            entity.connector_type == ConnectorType.AWS_Postgres ||
                            entity.connector_type == ConnectorType.Azure_SQL)
                        {
                            entity.dest_config_json = JsonConvert.SerializeObject(connectorConfig.destDBConfig);
                        }
                    }

                    //set global db setting
                    if (dedupSettings != null)
                    {
                        //save sync database url
                        if (connectorConfig.dbConfig != null &&
                            !string.IsNullOrEmpty(connectorConfig.dbConfig.syncDefaultDatabaseUrl))
                        {
                            if (string.IsNullOrEmpty(dedupSettings.database_config_json))
                            {
                                dedupSettings.database_config_json  = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                                {
                                    connectorConfig.dbConfig
                                }));
                                _context.Entry(dedupSettings).State = EntityState.Modified;
                            }
                            else
                            {
                                var dbConfigs = dedupSettings.ToModel <List <DatabaseConfig> >();
                                if (dbConfigs != null && dbConfigs.FirstOrDefault(p => p.databaseType == connectorConfig.dbConfig.databaseType) == null)
                                {
                                    dbConfigs.Add(connectorConfig.dbConfig);
                                    dedupSettings.database_config_json  = JsonConvert.SerializeObject(dbConfigs);
                                    _context.Entry(dedupSettings).State = EntityState.Modified;
                                }
                            }
                        }
                    }
                    else
                    {
                        dedupSettings = new DeDupSettings()
                        {
                            ccid = connectorConfig.ccid
                        };
                        //save sync database url
                        if (connectorConfig.dbConfig != null && !string.IsNullOrEmpty(connectorConfig.dbConfig.syncDefaultDatabaseUrl))
                        {
                            dedupSettings.database_config_json = JsonConvert.SerializeObject((new List <DatabaseConfig>()
                            {
                                connectorConfig.dbConfig
                            }));
                        }
                        //add dedupsetting
                        _context.Entry(dedupSettings).State = EntityState.Added;
                    }
                    entity.unique_records_count = null;
                    entity.sync_updated_count   = null;
                    entity.sync_count           = null;
                    entity.total_records_count  = null;
                }

                entity.schedule_type            = connectorConfig.scheduleType;
                entity.src_new_record_filter    = connectorConfig.srcNewRecordFilter;
                entity.src_update_record_filter = connectorConfig.srcUpdateRecordFilter;
                entity.two_way_sync_priority    = connectorConfig.twoWaySyncPriority;
                entity.dest_schema = connectorConfig.destDBSchema;
                entity.custom_schedule_in_minutes = connectorConfig.customScheduleInMinutes;
                //Added by Kathir on 20-8-2020
                entity.dedup_method = connectorConfig.dedup_method;
                //if (connectorConfig.dedup_method == SimilarityType.Fuzzy_Compare)
                //{
                //    entity.fuzzy_ratio = connectorConfig.fuzzy_ratio;
                //}
                entity.fuzzy_ratio          = connectorConfig.fuzzy_ratio;
                entity.review_before_delete = connectorConfig.review_before_delete;
                entity.backup_before_delete = connectorConfig.backup_before_delete;
                if (connectorConfig.dedup_type == DedupType.Full_Dedup)
                {
                    entity.simulation_count = -1;
                }
                else
                {
                    entity.simulation_count = connectorConfig.simulation_count;
                }
                if (string.IsNullOrEmpty(entity.src_object_name))
                {
                    entity.src_object_name = connectorConfig.sourceObjectName;
                }
                if ((connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                {
                    //entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.compareObjectFieldsMapping);
                    entity.compare_config_json = JsonConvert.SerializeObject(connectorConfig.dbConfig_compare);
                }
                //commented by Kathir on 12-Aug-2020
                //if (string.IsNullOrEmpty(entity.src_object_fields_json))
                //{
                //    entity.src_object_fields_json = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //}
                if (string.IsNullOrEmpty(entity.dest_object_name))
                {
                    if (connectorConfig.dedup_type == DedupType.Full_Dedup && connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table)
                    {
                        entity.dest_object_name = connectorConfig.sourceObjectName;
                    }
                    else if (connectorConfig.dedup_type == DedupType.Full_Dedup && (connectorConfig.dedupSourceType == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || connectorConfig.dedupSourceType == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                    {
                        entity.dest_object_name = (connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table ? connectorConfig.dbConfig_compare.new_table_name : connectorConfig.dbConfig_compare.object_name);
                    }
                    else
                    {
                        entity.dest_object_name = connectorConfig.destObjectName;
                    }
                }
                //Assigned source object fields to compare object field json
                entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //if (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table)
                //{
                //    if (connectorConfig.sourceObjectFields != null && connectorConfig.sourceObjectFields.Count > 0)
                //    {
                //        foreach (string sel_fields in connectorConfig.sourceObjectFields)
                //        {
                //            connectorConfig.compareObjectFieldsMapping.Add(new KeyValuePair<string, string>(sel_fields, sel_fields));
                //        }
                //    }
                //    entity.compare_object_fields = JsonConvert.SerializeObject(connectorConfig.sourceObjectFields);
                //}
                if (connectorConfig.dedup_type == DedupType.Full_Dedup)
                {
                    entity.dest_object_name = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.sourceObjectName : (connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table ? connectorConfig.dbConfig_compare.new_table_name : connectorConfig.dbConfig_compare.object_name));
                    connectorConfig.destDBConfig.syncDefaultDatabaseUrl = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.syncDefaultDatabaseUrl : connectorConfig.dbConfig_compare.syncDefaultDatabaseUrl);

                    connectorConfig.destDBConfig.databaseType = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.databaseType : connectorConfig.dbConfig_compare.databaseType);
                    connectorConfig.destDBConfig.dataSource   = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbConfig.dataSource : connectorConfig.dbConfig_compare.dataSource);

                    entity.dest_config_json = JsonConvert.SerializeObject(connectorConfig.destDBConfig);
                    entity.dest_schema      = (connectorConfig.dedupSourceType == SourceType.Remove_Duplicates_from_a_Single_Table ? connectorConfig.dbSchema : connectorConfig.dbConfig_compare.db_schema);
                }
                //save extension setting
                _context.Entry(entity).State = isNew ? EntityState.Added : EntityState.Modified;
                _context.SaveChanges();
                //if (isSyncTableExist == 0 && connectorConfig.dedup_type != DedupType.Full_Dedup)
                //{
                //    var errorMessage = string.Empty;
                //    if (connectorConfig.syncDestination == ConnectorType.Heroku_Postgres
                //        || connectorConfig.syncDestination == ConnectorType.Azure_Postgres
                //        || connectorConfig.syncDestination == ConnectorType.AWS_Postgres)
                //    {
                //        var dbStatus = SyncRepository.CreatePostgresTable(connectorConfig, out errorMessage);
                //        if (dbStatus == -1)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: (string.IsNullOrEmpty(errorMessage) ? "Not able to create postgres table." : errorMessage)) { };
                //        }
                //        else if (dbStatus == 2)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: "The " + connectorConfig.destObjectName + " postgres table already exists.") { };
                //        }
                //    }
                //}
                //if (isSyncGoldenTableExist == 0 && connectorConfig.dbConfig_compare.table_type == SelectedTableType.Create_New_Table)
                //{
                //    var errorMessage = string.Empty;
                //    if (connectorConfig.dbConfig_compare.dataSource == DataSource.Heroku_Postgres
                //        || connectorConfig.dbConfig_compare.dataSource == DataSource.Azure_Postgres
                //        || connectorConfig.dbConfig_compare.dataSource == DataSource.AWS_Postgres)
                //    {
                //        var dbStatus = SyncRepository.CreatePostgresGoldenTable(connectorConfig, out errorMessage);
                //        if (dbStatus == -1)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: (string.IsNullOrEmpty(errorMessage) ? "Not able to create postgres table." : errorMessage)) { };
                //        }
                //        else if (dbStatus == 2)
                //        {
                //            transaction.Rollback();
                //            throw new Exception(message: "The " + connectorConfig.dbConfig_compare.new_table_name + " postgres table already exists.") { };
                //        }
                //    }
                //}
                transaction.Commit();

                //Schedule job if scheduletype is not manual
                if (entity.schedule_type != ScheduleType.MANUAL_SYNC)
                {
                    if (entity.schedule_type == ScheduleType.CUSTOM)
                    {
                        JobScheduler.Instance.ScheduleJob(entity.ccid, entity.connector_id, entity.connector_type, entity.schedule_type, (entity.custom_schedule_in_minutes.HasValue ? entity.custom_schedule_in_minutes.Value : 1200));
                    }
                    else
                    {
                        JobScheduler.Instance.ScheduleJob(entity.ccid, entity.connector_id, entity.connector_type, entity.schedule_type);
                    }
                }
                //});
            }
        }
Exemple #7
0
        public static T ToModel <T>(this List <Connectors> connectors, bool isSetConfig = true) where T : class
        {
            if (typeof(T) == typeof(List <ConnectorConfig>))
            {
                List <ConnectorConfig> connectorConfigs = null;
                if (connectors != null)
                {
                    DeDupSettings dedupSettings = isSetConfig ? connectors.FirstOrDefault().DeDupSetting : null;
                    connectorConfigs = connectors.Select(c =>
                    {
                        ConnectorConfig conConfig;
                        conConfig = new ConnectorConfig()
                        {
                            ccid                    = c.ccid,
                            connectorId             = c.connector_id,
                            connectorName           = c.connector_name,
                            sourceObjectName        = c.src_object_name,
                            destObjectName          = c.dest_object_name,
                            scheduleType            = c.schedule_type,
                            srcNewRecordFilter      = c.src_new_record_filter,
                            srcUpdateRecordFilter   = c.src_update_record_filter,
                            twoWaySyncPriority      = c.two_way_sync_priority,
                            syncDestination         = c.connector_type,
                            syncCount               = c.sync_count,
                            syncStatus              = c.sync_status,
                            dedup_type              = c.dedup_type,
                            jobId                   = c.job_id,
                            syncStartedAt           = c.sync_started_at,
                            syncEndedAt             = c.sync_ended_at,
                            lastSyncAt              = c.last_sync_at,
                            lastSyncStatus          = c.last_sync_status,
                            dbSchema                = c.src_schema,
                            dataSource              = c.sync_src,
                            destDBSchema            = c.dest_schema,
                            customScheduleInMinutes = c.custom_schedule_in_minutes,
                            dedupSourceType         = c.dedup_source_type,

                            dedup_method         = c.dedup_method,
                            review_before_delete = c.review_before_delete,
                            backup_before_delete = c.backup_before_delete,

                            simulation_count = c.simulation_count,

                            total_records_count  = c.total_records_count,
                            deduped_count        = c.deduped_count,
                            fuzzy_ratio          = c.fuzzy_ratio * 100,
                            unique_records_count = c.unique_records_count
                        };


                        //if (!string.IsNullOrEmpty(c.src_object_fields_json))
                        //{
                        //    conConfig.sourceObjectFields = JsonConvert.DeserializeObject<List<string>>(c.compare_object_fields);
                        //}


                        if (!string.IsNullOrEmpty(c.compare_config_json) && (c.dedup_source_type == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || c.dedup_source_type == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                        {
                            conConfig.dbConfig_compare = JsonConvert.DeserializeObject <DatabaseConfig>(c.compare_config_json);
                        }
                        if (!string.IsNullOrEmpty(c.compare_object_fields))
                        {
                            conConfig.compareObjectFieldsMapping = JsonConvert.DeserializeObject <List <string> >(c.compare_object_fields);
                            if (c.dedup_source_type == SourceType.Remove_Duplicates_from_a_Single_Table || conConfig.compareObjectFieldsMapping != null)
                            {
                                conConfig.sourceObjectFields = conConfig.compareObjectFieldsMapping;
                                conConfig.dbConfig_compare.compareObjectFields = conConfig.compareObjectFieldsMapping;
                            }
                        }
                        //if (!string.IsNullOrEmpty(c.sync_log_json))
                        //{
                        //    conConfig.connectorLogs = new ConnectorLogs()
                        //    {
                        //        sync_started_at = conConfig.syncStartedAt,
                        //        sync_ended_at = conConfig.syncEndedAt,
                        //        sync_count = conConfig.syncCount,
                        //        sync_logs= JsonConvert.DeserializeObject<List<string>>(c.sync_log_json)
                        //    };
                        //}

                        if (conConfig != null)
                        {
                            if (conConfig.syncDestination == ConnectorType.Heroku_Postgres ||
                                conConfig.syncDestination == ConnectorType.Azure_Postgres ||
                                conConfig.syncDestination == ConnectorType.AWS_Postgres ||
                                conConfig.syncDestination == ConnectorType.Azure_SQL)
                            {
                                DatabaseType databaseType;
                                if (conConfig.syncDestination == ConnectorType.Azure_SQL)
                                {
                                    databaseType = DatabaseType.Azure_SQL;
                                }
                                else if (conConfig.syncDestination == ConnectorType.Azure_Postgres)
                                {
                                    databaseType = DatabaseType.Azure_Postgres;
                                }
                                else if (conConfig.syncDestination == ConnectorType.AWS_Postgres)
                                {
                                    databaseType = DatabaseType.AWS_Postgres;
                                }
                                else
                                {
                                    databaseType = DatabaseType.Heroku_Postgres;
                                }
                                if (!string.IsNullOrEmpty(c.dest_config_json))
                                {
                                    conConfig.destDBConfig = JsonConvert.DeserializeObject <DatabaseConfig>(c.dest_config_json);
                                    if (conConfig.destDBConfig.databaseType == DatabaseType.None)
                                    {
                                        conConfig.destDBConfig.databaseType = databaseType;
                                    }
                                }
                                else if (c.DeDupSetting != null && !string.IsNullOrEmpty(c.DeDupSetting.database_config_json))
                                {
                                    conConfig.destDBConfig = c.DeDupSetting.ToModel <DatabaseConfig>(databaseType: databaseType);
                                }
                            }

                            if (string.IsNullOrEmpty(conConfig.dbSchema))
                            {
                                if ((conConfig.dataSource == DataSource.Heroku_Postgres ||
                                     conConfig.dataSource == DataSource.Azure_Postgres ||
                                     conConfig.dataSource == DataSource.AWS_Postgres))
                                {
                                    conConfig.dbSchema = Constants.POSTGRES_DEFAULT_SCHEMA;
                                }
                                else if (conConfig.dataSource == DataSource.Azure_SQL)
                                {
                                    conConfig.dbSchema = Constants.MSSQL_DEFAULT_SCHEMA;
                                }
                            }

                            if (string.IsNullOrEmpty(conConfig.destDBSchema))
                            {
                                if ((conConfig.syncDestination == ConnectorType.Heroku_Postgres ||
                                     conConfig.syncDestination == ConnectorType.Azure_Postgres ||
                                     conConfig.syncDestination == ConnectorType.AWS_Postgres))
                                {
                                    conConfig.destDBSchema = Constants.POSTGRES_DEFAULT_SCHEMA;
                                }
                                else if (conConfig.syncDestination == ConnectorType.Azure_SQL)
                                {
                                    conConfig.destDBSchema = Constants.MSSQL_DEFAULT_SCHEMA;
                                }
                            }

                            if (isSetConfig)
                            {
                                if (conConfig.dataSource == DataSource.Heroku_Postgres ||
                                    conConfig.dataSource == DataSource.Azure_Postgres ||
                                    conConfig.dataSource == DataSource.AWS_Postgres ||
                                    conConfig.dataSource == DataSource.Azure_SQL)
                                {
                                    DatabaseType databaseType;
                                    if (conConfig.syncDestination == ConnectorType.Azure_SQL)
                                    {
                                        databaseType = DatabaseType.Azure_SQL;
                                    }
                                    else if (conConfig.syncDestination == ConnectorType.Azure_Postgres)
                                    {
                                        databaseType = DatabaseType.Azure_Postgres;
                                    }
                                    else if (conConfig.syncDestination == ConnectorType.AWS_Postgres)
                                    {
                                        databaseType = DatabaseType.AWS_Postgres;
                                    }
                                    else
                                    {
                                        databaseType = DatabaseType.Heroku_Postgres;
                                    }
                                    if (!string.IsNullOrEmpty(c.compare_config_json) && (c.dedup_source_type == SourceType.Copy_Source_data_to_Destination_and_Remove_Duplicates_from_Destination || c.dedup_source_type == SourceType.Merge_Table_A_Data_to_Table_B_and_Remove_Duplicates_from_Table_B))
                                    {
                                        if (c.compare_config_json.StartsWith("["))
                                        {
                                            conConfig.multipleDBConfigs.AddRange(JsonConvert.DeserializeObject <List <DatabaseConfig> >(c.compare_config_json));
                                            //when multiple source assigned then we need to use th below line
                                            //conConfig.dbConfig_compare = JsonConvert.DeserializeObject<DatabaseConfig>(connector.compare_config_json);
                                        }
                                        else
                                        {
                                            conConfig.dbConfig_compare = JsonConvert.DeserializeObject <DatabaseConfig>(c.compare_config_json);
                                            conConfig.multipleDBConfigs.Add(conConfig.dbConfig_compare);
                                        }
                                    }
                                    if (!string.IsNullOrEmpty(c.src_config_json))
                                    {
                                        conConfig.dbConfig = JsonConvert.DeserializeObject <DatabaseConfig>(c.src_config_json);
                                        if (conConfig.dbConfig.databaseType == DatabaseType.None)
                                        {
                                            conConfig.dbConfig.databaseType = databaseType;
                                        }
                                        conConfig.dbConfig.db_schema   = conConfig.dbSchema;
                                        conConfig.dbConfig.object_name = conConfig.sourceObjectName;
                                        conConfig.multipleDBConfigs.Add(conConfig.dbConfig);
                                    }
                                    else if (dedupSettings != null && !string.IsNullOrEmpty(dedupSettings.database_config_json))
                                    {
                                        conConfig.dbConfig             = dedupSettings.ToModel <DatabaseConfig>(databaseType: databaseType);
                                        conConfig.dbConfig.db_schema   = conConfig.dbSchema;
                                        conConfig.dbConfig.object_name = conConfig.sourceObjectName;
                                        conConfig.multipleDBConfigs.Add(conConfig.dbConfig);
                                    }
                                }

                                if (conConfig.syncDestination == ConnectorType.Heroku_Postgres ||
                                    conConfig.syncDestination == ConnectorType.Azure_Postgres ||
                                    conConfig.syncDestination == ConnectorType.AWS_Postgres ||
                                    conConfig.syncDestination == ConnectorType.Azure_SQL)
                                {
                                    DatabaseType databaseType;
                                    if (conConfig.syncDestination == ConnectorType.Azure_SQL)
                                    {
                                        databaseType = DatabaseType.Azure_SQL;
                                    }
                                    else if (conConfig.syncDestination == ConnectorType.Azure_Postgres)
                                    {
                                        databaseType = DatabaseType.Azure_Postgres;
                                    }
                                    else if (conConfig.syncDestination == ConnectorType.AWS_Postgres)
                                    {
                                        databaseType = DatabaseType.AWS_Postgres;
                                    }
                                    else
                                    {
                                        databaseType = DatabaseType.Heroku_Postgres;
                                    }
                                    if (!string.IsNullOrEmpty(c.dest_config_json))
                                    {
                                        conConfig.destDBConfig = JsonConvert.DeserializeObject <DatabaseConfig>(c.dest_config_json);
                                        if (conConfig.destDBConfig.databaseType == DatabaseType.None)
                                        {
                                            conConfig.destDBConfig.databaseType = databaseType;
                                        }
                                    }
                                    else if (dedupSettings != null && !string.IsNullOrEmpty(dedupSettings.database_config_json))
                                    {
                                        conConfig.destDBConfig = dedupSettings.ToModel <DatabaseConfig>(databaseType: databaseType);
                                    }
                                }
                            }
                            conConfig.child_record_count = SyncRepository.GetChildRecordsCount(conConfig);
                        }
                        return(conConfig);
                    }).ToList();
                }

                return(connectorConfigs as T);
            }
            else if (typeof(T) == typeof(List <ConnectorLogs>))
            {
                List <ConnectorLogs> connectorLogs = null;
                if (connectors != null)
                {
                    connectorLogs = connectors.Select(c =>
                    {
                        return(new ConnectorLogs()
                        {
                            sync_connector_name = c.connector_name,
                            sync_started_at = c.sync_started_at,
                            sync_ended_at = c.sync_ended_at,
                            sync_count = c.sync_count,
                            last_sync_at = c.last_sync_at,
                            last_sync_status = c.last_sync_status,
                            sync_status = c.sync_status,
                            sync_logs = Utilities.GetJsonPropertyValueByKeyPath <List <string> >(c.sync_log_json, "")
                        });
                    }).ToList();
                }

                return(connectorLogs as T);
            }

            return(null);
        }
 /// <summary>
 /// Method: Add
 /// Description: It is used to add new DeDupSettings to DeDupSettings table
 /// </summary>
 /// <param name="item"></param>
 public void Add(DeDupSettings item)
 {
     _context.DeDupSettings.Add(item);
     _context.SaveChanges();
 }
 /// <summary>
 /// Method: Reload
 /// Description: It is used to reload DeDupSettings entity
 /// </summary>
 /// <param name="entity"></param>
 public void Reload(DeDupSettings entity)
 {
     _context.Entry <DeDupSettings>(entity).GetDatabaseValues();
 }
        public static T ToModel <T>(this DeDupSettings dedupSetting, string ccid = "", DatabaseType databaseType = DatabaseType.None) where T : class
        {
            if (dedupSetting != null && string.IsNullOrEmpty(ccid))
            {
                ccid = dedupSetting.ccid;
            }

            if (typeof(T) == typeof(DeDupSettings))
            {
                return(dedupSetting as T);
            }
            if (typeof(T) == typeof(DatabaseConfig))
            {
                DatabaseConfig databaseSetting = default(DatabaseConfig);
                if (dedupSetting != null && !string.IsNullOrEmpty(dedupSetting.database_config_json))
                {
                    try
                    {
                        databaseSetting = JsonConvert.DeserializeObject <List <DatabaseConfig> >(dedupSetting.database_config_json).FirstOrDefault(p => p.databaseType == databaseType);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("ERROR: {0}", ex.Message);
                        if (dedupSetting.database_config_json.Contains("databaseType") || databaseType == DatabaseType.Heroku_Postgres)
                        {
                            databaseSetting = JsonConvert.DeserializeObject <DatabaseConfig>(dedupSetting.database_config_json);
                        }
                    }
                }
                if (databaseSetting == null)
                {
                    databaseSetting = new DatabaseConfig();
                }
                databaseSetting.ccid         = ccid;
                databaseSetting.databaseType = databaseType;
                if (databaseSetting.databaseType == DatabaseType.None)
                {
                    databaseSetting.databaseType = DatabaseType.Heroku_Postgres;
                }
                return(databaseSetting as T);
            }
            if (typeof(T) == typeof(List <DatabaseConfig>))
            {
                List <DatabaseConfig> databaseSettings = default(List <DatabaseConfig>);
                if (dedupSetting != null && !string.IsNullOrEmpty(dedupSetting.database_config_json))
                {
                    try
                    {
                        databaseSettings = JsonConvert.DeserializeObject <List <DatabaseConfig> >(dedupSetting.database_config_json);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("ERROR: {0}", ex.Message);
                        databaseSettings = new List <DatabaseConfig>()
                        {
                            JsonConvert.DeserializeObject <DatabaseConfig>(dedupSetting.database_config_json)
                        };
                    }

                    if (databaseSettings != null)
                    {
                        databaseSettings = databaseSettings.Select(p =>
                        {
                            p.ccid = ccid;
                            if (p.databaseType == DatabaseType.None)
                            {
                                p.databaseType = DatabaseType.Heroku_Postgres;
                            }
                            return(p);
                        }).ToList();
                    }
                }

                return(databaseSettings as T);
            }

            return(null);
        }