From fec9315171e44eaefd181e6e957516d6b96909f8 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 16:30:48 +0900 Subject: [PATCH 01/34] =?UTF-8?q?Refactor(#21):=20import=20=EB=8C=80?= =?UTF-8?q?=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/jpamongoreviewdomain/review/domain/Review.java | 2 +- .../reviewcontents/domain/ReviewContents.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java index 4210575..d47b45d 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java @@ -2,7 +2,7 @@ import org.hibernate.annotations.SQLRestriction; -import com.wypl.jpacore.JpaBaseEntity; +import com.wypl.jpacommon.JpaBaseEntity; import com.wypl.jpamemberdomain.member.Member; import jakarta.persistence.Column; diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java index d1fc5a3..864c841 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java @@ -5,7 +5,7 @@ import org.springframework.data.mongodb.core.mapping.Document; -import com.wypl.mongocore.MongoBaseEntity; +import com.wypl.mongocommon.MongoBaseEntity; import jakarta.persistence.Id; import lombok.AccessLevel; From e84f5d6783fbc27121441ce71c1cbcb42b9312ee Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 17:07:20 +0900 Subject: [PATCH 02/34] =?UTF-8?q?Refactor(#21):=20Object=20->=20ReviewCont?= =?UTF-8?q?ent=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewcontents/domain/BlockType.java | 10 ++++++++++ .../reviewcontents/domain/ReviewContent.java | 8 ++++++++ .../reviewcontents/domain/ReviewContents.java | 3 ++- .../domain/contenttype/EmotionContent.java | 16 +++++++++++++++ .../domain/contenttype/FourFContent.java | 20 +++++++++++++++++++ .../domain/contenttype/KPTContent.java | 18 +++++++++++++++++ .../domain/contenttype/PictureContent.java | 14 +++++++++++++ .../domain/contenttype/TextContent.java | 13 ++++++++++++ .../domain/contenttype/WeatherContent.java | 16 +++++++++++++++ 9 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/BlockType.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/EmotionContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/FourFContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/KPTContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/PictureContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/TextContent.java create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/WeatherContent.java diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/BlockType.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/BlockType.java new file mode 100644 index 0000000..c83a90e --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/BlockType.java @@ -0,0 +1,10 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain; + +public enum BlockType { + REVIEW_TEXT, + REVIEW_PICTURE, + REVIEW_EMOTION, + REVIEW_WEATHER, + REVIEW_KPT, + REVIEW_4F +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java new file mode 100644 index 0000000..656438f --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java @@ -0,0 +1,8 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain; + +public abstract class ReviewContent { + private BlockType blockType; + protected ReviewContent(BlockType blockType) { + this.blockType = blockType; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java index 864c841..c7b5d19 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java @@ -23,5 +23,6 @@ public class ReviewContents extends MongoBaseEntity { @Id private Long reviewId; - private List> contents; + private List> contents; + // Todo : max size = 100 } diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/EmotionContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/EmotionContent.java new file mode 100644 index 0000000..f7cdc40 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/EmotionContent.java @@ -0,0 +1,16 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class EmotionContent extends ReviewContent { + private String emoji; + private String description; + + public EmotionContent(String emoji, String description) { + super(REVIEW_EMOTION); + this.emoji = emoji; + this.description = description; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/FourFContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/FourFContent.java new file mode 100644 index 0000000..2a73265 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/FourFContent.java @@ -0,0 +1,20 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class FourFContent extends ReviewContent { + private String facts; + private String feeling; + private String finding; + private String future; + + public FourFContent(String facts, String feeling, String finding, String future) { + super(REVIEW_4F); + this.facts = facts; + this.feeling = feeling; + this.finding = finding; + this.future = future; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/KPTContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/KPTContent.java new file mode 100644 index 0000000..60ad705 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/KPTContent.java @@ -0,0 +1,18 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class KPTContent extends ReviewContent { + private String keepStr; + private String problemStr; + private String tryStr; + + public KPTContent(String keepStr, String problemStr, String tryStr) { + super(REVIEW_KPT); + this.keepStr = keepStr; + this.problemStr = problemStr; + this.tryStr = tryStr; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/PictureContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/PictureContent.java new file mode 100644 index 0000000..52128b2 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/PictureContent.java @@ -0,0 +1,14 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class PictureContent extends ReviewContent { + private String path; + + public PictureContent(String path) { + super(REVIEW_PICTURE); + this.path = path; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/TextContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/TextContent.java new file mode 100644 index 0000000..538e58d --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/TextContent.java @@ -0,0 +1,13 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class TextContent extends ReviewContent { + private String text; + public TextContent(String text) { + super(REVIEW_TEXT); + this.text = text; + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/WeatherContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/WeatherContent.java new file mode 100644 index 0000000..a35dc77 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/contenttype/WeatherContent.java @@ -0,0 +1,16 @@ +package com.wypl.jpamongoreviewdomain.reviewcontents.domain.contenttype; + +import static com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType.*; + +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public class WeatherContent extends ReviewContent { + private String weather; + private String description; + + public WeatherContent(String weather, String description) { + super(REVIEW_WEATHER); + this.weather = weather; + this.description = description; + } +} From ad2158784f283c184d71a6d7243ab58e81e0beb6 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 17:10:53 +0900 Subject: [PATCH 03/34] =?UTF-8?q?Refactor(#21):=20Schedule=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/jpamongoreviewdomain/review/domain/Review.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java index d47b45d..8708283 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java @@ -2,6 +2,7 @@ import org.hibernate.annotations.SQLRestriction; +import com.wypl.jpacalendardomain.schedule.domain.Schedule; import com.wypl.jpacommon.JpaBaseEntity; import com.wypl.jpamemberdomain.member.Member; @@ -38,5 +39,7 @@ public class Review extends JpaBaseEntity { @JoinColumn(name = "member_id") private Member member; - // TODO: 추후 schedule 와 `@ManyToOne` 관계가 필요 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "schedule_id") + private Schedule schedule; } From 6e2f53e47b9a65b2eeb021d0399148e65bbeebee Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 17:11:51 +0900 Subject: [PATCH 04/34] =?UTF-8?q?Feat(#21):=20starter-web=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain/jpamongo-review-domain/build.gradle | 1 + .../controller/ReviewController.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java diff --git a/domain/jpamongo-review-domain/build.gradle b/domain/jpamongo-review-domain/build.gradle index 42349ab..dbef7f3 100644 --- a/domain/jpamongo-review-domain/build.gradle +++ b/domain/jpamongo-review-domain/build.gradle @@ -6,6 +6,7 @@ java { dependencies { implementation project(':common') + implementation project(':application:application-common') implementation project(':domain:jpa-common') implementation project(':domain:jpa-member-domain') implementation project(':domain:jpa-calendar-domain') diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java new file mode 100644 index 0000000..cc0df69 --- /dev/null +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java @@ -0,0 +1,13 @@ +package com.wypl.jpamongoreviewdomain.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/review") +public class ReviewController { + +} From f2ee49e499b1354460752f7758c1a8e2be48f619 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:19:06 +0900 Subject: [PATCH 05/34] =?UTF-8?q?Chore(#21):=20SpringBootApplication=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/wypl/WyplCoreApplication.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/WyplCoreApplication.java diff --git a/application/wypl-core/src/main/java/com/wypl/WyplCoreApplication.java b/application/wypl-core/src/main/java/com/wypl/WyplCoreApplication.java new file mode 100644 index 0000000..634c7d9 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/WyplCoreApplication.java @@ -0,0 +1,17 @@ +package com.wypl; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +@SpringBootApplication +@EnableJpaRepositories(basePackages = {"com.wypl"}) +@EnableMongoRepositories(basePackages = {"com.wypl"}) +public class WyplCoreApplication { + + public static void main(String[] args) { + SpringApplication.run(WyplCoreApplication.class, args); + } + +} From 9a54021acf7fa53818bc26b66528b8904b03092c Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:23:09 +0900 Subject: [PATCH 06/34] =?UTF-8?q?Chore(#21):=20Repository=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/wyplcore/WyplColorApplication.java | 13 ------------- .../review/repository/ReviewRepository.java | 2 ++ .../repository/ReviewContentsRepository.java | 2 ++ 3 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/WyplColorApplication.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/WyplColorApplication.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/WyplColorApplication.java deleted file mode 100644 index 0950424..0000000 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/WyplColorApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.wypl.wyplcore; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class WyplColorApplication { - - public static void main(String[] args) { - SpringApplication.run(WyplColorApplication.class, args); - } - -} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java index 89bffe5..afed856 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java @@ -1,8 +1,10 @@ package com.wypl.jpamongoreviewdomain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import com.wypl.jpamongoreviewdomain.review.domain.Review; +@Repository public interface ReviewRepository extends JpaRepository { } diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java index 2ef7b09..bba9236 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java @@ -1,8 +1,10 @@ package com.wypl.jpamongoreviewdomain.reviewcontents.repository; import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContents; +@Repository public interface ReviewContentsRepository extends MongoRepository { } From 4f7d11e12c8ca36784c46cfad22085b00acacb35 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:23:41 +0900 Subject: [PATCH 07/34] =?UTF-8?q?Chore(#21):=20wypl-core=EC=97=90=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/wypl-core/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/application/wypl-core/build.gradle b/application/wypl-core/build.gradle index a3812d6..907bc7f 100644 --- a/application/wypl-core/build.gradle +++ b/application/wypl-core/build.gradle @@ -9,4 +9,9 @@ java { dependencies { implementation project(':application:application-common') + implementation project(':domain:jpa-common') + implementation project(':domain:mongo-common') + implementation project(':domain:jpamongo-review-domain') + implementation project(':domain:jpa-calendar-domain') + implementation project(':domain:jpa-member-domain') } \ No newline at end of file From 06e1f2b78783f5bc68901408771cccf8b3655df7 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:25:11 +0900 Subject: [PATCH 08/34] =?UTF-8?q?Feat(#21):=20review=20request=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/request/ReviewCreateRequest.java | 22 +++++++++++++++++++ .../review/data/request/ReviewType.java | 7 ++++++ .../data/request/ReviewUpdateRequest.java | 17 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewCreateRequest.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewType.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewUpdateRequest.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewCreateRequest.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewCreateRequest.java new file mode 100644 index 0000000..7bc689d --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewCreateRequest.java @@ -0,0 +1,22 @@ +package com.wypl.wyplcore.review.data.request; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +import lombok.Builder; + +@Builder +public record ReviewCreateRequest( + + String title, + + @JsonProperty("schedule_id") + int scheduleId, + + List> contents + +) { +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewType.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewType.java new file mode 100644 index 0000000..d9d4ee0 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewType.java @@ -0,0 +1,7 @@ +package com.wypl.wyplcore.review.data.request; + +public enum ReviewType { + NEWEST, + + OLDEST +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewUpdateRequest.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewUpdateRequest.java new file mode 100644 index 0000000..4698e2e --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/request/ReviewUpdateRequest.java @@ -0,0 +1,17 @@ +package com.wypl.wyplcore.review.data.request; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +public record ReviewUpdateRequest( + String title, + + @JsonProperty("schedule_id") + int scheduleId, + + List> contents +) { +} From db46347465560651d1f79734461c6cf6ee242f93 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:25:24 +0900 Subject: [PATCH 09/34] =?UTF-8?q?Feat(#21):=20review=20response=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/response/ReviewDetailResponse.java | 36 +++++++++++++++++++ .../data/response/ReviewIdResponse.java | 12 +++++++ .../data/response/ReviewListResponse.java | 16 +++++++++ .../review/data/response/ReviewResponse.java | 32 +++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java new file mode 100644 index 0000000..a777e0e --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java @@ -0,0 +1,36 @@ +package com.wypl.wyplcore.review.data.response; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.wypl.jpacalendardomain.schedule.domain.Schedule; +import com.wypl.jpamemberdomain.member.Member; +import com.wypl.jpamongoreviewdomain.review.domain.Review; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; + +import lombok.Builder; + +@Builder +public record ReviewDetailResponse( + @JsonProperty("review_id") + long reviewId, + + String title, + + // Todo : import 후 주석 해제 + // ScheduleResponse schedule, + + List> contents +) { + public static ReviewDetailResponse of(Review review, Schedule schedule, List members, + List> reviewContents) { + return ReviewDetailResponse.builder() + .reviewId(review.getReviewId()) + .title(review.getTitle()) + // Todo : import 후 주석 해제 + // .schedule(ScheduleResponse.of(schedule, members)) + .contents(reviewContents) + .build(); + } +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java new file mode 100644 index 0000000..62a053e --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java @@ -0,0 +1,12 @@ +package com.wypl.wyplcore.review.data.response; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record ReviewIdResponse( + @JsonProperty("review_id") + long reviewId +) { + public static ReviewIdResponse from(int reviewId) { + return new ReviewIdResponse(reviewId); + } +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java new file mode 100644 index 0000000..530fab9 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java @@ -0,0 +1,16 @@ +package com.wypl.wyplcore.review.data.response; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record ReviewListResponse( + + @JsonProperty("review_count") + int reviewCount, + + List reviews) { + public static ReviewListResponse from(List reviews) { + return new ReviewListResponse(reviews.size(), reviews); + } +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java new file mode 100644 index 0000000..8ee6208 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java @@ -0,0 +1,32 @@ +package com.wypl.wyplcore.review.data.response; + +import java.time.LocalDateTime; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.wypl.jpamongoreviewdomain.review.domain.Review; + +import lombok.Builder; + +@Builder +public record ReviewResponse( + @JsonProperty("review_id") + long reviewId, + + @JsonProperty("created_at") + LocalDateTime createdAt, + + String title, + + @JsonProperty("thumbnail_content") + Map thumbnailContent +) { + public static ReviewResponse from(Review review, Map thumbnailContent) { + return ReviewResponse.builder() + .createdAt(LocalDateTime.now()) + .reviewId(review.getReviewId()) + .title(review.getTitle()) + .thumbnailContent(thumbnailContent) + .build(); + } +} From f7f6b414f62e3f026e7f5e2f9d1217ad4541ea54 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:25:42 +0900 Subject: [PATCH 10/34] =?UTF-8?q?Feat(#21):=20review=20service=20interface?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewModifyService.java | 18 ++++++++++++++++++ .../review/service/ReviewReadService.java | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java new file mode 100644 index 0000000..cc9e2dd --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java @@ -0,0 +1,18 @@ +package com.wypl.wyplcore.review.service; + +import org.springframework.transaction.annotation.Transactional; + +import com.wypl.wyplcore.review.data.request.ReviewCreateRequest; +import com.wypl.wyplcore.review.data.request.ReviewUpdateRequest; +import com.wypl.wyplcore.review.data.response.ReviewIdResponse; + +public interface ReviewModifyService { + @Transactional + ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCreateRequest); + + @Transactional + ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateRequest reviewUpdateRequest); + + @Transactional + ReviewIdResponse deleteReview(int memberId, int reviewId); +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java new file mode 100644 index 0000000..3ca3cad --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java @@ -0,0 +1,16 @@ +package com.wypl.wyplcore.review.service; + +import java.time.LocalDate; + +import com.wypl.wyplcore.review.data.request.ReviewType; +import com.wypl.wyplcore.review.data.response.ReviewDetailResponse; +import com.wypl.wyplcore.review.data.response.ReviewListResponse; + +public interface ReviewReadService { + ReviewDetailResponse getDetailReview(int memberId, int reviewId); + + ReviewListResponse getReviews(int memberId, Integer lastReviewId, ReviewType reviewType, LocalDate startDate, + LocalDate endDate); + + ReviewListResponse getReviewsByScheduleId(int memberId, int scheduleId, ReviewType reviewType); +} From 2e68e0bd7ea0fb752dee65104b248be7152b2d67 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 15 Sep 2024 18:27:09 +0900 Subject: [PATCH 11/34] =?UTF-8?q?Chore(#21):=20domain=20=EB=8B=A8=EC=97=90?= =?UTF-8?q?=EC=84=9C=20web=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain/jpamongo-review-domain/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/domain/jpamongo-review-domain/build.gradle b/domain/jpamongo-review-domain/build.gradle index dbef7f3..42349ab 100644 --- a/domain/jpamongo-review-domain/build.gradle +++ b/domain/jpamongo-review-domain/build.gradle @@ -6,7 +6,6 @@ java { dependencies { implementation project(':common') - implementation project(':application:application-common') implementation project(':domain:jpa-common') implementation project(':domain:jpa-member-domain') implementation project(':domain:jpa-calendar-domain') From 9a835d03759f1cc30375683555996ba5399465f2 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:12:27 +0900 Subject: [PATCH 12/34] =?UTF-8?q?Refactor(#21):=20Member=20Entity=EC=97=90?= =?UTF-8?q?=20Getter=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20import=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/jpamemberdomain/member/Member.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java b/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java index 65bb7ae..055259d 100644 --- a/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java +++ b/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java @@ -1,10 +1,20 @@ package com.wypl.jpamemberdomain.member; -import com.wypl.common.Color; -import jakarta.persistence.*; - import java.time.LocalDate; +import com.wypl.common.Color; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; + +@Getter @Entity @Table(name = "member_tbl") public class Member { From 02a7cfa8dfbd176981e35cc0c592e0f948fa5aaa Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:13:46 +0900 Subject: [PATCH 13/34] =?UTF-8?q?Feat(#21):=20Review=20Entity=EC=97=90=20o?= =?UTF-8?q?f,=20updateTitle=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/domain/Review.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java index 8708283..b1f2ffd 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/domain/Review.java @@ -42,4 +42,26 @@ public class Review extends JpaBaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "schedule_id") private Schedule schedule; + + public static Review of(String title, Member member, Schedule schedule) { + return Review.builder() + .title(title) + .member(member) + .schedule(schedule) + .build(); + } + + // public void validationOwnerByMemberId(long memberId) { + // if(isNotOwner(memberId)) { + // throw new ReviewException(ReviewErrorCode.NOT_PERMISSION_TO_REVIEW); + // } + // } + // + // private boolean isNotOwner(long memberId) { + // return getMember().getId() != memberId; + // } + + public void updateTitle(String title) { + this.title = title; + } } From f894c6fb90ce96a305dacbf5352908be2cd19fcb Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:15:16 +0900 Subject: [PATCH 14/34] =?UTF-8?q?Feat(#21):=20ReviewContents=20Document?= =?UTF-8?q?=EC=97=90=20of,=20updateContents=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewcontents/domain/ReviewContents.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java index c7b5d19..ee54a96 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContents.java @@ -23,6 +23,14 @@ public class ReviewContents extends MongoBaseEntity { @Id private Long reviewId; - private List> contents; // Todo : max size = 100 + private List> contents; + + public static ReviewContents of(Long reviewId, List> contents) { + return new ReviewContents(reviewId, contents); + } + + public void updateContents(List> contents) { + this.contents = contents; + } } From d2975f065a16c21681711a8d4aad3f6c5cf9f7f3 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:16:59 +0900 Subject: [PATCH 15/34] =?UTF-8?q?Refactor(#21):=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20id=EA=B0=92=20=ED=83=80=EC=9E=85=20int=20-?= =?UTF-8?q?>=20long=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wyplcore/review/data/response/ReviewIdResponse.java | 2 +- .../com/wypl/wyplcore/review/service/ReviewReadService.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java index 62a053e..e1e81c8 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewIdResponse.java @@ -6,7 +6,7 @@ public record ReviewIdResponse( @JsonProperty("review_id") long reviewId ) { - public static ReviewIdResponse from(int reviewId) { + public static ReviewIdResponse from(long reviewId) { return new ReviewIdResponse(reviewId); } } diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java index 3ca3cad..477d278 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewReadService.java @@ -7,10 +7,10 @@ import com.wypl.wyplcore.review.data.response.ReviewListResponse; public interface ReviewReadService { - ReviewDetailResponse getDetailReview(int memberId, int reviewId); + ReviewDetailResponse getDetailReview(long memberId, long reviewId); - ReviewListResponse getReviews(int memberId, Integer lastReviewId, ReviewType reviewType, LocalDate startDate, + ReviewListResponse getReviews(long memberId, Long lastReviewId, ReviewType reviewType, LocalDate startDate, LocalDate endDate); - ReviewListResponse getReviewsByScheduleId(int memberId, int scheduleId, ReviewType reviewType); + ReviewListResponse getReviewsByScheduleId(long memberId, long scheduleId, ReviewType reviewType); } From 1308d6e57511b778806aed5a9453f4761408a4d4 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:18:54 +0900 Subject: [PATCH 16/34] =?UTF-8?q?Refactor(#21):=20ReviewResponse=EC=9D=98?= =?UTF-8?q?=20=EC=8D=B8=EB=84=A4=EC=9D=BC=20=ED=83=80=EC=9E=85=20Object=20?= =?UTF-8?q?->=20ReviewContent=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wypl/wyplcore/review/data/response/ReviewResponse.java | 5 +++-- .../reviewcontents/domain/ReviewContent.java | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java index 8ee6208..7855c19 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewResponse.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.wypl.jpamongoreviewdomain.review.domain.Review; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; import lombok.Builder; @@ -19,9 +20,9 @@ public record ReviewResponse( String title, @JsonProperty("thumbnail_content") - Map thumbnailContent + Map thumbnailContent ) { - public static ReviewResponse from(Review review, Map thumbnailContent) { + public static ReviewResponse from(Review review, Map thumbnailContent) { return ReviewResponse.builder() .createdAt(LocalDateTime.now()) .reviewId(review.getReviewId()) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java index 656438f..c466684 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/domain/ReviewContent.java @@ -1,5 +1,8 @@ package com.wypl.jpamongoreviewdomain.reviewcontents.domain; +import lombok.Getter; + +@Getter public abstract class ReviewContent { private BlockType blockType; protected ReviewContent(BlockType blockType) { From e728b56fee0c5f5789bc92f0cc818776a629b221 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:19:26 +0900 Subject: [PATCH 17/34] =?UTF-8?q?Refactor(#21):=20ReviewController=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/wyplcore/review}/controller/ReviewController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain => application/wypl-core/src/main/java/com/wypl/wyplcore/review}/controller/ReviewController.java (84%) diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java similarity index 84% rename from domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java rename to application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java index cc0df69..179b0a6 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/controller/ReviewController.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java @@ -1,4 +1,4 @@ -package com.wypl.jpamongoreviewdomain.controller; +package com.wypl.wyplcore.review.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; From e11edb966168f9b66d1b733e634b2cad3520ccf0 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 15:49:32 +0900 Subject: [PATCH 18/34] =?UTF-8?q?Feat(#21):=20ReviewException=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/wypl-core/build.gradle | 1 + .../review/exception/ReviewErrorCode.java | 22 +++++++++++++++++++ .../review/exception/ReviewException.java | 10 +++++++++ 3 files changed, 33 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewException.java diff --git a/application/wypl-core/build.gradle b/application/wypl-core/build.gradle index 907bc7f..a5baadb 100644 --- a/application/wypl-core/build.gradle +++ b/application/wypl-core/build.gradle @@ -14,4 +14,5 @@ dependencies { implementation project(':domain:jpamongo-review-domain') implementation project(':domain:jpa-calendar-domain') implementation project(':domain:jpa-member-domain') + implementation project(':common') } \ No newline at end of file diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java new file mode 100644 index 0000000..a32d014 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java @@ -0,0 +1,22 @@ +package com.wypl.wyplcore.review.exception; + +import com.wypl.common.exception.ServerErrorCode; + +import lombok.Getter; + +@Getter +public enum ReviewErrorCode implements ServerErrorCode { + EMPTY_CONTENTS(500, "REVIEW_001", "작성된 내용이 없습니다."), + INVALID_TITLE(500, "REVIEW_002", "제목의 길이가 올바르지 않습니다.") + ; + + private final int statusCode; + private final String errorCode; + private final String message; + + ReviewErrorCode(int statusCode, String errorCode, String message) { + this.statusCode = statusCode; + this.errorCode = errorCode; + this.message = message; + } +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewException.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewException.java new file mode 100644 index 0000000..f773fb2 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewException.java @@ -0,0 +1,10 @@ +package com.wypl.wyplcore.review.exception; + +import com.wypl.common.exception.ServerErrorCode; +import com.wypl.common.exception.WyplException; + +public class ReviewException extends WyplException { + public ReviewException(ServerErrorCode serverErrorCode) { + super(serverErrorCode); + } +} From b51488312cf595f0f60bf1a348e1bf1568681c13 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 16:58:38 +0900 Subject: [PATCH 19/34] =?UTF-8?q?Feat(#21):=20Review=20Service,=20Reposito?= =?UTF-8?q?ry=20=EC=B6=94=EA=B0=80(MemberSchedule=20=EC=A0=9C=EA=B1=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewServiceImpl.java | 231 ++++++++++++++++++ .../review/repository/ReviewRepository.java | 85 +++++++ .../repository/ReviewContentsRepository.java | 1 + 3 files changed, 317 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java new file mode 100644 index 0000000..d2483de --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java @@ -0,0 +1,231 @@ +package com.wypl.wyplcore.review.service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.wypl.jpacalendardomain.schedule.domain.Schedule; +import com.wypl.jpamemberdomain.member.Member; +import com.wypl.jpamongoreviewdomain.review.domain.Review; +import com.wypl.jpamongoreviewdomain.review.repository.ReviewRepository; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.BlockType; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; +import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContents; +import com.wypl.jpamongoreviewdomain.reviewcontents.repository.ReviewContentsRepository; +import com.wypl.wyplcore.review.data.request.ReviewCreateRequest; +import com.wypl.wyplcore.review.data.request.ReviewType; +import com.wypl.wyplcore.review.data.request.ReviewUpdateRequest; +import com.wypl.wyplcore.review.data.response.ReviewDetailResponse; +import com.wypl.wyplcore.review.data.response.ReviewIdResponse; +import com.wypl.wyplcore.review.data.response.ReviewListResponse; +import com.wypl.wyplcore.review.data.response.ReviewResponse; +import com.wypl.wyplcore.review.exception.ReviewErrorCode; +import com.wypl.wyplcore.review.exception.ReviewException; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class ReviewServiceImpl implements ReviewModifyService, ReviewReadService { + private final ReviewRepository reviewRepository; + + // private final MemberScheduleService memberScheduleService; + + // private final ScheduleRepository scheduleRepository; + + private final ReviewContentsRepository reviewContentsRepository; + + @Override + @Transactional + public ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCreateRequest) { + validateReviewContents(reviewCreateRequest.contents(), reviewCreateRequest.title()); + + //schedule, member 유효성 판단 + // MemberSchedule memberSchedule = memberScheduleService.getMemberScheduleByMemberAndSchedule(memberId, + // ScheduleServiceUtils.findById(scheduleRepository, reviewCreateRequest.scheduleId())); + // memberSchedule.writeReview(); + + Member findMember = null; // FIXME: MemberUtil + Schedule findSchedule = null; // FIXME: ScheduleUtil + + Review review = Review.of(reviewCreateRequest.title(), findMember, findSchedule); + Review savedReview = reviewRepository.save(review); + + reviewContentsRepository.save(ReviewContents.of(savedReview.getReviewId(), reviewCreateRequest.contents())); + return ReviewIdResponse.from(savedReview.getReviewId()); + } + + @Override + @Transactional + public ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateRequest reviewUpdateRequest) { + validateReviewContents(reviewUpdateRequest.contents(), reviewUpdateRequest.title()); + + // Todo : Util 추가, Exception 추가 + Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) + .orElseThrow(); + + review.updateTitle(reviewUpdateRequest.title()); + + ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); + reviewContents.updateContents(reviewUpdateRequest.contents()); + + reviewContentsRepository.save(reviewContents); + + return ReviewIdResponse.from(review.getReviewId()); + } + + @Override + @Transactional + public ReviewIdResponse deleteReview(int memberId, int reviewId) { + // Todo : Util 추가, Exception 추가 + Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) + .orElseThrow(); + + ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull( + review.getReviewId()); + reviewContents.delete(); + + reviewContentsRepository.save(reviewContents); + + review.delete(); + + return ReviewIdResponse.from(review.getReviewId()); + } + + @Override + public ReviewDetailResponse getDetailReview(long memberId, long reviewId) { + // Todo : Util 추가, Exception 추가 + Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) + .orElseThrow(); + + // Todo : 저장할 때 null 검사 하는데, 가져올 때도 검사해야 할까??? + ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull( + review.getReviewId()); + + // Schedule schedule = review.getMemberSchedule().getSchedule(); + + // return ReviewDetailResponse.of(review, schedule, + // memberScheduleService.getMembersBySchedule(schedule), + // reviewContents == null ? null : reviewContents.getContents()); + + Schedule schedule = review.getSchedule(); + + return ReviewDetailResponse.of(review, schedule, reviewContents.getContents()); + } + + @Override + public ReviewListResponse getReviews(long memberId, Long lastReviewId, ReviewType reviewType, LocalDate startDate, + LocalDate endDate) { + + List reviews = switch (reviewType) { + case NEWEST -> { + if (startDate == null || endDate == null) { + if (lastReviewId == null) { + yield reviewRepository.getReviewsNewestAll(memberId); + } + yield reviewRepository.getReviewsNewestAllAfter(memberId, lastReviewId); + } + + LocalDateTime startDateTime = LocalDateTime.of(startDate, LocalTime.of(0, 0)); + LocalDateTime endDateTime = LocalDateTime.of(endDate, LocalTime.of(23, 59)); + + if (lastReviewId == null) { + yield reviewRepository.getReviewsNewest(memberId, startDateTime, endDateTime); + } + + yield reviewRepository.getReviewsNewestAfter(memberId, lastReviewId, startDateTime, endDateTime); + } + case OLDEST -> { + + if (startDate == null || endDate == null) { + if (lastReviewId == null) { + lastReviewId = 0L; + } + yield reviewRepository.getReviewsOldestAll(memberId, lastReviewId); + } + LocalDateTime startDateTime = LocalDateTime.of(startDate, LocalTime.of(0, 0)); + LocalDateTime endDateTime = LocalDateTime.of(endDate, LocalTime.of(23, 59)); + + if (lastReviewId == null) { + lastReviewId = 0L; + } + + yield reviewRepository.getReviewsOldest(memberId, lastReviewId, startDateTime, endDateTime); + } + }; + + return ReviewListResponse.from(reviews.stream().map( + review -> ReviewResponse.builder() + .title(review.getTitle()) + .createdAt(review.getCreatedAt()) + .reviewId(review.getReviewId()) + .thumbnailContent(getThumbnailContent( + reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()) + .getContents())) + .build() + ).toList()); + } + + @Override + public ReviewListResponse getReviewsByScheduleId(long memberId, long scheduleId, ReviewType reviewType) { + // MemberSchedule memberSchedule = memberScheduleService.getMemberScheduleByMemberAndSchedule(memberId, + // ScheduleServiceUtils.findById(scheduleRepository, scheduleId)); + + // Todo : schedule 관련 import 필요 + List reviews = switch (reviewType) { + case NEWEST -> { + yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(memberId, + ScheduleServiceUtils.findById(scheduleRepository, scheduleId).getScheduleId); + } + case OLDEST -> { + yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(memberId, + ScheduleServiceUtils.findById(scheduleRepository, scheduleId).getScheduleId); + } + }; + + List reviewResponses = new ArrayList<>(); + for (Review review : reviews) { + reviewResponses.add( + ReviewResponse.builder() + .reviewId(review.getReviewId()) + .title(review.getTitle()) + .createdAt(review.getCreatedAt()) + .thumbnailContent( + getThumbnailContent( + reviewContentsRepository.findByReviewIdAndDeletedAtNull( + review.getReviewId()).getContents()) + ) + .build() + ); + } + + return ReviewListResponse.from(reviewResponses); + } + + private Map getThumbnailContent(List> contents) { + for (Map content : contents) { + if (content.get("blockType").getBlockType().equals(BlockType.REVIEW_PICTURE)) { + return content; + } + } + + return contents.get(0); + } + + private void validateReviewContents(List> contents, String title) { + if (contents.isEmpty()) { + throw new ReviewException(ReviewErrorCode.EMPTY_CONTENTS); + } + + if(title == null || title.length() > 50 || title.length() == 0) { + throw new ReviewException(ReviewErrorCode.INVALID_TITLE); + } + } +} diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java index afed856..8100295 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java @@ -1,10 +1,95 @@ package com.wypl.jpamongoreviewdomain.review.repository; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.wypl.jpamongoreviewdomain.review.domain.Review; @Repository public interface ReviewRepository extends JpaRepository { + Optional findByReviewIdAndMemberId(long reviewId, long memberId); + + //일정 별 조회 + //오래된순 + List getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(long memberId, long scheduleId); + + //최신순 + List getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(long memberId, long scheduleId); + + //리뷰 조회 + //1. 날짜 설정 안한 경우(오래된 순, 모든 리뷰, 무한 스크롤) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id and r.reviewId > :last_review_id " + + "order by r.reviewId asc " + + "limit 24") + List getReviewsOldestAll( + @Param("member_id") long memberId, + @Param("last_review_id") long lastReviewId + ); + + //2-1. 날짜 설정 안한 경우(최신순, 모든 리뷰, 무한스크롤, 첫번째) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id " + + "order by r.reviewId desc " + + "limit 24") + List getReviewsNewestAll( + @Param("member_id") long memberId + ); + + //2-2. 날짜 설정 안한 경우(최신순, 모든 리뷰, 무한스크롤, 첫번째 이후) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id and r.reviewId < :last_review_id " + + "order by r.reviewId desc " + + "limit 24") + List getReviewsNewestAllAfter( + @Param("member_id") long memberId, + @Param("last_review_id") long lastReviewId + ); + + //3. 날짜 설정한 경우(오래된 순, 무한 스크롤) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id and r.reviewId > :last_review_id and r.createdAt between :start_date and :end_date " + + "order by r.reviewId asc " + + "limit 24") + List getReviewsOldest( + @Param("member_id") long memberId, + @Param("last_review_id") long lastReviewId, + @Param("start_date") LocalDateTime startDate, + @Param("end_date") LocalDateTime endDate + ); + + //4-1. 날짜 설정한 경우(최신순 순, 무한 스크롤, 처음 이후) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id and r.reviewId < :last_review_id and r.createdAt between :start_date and :end_date " + + "order by r.reviewId desc " + + "limit 24") + List getReviewsNewestAfter( + @Param("member_id") long memberId, + @Param("last_review_id") long lastReviewId, + @Param("start_date") LocalDateTime startDate, + @Param("end_date") LocalDateTime endDate + ); + + //4-2. 날짜 설정한 경우(최신순 순, 무한 스크롤, 처음) + @Query("select r " + + "from Review r join fetch r.member m " + + "where m.id = :member_id and r.createdAt between :start_date and :end_date " + + "order by r.reviewId desc " + + "limit 24") + List getReviewsNewest( + @Param("member_id") long memberId, + @Param("start_date") LocalDateTime startDate, + @Param("end_date") LocalDateTime endDate + ); } diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java index bba9236..79adc04 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/reviewcontents/repository/ReviewContentsRepository.java @@ -7,4 +7,5 @@ @Repository public interface ReviewContentsRepository extends MongoRepository { + ReviewContents findByReviewIdAndDeletedAtNull(long reviewId); } From bf8f5cde415b5f83f679743f87d648ca7e693f77 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 16:59:30 +0900 Subject: [PATCH 20/34] =?UTF-8?q?Refactor(#21):=20ReviewDetailResponse?= =?UTF-8?q?=EC=9D=98=20members=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wyplcore/review/data/response/ReviewDetailResponse.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java index a777e0e..e712a46 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewDetailResponse.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.wypl.jpacalendardomain.schedule.domain.Schedule; -import com.wypl.jpamemberdomain.member.Member; import com.wypl.jpamongoreviewdomain.review.domain.Review; import com.wypl.jpamongoreviewdomain.reviewcontents.domain.ReviewContent; @@ -23,13 +22,13 @@ public record ReviewDetailResponse( List> contents ) { - public static ReviewDetailResponse of(Review review, Schedule schedule, List members, + public static ReviewDetailResponse of(Review review, Schedule schedule, List> reviewContents) { return ReviewDetailResponse.builder() .reviewId(review.getReviewId()) .title(review.getTitle()) // Todo : import 후 주석 해제 - // .schedule(ScheduleResponse.of(schedule, members)) + // .schedule(ScheduleResponse.from(schedule)) .contents(reviewContents) .build(); } From 6ebb67c14bf6c5c9d28866a5ef0fd0ac52ee6b84 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 17:00:34 +0900 Subject: [PATCH 21/34] =?UTF-8?q?Refactor(#21):=20ReviewServiceImpl?= =?UTF-8?q?=EC=97=90=20ReviewUtils=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/exception/ReviewErrorCode.java | 3 +- .../review/service/ReviewServiceImpl.java | 31 +++++-------------- .../wyplcore/review/utils/ReviewUtils.java | 21 +++++++++++++ 3 files changed, 30 insertions(+), 25 deletions(-) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java index a32d014..4b28329 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/exception/ReviewErrorCode.java @@ -7,7 +7,8 @@ @Getter public enum ReviewErrorCode implements ServerErrorCode { EMPTY_CONTENTS(500, "REVIEW_001", "작성된 내용이 없습니다."), - INVALID_TITLE(500, "REVIEW_002", "제목의 길이가 올바르지 않습니다.") + INVALID_TITLE(500, "REVIEW_002", "제목의 길이가 올바르지 않습니다."), + NO_SUCH_REVIEW(500, "REVIEW_003", "존재하지 않는 회고입니다.") ; private final int statusCode; diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java index d2483de..6c2232d 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java @@ -27,6 +27,7 @@ import com.wypl.wyplcore.review.data.response.ReviewResponse; import com.wypl.wyplcore.review.exception.ReviewErrorCode; import com.wypl.wyplcore.review.exception.ReviewException; +import com.wypl.wyplcore.review.utils.ReviewUtils; import lombok.RequiredArgsConstructor; @@ -36,8 +37,6 @@ public class ReviewServiceImpl implements ReviewModifyService, ReviewReadService { private final ReviewRepository reviewRepository; - // private final MemberScheduleService memberScheduleService; - // private final ScheduleRepository scheduleRepository; private final ReviewContentsRepository reviewContentsRepository; @@ -67,10 +66,7 @@ public ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCre public ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateRequest reviewUpdateRequest) { validateReviewContents(reviewUpdateRequest.contents(), reviewUpdateRequest.title()); - // Todo : Util 추가, Exception 추가 - Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) - .orElseThrow(); - + Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); review.updateTitle(reviewUpdateRequest.title()); ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); @@ -84,12 +80,9 @@ public ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateReq @Override @Transactional public ReviewIdResponse deleteReview(int memberId, int reviewId) { - // Todo : Util 추가, Exception 추가 - Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) - .orElseThrow(); + Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); - ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull( - review.getReviewId()); + ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); reviewContents.delete(); reviewContentsRepository.save(reviewContents); @@ -101,21 +94,11 @@ public ReviewIdResponse deleteReview(int memberId, int reviewId) { @Override public ReviewDetailResponse getDetailReview(long memberId, long reviewId) { - // Todo : Util 추가, Exception 추가 - Review review = reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) - .orElseThrow(); + Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); + Schedule schedule = review.getSchedule(); // Todo : 저장할 때 null 검사 하는데, 가져올 때도 검사해야 할까??? - ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull( - review.getReviewId()); - - // Schedule schedule = review.getMemberSchedule().getSchedule(); - - // return ReviewDetailResponse.of(review, schedule, - // memberScheduleService.getMembersBySchedule(schedule), - // reviewContents == null ? null : reviewContents.getContents()); - - Schedule schedule = review.getSchedule(); + ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); return ReviewDetailResponse.of(review, schedule, reviewContents.getContents()); } diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java new file mode 100644 index 0000000..80c8d6c --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java @@ -0,0 +1,21 @@ +package com.wypl.wyplcore.review.utils; + +import com.wypl.common.exception.CallConstructorException; +import com.wypl.jpamongoreviewdomain.review.domain.Review; +import com.wypl.jpamongoreviewdomain.review.repository.ReviewRepository; +import com.wypl.wyplcore.review.exception.ReviewErrorCode; +import com.wypl.wyplcore.review.exception.ReviewException; + +import lombok.Generated; + +public class ReviewUtils { + + @Generated + private ReviewUtils() {throw new CallConstructorException(); + } + + public static Review findReviewByReviewIdAndMemberId(ReviewRepository reviewRepository, long reviewId, long memberId) { + return reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) + .orElseThrow(() -> new ReviewException(ReviewErrorCode.NO_SUCH_REVIEW)); + } +} From 1ed48db30c80ca41c9a9a63b413dfa4c9d875992 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sat, 21 Sep 2024 18:02:40 +0900 Subject: [PATCH 22/34] =?UTF-8?q?Refactor(#21):=20getReviewsByScheduleId?= =?UTF-8?q?=20=EB=82=B4=EB=B6=80=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wypl/wyplcore/review/service/ReviewServiceImpl.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java index 6c2232d..71191a9 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java @@ -161,15 +161,12 @@ public ReviewListResponse getReviewsByScheduleId(long memberId, long scheduleId, // MemberSchedule memberSchedule = memberScheduleService.getMemberScheduleByMemberAndSchedule(memberId, // ScheduleServiceUtils.findById(scheduleRepository, scheduleId)); - // Todo : schedule 관련 import 필요 List reviews = switch (reviewType) { case NEWEST -> { - yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(memberId, - ScheduleServiceUtils.findById(scheduleRepository, scheduleId).getScheduleId); + yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(memberId, scheduleId); } case OLDEST -> { - yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(memberId, - ScheduleServiceUtils.findById(scheduleRepository, scheduleId).getScheduleId); + yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(memberId,scheduleId); } }; From abe2ec21db71f5aa07342588bbf67c9be64d446f Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 17:44:09 +0900 Subject: [PATCH 23/34] =?UTF-8?q?Refactor(#23):=20ReviewModifyService?= =?UTF-8?q?=EC=9D=98=20id=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20long?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wypl/wyplcore/review/service/ReviewModifyService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java index cc9e2dd..b757d0f 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewModifyService.java @@ -8,11 +8,11 @@ public interface ReviewModifyService { @Transactional - ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCreateRequest); + ReviewIdResponse createReview(long memberId, ReviewCreateRequest reviewCreateRequest); @Transactional - ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateRequest reviewUpdateRequest); + ReviewIdResponse updateReview(long memberId, long reviewId, ReviewUpdateRequest reviewUpdateRequest); @Transactional - ReviewIdResponse deleteReview(int memberId, int reviewId); + ReviewIdResponse deleteReview(long memberId, long reviewId); } From c0876a7957b0f05428e33c5f994e5b0f996d5fa9 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 17:45:23 +0900 Subject: [PATCH 24/34] =?UTF-8?q?Feat(#23):=20AuthMember=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wypl/wyplcore/auth/domain/AuthMember.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/auth/domain/AuthMember.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/domain/AuthMember.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/domain/AuthMember.java new file mode 100644 index 0000000..eb7124c --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/domain/AuthMember.java @@ -0,0 +1,7 @@ +package com.wypl.wyplcore.auth.domain; + +public record AuthMember( + long id +) { + +} From c1961e70a8c5a9c174bda1ec8aeaadb349f17352 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 17:45:28 +0900 Subject: [PATCH 25/34] =?UTF-8?q?Refactor(#23):=20ReviewController=20retur?= =?UTF-8?q?n=20type=20WyplResponseEntity=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/ReviewController.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java index 179b0a6..e0491df 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java @@ -1,8 +1,31 @@ package com.wypl.wyplcore.review.controller; +import java.time.LocalDate; + +import org.springframework.data.mongodb.core.messaging.Message; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.wypl.applicationcommon.WyplResponseEntity; +import com.wypl.wyplcore.auth.domain.AuthMember; +import com.wypl.wyplcore.review.data.request.ReviewCreateRequest; +import com.wypl.wyplcore.review.data.request.ReviewType; +import com.wypl.wyplcore.review.data.request.ReviewUpdateRequest; +import com.wypl.wyplcore.review.data.response.ReviewDetailResponse; +import com.wypl.wyplcore.review.data.response.ReviewIdResponse; +import com.wypl.wyplcore.review.data.response.ReviewListResponse; +import com.wypl.wyplcore.review.service.ReviewModifyService; +import com.wypl.wyplcore.review.service.ReviewReadService; + import lombok.RequiredArgsConstructor; @RestController @@ -10,4 +33,67 @@ @RequestMapping("/review") public class ReviewController { + private final ReviewModifyService reviewModifyService; + private final ReviewReadService reviewReadService; + + @PostMapping + public WyplResponseEntity createReview( + @Authenticated AuthMember authMember, + @RequestBody ReviewCreateRequest reviewCreateRequest + ) { + ReviewIdResponse response = reviewModifyService.createReview(authMember.id(), reviewCreateRequest); + return WyplResponseEntity.created(response, "리뷰 등록에 성공했습니다."); + } + + @PatchMapping("/{reviewId}") + public WyplResponseEntity updateReview( + @Authenticated AuthMember authMember, + @PathVariable int reviewId, + @RequestBody ReviewUpdateRequest reviewUpdateRequest + ) { + ReviewIdResponse response = reviewModifyService.updateReview(authMember.id(), reviewId, reviewUpdateRequest); + return WyplResponseEntity.ok(response, "리뷰 수정에 성공했습니다."); + } + + @DeleteMapping("/{reviewId}") + public WyplResponseEntity deleteReview( + @Authenticated AuthMember authMember, + @PathVariable("reviewId") int reviewId + ) { + ReviewIdResponse response = reviewModifyService.deleteReview(authMember.id(), reviewId); + return WyplResponseEntity.ok(response, "리뷰 삭제에 성공 했습니다."); + } + + @GetMapping("/detail/{reviewId}") + public WyplResponseEntity getDetailReview( + @Authenticated AuthMember authMember, + @PathVariable int reviewId + ) { + ReviewDetailResponse response = reviewReadService.getDetailReview(authMember.id(), reviewId); + return WyplResponseEntity.ok(response, "리뷰 상세 조회에 성공했습니다."); + } + + @GetMapping("/{type}") + public WyplResponseEntity getReviewsByMemberId( + @Authenticated AuthMember authMember, + @PathVariable("type") ReviewType reviewType, + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @RequestParam(value = "startDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @RequestParam(value = "startDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate + ) { + ReviewListResponse response = reviewReadService.getReviews(authMember.id(), lastReviewId, reviewType, startDate, + endDate); + return WyplResponseEntity.ok(response, "리뷰 목록 조회에 성공했습니다."); + } + + @GetMapping("/{type}/{scheduleId}") + public WyplResponseEntity getReviewsBySchedule( + @Authenticated AuthMember authMember, + @PathVariable("type") ReviewType reviewType, + @PathVariable("scheduleId") long scheduleId + ) { + ReviewListResponse response = reviewReadService.getReviewsByScheduleId(authMember.id(), scheduleId, + reviewType); + return WyplResponseEntity.ok(response, "일정 별 리뷰 조회에 성공했습니다."); + } } From bfbb909d4829bb759f387e46c16d194f00992c29 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 18:06:39 +0900 Subject: [PATCH 26/34] =?UTF-8?q?Refactor(#23):=20ReviewReadService=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/wyplcore/review/service/ReviewServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java index 71191a9..bdded20 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java @@ -43,7 +43,7 @@ public class ReviewServiceImpl implements ReviewModifyService, ReviewReadService @Override @Transactional - public ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCreateRequest) { + public ReviewIdResponse createReview(long memberId, ReviewCreateRequest reviewCreateRequest) { validateReviewContents(reviewCreateRequest.contents(), reviewCreateRequest.title()); //schedule, member 유효성 판단 @@ -63,7 +63,7 @@ public ReviewIdResponse createReview(int memberId, ReviewCreateRequest reviewCre @Override @Transactional - public ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateRequest reviewUpdateRequest) { + public ReviewIdResponse updateReview(long memberId, long reviewId, ReviewUpdateRequest reviewUpdateRequest) { validateReviewContents(reviewUpdateRequest.contents(), reviewUpdateRequest.title()); Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); @@ -79,7 +79,7 @@ public ReviewIdResponse updateReview(int memberId, int reviewId, ReviewUpdateReq @Override @Transactional - public ReviewIdResponse deleteReview(int memberId, int reviewId) { + public ReviewIdResponse deleteReview(long memberId, long reviewId) { Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); From 2ed9ffac1e3ab7dbb987b825dfd99276761728a5 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 18:07:22 +0900 Subject: [PATCH 27/34] =?UTF-8?q?Feat(#23):=20Athenticated=20annotation=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wypl/wyplcore/auth/annotation/Authenticated.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/auth/annotation/Authenticated.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/annotation/Authenticated.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/annotation/Authenticated.java new file mode 100644 index 0000000..3e4d12e --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/annotation/Authenticated.java @@ -0,0 +1,11 @@ +package com.wypl.wyplcore.auth.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface Authenticated { +} From d4b80e3b224687101a85b1f6e18d18831e9b4c2d Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 18:07:59 +0900 Subject: [PATCH 28/34] =?UTF-8?q?Feat(#23):=20AuthenticatedArgumentResolve?= =?UTF-8?q?r=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/AuthenticatedArgumentResolver.java | 32 +++++++++++++++++++ .../wyplcore/global/config/WebConfig.java | 18 +++++++++++ 2 files changed, 50 insertions(+) create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/auth/utils/AuthenticatedArgumentResolver.java create mode 100644 application/wypl-core/src/main/java/com/wypl/wyplcore/global/config/WebConfig.java diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/utils/AuthenticatedArgumentResolver.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/utils/AuthenticatedArgumentResolver.java new file mode 100644 index 0000000..76d0025 --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/auth/utils/AuthenticatedArgumentResolver.java @@ -0,0 +1,32 @@ +package com.wypl.wyplcore.auth.utils; + +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import com.wypl.wyplcore.auth.annotation.Authenticated; +import com.wypl.wyplcore.auth.domain.AuthMember; + +@Component +public class AuthenticatedArgumentResolver implements HandlerMethodArgumentResolver { + + @Override + public boolean supportsParameter(MethodParameter parameter) { + boolean hasParameterAnnotation = parameter.hasParameterAnnotation(Authenticated.class); + boolean assignableFrom = AuthMember.class.isAssignableFrom(parameter.getParameterType()); + return hasParameterAnnotation && assignableFrom; + } + + @Override + public AuthMember resolveArgument( + MethodParameter parameter, + ModelAndViewContainer mavContainer, + NativeWebRequest webRequest, + WebDataBinderFactory binderFactory + ) { + return null; + } +} diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/global/config/WebConfig.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/global/config/WebConfig.java new file mode 100644 index 0000000..d115f3b --- /dev/null +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/global/config/WebConfig.java @@ -0,0 +1,18 @@ +package com.wypl.wyplcore.global.config; + +import java.util.List; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import com.wypl.wyplcore.auth.utils.AuthenticatedArgumentResolver; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addArgumentResolvers(List resolvers) { + resolvers.add(new AuthenticatedArgumentResolver()); + } +} From 04988409b53b4c60047b0a3646d218fdb86c6c26 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 18:08:49 +0900 Subject: [PATCH 29/34] =?UTF-8?q?Refactor(#23):=20ReviewController?= =?UTF-8?q?=EC=97=90=20Authenticated=20annotation=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wypl/wyplcore/review/controller/ReviewController.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java index e0491df..b5c172c 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/controller/ReviewController.java @@ -2,9 +2,7 @@ import java.time.LocalDate; -import org.springframework.data.mongodb.core.messaging.Message; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -16,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController; import com.wypl.applicationcommon.WyplResponseEntity; +import com.wypl.wyplcore.auth.annotation.Authenticated; import com.wypl.wyplcore.auth.domain.AuthMember; import com.wypl.wyplcore.review.data.request.ReviewCreateRequest; import com.wypl.wyplcore.review.data.request.ReviewType; From 5da993e43c7d491a82a1a9370f0bb69f82dc4f59 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 19:25:29 +0900 Subject: [PATCH 30/34] =?UTF-8?q?Feat(#23):=20H2,=20embedded=20MongoDB=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.properties | 1 - .../src/main/resources/application.yml | 25 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) delete mode 100644 application/wypl-core/src/main/resources/application.properties create mode 100644 application/wypl-core/src/main/resources/application.yml diff --git a/application/wypl-core/src/main/resources/application.properties b/application/wypl-core/src/main/resources/application.properties deleted file mode 100644 index 15afd6e..0000000 --- a/application/wypl-core/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=wypl-calendar diff --git a/application/wypl-core/src/main/resources/application.yml b/application/wypl-core/src/main/resources/application.yml new file mode 100644 index 0000000..1017b4e --- /dev/null +++ b/application/wypl-core/src/main/resources/application.yml @@ -0,0 +1,25 @@ +spring: + application: + name: wypl-calendar + jpa: + properties: + hibernate: + show_sql: true + format_sql: true + hibernate: + ddl-auto: create-drop + datasource: + driver-class-name: org.h2.Driver + username: sa + password: 1234 + url: jdbc:h2:mem:db + h2: + console: + enabled: true + path: /h2 + +de: + flapdoodle: + mongodb: + embedded: + version: 4.0.2 \ No newline at end of file From 3de1fe7addc19faa4ba7749bc3ba541737c679bf Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 19:25:47 +0900 Subject: [PATCH 31/34] =?UTF-8?q?Remove(#23):=20Test=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/com/wypl/wyplcore/.gitkeep | 0 .../wypl/wyplcore/WyplCalendarApplicationTests.java | 11 ----------- 2 files changed, 11 deletions(-) create mode 100644 application/wypl-core/src/test/java/com/wypl/wyplcore/.gitkeep delete mode 100644 application/wypl-core/src/test/java/com/wypl/wyplcore/WyplCalendarApplicationTests.java diff --git a/application/wypl-core/src/test/java/com/wypl/wyplcore/.gitkeep b/application/wypl-core/src/test/java/com/wypl/wyplcore/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/application/wypl-core/src/test/java/com/wypl/wyplcore/WyplCalendarApplicationTests.java b/application/wypl-core/src/test/java/com/wypl/wyplcore/WyplCalendarApplicationTests.java deleted file mode 100644 index 227c74f..0000000 --- a/application/wypl-core/src/test/java/com/wypl/wyplcore/WyplCalendarApplicationTests.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.wypl.wyplcore; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class WyplCalendarApplicationTests { - @Test - void contextLoads() { - } -} From 41fe0635633df9d8da5993b547a5999ad1baa602 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 19:26:12 +0900 Subject: [PATCH 32/34] =?UTF-8?q?Refactor(#23):=20Member=20entity=EC=9D=98?= =?UTF-8?q?=20id=20->=20member=5Fid=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/wypl/jpamemberdomain/member/Member.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java b/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java index 055259d..6617f04 100644 --- a/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java +++ b/domain/jpa-member-domain/src/main/java/com/wypl/jpamemberdomain/member/Member.java @@ -3,6 +3,7 @@ import java.time.LocalDate; import com.wypl.common.Color; +import com.wypl.jpacommon.JpaBaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -17,12 +18,12 @@ @Getter @Entity @Table(name = "member_tbl") -public class Member { +public class Member extends JpaBaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Long id; + @Column(name = "member_id") + private Long memberId; @Column(name = "email", length = 50, unique = true, nullable = false) private String email; From 507102989fda6dc0f4e52ce138db23018cf7562c Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 19:27:03 +0900 Subject: [PATCH 33/34] =?UTF-8?q?Refactor(#23):=20memberId,=20scheduleId?= =?UTF-8?q?=20->=20member,=20schedule=20=EB=A1=9C=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewServiceImpl.java | 19 +++++++++++----- .../wyplcore/review/utils/ReviewUtils.java | 12 +++++++--- .../review/repository/ReviewRepository.java | 22 +++++++++---------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java index bdded20..0972928 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/service/ReviewServiceImpl.java @@ -66,7 +66,9 @@ public ReviewIdResponse createReview(long memberId, ReviewCreateRequest reviewCr public ReviewIdResponse updateReview(long memberId, long reviewId, ReviewUpdateRequest reviewUpdateRequest) { validateReviewContents(reviewUpdateRequest.contents(), reviewUpdateRequest.title()); - Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); + Member member = null; // Todo : 조회 + + Review review = ReviewUtils.findByReviewIdAndMember(reviewRepository, reviewId, member); review.updateTitle(reviewUpdateRequest.title()); ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); @@ -80,7 +82,8 @@ public ReviewIdResponse updateReview(long memberId, long reviewId, ReviewUpdateR @Override @Transactional public ReviewIdResponse deleteReview(long memberId, long reviewId) { - Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); + Member member = null; // Todo : 조회 + Review review = ReviewUtils.findByReviewIdAndMember(reviewRepository, reviewId, member); ReviewContents reviewContents = reviewContentsRepository.findByReviewIdAndDeletedAtNull(review.getReviewId()); reviewContents.delete(); @@ -94,7 +97,8 @@ public ReviewIdResponse deleteReview(long memberId, long reviewId) { @Override public ReviewDetailResponse getDetailReview(long memberId, long reviewId) { - Review review = ReviewUtils.findReviewByReviewIdAndMemberId(reviewRepository, reviewId, memberId); + Member member = null; // Todo : 조회 + Review review = ReviewUtils.findByReviewIdAndMember(reviewRepository, reviewId, member); Schedule schedule = review.getSchedule(); // Todo : 저장할 때 null 검사 하는데, 가져올 때도 검사해야 할까??? @@ -161,12 +165,15 @@ public ReviewListResponse getReviewsByScheduleId(long memberId, long scheduleId, // MemberSchedule memberSchedule = memberScheduleService.getMemberScheduleByMemberAndSchedule(memberId, // ScheduleServiceUtils.findById(scheduleRepository, scheduleId)); + Member member = null; // Todo : 조회 + Schedule schedule = null; // Todo : 조회 + List reviews = switch (reviewType) { case NEWEST -> { - yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(memberId, scheduleId); + yield reviewRepository.getReviewByMemberAndScheduleOrderByCreatedAtDesc(member, schedule); } case OLDEST -> { - yield reviewRepository.getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(memberId,scheduleId); + yield reviewRepository.getReviewsByMemberAndScheduleOrderByCreatedAt(member, schedule); } }; @@ -204,7 +211,7 @@ private void validateReviewContents(List> contents, S throw new ReviewException(ReviewErrorCode.EMPTY_CONTENTS); } - if(title == null || title.length() > 50 || title.length() == 0) { + if (title == null || title.length() > 50 || title.length() == 0) { throw new ReviewException(ReviewErrorCode.INVALID_TITLE); } } diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java index 80c8d6c..0c1504c 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/utils/ReviewUtils.java @@ -1,6 +1,7 @@ package com.wypl.wyplcore.review.utils; import com.wypl.common.exception.CallConstructorException; +import com.wypl.jpamemberdomain.member.Member; import com.wypl.jpamongoreviewdomain.review.domain.Review; import com.wypl.jpamongoreviewdomain.review.repository.ReviewRepository; import com.wypl.wyplcore.review.exception.ReviewErrorCode; @@ -11,11 +12,16 @@ public class ReviewUtils { @Generated - private ReviewUtils() {throw new CallConstructorException(); + private ReviewUtils() { + throw new CallConstructorException(); } - public static Review findReviewByReviewIdAndMemberId(ReviewRepository reviewRepository, long reviewId, long memberId) { - return reviewRepository.findByReviewIdAndMemberId(reviewId, memberId) + public static Review findByReviewIdAndMember( + final ReviewRepository reviewRepository, + final long reviewId, + final Member member + ) { + return reviewRepository.findByReviewIdAndMember(reviewId, member) .orElseThrow(() -> new ReviewException(ReviewErrorCode.NO_SUCH_REVIEW)); } } diff --git a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java index 8100295..0cf0569 100644 --- a/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java +++ b/domain/jpamongo-review-domain/src/main/java/com/wypl/jpamongoreviewdomain/review/repository/ReviewRepository.java @@ -7,26 +7,26 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; +import com.wypl.jpacalendardomain.schedule.domain.Schedule; +import com.wypl.jpamemberdomain.member.Member; import com.wypl.jpamongoreviewdomain.review.domain.Review; -@Repository public interface ReviewRepository extends JpaRepository { - Optional findByReviewIdAndMemberId(long reviewId, long memberId); + Optional findByReviewIdAndMember(long reviewId, Member member); //일정 별 조회 //오래된순 - List getReviewsByMemberIdAndScheduleIdOrderByCreatedAt(long memberId, long scheduleId); + List getReviewsByMemberAndScheduleOrderByCreatedAt(Member member, Schedule schedule); //최신순 - List getReviewsByMemberIdAndScheduleIdOrderByCreatedAtDesc(long memberId, long scheduleId); + List getReviewByMemberAndScheduleOrderByCreatedAtDesc(Member member, Schedule schedule); //리뷰 조회 //1. 날짜 설정 안한 경우(오래된 순, 모든 리뷰, 무한 스크롤) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id and r.reviewId > :last_review_id " + + "where m.memberId = :member_id and r.reviewId > :last_review_id " + "order by r.reviewId asc " + "limit 24") List getReviewsOldestAll( @@ -37,7 +37,7 @@ List getReviewsOldestAll( //2-1. 날짜 설정 안한 경우(최신순, 모든 리뷰, 무한스크롤, 첫번째) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id " + + "where m.memberId = :member_id " + "order by r.reviewId desc " + "limit 24") List getReviewsNewestAll( @@ -47,7 +47,7 @@ List getReviewsNewestAll( //2-2. 날짜 설정 안한 경우(최신순, 모든 리뷰, 무한스크롤, 첫번째 이후) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id and r.reviewId < :last_review_id " + + "where m.memberId = :member_id and r.reviewId < :last_review_id " + "order by r.reviewId desc " + "limit 24") List getReviewsNewestAllAfter( @@ -58,7 +58,7 @@ List getReviewsNewestAllAfter( //3. 날짜 설정한 경우(오래된 순, 무한 스크롤) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id and r.reviewId > :last_review_id and r.createdAt between :start_date and :end_date " + + "where m.memberId = :member_id and r.reviewId > :last_review_id and r.createdAt between :start_date and :end_date " + "order by r.reviewId asc " + "limit 24") List getReviewsOldest( @@ -71,7 +71,7 @@ List getReviewsOldest( //4-1. 날짜 설정한 경우(최신순 순, 무한 스크롤, 처음 이후) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id and r.reviewId < :last_review_id and r.createdAt between :start_date and :end_date " + + "where m.memberId = :member_id and r.reviewId < :last_review_id and r.createdAt between :start_date and :end_date " + "order by r.reviewId desc " + "limit 24") List getReviewsNewestAfter( @@ -84,7 +84,7 @@ List getReviewsNewestAfter( //4-2. 날짜 설정한 경우(최신순 순, 무한 스크롤, 처음) @Query("select r " + "from Review r join fetch r.member m " - + "where m.id = :member_id and r.createdAt between :start_date and :end_date " + + "where m.memberId = :member_id and r.createdAt between :start_date and :end_date " + "order by r.reviewId desc " + "limit 24") List getReviewsNewest( From 2e4f22492764534401bf8df8452164928ab5fc38 Mon Sep 17 00:00:00 2001 From: sjhjack Date: Sun, 22 Sep 2024 19:56:25 +0900 Subject: [PATCH 34/34] =?UTF-8?q?Refactor(#23):=20ReviewListResponse=20?= =?UTF-8?q?=EC=A4=84=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wypl/wyplcore/review/data/response/ReviewListResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java index 530fab9..d01879d 100644 --- a/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java +++ b/application/wypl-core/src/main/java/com/wypl/wyplcore/review/data/response/ReviewListResponse.java @@ -9,7 +9,8 @@ public record ReviewListResponse( @JsonProperty("review_count") int reviewCount, - List reviews) { + List reviews +) { public static ReviewListResponse from(List reviews) { return new ReviewListResponse(reviews.size(), reviews); }