package cn.iocoder.yudao.module.im.service.face; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.im.controller.admin.face.vo.useritem.ImFaceUserItemSaveReqVO; import cn.iocoder.yudao.module.im.controller.admin.manager.face.vo.useritem.ImFaceUserItemManagerPageReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.face.ImFaceUserItemDO; import cn.iocoder.yudao.module.im.dal.mysql.face.ImFaceUserItemMapper; import cn.iocoder.yudao.module.im.framework.config.ImProperties; import jakarta.annotation.Resource; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FACE_USER_ITEM_DUPLICATED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FACE_USER_ITEM_MAX_LIMIT; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FACE_USER_ITEM_NOT_EXISTS; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FACE_USER_ITEM_NOT_OWN; /** * IM 用户私有表情 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class ImFaceUserItemServiceImpl implements ImFaceUserItemService { @Resource private ImFaceUserItemMapper faceUserItemMapper; @Resource private ImProperties imProperties; @Override public List getFaceUserItemList(Long userId) { return faceUserItemMapper.selectListByUserId(userId); } @Override public Long createFaceUserItem(Long userId, ImFaceUserItemSaveReqVO reqVO) { // 1.1 同 URL 已存在则报错 if (faceUserItemMapper.selectByUserIdAndUrl(userId, reqVO.getUrl()) != null) { throw exception(FACE_USER_ITEM_DUPLICATED); } // 1.2 超过最大数量限制则报错 int maxCount = imProperties.getFace().getUserItemMaxCount(); if (faceUserItemMapper.selectCountByUserId(userId) >= maxCount) { throw exception(FACE_USER_ITEM_MAX_LIMIT, maxCount); } // 2. 入库 ImFaceUserItemDO item = BeanUtils.toBean(reqVO, ImFaceUserItemDO.class).setUserId(userId); try { faceUserItemMapper.insert(item); } catch (DuplicateKeyException ex) { throw exception(FACE_USER_ITEM_DUPLICATED); } return item.getId(); } @Override public void deleteFaceUserItem(Long userId, Long id) { // 1.1 校验存在 ImFaceUserItemDO item = faceUserItemMapper.selectById(id); if (item == null) { throw exception(FACE_USER_ITEM_NOT_EXISTS); } // 1.2 校验归属:防止 A 用户传 B 用户的表情 id 删别人的 if (ObjectUtil.notEqual(item.getUserId(), userId)) { throw exception(FACE_USER_ITEM_NOT_OWN); } // 2. 删除 faceUserItemMapper.deleteById(id); } // ==================== 管理后台 ==================== @Override public PageResult getFaceUserItemPage(ImFaceUserItemManagerPageReqVO reqVO) { return faceUserItemMapper.selectPage(reqVO); } @Override public void deleteFaceUserItem(Long id) { // 1. 校验存在 if (faceUserItemMapper.selectById(id) == null) { throw exception(FACE_USER_ITEM_NOT_EXISTS); } // 2. 删除 faceUserItemMapper.deleteById(id); } }