using Application.Dto.Icon; using Application; using Service.IconSearch; namespace WebApi.Controllers; /// /// 图标管理控制器 /// [ApiController] [Route("api/icons")] public class IconController( IIconSearchService iconSearchService, ILogger logger ) : ControllerBase { /// /// 生成搜索关键字 /// /// 搜索关键字生成请求 /// 搜索关键字生成响应 [HttpPost("search-keywords")] public async Task> GenerateSearchKeywordsAsync( [FromBody] SearchKeywordsRequest request) { var keywords = await iconSearchService.GenerateSearchKeywordsAsync(request.CategoryName); logger.LogInformation("为分类 {CategoryName} 生成了 {Count} 个搜索关键字", request.CategoryName, keywords.Count); return new SearchKeywordsResponse { Keywords = keywords }.Ok(); } /// /// 搜索图标 /// /// 搜索图标请求 /// 图标候选列表响应 [HttpPost("search")] public async Task>> SearchIconsAsync( [FromBody] SearchIconsRequest request) { var icons = await iconSearchService.SearchIconsAsync(request.Keywords, limit: 20); logger.LogInformation("搜索到 {Count} 个图标候选", icons.Count); var iconDtos = icons.Select(i => new IconCandidateDto { CollectionName = i.CollectionName, IconName = i.IconName, IconIdentifier = i.IconIdentifier }).ToList(); return iconDtos.Ok(); } /// /// 更新分类图标 /// /// 分类ID /// 更新分类图标请求 /// 操作结果 [HttpPut("categories/{categoryId}/icon")] public async Task UpdateCategoryIconAsync( long categoryId, [FromBody] UpdateCategoryIconRequest request) { await iconSearchService.UpdateCategoryIconAsync(categoryId, request.IconIdentifier); logger.LogInformation("更新分类 {CategoryId} 的图标为 {IconIdentifier}", categoryId, request.IconIdentifier); return "更新分类图标成功".Ok(); } }