using System.Net.Http.Json; using Microsoft.Extensions.Logging; using Volo.Abp.Settings; namespace Erp.Sender.Rocket; public interface IRocketHttpClient { Task SendMessageAsync(string Username, string Message); } public sealed class RocketHttpClient : IRocketHttpClient, IDisposable { private readonly HttpClient httpClient; private readonly ILogger logger; private readonly ISettingProvider settingProvider; public RocketHttpClient( HttpClient httpClient, ILogger logger, ISettingProvider settingProvider) { this.httpClient = httpClient; this.logger = logger; this.settingProvider = settingProvider; } public async Task SendMessageAsync(string Username, string Message) { var url = await settingProvider.GetOrNullAsync(RocketSettingNames.Url); var userId = await settingProvider.GetOrNullAsync(RocketSettingNames.UserId); var token = await settingProvider.GetOrNullAsync(RocketSettingNames.Token); var request = new HttpRequestMessage(HttpMethod.Post, $"{url}/chat.postMessage"); request.Headers.Add("X-Auth-Token", token); request.Headers.Add("X-User-Id", userId); request.Content = JsonContent.Create(new RocketChatPostMessageInput { Channel = $"@{Username}", Text = Message }); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); // Hata durumunda istisna atar. return await response.Content.ReadFromJsonAsync(); } public void Dispose() => httpClient?.Dispose(); }