From af0d6e2d308d2e0a9af81c2bf02bd3feeb30079c Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 28 Jul 2023 11:37:27 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D1=82=D0=BE=D0=B4,=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B4=D0=B0=D1=8E=D1=89=D0=B8=D0=B9=20=D0=BA=D0=BE=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D1=82=D0=B2=D0=BE=20=D0=BD=D0=B5=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=82=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D1=83?= =?UTF-8?q?=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/INotificationRepository.cs | 33 +++++++++++------- .../Repository/NotificationRepository.cs | 13 ++++++- .../Controllers/NotificationController.cs | 34 +++++++++++++++---- 3 files changed, 60 insertions(+), 20 deletions(-) diff --git a/AsbCloudApp/Repositories/INotificationRepository.cs b/AsbCloudApp/Repositories/INotificationRepository.cs index 0bbdffbd..0b5db967 100644 --- a/AsbCloudApp/Repositories/INotificationRepository.cs +++ b/AsbCloudApp/Repositories/INotificationRepository.cs @@ -1,8 +1,8 @@ -using System.Threading; -using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Requests; using AsbCloudApp.Services; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudApp.Repositories; @@ -11,14 +11,23 @@ namespace AsbCloudApp.Repositories; /// public interface INotificationRepository : ICrudRepository { - /// - /// Получение уведомлений по параметрам - /// - /// - /// - /// - /// - Task> GetNotificationsAsync(int idUser, - NotificationRequest request, - CancellationToken cancellationToken); + /// + /// Получение уведомлений по параметрам + /// + /// + /// + /// + /// + Task> GetNotificationsAsync(int idUser, + NotificationRequest request, + CancellationToken cancellationToken); + + /// + /// Получение количества непрочтенных уведомлений + /// + /// + /// + /// + Task GetUnreadCountAsync(int idUser, + CancellationToken cancellationToken); } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Repository/NotificationRepository.cs b/AsbCloudInfrastructure/Repository/NotificationRepository.cs index c3302c95..15014675 100644 --- a/AsbCloudInfrastructure/Repository/NotificationRepository.cs +++ b/AsbCloudInfrastructure/Repository/NotificationRepository.cs @@ -54,7 +54,18 @@ public class NotificationRepository : CrudRepositoryBase BuildQuery(int idUser, + + public async Task GetUnreadCountAsync(int idUser, CancellationToken cancellationToken) + { + var count = await dbContext.Notifications + .Where(n => n.ReadDate == null) + .Where(n => n.IdUser == idUser) + .CountAsync(cancellationToken); + + return count; + } + + private IQueryable BuildQuery(int idUser, NotificationRequest request) { var query = dbContext.Notifications diff --git a/AsbCloudWebApi/Controllers/NotificationController.cs b/AsbCloudWebApi/Controllers/NotificationController.cs index 3646647d..00ab0a24 100644 --- a/AsbCloudWebApi/Controllers/NotificationController.cs +++ b/AsbCloudWebApi/Controllers/NotificationController.cs @@ -111,13 +111,33 @@ public class NotificationController : ControllerBase return Ok(result); } - /// - /// Удаление уведомления - /// - /// Id уведомления - /// - /// - [HttpDelete] + /// + /// Получение количества непрочитанных уведомлений + /// + /// + /// + [HttpGet] + [Route("unreadNotificationCount")] + [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] + public async Task GetUnreadCountAsync(CancellationToken cancellationToken) + { + int? idUser = User.GetUserId(); + + if (!idUser.HasValue) + return Forbid(); + + var result = await notificationRepository.GetUnreadCountAsync(idUser.Value, cancellationToken); + + return Ok(result); + } + + /// + /// Удаление уведомления + /// + /// Id уведомления + /// + /// + [HttpDelete] [Route("delete")] public async Task DeleteAsync([Required] int idNotification, CancellationToken cancellationToken)