DD.WellWorkover.Cloud/AsbCloudWebApi/Controllers/NotificationController.cs
Степанов Дмитрий Александрович 96786b1be7 Сервисы для уведомлений
1. Добавил репозиторий для уведомлений
2. Добавил сервисы для уведомлений
2023-07-10 16:56:55 +05:00

129 lines
4.0 KiB
C#

using System;
using System.ComponentModel.DataAnnotations;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace AsbCloudWebApi.Controllers;
/// <summary>
/// Уведомления
/// </summary>
[ApiController]
[Authorize]
[Route("api/notification")]
public class NotificationController : ControllerBase
{
private readonly INotificationService notificationService;
private readonly INotificationRepository notificationRepository;
public NotificationController(INotificationService notificationService,
INotificationRepository notificationRepository)
{
this.notificationService = notificationService;
this.notificationRepository = notificationRepository;
}
/// <summary>
/// Метод отправки уведомления
/// </summary>
/// <param name="idUser">Id пользователя</param>
/// <param name="idNotificationTransport">Id способа отправки уведомления</param>
/// <param name="idNotificationCategory">Id категории уведомления</param>
/// <param name="title">Заголовок уведомления</param>
/// <param name="subject">Сообщение уведомления</param>
/// <param name="timeToLife">Время жизни уведомления</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost]
[Route("send")]
public async Task<IActionResult> SendAsync([Required] int idUser,
[Required] int idNotificationTransport,
[Required] int idNotificationCategory,
[Required] string title,
[Required] string subject,
[Required] TimeSpan timeToLife,
CancellationToken cancellationToken)
{
await notificationService.SendNotificationAsync(idUser,
idNotificationTransport,
idNotificationCategory,
title,
subject,
timeToLife,
cancellationToken);
return Ok();
}
/// <summary>
/// Метод обновления уведомления
/// </summary>
/// <param name="idNotification">Id уведомления</param>
/// <param name="isRead">Прочитано ли уведомление</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPut]
[Route("update")]
public async Task<IActionResult> UpdateAsync([Required] int idNotification,
[Required] bool isRead,
CancellationToken cancellationToken)
{
await notificationService.UpdateNotificationAsync(idNotification,
isRead,
cancellationToken);
return Ok();
}
/// <summary>
/// Метод получения уведомлений по параметрам
/// </summary>
/// <param name="skip">Кол-во пропускаемых записей</param>
/// <param name="take">Кол-во выбираемых записей</param>
/// <param name="idNotificationTransport">Id способа доставки уведомления</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpGet]
[Route("getList")]
[ProducesResponseType(typeof(PaginationContainer<NotificationDto>), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetListAsync(int? skip,
int? take,
[Required] int idNotificationTransport,
CancellationToken cancellationToken)
{
int? idUser = User.GetUserId();
if (!idUser.HasValue)
return Forbid();
var result = await notificationRepository.GetNotificationsAsync(skip,
take,
idUser.Value,
idNotificationTransport,
cancellationToken);
return Ok(result);
}
/// <summary>
/// Метод удаления уведомления
/// </summary>
/// <param name="idNotification">Id уведомления</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpDelete]
[Route("delete")]
public async Task<IActionResult> DeleteAsync([Required] int idNotification,
CancellationToken cancellationToken)
{
await notificationRepository.DeleteAsync(idNotification,
cancellationToken);
return Ok();
}
}