Files
aspnet-microservice-template/Utils/Clients/PushNotificationsClient.cs

151 lines
5.6 KiB
C#
Executable File

using System.Net;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using GamificationService.Exceptions.UtilServices.Api;
namespace GamificationService.Utils;
public class PushNotificationsClient
{
#region Fields
private readonly HttpClient _httpClient;
private readonly ILogger<PushNotificationsClient> _logger;
private readonly string _applicationToken;
private readonly string _projectId;
#endregion
#region Constructor
public PushNotificationsClient(HttpClient httpClient, ILogger<PushNotificationsClient> logger, string applicationToken, string projectId)
{
_httpClient = httpClient;
_logger = logger;
_applicationToken = applicationToken;
_projectId = projectId;
}
#endregion
#region Methods
public async Task SendPushNotification(PushNotification pushNotification)
{
try
{
var payload = new
{
message = new
{
token = _applicationToken,
notification = new
{
body = pushNotification.Message,
title = pushNotification.Title,
image = pushNotification.Image
},
android = new
{
notification = new
{
body = pushNotification.Message,
title = pushNotification.Title,
image = pushNotification.Image,
click_action = pushNotification.ClickAction,
click_action_type = pushNotification.ClickActionType
}
}
}
};
var jsonPayload = JsonSerializer.Serialize(payload);
var request = new HttpRequestMessage(HttpMethod.Post,$"/{_projectId}/messages")
{
Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json")
};
var response = await _httpClient.SendAsync(request);
if (response.StatusCode == HttpStatusCode.BadRequest)
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification. Status Code: {response.StatusCode}, Response: {responseContent}");
throw new BadRequestException($"Failed to send push notification: {response.StatusCode}");
}
else if (response.StatusCode == HttpStatusCode.Forbidden)
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification: {response.StatusCode}, Response: {responseContent}");
throw new ForbiddenException($"Failed to send push notification: {response.StatusCode}");
}
else
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification: {response.StatusCode}, Response: {responseContent}");
throw new Exception($"Failed to send push notification: {response.StatusCode}");
}
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
throw;
}
}
public async Task SendPushNotification(PushNotification pushNotification, string topic)
{
try
{
var payload = new
{
message = new
{
notification = new
{
body = pushNotification.Message,
title = pushNotification.Title,
image = pushNotification.Image
}
}
};
var jsonPayload = JsonSerializer.Serialize(payload);
var request = new HttpRequestMessage(HttpMethod.Post,$"/{_projectId}/topics/{topic}/publish")
{
Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json")
};
var response = await _httpClient.SendAsync(request);
if (response.StatusCode == HttpStatusCode.BadRequest)
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification. Status Code: {response.StatusCode}, Response: {responseContent}");
throw new BadRequestException($"Failed to send push notification: {response.StatusCode}");
}
else if (response.StatusCode == HttpStatusCode.Forbidden)
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification: {response.StatusCode}, Response: {responseContent}");
throw new ForbiddenException($"Failed to send push notification: {response.StatusCode}");
}
else
{
var responseContent = await response.Content.ReadAsStringAsync();
_logger.LogError($"Failed to send push notification: {response.StatusCode}, Response: {responseContent}");
throw new Exception($"Failed to send push notification: {response.StatusCode}");
}
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
throw;
}
}
#endregion
}