Files
managing-apps/src/Managing.Application/Shared/WebhookService.cs
2025-07-05 15:35:07 +07:00

119 lines
3.7 KiB
C#

using System.Net.Http.Json;
using Managing.Application.Abstractions.Services;
using Managing.Domain.Users;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Managing.Application.Shared;
public class WebhookService : IWebhookService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration _configuration;
private readonly ILogger<WebhookService> _logger;
public WebhookService(HttpClient httpClient, IConfiguration configuration, ILogger<WebhookService> logger)
{
_httpClient = httpClient;
_configuration = configuration;
_logger = logger;
}
public async Task SendTradeNotification(User user, string message, bool isBadBehavior = false)
{
try
{
// Get the n8n webhook URL from configuration
var webhookUrl = _configuration["N8n:WebhookUrl"];
if (string.IsNullOrEmpty(webhookUrl))
{
_logger.LogWarning("N8n webhook URL not configured, skipping webhook notification");
return;
}
// Prepare the payload for n8n webhook
var payload = new
{
message = message,
isBadBehavior = isBadBehavior,
timestamp = DateTime.UtcNow,
type = "trade_notification",
telegramChannel = user.TelegramChannel
};
// Send the webhook notification
var response = await _httpClient.PostAsJsonAsync(webhookUrl, payload);
if (response.IsSuccessStatusCode)
{
_logger.LogInformation($"Successfully sent webhook notification for user {user.Name}");
}
else
{
_logger.LogWarning($"Failed to send webhook notification. Status: {response.StatusCode}");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error sending webhook notification");
}
}
public async Task SendMessage(string message, string? telegramChannel = null)
{
try
{
// Get the n8n webhook URL from configuration
var webhookUrl = _configuration["N8n:WebhookUrl"];
if (string.IsNullOrEmpty(webhookUrl))
{
_logger.LogWarning("N8n webhook URL not configured, skipping webhook message");
return;
}
// Prepare the payload for n8n webhook
var payload = new
{
message = message,
timestamp = DateTime.UtcNow,
type = "general_message",
telegramChannel = FormatTelegramChannel(telegramChannel)
};
// Send the webhook notification
var response = await _httpClient.PostAsJsonAsync(webhookUrl, payload);
if (response.IsSuccessStatusCode)
{
_logger.LogInformation("Successfully sent webhook message");
}
else
{
_logger.LogWarning($"Failed to send webhook message. Status: {response.StatusCode}");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error sending webhook message");
}
}
private string FormatTelegramChannel(string? telegramChannel)
{
if (string.IsNullOrEmpty(telegramChannel))
{
return string.Empty;
}
if (telegramChannel.StartsWith("100"))
{
return telegramChannel.Substring(3);
}
else if (telegramChannel.StartsWith("-100"))
{
return telegramChannel.Substring(4);
}
return telegramChannel;
}
}