using System.ComponentModel.DataAnnotations; using AGSS.Models.Template; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace AGSS.Controllers.Dict { [ApiController] [Route("api/[controller]")] // [Produces("application/json")] public class DictController : ControllerBase { private readonly DictService _dictService; private readonly ILogger _logger; public DictController(DictService dictService, ILogger logger) { _dictService = dictService; _logger = logger; } // 1. 获取父级列表 [HttpGet("parents")] public async Task GetParents([FromQuery] string? label) { try { var result = await _dictService.GetParentsAsync(label); return Ok(new ReturnTemplate(200, "获取成功啦!", result)); } catch (Exception ex) { return Ok(new ReturnTemplate(500, "失败,服务器类错误!", ex)); } } // 2. 创建父级项 // [Authorize(Roles = "Admin")] [HttpPost("parents")] public async Task CreateParent([FromBody] CreateParentRequest request) { try { var result = await _dictService.CreateParentAsync(request.Label, request.Value); return Ok(new ReturnTemplate(200, "创建成功啦!", result)); } catch (Exception ex) { return Ok(new ReturnTemplate(500, "错误", ex.Message)); } } // 请求模型 public class CreateParentRequest { [Required(ErrorMessage = "字典标签不能为空")] [StringLength(100, ErrorMessage = "标签长度不能超过100字符")] public string Label { get; set; } = null!; [Required(ErrorMessage = "字典值不能为空")] [StringLength(50, ErrorMessage = "值长度不能超过50字符")] public string Value { get; set; } = null!; } // 2.1 更新父级项 [Authorize(Roles = "Admin")] [HttpPut("parents/{uuid}")] public async Task UpdateParent( [FromRoute] Guid uuid, [FromBody] UpdateParentRequest request) { try { await _dictService.UpdateParentAsync(uuid, request.Label); return Ok(new ReturnTemplate(200, "创建成功啦!", "")); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "失败", ex)); } } public class UpdateParentRequest { [Required(ErrorMessage = "字典标签不能为空")] [StringLength(100, ErrorMessage = "标签长度不能超过100字符")] public string Label { get; set; } = null!; } // 3. 删除父级项 [Authorize(Roles = "Admin")] [HttpDelete("parents/{uuid}")] public async Task DeleteParent([FromRoute] Guid uuid) { try { await _dictService.DeleteParentAsync(uuid); return Ok(new ReturnTemplate(200, "删除成功啦!", "")); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "失败", ex)); } } // 4. 创建子项 [HttpPost("children")] public async Task CreateChild([FromBody] CreateChildRequest request) { try { var result = await _dictService.CreateChildAsync( request.ParentId, request.ParentValue, request.Label, request.Value, request.LabelEn, request.Remark, request.Tag); return Ok(new ReturnTemplate(200, "创建成功啦!", result)); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "我们遇到了一些问题,无法删除!", "")); } } public class CreateChildRequest { [Required(ErrorMessage = "父级ID不能为空")] public Guid ParentId { get; set; } [Required(ErrorMessage = "父级值不能为空")] public string ParentValue { get; set; } = null!; [Required(ErrorMessage = "字典标签不能为空")] public string Label { get; set; } = null!; [Required(ErrorMessage = "字典值不能为空")] public string Value { get; set; } = null!; public string? LabelEn { get; set; } public string? Remark { get; set; } public string? Tag { get; set; } } // 4.1 更新子项 [HttpPut("children/{uuid}")] public async Task UpdateChild( [FromRoute] Guid uuid, [FromBody] UpdateChildRequest request) { try { await _dictService.UpdateChildAsync( uuid, request.Label, request.Value, request.LabelEn, request.Remark, request.Tag); return Ok(new ReturnTemplate(200, "更新成功啦!", "")); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "失败!", "")); } } public class UpdateChildRequest { [Required(ErrorMessage = "字典标签不能为空")] public string Label { get; set; } = null!; [Required(ErrorMessage = "字典值不能为空")] public string Value { get; set; } = null!; public string? LabelEn { get; set; } public string? Remark { get; set; } public string? Tag { get; set; } } // 5. 删除子项 [HttpDelete("children/{uuid}")] public async Task DeleteChild([FromRoute] Guid uuid) { try { await _dictService.DeleteChildAsync(uuid); return Ok(new ReturnTemplate(200, "删除成功啦!", "")); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "删除失败!", "")); } } // 6. 获取子项 [HttpGet("children")] public async Task GetChildren( [FromQuery, Required] string value, [FromQuery] string? tag = null) { try { var result = await _dictService.GetChildrenAsync(value, tag); return Ok(new ReturnTemplate(200, "查询成功啦!", result)); } catch (Exception ex) { return Ok(new ReturnTemplate(200, "查询失败!", "")); } } } // 统一响应模型 public class ApiResponse { public int Code { get; set; } public string Message { get; set; } = null!; } public class ApiResponse : ApiResponse { public T? Data { get; set; } } }