package cn.iocoder.yudao.module.product.controller.app.favorite; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoritePageReqVO; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoriteReqVO; import cn.iocoder.yudao.module.product.controller.app.favorite.vo.AppFavoriteRespVO; import cn.iocoder.yudao.module.product.convert.favorite.ProductFavoriteConvert; import cn.iocoder.yudao.module.product.dal.dataobject.favorite.ProductFavoriteDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.service.favorite.ProductFavoriteService; import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.web.bind.annotation.*; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "用户 APP - 商品收藏") @RestController @RequestMapping("/product/favorite") public class AppFavoriteController { @Resource private ProductFavoriteService productFavoriteService; @Resource private ProductSpuService productSpuService; @PostMapping(value = "/create") @Operation(summary = "添加商品收藏") public CommonResult createFavorite(@RequestBody @Valid AppFavoriteReqVO reqVO) { return success(productFavoriteService.createFavorite(getLoginUserId(), reqVO.getSpuId())); } @DeleteMapping(value = "/delete") @Operation(summary = "取消单个商品收藏") public CommonResult deleteFavorite(@RequestBody @Valid AppFavoriteReqVO reqVO) { productFavoriteService.deleteFavorite(getLoginUserId(), reqVO.getSpuId()); return success(Boolean.TRUE); } @GetMapping(value = "/page") @Operation(summary = "获得商品收藏分页") public CommonResult> getFavoritePage(AppFavoritePageReqVO reqVO) { PageResult favoritePage = productFavoriteService.getFavoritePage(getLoginUserId(), reqVO); if (CollUtil.isEmpty(favoritePage.getList())) { return success(PageResult.empty()); } // 得到商品 spu 信息 List favorites = favoritePage.getList(); List spuIds = convertList(favorites, ProductFavoriteDO::getSpuId); List spus = productSpuService.getSpuList(spuIds); // 转换 VO 结果 PageResult pageResult = new PageResult<>(favoritePage.getTotal()); pageResult.setList(ProductFavoriteConvert.INSTANCE.convertList(favorites, spus)); return success(pageResult); } @GetMapping(value = "/exits") @Operation(summary = "检查是否收藏过商品") public CommonResult isFavoriteExists(AppFavoriteReqVO reqVO) { ProductFavoriteDO favorite = productFavoriteService.getFavorite(getLoginUserId(), reqVO.getSpuId()); return success(favorite != null); } @GetMapping(value = "/get-count") @Operation(summary = "获得商品收藏数量") public CommonResult getFavoriteCount() { return success(productFavoriteService.getFavoriteCount(getLoginUserId())); } }