private async Task <string> SaveSentHistoryRecord(SentHistoryRecord record)
        {
            try
            {
                await using var context = new SmsSenderDbContext(_dbContextOptionsBuilder.Options);
                var dbResult = await context.SentHistory.AddAsync(record);

                await context.SaveChangesAsync();

                return(dbResult.Entity.Id.ToString());
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Cannot store sms history record for {maskedPhone} (provider: {provider})", record.MaskedPhone, record.Provider);
                throw;
            }
        }
        public async Task <SendSmsResponse> SendSmsAsync(string phone, string brand, string smsBody, TemplateEnum template)
        {
            var providerName = await SelectProviderByPhone(phone);

            var provider = GetProviderByName(providerName);
            var response = new SendSmsResponse();

            if (provider != null)
            {
                var request = new SendSmsRequest
                {
                    Phone = phone,
                    Body  = smsBody
                };

                var record = new SentHistoryRecord(phone, brand, template, providerName, DateTime.Now);

                response = await provider.SendSmsAsync(request);

                if (!response.Status)
                {
                    record.ProcError = response.ErrorMessage;
                }
                else if (!string.IsNullOrEmpty(response.ReturnedId)) // threat ID returned from provider as ClientID
                {
                    record.ClientId = response.ReturnedId;
                }

                response.ReturnedId = await SaveSentHistoryRecord(record); // fill ReturnedID field with stored record ID value
            }
            else
            {
                response.Status       = false;
                response.ErrorMessage = "Provider not found";
            }

            return(response);
        }