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();
}
}