diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 7397fb3d..4a138954 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -14,6 +14,7 @@ using BMA.EHR.Leave.Service.DTOs.ChangeRound; using BMA.EHR.Leave.Service.DTOs.CheckIn; using BMA.EHR.Leave.Service.DTOs.DutyTime; using BMA.EHR.Leave.Service.DTOs.LeaveRequest; +using BMA.EHR.Leave.Service.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -58,6 +59,10 @@ namespace BMA.EHR.Leave.Service.Controllers private readonly string _bucketName = "check-in"; + private readonly string _fakeQueueName = "fake-checkin-queue"; + private readonly string _realQueueName = "checkin-queue"; + private readonly RabbitCheckInService _rabbitCheckInService; + #endregion #region " Constuctor and Destructor " @@ -75,7 +80,8 @@ namespace BMA.EHR.Leave.Service.Controllers AdditionalCheckRequestRepository additionalCheckRequestRepository, UserCalendarRepository userCalendarRepository, CommandRepository commandRepository, - LeaveRequestRepository leaveRequestRepository) + LeaveRequestRepository leaveRequestRepository, + RabbitCheckInService rabbitCheckInService) { _dutyTimeRepository = dutyTimeRepository; _context = context; @@ -91,6 +97,7 @@ namespace BMA.EHR.Leave.Service.Controllers _userCalendarRepository = userCalendarRepository; _commandRepository = commandRepository; _leaveRequestRepository = leaveRequestRepository; + _rabbitCheckInService = rabbitCheckInService; } @@ -458,27 +465,32 @@ namespace BMA.EHR.Leave.Service.Controllers Token = AccessToken ?? "" }; - // create connection - var factory = new ConnectionFactory() - { - HostName = _configuration["Rabbit:Host"], - UserName = _configuration["Rabbit:User"], - Password = _configuration["Rabbit:Password"], - }; + //// create connection + //var factory = new ConnectionFactory() + //{ + // HostName = _configuration["Rabbit:Host"], + // UserName = _configuration["Rabbit:User"], + // Password = _configuration["Rabbit:Password"], + //}; - // create channel - using var connection = factory.CreateConnection(); - using var channel = connection.CreateModel(); - channel.QueueDeclare(queue: "checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null); + //// create channel + //using var connection = factory.CreateConnection(); + //using var channel = connection.CreateModel(); + //channel.QueueDeclare(queue: "checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null); + + //// แปลง Object เป็น JSON สตริง + //var serializedObject = JsonConvert.SerializeObject(checkData); + + //// แปลง JSON สตริงเป็น byte array + //var body = Encoding.UTF8.GetBytes(serializedObject); + + //channel.BasicPublish(exchange: "", routingKey: "checkin-queue", basicProperties: null, body: body); + //Console.WriteLine($"Send to Queue: {serializedObject}"); - // แปลง Object เป็น JSON สตริง var serializedObject = JsonConvert.SerializeObject(checkData); - - // แปลง JSON สตริงเป็น byte array var body = Encoding.UTF8.GetBytes(serializedObject); + _rabbitCheckInService.SendMessageToQueue(_realQueueName, body); - channel.BasicPublish(exchange: "", routingKey: "checkin-queue", basicProperties: null, body: body); - Console.WriteLine($"Send to Queue: {serializedObject}"); return Success(new { date = currentDate }); } @@ -500,27 +512,25 @@ namespace BMA.EHR.Leave.Service.Controllers { var currentDate = DateTime.Now; - // create connection - var factory = new ConnectionFactory() - { - HostName = _configuration["Rabbit:Host"], - UserName = _configuration["Rabbit:User"], - Password = _configuration["Rabbit:Password"], - }; + //// create connection + //var factory = new ConnectionFactory() + //{ + // HostName = _configuration["Rabbit:Host"], + // UserName = _configuration["Rabbit:User"], + // Password = _configuration["Rabbit:Password"], + //}; - // create channel - using var connection = factory.CreateConnection(); - using var channel = connection.CreateModel(); - channel.QueueDeclare(queue: "fake-checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null); + //// create channel + //using var connection = factory.CreateConnection(); + //using var channel = connection.CreateModel(); + //channel.QueueDeclare(queue: "fake-checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null); - // แปลง Object เป็น JSON สตริง var serializedObject = JsonConvert.SerializeObject(data); - - // แปลง JSON สตริงเป็น byte array var body = Encoding.UTF8.GetBytes(serializedObject); + _rabbitCheckInService.SendMessageToQueue(_fakeQueueName, body); - channel.BasicPublish(exchange: "", routingKey: "fake-checkin-queue", basicProperties: null, body: body); - Console.WriteLine($"Send to Queue: {serializedObject}"); + //channel.BasicPublish(exchange: "", routingKey: "fake-checkin-queue", basicProperties: null, body: body); + //Console.WriteLine($"Send to Queue: {serializedObject}"); return Success(new { date = currentDate }); } diff --git a/BMA.EHR.Leave/Program.cs b/BMA.EHR.Leave/Program.cs index 715a9c8b..1e7ad141 100644 --- a/BMA.EHR.Leave/Program.cs +++ b/BMA.EHR.Leave/Program.cs @@ -21,6 +21,8 @@ using System.Transactions; using BMA.EHR.Leave.Service.Filters; using Hangfire.Common; using BMA.EHR.Application.Repositories.Leaves.TimeAttendants; +using RabbitMQ.Client; +using BMA.EHR.Leave.Service.Services; var builder = WebApplication.CreateBuilder(args); { @@ -28,6 +30,51 @@ var builder = WebApplication.CreateBuilder(args); var key = builder.Configuration["Jwt:Key"]; + // ตั้งค่า RabbitMQ connection + builder.Services.AddSingleton(sp => + { + var factory = new ConnectionFactory() + { + HostName = builder.Configuration["Rabbit:Host"], + UserName = builder.Configuration["Rabbit:User"], + Password = builder.Configuration["Rabbit:Password"], + }; + return factory.CreateConnection(); + }); + + + builder.Services.AddSingleton(sp => + { + var connection = sp.GetRequiredService(); + var channel = connection.CreateModel(); + + // ประกาศ queue + channel.QueueDeclare(queue: "fake-checkin-queue", + durable: true, + exclusive: false, + autoDelete: false, + arguments: null); + + return channel; + }); + + + builder.Services.AddSingleton(sp => + { + var connection = sp.GetRequiredService(); + var channel = connection.CreateModel(); + + // ประกาศ queue + channel.QueueDeclare(queue: "checkin-queue", + durable: true, + exclusive: false, + autoDelete: false, + arguments: null); + + return channel; + }); + + IdentityModelEventSource.ShowPII = true; builder.Services.AddHttpContextAccessor(); @@ -89,6 +136,8 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddPersistence(builder.Configuration); builder.Services.AddLeavePersistence(builder.Configuration); + builder.Services.AddSingleton(); + builder.Services.AddControllers(options => { options.SuppressAsyncSuffixInActionNames = false; diff --git a/BMA.EHR.Leave/Services/RabbitCheckInService.cs b/BMA.EHR.Leave/Services/RabbitCheckInService.cs new file mode 100644 index 00000000..d735d612 --- /dev/null +++ b/BMA.EHR.Leave/Services/RabbitCheckInService.cs @@ -0,0 +1,24 @@ +using RabbitMQ.Client; +using System.Text; + +namespace BMA.EHR.Leave.Service.Services +{ + public class RabbitCheckInService + { + private readonly IModel _channel; + + public RabbitCheckInService(IModel channel) + { + _channel = channel; + } + + public void SendMessageToQueue(string queueName, byte[] body) + { + //var body = Encoding.UTF8.GetBytes(message); + _channel.BasicPublish(exchange: "", + routingKey: queueName, + basicProperties: null, + body: body); + } + } +}