From fe167aa0b9dc7806d0fadd6d6058435371a97daf Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:27:18 +0800 Subject: [PATCH] Return structured category and tag data in change logs --- .../com/openisle/dto/PostChangeLogDto.java | 9 ++-- .../openisle/mapper/PostChangeLogMapper.java | 44 +++++++++++++++++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java b/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java index 502dea6aa..f07373c46 100644 --- a/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java +++ b/backend/src/main/java/com/openisle/dto/PostChangeLogDto.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; +import java.util.List; @Getter @Setter @@ -18,10 +19,10 @@ public class PostChangeLogDto { private String newTitle; private String oldContent; private String newContent; - private String oldCategory; - private String newCategory; - private String oldTags; - private String newTags; + private CategoryDto oldCategory; + private CategoryDto newCategory; + private List oldTags; + private List newTags; private Boolean oldClosed; private Boolean newClosed; private LocalDateTime oldPinnedAt; diff --git a/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java b/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java index bdc46c079..f6b2163e2 100644 --- a/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java +++ b/backend/src/main/java/com/openisle/mapper/PostChangeLogMapper.java @@ -1,9 +1,15 @@ package com.openisle.mapper; +import com.openisle.dto.CategoryDto; import com.openisle.dto.PostChangeLogDto; +import com.openisle.dto.TagDto; import com.openisle.model.*; import org.springframework.stereotype.Component; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @Component public class PostChangeLogMapper { public PostChangeLogDto toDto(PostChangeLog log) { @@ -22,11 +28,41 @@ public class PostChangeLogMapper { dto.setOldContent(c.getOldContent()); dto.setNewContent(c.getNewContent()); } else if (log instanceof PostCategoryChangeLog cat) { - dto.setOldCategory(cat.getOldCategory()); - dto.setNewCategory(cat.getNewCategory()); + if (cat.getOldCategory() != null) { + CategoryDto oldCat = new CategoryDto(); + oldCat.setName(cat.getOldCategory()); + dto.setOldCategory(oldCat); + } + if (cat.getNewCategory() != null) { + CategoryDto newCat = new CategoryDto(); + newCat.setName(cat.getNewCategory()); + dto.setNewCategory(newCat); + } } else if (log instanceof PostTagChangeLog tag) { - dto.setOldTags(tag.getOldTags()); - dto.setNewTags(tag.getNewTags()); + if (tag.getOldTags() != null && !tag.getOldTags().isBlank()) { + List oldTags = Arrays.stream(tag.getOldTags().split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(name -> { + TagDto t = new TagDto(); + t.setName(name); + return t; + }) + .collect(Collectors.toList()); + dto.setOldTags(oldTags); + } + if (tag.getNewTags() != null && !tag.getNewTags().isBlank()) { + List newTags = Arrays.stream(tag.getNewTags().split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .map(name -> { + TagDto t = new TagDto(); + t.setName(name); + return t; + }) + .collect(Collectors.toList()); + dto.setNewTags(newTags); + } } else if (log instanceof PostClosedChangeLog cl) { dto.setOldClosed(cl.isOldClosed()); dto.setNewClosed(cl.isNewClosed());