From 5ae0f9311cfedc13aaf04a4c647f3d441bf356c6 Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Mon, 8 Sep 2025 13:54:35 +0800 Subject: [PATCH] feat: add result change log entities --- .../com/openisle/dto/PostChangeLogDto.java | 1 + .../openisle/mapper/PostChangeLogMapper.java | 5 ++++- .../com/openisle/model/PostChangeLog.java | 2 +- .../com/openisle/model/PostChangeType.java | 4 +++- .../model/PostLotteryResultChangeLog.java | 16 ++++++++++++++ .../model/PostVoteResultChangeLog.java | 16 ++++++++++++++ .../service/PostChangeLogService.java | 14 +++++++++++++ .../components/PostChangeLogItem.vue | 21 ++++++++++++++++++- frontend_nuxt/pages/posts/[id]/index.vue | 5 +++++ 9 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/com/openisle/model/PostLotteryResultChangeLog.java create mode 100644 backend/src/main/java/com/openisle/model/PostVoteResultChangeLog.java diff --git a/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java b/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java index 57335a56f..502dea6aa 100644 --- a/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java +++ b/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java @@ -11,6 +11,7 @@ import java.time.LocalDateTime; public class PostChangeLogDto { private Long id; private String username; + private String userAvatar; private PostChangeType type; private LocalDateTime time; private String oldTitle; diff --git a/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java b/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java index 025793986..bdc46c079 100644 --- a/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java +++ b/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java @@ -9,7 +9,10 @@ public class PostChangeLogMapper { public PostChangeLogDto toDto(PostChangeLog log) { PostChangeLogDto dto = new PostChangeLogDto(); dto.setId(log.getId()); - dto.setUsername(log.getUser().getUsername()); + if (log.getUser() != null) { + dto.setUsername(log.getUser().getUsername()); + dto.setUserAvatar(log.getUser().getAvatar()); + } dto.setType(log.getType()); dto.setTime(log.getCreatedAt()); if (log instanceof PostTitleChangeLog t) { diff --git a/backend/src/main/java/com/openisle/model/PostChangeLog.java b/backend/src/main/java/com/openisle/model/PostChangeLog.java index d577fdbf9..a30cd3b00 100644 --- a/backend/src/main/java/com/openisle/model/PostChangeLog.java +++ b/backend/src/main/java/com/openisle/model/PostChangeLog.java @@ -23,7 +23,7 @@ public abstract class PostChangeLog { @JoinColumn(name = "post_id") private Post post; - @ManyToOne(fetch = FetchType.LAZY, optional = false) + @ManyToOne(fetch = FetchType.LAZY, optional = true) @JoinColumn(name = "user_id") private User user; diff --git a/backend/src/main/java/com/openisle/model/PostChangeType.java b/backend/src/main/java/com/openisle/model/PostChangeType.java index 5cff69910..68b869f7f 100644 --- a/backend/src/main/java/com/openisle/model/PostChangeType.java +++ b/backend/src/main/java/com/openisle/model/PostChangeType.java @@ -7,5 +7,7 @@ public enum PostChangeType { TAG, CLOSED, PINNED, - FEATURED + FEATURED, + VOTE_RESULT, + LOTTERY_RESULT } diff --git a/backend/src/main/java/com/openisle/model/PostLotteryResultChangeLog.java b/backend/src/main/java/com/openisle/model/PostLotteryResultChangeLog.java new file mode 100644 index 000000000..138d9d9cb --- /dev/null +++ b/backend/src/main/java/com/openisle/model/PostLotteryResultChangeLog.java @@ -0,0 +1,16 @@ +package com.openisle.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@Entity +@Table(name = "post_lottery_result_change_logs") +public class PostLotteryResultChangeLog extends PostChangeLog { +} + diff --git a/backend/src/main/java/com/openisle/model/PostVoteResultChangeLog.java b/backend/src/main/java/com/openisle/model/PostVoteResultChangeLog.java new file mode 100644 index 000000000..32a61c210 --- /dev/null +++ b/backend/src/main/java/com/openisle/model/PostVoteResultChangeLog.java @@ -0,0 +1,16 @@ +package com.openisle.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@Entity +@Table(name = "post_vote_result_change_logs") +public class PostVoteResultChangeLog extends PostChangeLog { +} + diff --git a/backend/src/main/java/com/openisle/service/PostChangeLogService.java b/backend/src/main/java/com/openisle/service/PostChangeLogService.java index b88f43de2..7244c4ca8 100644 --- a/backend/src/main/java/com/openisle/service/PostChangeLogService.java +++ b/backend/src/main/java/com/openisle/service/PostChangeLogService.java @@ -86,6 +86,20 @@ public class PostChangeLogService { logRepository.save(log); } + public void recordVoteResult(Post post) { + PostVoteResultChangeLog log = new PostVoteResultChangeLog(); + log.setPost(post); + log.setType(PostChangeType.VOTE_RESULT); + logRepository.save(log); + } + + public void recordLotteryResult(Post post) { + PostLotteryResultChangeLog log = new PostLotteryResultChangeLog(); + log.setPost(post); + log.setType(PostChangeType.LOTTERY_RESULT); + logRepository.save(log); + } + public List listLogs(Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new com.openisle.exception.NotFoundException("Post not found")); diff --git a/frontend_nuxt/components/PostChangeLogItem.vue b/frontend_nuxt/components/PostChangeLogItem.vue index e5f970054..96db77e06 100644 --- a/frontend_nuxt/components/PostChangeLogItem.vue +++ b/frontend_nuxt/components/PostChangeLogItem.vue @@ -1,7 +1,13 @@