Сделал рефакторинг уведомлений

1. Убрал глаголы из Route в контроллере.
2. Создал метод удаления уведомлений по параметрам
This commit is contained in:
parent bbc42208c2
commit 3ac3fded5b
4 changed files with 68 additions and 5 deletions

View File

@ -21,4 +21,13 @@ public interface INotificationRepository : ICrudRepository<NotificationDto>
Task<PaginationContainer<NotificationDto>> GetNotificationsAsync(int idUser, Task<PaginationContainer<NotificationDto>> GetNotificationsAsync(int idUser,
NotificationRequest request, NotificationRequest request,
CancellationToken cancellationToken); CancellationToken cancellationToken);
/// <summary>
/// Удаление уведомлений по параметрам
/// </summary>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<int> DeleteAsync(NotificationDeleteRequest request,
CancellationToken cancellationToken);
} }

View File

@ -0,0 +1,24 @@
using System;
namespace AsbCloudApp.Requests;
/// <summary>
/// Запрос для удаления уведомлений
/// </summary>
public class NotificationDeleteRequest
{
/// <summary>
/// Идентификатор категории
/// </summary>
public int? IdCategory { get; set; }
/// <summary>
/// Меньше или равно дате отправки
/// </summary>
public DateTime? LtSentDate { get; set; }
/// <summary>
/// Меньше или равно дате прочтения
/// </summary>
public DateTime? LtReadDate { get; set; }
}

View File

@ -54,6 +54,24 @@ public class NotificationRepository : CrudRepositoryBase<NotificationDto, Notifi
return result; return result;
} }
public Task<int> DeleteAsync(NotificationDeleteRequest request, CancellationToken cancellationToken)
{
var query = dbContext.Notifications.AsQueryable();
if (request.IdCategory.HasValue)
query = query.Where(n => n.IdNotificationCategory == request.IdCategory.Value);
if (request.LtSentDate.HasValue)
query = query.Where(n => n.SentDate <= request.LtSentDate.Value);
if (request.LtReadDate.HasValue)
query = query.Where(n => n.ReadDate <= request.LtReadDate.Value);
dbContext.Notifications.RemoveRange(query);
return dbContext.SaveChangesAsync(cancellationToken);
}
private IQueryable<Notification> BuildQuery(int idUser, private IQueryable<Notification> BuildQuery(int idUser,
NotificationRequest request) NotificationRequest request)
{ {

View File

@ -36,7 +36,6 @@ public class NotificationController : ControllerBase
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
[Route("send")]
public async Task<IActionResult> SendAsync(NotifyRequest request, CancellationToken cancellationToken) public async Task<IActionResult> SendAsync(NotifyRequest request, CancellationToken cancellationToken)
{ {
await notificationService.NotifyAsync(request, cancellationToken); await notificationService.NotifyAsync(request, cancellationToken);
@ -52,7 +51,6 @@ public class NotificationController : ControllerBase
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut] [HttpPut]
[Route("update")]
public async Task<IActionResult> UpdateAsync([Required] int idNotification, public async Task<IActionResult> UpdateAsync([Required] int idNotification,
[Required] bool isRead, [Required] bool isRead,
CancellationToken cancellationToken) CancellationToken cancellationToken)
@ -71,7 +69,7 @@ public class NotificationController : ControllerBase
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
[Route("get/{idNotification}")] [Route("{idNotification}")]
[ProducesResponseType(typeof(NotificationDto), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(NotificationDto), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetAsync([Required] int idNotification, public async Task<IActionResult> GetAsync([Required] int idNotification,
CancellationToken cancellationToken) CancellationToken cancellationToken)
@ -94,7 +92,6 @@ public class NotificationController : ControllerBase
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
[Route("getList")]
[ProducesResponseType(typeof(PaginationContainer<NotificationDto>), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(PaginationContainer<NotificationDto>), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetListAsync([FromQuery] NotificationRequest request, public async Task<IActionResult> GetListAsync([FromQuery] NotificationRequest request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
@ -118,7 +115,7 @@ public class NotificationController : ControllerBase
/// <param name="cancellationToken"></param> /// <param name="cancellationToken"></param>
/// <returns></returns> /// <returns></returns>
[HttpDelete] [HttpDelete]
[Route("delete")] [Route("{idNotification}")]
public async Task<IActionResult> DeleteAsync([Required] int idNotification, public async Task<IActionResult> DeleteAsync([Required] int idNotification,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
@ -127,4 +124,19 @@ public class NotificationController : ControllerBase
return Ok(); return Ok();
} }
/// <summary>
/// Удаление уведомлений
/// </summary>
/// <param name="request">Параметры запроса</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpDelete]
public async Task<IActionResult> DeleteAsync(NotificationDeleteRequest request,
CancellationToken cancellationToken)
{
await notificationRepository.DeleteAsync(request, cancellationToken);
return Ok();
}
} }