SurveyVista/Services/Implemnetation/EmailStatsService.cs
2024-05-09 14:08:10 +02:00

69 lines
2.4 KiB
C#

using Mailjet.Client.Resources;
using Mailjet.Client;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;
using Services.EmailSend;
using Services.Interaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Services.Implemnetation
{
public class EmailStatsService: IEmailStatsService
{
private readonly IConfiguration _configuration;
public EmailStatsService(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task<EmailStatistic> FetchEmailStatsAsync()
{
var apiKey = _configuration["MailJet:ApiKey"];
var apiSecret = _configuration["MailJet:SecretKey"];
MailjetClient client = new MailjetClient(apiKey, apiSecret);
// Construct the request to get statistics
MailjetRequest request = new MailjetRequest
{
Resource = Statcounters.Resource,
}
.Property(Statcounters.CounterSource, "APIKey") // assuming you want statistics based on API Key usage
.Property(Statcounters.CounterTiming, "Message") // assuming you want statistics about messages
.Property(Statcounters.CounterResolution, "Lifetime"); // assuming you want lifetime statistics
// Execute the request
MailjetResponse response = await client.GetAsync(request);
if (response.IsSuccessStatusCode)
{
return ParseEmailStats(response.GetData());
}
else
{
throw new InvalidOperationException($"Failed to fetch data: {response.StatusCode}, {response.GetErrorMessage()}");
}
}
private EmailStatistic ParseEmailStats(JToken data)
{
EmailStatistic stats = new EmailStatistic
{
TotalEmails = data[0]["Total"].Value<int>(),
Delivered = data[0]["Delivered"].Value<int>(),
Opened = data[0]["Opened"].Value<int>(),
Clicked = data[0]["Clicked"].Value<int>(),
Bounced = data[0]["Bounced"].Value<int>(),
Blocked = data[0]["Blocked"].Value<int>(),
MarkedAsSpam = data[0]["Spam"].Value<int>()
};
return stats;
}
}
}