新增动态点赞列表接口

This commit is contained in:
tianfeng 2026-01-30 15:03:57 +08:00
parent 03039f99a9
commit 3dd2d99c22
8 changed files with 228 additions and 15 deletions

View File

@ -8,11 +8,7 @@ import com.red.circle.common.business.dto.cmd.IdLongCmd;
import com.red.circle.common.business.dto.cmd.app.AppIdLongCmd;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.web.controller.BaseController;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicCommentListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicMessageListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicSendRestrictCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicTagCO;
import com.red.circle.other.app.dto.clientobject.dynamic.*;
import com.red.circle.other.app.dto.cmd.dynamic.*;
import com.red.circle.other.app.service.dynamic.DynamicService;
import java.util.List;
@ -91,6 +87,19 @@ public class DynamicRestController extends BaseController {
return dynamicService.listDynamicChildComment(cmd);
}
/**
* 动态点赞列表.
*
* @eo.name 动态点赞列表.
* @eo.url /list/like
* @eo.method get
* @eo.request-type formdata
*/
@GetMapping("/list/like")
public PageResult<DynamicLikeListCO> listDynamicLike(@Validated DynamicLikeLimitCmd cmd) {
return dynamicService.listDynamicLike(cmd);
}
/**
* 动态内容详情.
*

View File

@ -0,0 +1,81 @@
package com.red.circle.other.app.command.dynamic.query;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicLikeListCO;
import com.red.circle.other.app.dto.cmd.dynamic.DynamicLikeLimitCmd;
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
import com.red.circle.other.domain.model.user.UserProfile;
import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicContent;
import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicLike;
import com.red.circle.other.infra.database.rds.service.dynamic.DynamicContentService;
import com.red.circle.other.infra.database.rds.service.dynamic.DynamicLikeService;
import com.red.circle.other.inner.asserts.DynamicErrorCode;
import com.red.circle.tool.core.collection.CollectionUtils;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 动态点赞列表查询.
*
* @author pengshigang
* @since 2025-01-29
*/
@Component
@RequiredArgsConstructor
public class DynamicLikeQryExe {
private final UserProfileGateway userProfileGateway;
private final DynamicContentService dynamicContentService;
private final DynamicLikeService dynamicLikeService;
public PageResult<DynamicLikeListCO> execute(DynamicLikeLimitCmd cmd) {
DynamicContent dynamicContent = dynamicContentService.getById(cmd.getDynamicId());
ResponseAssert.notNull(DynamicErrorCode.CONTENT_IS_NULL, dynamicContent);
ResponseAssert.isFalse(DynamicErrorCode.CONTENT_DELETE, dynamicContent.getDel());
PageResult<DynamicLike> likes = pageData(cmd);
if (CollectionUtils.isEmpty(likes.getRecords())) {
return PageResult.newPageResult(0);
}
Map<Long, UserProfile> userMap = userProfileGateway.mapByUserIds(getUserIds(likes));
return likes.convert(like -> {
DynamicLikeListCO listCO = new DynamicLikeListCO();
UserProfile createUser = userMap.get(like.getCreateUser());
if (Objects.isNull(createUser)) {
return null;
}
listCO.setUserAvatar(createUser.getUserAvatar());
listCO.setUserNickname(createUser.getUserNickname());
listCO.setUserSex(createUser.getUserSex());
listCO.setUserId(createUser.getId());
listCO.setId(like.getId());
listCO.setDynamicId(like.getDynamicContentId());
listCO.setCreateTime(like.getCreateTime());
return listCO;
});
}
private Set<Long> getUserIds(PageResult<DynamicLike> likes) {
return likes.getRecords().stream()
.map(DynamicLike::getCreateUser)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
private PageResult<DynamicLike> pageData(DynamicLikeLimitCmd cmd) {
return dynamicLikeService.pageByTimeDesc(cmd.getPageReq(), cmd.getDynamicId());
}
}

View File

@ -20,6 +20,7 @@ import com.red.circle.other.app.command.dynamic.delete.DynamicMessageAllDelCmdEx
import com.red.circle.other.app.command.dynamic.delete.DynamicMessageDelCmdExe;
import com.red.circle.other.app.command.dynamic.query.DynamicChildCommentQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicCommentQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicLikeQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicDetailsQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicFollowQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicLatestQryExe;
@ -28,11 +29,7 @@ import com.red.circle.other.app.command.dynamic.query.DynamicMessageQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicMyQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicPopularQryExe;
import com.red.circle.other.app.command.dynamic.query.DynamicTagQryExe;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicCommentListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicMessageListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicSendRestrictCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicTagCO;
import com.red.circle.other.app.dto.clientobject.dynamic.*;
import com.red.circle.other.app.dto.cmd.dynamic.*;
import java.util.List;
@ -64,6 +61,7 @@ public class DynamicServiceImpl implements DynamicService {
private final DynamicDetailsQryExe dynamicDetailsQryExe;
private final DynamicCommentQryExe dynamicCommentQryExe;
private final DynamicChildCommentQryExe dynamicChildCommentQryExe;
private final DynamicLikeQryExe dynamicLikeQryExe;
private final DynamicCommentDelCmdExe dynamicCommentDelExe;
private final DynamicCommentLikeCmdExe dynamicCommentLikeExe;
private final DynamicContentDelCmdExe dynamicContentDelExe;
@ -96,6 +94,11 @@ public class DynamicServiceImpl implements DynamicService {
return dynamicChildCommentQryExe.execute(cmd);
}
@Override
public PageResult<DynamicLikeListCO> listDynamicLike(DynamicLikeLimitCmd cmd) {
return dynamicLikeQryExe.execute(cmd);
}
@Override
public DynamicListCO getDynamicDetails(IdLongCmd cmd) {
return dynamicDetailsQryExe.execute(cmd);

View File

@ -0,0 +1,64 @@
package com.red.circle.other.app.dto.clientobject.dynamic;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.red.circle.framework.dto.ClientObject;
import java.io.Serial;
import java.sql.Timestamp;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 动态点赞列表.
*
* @author pengshigang
* @since 2025-01-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class DynamicLikeListCO extends ClientObject {
@Serial
private static final long serialVersionUID = 1L;
/**
* 点赞id.
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/**
* 动态内容id.
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long dynamicId;
/**
* 用户头像.
*/
private String userAvatar;
/**
* 用户昵称.
*/
private String userNickname;
/**
* 用户性别:0 1 .
*/
private Integer userSex;
/**
* 用户id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;
/**
* 创建时间.
*/
private Timestamp createTime;
}

View File

@ -0,0 +1,35 @@
package com.red.circle.other.app.dto.cmd.dynamic;
import com.red.circle.common.business.dto.PageReq;
import com.red.circle.common.business.dto.cmd.AppExtCommand;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 动态-点赞列表.
*
* @author pengshigang
* @since 2025-01-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DynamicLikeLimitCmd extends AppExtCommand {
/**
* 页码.
*
* @eo.required
*/
@NotNull
private PageReq pageReq;
/**
* 动态内容id.
*
* @eo.required
*/
@NotNull
private Long dynamicId;
}

View File

@ -5,11 +5,7 @@ import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.common.business.dto.cmd.IdLongCmd;
import com.red.circle.common.business.dto.cmd.app.AppIdLongCmd;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicCommentListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicMessageListCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicSendRestrictCO;
import com.red.circle.other.app.dto.clientobject.dynamic.DynamicTagCO;
import com.red.circle.other.app.dto.clientobject.dynamic.*;
import com.red.circle.other.app.dto.cmd.dynamic.*;
import java.util.List;
@ -45,6 +41,11 @@ public interface DynamicService {
*/
PageResult<DynamicCommentListCO> listDynamicChildComment(DynamicChildCommentLimitCmd cmd);
/**
* 动态点赞列表.
*/
PageResult<DynamicLikeListCO> listDynamicLike(DynamicLikeLimitCmd cmd);
/**
* 动态内容详情.
*/

View File

@ -1,5 +1,7 @@
package com.red.circle.other.infra.database.rds.service.dynamic;
import com.red.circle.framework.dto.PageQuery;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.mybatis.service.BaseService;
import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicLike;
import java.util.Collection;
@ -48,4 +50,12 @@ public interface DynamicLikeService extends BaseService<DynamicLike> {
* @param contentIds 动态内容ID
*/
Map<Long, Long> mapLikeQuantity(Collection<Long> contentIds);
/**
* 分页查询动态点赞列表按时间倒序
*
* @param pageQuery 分页参数
* @param contentId 动态内容ID
*/
PageResult<DynamicLike> pageByTimeDesc(PageQuery pageQuery, Long contentId);
}

View File

@ -2,6 +2,8 @@ package com.red.circle.other.infra.database.rds.service.dynamic.impl;
import com.google.common.collect.Maps;
import com.red.circle.framework.dto.PageQuery;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.mybatis.constant.PageConstant;
import com.red.circle.framework.mybatis.service.impl.BaseServiceImpl;
import com.red.circle.other.infra.database.cache.service.other.DynamicCacheService;
@ -111,4 +113,12 @@ public class DynamicLikeServiceImpl extends BaseServiceImpl<DynamicLikeDAO, Dyna
return result;
}
@Override
public PageResult<DynamicLike> pageByTimeDesc(PageQuery pageQuery, Long contentId) {
return query()
.eq(DynamicLike::getDynamicContentId, contentId)
.orderByDesc(DynamicLike::getCreateTime)
.page(pageQuery);
}
}