// API
        // API
        // API

        public static async Task <IVRConfig> GetConfigAsync()
        {
            using (IVRConfigDataProvider configDP = new IVRConfigDataProvider()) {
                IVRConfig config = await configDP.GetItemAsync();

                if (config == null)
                {
                    throw new InternalError("No IVR settings defined");
                }
                return(config);
            }
        }
 private async Task AddConfigAsync(IVRConfig data)
 {
     data.Id = KEY;
     if (!await DataProvider.AddAsync(data))
     {
         throw new InternalError("Unexpected error adding settings");
     }
     await Auditing.AddAuditAsync($"{nameof(IVRConfigDataProvider)}.{nameof(AddConfigAsync)}", "Config", Guid.Empty,
                                  "Add Softelvdm_IVR Config",
                                  DataBefore : null,
                                  DataAfter : data,
                                  ExpensiveMultiInstance : true
                                  );
 }
        public async Task <IVRConfig> GetItemAsync()
        {
            IVRConfig config = await DataProvider.GetAsync(KEY);

            if (config == null)
            {
                config = new IVRConfig();

                string publicKey, privateKey;
                RSACrypto.MakeNewKeys(out publicKey, out privateKey);
                config.PrivateKey = privateKey;
                config.PublicKey  = publicKey;

                await AddConfigAsync(config);
            }
            return(config);
        }
        public async Task UpdateConfigAsync(IVRConfig data)
        {
            IVRConfig origConfig = Auditing.Active ? await GetItemAsync() : null;

            data.Id = KEY;
            UpdateStatusEnum status = await DataProvider.UpdateAsync(data.Id, data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                throw new InternalError("Unexpected error saving configuration {0}", status);
            }
            await Auditing.AddAuditAsync($"{nameof(IVRConfigDataProvider)}.{nameof(UpdateConfigAsync)}", "Config", Guid.Empty,
                                         "Update Softelvdm_IVR Config",
                                         DataBefore : origConfig,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );
        }