forked from ddrilling/AsbCloudServer
Степанов Дмитрий Александрович
96786b1be7
1. Добавил репозиторий для уведомлений 2. Добавил сервисы для уведомлений
129 lines
4.0 KiB
C#
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();
|
|
}
|
|
} |