From 11e9d97ad106bf37e88d1a6bdb1f33451981bc24 Mon Sep 17 00:00:00 2001 From: devxb Date: Sun, 25 Feb 2024 18:12:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20SurveyBookmark=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EA=B0=90=EC=A7=80=EA=B0=80=20=EB=8F=99=EC=9E=91=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B2=84=EA=B7=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/target/SurveyBookmarkEntity.java | 6 +++++ .../nalab/core/data/target/TargetEntity.java | 5 +++- ...seCase.java => SurveyBookmarkUseCase.java} | 2 +- .../bookmark/SurveyBookmarkPort.java | 8 +++++++ ...ervice.java => SurveyBookmarkService.java} | 7 ++++-- .../me/nalab/survey/domain/target/Target.java | 1 + .../bookmark/SurveyBookmarkAdaptor.java | 24 +++++++++++++++++++ .../common/mapper/TargetEntityMapper.java | 18 ++++++++++++++ .../SurveyBookmarkReplaceController.java | 4 ++-- 9 files changed, 69 insertions(+), 6 deletions(-) rename survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/{SurveyBookmarkReplaceUseCase.java => SurveyBookmarkUseCase.java} (88%) create mode 100644 survey/survey-application/src/main/java/me/nalab/survey/application/port/out/persistence/bookmark/SurveyBookmarkPort.java rename survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/{SurveyBookmarkReplaceService.java => SurveyBookmarkService.java} (80%) create mode 100644 survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/bookmark/SurveyBookmarkAdaptor.java diff --git a/core/data/src/main/java/me/nalab/core/data/target/SurveyBookmarkEntity.java b/core/data/src/main/java/me/nalab/core/data/target/SurveyBookmarkEntity.java index 069b5f35..e906c7f9 100644 --- a/core/data/src/main/java/me/nalab/core/data/target/SurveyBookmarkEntity.java +++ b/core/data/src/main/java/me/nalab/core/data/target/SurveyBookmarkEntity.java @@ -3,8 +3,14 @@ import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.JoinColumn; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +@Getter @Embeddable +@NoArgsConstructor +@AllArgsConstructor public class SurveyBookmarkEntity { @Column(name = "bookmarked_survey_id") diff --git a/core/data/src/main/java/me/nalab/core/data/target/TargetEntity.java b/core/data/src/main/java/me/nalab/core/data/target/TargetEntity.java index c9ef3257..e20ea914 100644 --- a/core/data/src/main/java/me/nalab/core/data/target/TargetEntity.java +++ b/core/data/src/main/java/me/nalab/core/data/target/TargetEntity.java @@ -1,5 +1,6 @@ package me.nalab.core.data.target; +import java.util.HashSet; import java.util.Set; import javax.persistence.CollectionTable; import javax.persistence.Column; @@ -11,6 +12,7 @@ import javax.persistence.Version; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -47,7 +49,8 @@ public class TargetEntity extends TimeBaseEntity { name = "bookmarked_survey", joinColumns = @JoinColumn(name = "target_id") ) - private Set bookmarkedSurveys; + @Builder.Default + private Set bookmarkedSurveys = new HashSet<>(); @Version @Column(name = "version") diff --git a/survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkReplaceUseCase.java b/survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkUseCase.java similarity index 88% rename from survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkReplaceUseCase.java rename to survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkUseCase.java index dbdb864c..a363a9b2 100644 --- a/survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkReplaceUseCase.java +++ b/survey/survey-application/src/main/java/me/nalab/survey/application/port/in/web/bookmark/SurveyBookmarkUseCase.java @@ -2,7 +2,7 @@ import me.nalab.survey.application.common.survey.dto.SurveyBookmarkDto; -public interface SurveyBookmarkReplaceUseCase { +public interface SurveyBookmarkUseCase { /** * targetId에 해당하는 유저에게 survey를 북마크합니다. diff --git a/survey/survey-application/src/main/java/me/nalab/survey/application/port/out/persistence/bookmark/SurveyBookmarkPort.java b/survey/survey-application/src/main/java/me/nalab/survey/application/port/out/persistence/bookmark/SurveyBookmarkPort.java new file mode 100644 index 00000000..3d940bd4 --- /dev/null +++ b/survey/survey-application/src/main/java/me/nalab/survey/application/port/out/persistence/bookmark/SurveyBookmarkPort.java @@ -0,0 +1,8 @@ +package me.nalab.survey.application.port.out.persistence.bookmark; + +import me.nalab.survey.domain.target.Target; + +public interface SurveyBookmarkPort { + + void bookmark(Target target); +} diff --git a/survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkReplaceService.java b/survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkService.java similarity index 80% rename from survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkReplaceService.java rename to survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkService.java index df3d8181..21528b06 100644 --- a/survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkReplaceService.java +++ b/survey/survey-application/src/main/java/me/nalab/survey/application/service/bookmark/SurveyBookmarkService.java @@ -3,7 +3,8 @@ import lombok.RequiredArgsConstructor; import me.nalab.survey.application.common.survey.dto.SurveyBookmarkDto; import me.nalab.survey.application.exception.SurveyDoesNotExistException; -import me.nalab.survey.application.port.in.web.bookmark.SurveyBookmarkReplaceUseCase; +import me.nalab.survey.application.port.in.web.bookmark.SurveyBookmarkUseCase; +import me.nalab.survey.application.port.out.persistence.bookmark.SurveyBookmarkPort; import me.nalab.survey.application.port.out.persistence.findfeedback.SurveyExistCheckPort; import me.nalab.survey.application.port.out.persistence.findtarget.TargetFindPort; import org.springframework.stereotype.Service; @@ -11,10 +12,11 @@ @Service @RequiredArgsConstructor -public class SurveyBookmarkReplaceService implements SurveyBookmarkReplaceUseCase { +public class SurveyBookmarkService implements SurveyBookmarkUseCase { private final TargetFindPort targetFindPort; private final SurveyExistCheckPort surveyExistCheckPort; + private final SurveyBookmarkPort surveyBookmarkPort; @Override @Transactional @@ -26,6 +28,7 @@ public SurveyBookmarkDto bookmark(Long targetId, Long surveyId) { } target.bookmark(surveyId); + surveyBookmarkPort.bookmark(target); return SurveyBookmarkDto.from(surveyId, target); } diff --git a/survey/survey-domain/src/main/java/me/nalab/survey/domain/target/Target.java b/survey/survey-domain/src/main/java/me/nalab/survey/domain/target/Target.java index 5f0d7d7b..db791c8d 100644 --- a/survey/survey-domain/src/main/java/me/nalab/survey/domain/target/Target.java +++ b/survey/survey-domain/src/main/java/me/nalab/survey/domain/target/Target.java @@ -25,6 +25,7 @@ public class Target implements IdGeneratable { private final String nickname; private final String job; private final String imageUrl; + @Builder.Default private final Set bookmarkedSurveys = NONE_BOOKMARKED_SURVEYS; private String position; diff --git a/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/bookmark/SurveyBookmarkAdaptor.java b/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/bookmark/SurveyBookmarkAdaptor.java new file mode 100644 index 00000000..7e069df8 --- /dev/null +++ b/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/bookmark/SurveyBookmarkAdaptor.java @@ -0,0 +1,24 @@ +package me.nalab.survey.jpa.adaptor.bookmark; + +import lombok.RequiredArgsConstructor; +import me.nalab.survey.application.exception.TargetDoesNotExistException; +import me.nalab.survey.application.port.out.persistence.bookmark.SurveyBookmarkPort; +import me.nalab.survey.domain.target.Target; +import me.nalab.survey.jpa.adaptor.common.mapper.TargetEntityMapper; +import me.nalab.survey.jpa.adaptor.find.repository.TargetFindRepository; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class SurveyBookmarkAdaptor implements SurveyBookmarkPort { + + private final TargetFindRepository targetFindRepository; + + @Override + public void bookmark(Target target) { + var savedTarget = targetFindRepository.findById(target.getId()) + .orElseThrow(() -> new TargetDoesNotExistException(target.getId())); + + savedTarget.setBookmarkedSurveys(TargetEntityMapper.toSurveyBookmarkEntity(target.getBookmarkedSurveys())); + } +} diff --git a/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/common/mapper/TargetEntityMapper.java b/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/common/mapper/TargetEntityMapper.java index 43f0c508..5135c3cd 100644 --- a/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/common/mapper/TargetEntityMapper.java +++ b/survey/survey-jpa-adaptor/src/main/java/me/nalab/survey/jpa/adaptor/common/mapper/TargetEntityMapper.java @@ -1,6 +1,10 @@ package me.nalab.survey.jpa.adaptor.common.mapper; +import java.util.Set; +import java.util.stream.Collectors; +import me.nalab.core.data.target.SurveyBookmarkEntity; import me.nalab.core.data.target.TargetEntity; +import me.nalab.survey.domain.target.SurveyBookmark; import me.nalab.survey.domain.target.Target; public class TargetEntityMapper { @@ -16,15 +20,29 @@ public static TargetEntity toTargetEntity(Target target) { .position(target.getPosition()) .imageUrl(target.getImageUrl()) .job(target.getJob()) + .bookmarkedSurveys(toSurveyBookmarkEntity(target.getBookmarkedSurveys())) .build(); } + public static Set toSurveyBookmarkEntity(Set surveyBookmarks) { + return surveyBookmarks.stream() + .map(surveyBookmark -> new SurveyBookmarkEntity(surveyBookmark.surveyId())) + .collect(Collectors.toSet()); + } + public static Target toTarget(TargetEntity targetEntity) { return Target.builder() .id(targetEntity.getId()) .nickname(targetEntity.getNickname()) .position(targetEntity.getPosition()) .job(targetEntity.getJob()) + .bookmarkedSurveys(toSurveyBookmark(targetEntity.getBookmarkedSurveys())) .build(); } + + public static Set toSurveyBookmark(Set surveyBookmarkEntities) { + return surveyBookmarkEntities.stream() + .map(surveyBookmarkEntity -> new SurveyBookmark(surveyBookmarkEntity.getSurveyId())) + .collect(Collectors.toSet()); + } } diff --git a/survey/survey-web-adaptor/src/main/java/me/nalab/survey/web/adaptor/bookmark/SurveyBookmarkReplaceController.java b/survey/survey-web-adaptor/src/main/java/me/nalab/survey/web/adaptor/bookmark/SurveyBookmarkReplaceController.java index 8a8cc79e..9daf08cf 100644 --- a/survey/survey-web-adaptor/src/main/java/me/nalab/survey/web/adaptor/bookmark/SurveyBookmarkReplaceController.java +++ b/survey/survey-web-adaptor/src/main/java/me/nalab/survey/web/adaptor/bookmark/SurveyBookmarkReplaceController.java @@ -1,7 +1,7 @@ package me.nalab.survey.web.adaptor.bookmark; import lombok.RequiredArgsConstructor; -import me.nalab.survey.application.port.in.web.bookmark.SurveyBookmarkReplaceUseCase; +import me.nalab.survey.application.port.in.web.bookmark.SurveyBookmarkUseCase; import me.nalab.survey.web.adaptor.bookmark.response.SurveyBookmarkResponse; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.PathVariable; @@ -16,7 +16,7 @@ @RequiredArgsConstructor public class SurveyBookmarkReplaceController { - private final SurveyBookmarkReplaceUseCase surveyBookmarkReplaceUseCase; + private final SurveyBookmarkUseCase surveyBookmarkReplaceUseCase; @ResponseStatus(HttpStatus.OK) @PostMapping("/surveys/{survey_id}/bookmarks")