using Dpz.Core.Public.ViewModel.Response;

namespace Dpz.Core.WebApi.Controllers;

/// <summary>
/// 系统通知管理
/// </summary>
[ApiController, Route("api/[controller]"), Authorize(nameof(Permissions.System))]
public class SystemNotificationController(ISystemNotificationHistoryService notificationService)
    : ControllerBase
{
    /// <summary>
    /// 获取最近的系统通知
    /// </summary>
    [HttpGet, AllowAnonymous]
    [ProducesResponseType<List<SystemNotificationHistoryResponse>>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetLatest(CancellationToken cancellationToken = default)
    {
        var list = await notificationService.GetRecentAsync(cancellationToken);
        return Ok(list);
    }

    /// <summary>
    /// 分页获取系统通知记录
    /// </summary>
    /// <param name="query">查询参数</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns></returns>
    [HttpGet("page")]
    [ProducesResponseType<List<SystemNotificationHistoryResponse>>(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> GetPage(
        [FromQuery] SystemNotificationQueryDto query,
        CancellationToken cancellationToken = default
    )
    {
        var list = await notificationService.GetPageAsync(
            query.PageIndex,
            query.PageSize,
            cancellationToken
        );
        list.AddPaginationMetadata(Response.Headers);
        return Ok(list);
    }

    /// <summary>
    /// 删除系统通知记录
    /// </summary>
    /// <param name="id">记录 ID</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns></returns>
    [HttpDelete("{id}")]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> Delete(
        string id,
        CancellationToken cancellationToken = default
    )
    {
        await notificationService.DeleteAsync(id, cancellationToken);
        return NoContent();
    }
}
评论加载中...