From 33526755acf3c6a830b1c59d2a4093132c4f93a5 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Thu, 18 Jan 2024 13:53:15 +0700 Subject: [PATCH 1/2] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=E0=B8=9A=E0=B8=B1=E0=B8=99=E0=B8=97=E0=B8=B6=E0=B8=81?= =?UTF-8?q?=E0=B9=80=E0=B8=A7=E0=B8=A5=E0=B8=B2=E0=B8=AD=E0=B9=88=E0=B8=B2?= =?UTF-8?q?=E0=B8=99noti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MessageQueue/NotificationRepository.cs | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs b/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs index 73f292af..cfa855f1 100644 --- a/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs +++ b/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs @@ -54,17 +54,6 @@ namespace BMA.EHR.Application.Repositories.MessageQueue .Where(x => x.ReceiverUserId == profile.Id) .Where(x => x.DeleteDate == null) .OrderByDescending(x => x.ReceiveDate) - .Select(x => new NotificationResponse - { - Id = x.Id, - Body = x.Body, - ReceiverUserId = x.ReceiverUserId, - IsOpen = x.IsOpen, - Type = x.Type, - ReceiveDate = x.ReceiveDate, - OpenDate = x.OpenDate, - Payload = x.Payload == "" ? null : JsonConvert.DeserializeObject(Regex.Unescape(x.Payload)) - }) .ToListAsync(); var data = data_search @@ -76,10 +65,23 @@ namespace BMA.EHR.Application.Repositories.MessageQueue foreach (var data_open in data_opens) { data_open.IsOpen = true; + data_open.OpenDate = DateTime.Now; } await _dbContext.SaveChangesAsync(); - var _data = new { data, total = data_search.Count(), totalNoti = data_search.Where(x => x.IsOpen == false).Count() }; + var data2 = data.Select(x => new NotificationResponse + { + Id = x.Id, + Body = x.Body, + ReceiverUserId = x.ReceiverUserId, + IsOpen = x.IsOpen, + Type = x.Type, + ReceiveDate = x.ReceiveDate, + OpenDate = x.OpenDate, + Payload = x.Payload == "" ? null : JsonConvert.DeserializeObject(Regex.Unescape(x.Payload)) + }).ToList(); + + var _data = new { data = data2, total = data_search.Count(), totalNoti = data_search.Where(x => x.IsOpen == false).Count() }; return _data; } catch From 1c1347bb9306e1df4a089a374c050f5bc0c9e292 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Thu, 18 Jan 2024 19:12:40 +0700 Subject: [PATCH 2/2] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=20api=20noti=20?= =?UTF-8?q?=E0=B8=97=E0=B8=B5=E0=B9=88=E0=B8=AD=E0=B9=88=E0=B8=B2=E0=B8=99?= =?UTF-8?q?=E0=B9=81=E0=B8=A5=E0=B9=89=E0=B8=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MessageQueue/NotificationRepository.cs | 64 ++++++++++++++----- .../Controllers/MessageController.cs | 25 ++++++++ 2 files changed, 73 insertions(+), 16 deletions(-) diff --git a/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs b/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs index cfa855f1..091bc1c3 100644 --- a/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs +++ b/BMA.EHR.Application/Repositories/MessageQueue/NotificationRepository.cs @@ -55,13 +55,30 @@ namespace BMA.EHR.Application.Repositories.MessageQueue .Where(x => x.DeleteDate == null) .OrderByDescending(x => x.ReceiveDate) .ToListAsync(); - + var totalNoti = data_search.Where(x => x.IsOpen == false).Count(); var data = data_search .Skip((page - 1) * pageSize) .Take(pageSize) - .ToList(); + .Select(x => new NotificationResponse + { + Id = x.Id, + Body = x.Body, + ReceiverUserId = x.ReceiverUserId, + IsOpen = x.IsOpen, + Type = x.Type, + ReceiveDate = x.ReceiveDate, + OpenDate = x.OpenDate, + Payload = x.Payload == "" ? null : JsonConvert.DeserializeObject(Regex.Unescape(x.Payload)) + }).ToList(); - var data_opens = data.Where(x => x.IsOpen == false).ToList(); + var data_opens = await _dbContext.Set() + .Where(x => x.ReceiverUserId == profile.Id) + .Where(x => x.DeleteDate == null) + .OrderByDescending(x => x.ReceiveDate) + .Skip((page - 1) * pageSize) + .Take(pageSize) + .Where(x => x.IsOpen == false) + .ToListAsync(); foreach (var data_open in data_opens) { data_open.IsOpen = true; @@ -69,19 +86,7 @@ namespace BMA.EHR.Application.Repositories.MessageQueue } await _dbContext.SaveChangesAsync(); - var data2 = data.Select(x => new NotificationResponse - { - Id = x.Id, - Body = x.Body, - ReceiverUserId = x.ReceiverUserId, - IsOpen = x.IsOpen, - Type = x.Type, - ReceiveDate = x.ReceiveDate, - OpenDate = x.OpenDate, - Payload = x.Payload == "" ? null : JsonConvert.DeserializeObject(Regex.Unescape(x.Payload)) - }).ToList(); - - var _data = new { data = data2, total = data_search.Count(), totalNoti = data_search.Where(x => x.IsOpen == false).Count() }; + var _data = new { data, total = data_search.Count(), totalNoti = totalNoti }; return _data; } catch @@ -90,6 +95,33 @@ namespace BMA.EHR.Application.Repositories.MessageQueue } } + public async Task GetMyNotificationAsyncNoread() + { + try + { + var profile = await _dbContext.Set() + .FirstOrDefaultAsync(p => p.KeycloakId == Guid.Parse(UserId!)); + + if (profile == null) + { + return 0; + } + + var data_search = await _dbContext.Set() + .Where(x => x.ReceiverUserId == profile.Id) + .Where(x => x.DeleteDate == null) + .Where(x => x.IsOpen == false) + .OrderByDescending(x => x.ReceiveDate) + .ToListAsync(); + + return data_search.Count(); + } + catch + { + throw; + } + } + public async Task DeleteMyNotificationAsync(Guid id) { try diff --git a/BMA.EHR.Command.Service/Controllers/MessageController.cs b/BMA.EHR.Command.Service/Controllers/MessageController.cs index cde70c46..a4bbc006 100644 --- a/BMA.EHR.Command.Service/Controllers/MessageController.cs +++ b/BMA.EHR.Command.Service/Controllers/MessageController.cs @@ -134,6 +134,31 @@ namespace BMA.EHR.Command.Service.Controllers } } + /// + /// แสดงข้อมูล Notification ของ user ที่ Login ที่ยังไม่ได้อ่าน + /// + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("my-notifications/noread")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetMyNotificationAsyncNoread() + { + try + { + var noti = await _notificationRepository.GetMyNotificationAsyncNoread(); + + return Success(noti); + } + catch + { + throw; + } + } + /// /// ลบข้อมูล Notification ของ user ที่ Login ///