using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Foxel.Models; using Foxel.Models.Request.Tag; using Foxel.Models.Response.Tag; using Foxel.Services.Interface; namespace Foxel.Controllers; [Route("api/tag")] public class TagController(ITagService tagService) : BaseApiController { [HttpGet("get_tags")] public async Task>> GetFilteredTags([FromQuery] FilteredTagsRequest request) { try { var result = await tagService.GetFilteredTagsAsync( request.Page, request.PageSize, request.SearchQuery, request.SortBy, request.SortDirection ); return PaginatedSuccess(result.Data, result.TotalCount, result.Page, result.PageSize); } catch (Exception ex) { return PaginatedError($"获取标签失败: {ex.Message}", 500); } } // 添加一个简化的获取所有标签的方法,内部使用GetFilteredTagsAsync [HttpGet("all")] public async Task>>> GetAllTags() { try { // 使用过滤方法但获取更多数据 var result = await tagService.GetFilteredTagsAsync( page: 1, pageSize: 1000, // 设置一个较大值获取所有标签 sortBy: "pictureCount", sortDirection: "desc" ); return Success(result.Data, "标签获取成功"); } catch (Exception ex) { return Error>($"获取标签失败: {ex.Message}", 500); } } [HttpGet("{id}")] public async Task>> GetTagById(int id) { try { var tag = await tagService.GetTagByIdAsync(id); return Success(tag, "标签获取成功"); } catch (KeyNotFoundException) { return Error("找不到指定标签", 404); } catch (Exception ex) { return Error($"获取标签失败: {ex.Message}", 500); } } [HttpPost("create_tag")] [Authorize] public async Task>> CreateTag([FromBody] CreateTagRequest request) { try { var tag = await tagService.CreateTagAsync(request.Name, request.Description); return Success(tag, "标签创建成功"); } catch (Exception ex) { return Error($"创建标签失败: {ex.Message}", 500); } } [HttpPost("update_tag")] [Authorize] public async Task>> UpdateTag([FromBody] UpdateTagRequest request) { try { var tag = await tagService.UpdateTagAsync(request.Id, request.Name, request.Description); return Success(tag, "标签更新成功"); } catch (KeyNotFoundException) { return Error("找不到要更新的标签", 404); } catch (Exception ex) { return Error($"更新标签失败: {ex.Message}", 500); } } [HttpPost("delete_tag")] [Authorize] public async Task>> DeleteTag([FromBody] int id) { try { var result = await tagService.DeleteTagAsync(id); return Success(result, "标签删除成功"); } catch (KeyNotFoundException) { return Error("找不到要删除的标签", 404); } catch (Exception ex) { return Error($"删除标签失败: {ex.Message}", 500); } } }