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); }