diff --git a/backend/src/main/java/com/openisle/dto/PostMetaDto.java b/backend/src/main/java/com/openisle/dto/PostMetaDto.java index 1667b047f..81df37a9f 100644 --- a/backend/src/main/java/com/openisle/dto/PostMetaDto.java +++ b/backend/src/main/java/com/openisle/dto/PostMetaDto.java @@ -1,6 +1,7 @@ package com.openisle.dto; import java.time.LocalDateTime; +import java.util.List; import lombok.Data; /** Lightweight post metadata used in user profile lists. */ @@ -11,6 +12,8 @@ public class PostMetaDto { private String title; private String snippet; private LocalDateTime createdAt; - private String category; + private CategoryDto category; + private List tags; private long views; + private long commentCount; } diff --git a/backend/src/main/java/com/openisle/mapper/UserMapper.java b/backend/src/main/java/com/openisle/mapper/UserMapper.java index 43aaf8ef0..50ad6cb27 100644 --- a/backend/src/main/java/com/openisle/mapper/UserMapper.java +++ b/backend/src/main/java/com/openisle/mapper/UserMapper.java @@ -5,6 +5,7 @@ import com.openisle.model.Comment; import com.openisle.model.Post; import com.openisle.model.User; import com.openisle.service.*; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; @@ -23,6 +24,8 @@ public class UserMapper { private final PostReadService postReadService; private final LevelService levelService; private final MedalService medalService; + private final TagMapper tagMapper; + private final CategoryMapper categoryMapper; @Value("${app.snippet-length}") private int snippetLength; @@ -88,7 +91,12 @@ public class UserMapper { dto.setSnippet(content); } dto.setCreatedAt(post.getCreatedAt()); - dto.setCategory(post.getCategory().getName()); + dto.setCategory(categoryMapper.toDto(post.getCategory())); + dto.setTags(post.getTags().stream().map(tagMapper::toDto).collect(Collectors.toList())); + if (post.getLastReplyAt() == null) { + commentService.updatePostCommentStats(post); + } + dto.setCommentCount(post.getCommentCount()); dto.setViews(post.getViews()); return dto; } diff --git a/frontend_nuxt/components/ProfileTimelineCommentGroup.vue b/frontend_nuxt/components/ProfileTimelineCommentGroup.vue new file mode 100644 index 000000000..3db68815e --- /dev/null +++ b/frontend_nuxt/components/ProfileTimelineCommentGroup.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/frontend_nuxt/components/ProfileTimelinePostItem.vue b/frontend_nuxt/components/ProfileTimelinePostItem.vue new file mode 100644 index 000000000..91852aa09 --- /dev/null +++ b/frontend_nuxt/components/ProfileTimelinePostItem.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/frontend_nuxt/pages/users/[id].vue b/frontend_nuxt/pages/users/[id].vue index 49b66cdcd..c141ec7d4 100644 --- a/frontend_nuxt/pages/users/[id].vue +++ b/frontend_nuxt/pages/users/[id].vue @@ -212,107 +212,9 @@