feat(themes): 新增主题模糊搜索接口及鉴权放行
支持按名称模糊搜索主题,并标记用户已购状态;同步放开 /themes/search 无需登录访问
This commit is contained in:
@@ -92,6 +92,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
|||||||
"/themes/purchase/list",
|
"/themes/purchase/list",
|
||||||
"/themes/detail",
|
"/themes/detail",
|
||||||
"/themes/recommended",
|
"/themes/recommended",
|
||||||
|
"/themes/search",
|
||||||
"/user-themes/batch-delete",
|
"/user-themes/batch-delete",
|
||||||
"/products/listByType",
|
"/products/listByType",
|
||||||
"/products/detail",
|
"/products/detail",
|
||||||
|
|||||||
@@ -91,4 +91,12 @@ public class ThemesController {
|
|||||||
return ResultUtils.success(result);
|
return ResultUtils.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/search")
|
||||||
|
@Operation(summary = "搜索主题", description = "根据主题名称模糊搜索主题")
|
||||||
|
public BaseResponse<List<KeyboardThemesRespVO>> searchThemes(@RequestParam String themeName) {
|
||||||
|
Long userId = StpUtil.getLoginIdAsLong();
|
||||||
|
List<KeyboardThemesRespVO> result = themesService.searchThemesByName(themeName, userId);
|
||||||
|
return ResultUtils.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,4 +36,12 @@ public interface KeyboardThemesService extends IService<KeyboardThemes>{
|
|||||||
*/
|
*/
|
||||||
List<KeyboardThemesRespVO> getRecommendedThemes(Long userId);
|
List<KeyboardThemesRespVO> getRecommendedThemes(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据主题名称模糊搜索主题
|
||||||
|
* @param themeName 主题名称关键字
|
||||||
|
* @param userId 用户ID
|
||||||
|
* @return 主题列表
|
||||||
|
*/
|
||||||
|
List<KeyboardThemesRespVO> searchThemesByName(String themeName, Long userId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,4 +157,30 @@ public class KeyboardThemesServiceImpl extends ServiceImpl<KeyboardThemesMapper,
|
|||||||
return vo;
|
return vo;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<KeyboardThemesRespVO> searchThemesByName(String themeName, Long userId) {
|
||||||
|
// 根据主题名称模糊搜索
|
||||||
|
List<KeyboardThemes> themesList = this.lambdaQuery()
|
||||||
|
.eq(KeyboardThemes::getDeleted, false)
|
||||||
|
.eq(KeyboardThemes::getThemeStatus, true)
|
||||||
|
.like(KeyboardThemes::getThemeName, themeName)
|
||||||
|
.list();
|
||||||
|
|
||||||
|
// 查询用户已购买的主题ID集合
|
||||||
|
Set<Long> purchasedThemeIds = purchaseService.lambdaQuery()
|
||||||
|
.eq(KeyboardThemePurchase::getUserId, userId)
|
||||||
|
.eq(KeyboardThemePurchase::getPayStatus, (short) 1)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(KeyboardThemePurchase::getThemeId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 转换为VO并设置购买状态
|
||||||
|
return themesList.stream().map(theme -> {
|
||||||
|
KeyboardThemesRespVO vo = BeanUtil.copyProperties(theme, KeyboardThemesRespVO.class);
|
||||||
|
vo.setIsPurchased(purchasedThemeIds.contains(theme.getId()));
|
||||||
|
return vo;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user