using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using TakeoutSaaS.Application.Dictionary.Abstractions;
using TakeoutSaaS.Application.Dictionary.Contracts;
using TakeoutSaaS.Application.Dictionary.Models;
using TakeoutSaaS.Module.Authorization.Attributes;
using TakeoutSaaS.Shared.Abstractions.Results;
using TakeoutSaaS.Shared.Web.Api;
namespace TakeoutSaaS.AdminApi.Controllers;
///
/// 参数字典管理。
///
/// 字典服务
[ApiVersion("1.0")]
[Authorize]
[Route("api/admin/v{version:apiVersion}/dictionaries")]
public sealed class DictionaryController(IDictionaryAppService dictionaryAppService) : BaseApiController
{
///
/// 查询字典分组。
///
/// 分组查询条件。
/// 取消标记。
/// 分组列表。
[HttpGet]
[PermissionAuthorize("dictionary:group:read")]
[ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
public async Task>> GetGroups([FromQuery] DictionaryGroupQuery query, CancellationToken cancellationToken)
{
// 1. 查询字典分组
var groups = await dictionaryAppService.SearchGroupsAsync(query, cancellationToken);
// 2. 返回分组列表
return ApiResponse>.Ok(groups);
}
///
/// 创建字典分组。
///
/// 创建分组请求。
/// 取消标记。
/// 创建后的分组。
[HttpPost]
[PermissionAuthorize("dictionary:group:create")]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
public async Task> CreateGroup([FromBody] CreateDictionaryGroupRequest request, CancellationToken cancellationToken)
{
// 1. 创建字典分组
var group = await dictionaryAppService.CreateGroupAsync(request, cancellationToken);
// 2. 返回创建结果
return ApiResponse.Ok(group);
}
///
/// 更新字典分组。
///
/// 分组 ID。
/// 更新请求。
/// 取消标记。
/// 更新后的分组。
[HttpPut("{groupId:long}")]
[PermissionAuthorize("dictionary:group:update")]
[ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
public async Task> UpdateGroup(long groupId, [FromBody] UpdateDictionaryGroupRequest request, CancellationToken cancellationToken)
{
// 1. 更新字典分组
var group = await dictionaryAppService.UpdateGroupAsync(groupId, request, cancellationToken);
// 2. 返回更新结果
return ApiResponse.Ok(group);
}
///
/// 删除字典分组。
///
/// 分组 ID。
/// 取消标记。
/// 操作结果。
[HttpDelete("{groupId:long}")]
[PermissionAuthorize("dictionary:group:delete")]
[ProducesResponseType(typeof(ApiResponse