From 8e9eef85ce7c326433135907c8cb60976d2326ce Mon Sep 17 00:00:00 2001 From: sunseo18 Date: Thu, 13 Jul 2023 01:22:50 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[ADD]=20=EA=B3=B5=EA=B0=84=20=EB=B6=81?= =?UTF-8?q?=EB=A7=88=ED=81=AC=20=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8F=B0=EC=8A=A4=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80=20#39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/indipage/org/indipage/exception/Success.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/indipage/org/indipage/exception/Success.java b/src/main/java/indipage/org/indipage/exception/Success.java index 7f6064d..c049da0 100644 --- a/src/main/java/indipage/org/indipage/exception/Success.java +++ b/src/main/java/indipage/org/indipage/exception/Success.java @@ -22,6 +22,7 @@ public enum Success { READ_IF_USER_HAS_RECEIVED_TICKET_SUCCESS(HttpStatus.OK, "티켓 수령 여부 조회를 성공했습니다."), READ_ARTICLE_SUMMARY_LIST_SUCCESS(HttpStatus.OK, "아티클 전체 목록 조회에 성공했습니다."), READ_IS_ARTICLE_BOOKMARKED_SUCCESS(HttpStatus.OK, "아티클 북마크 여부 조회 성공"), + READ_IS_SPACE_BOOKMARKED_SUCCESS(HttpStatus.OK, "공간 북마크 여부 조회 성공"), /** * 201 CREATED */ @@ -31,8 +32,7 @@ public enum Success { CREATE_FOLLOW_SPACE_SUCCESS(HttpStatus.CREATED, "조르기 등록에 성공했습니다."), CREATE_RECEIVE_TICKET_SUCCESS(HttpStatus.CREATED, "티켓 수령에 성공했습니다."), - CREATE_ARTICLE_BOOKMARK_SUCCESS(HttpStatus.CREATED, "아티클 북마크 등록에 성공했습니다.") - ; + CREATE_ARTICLE_BOOKMARK_SUCCESS(HttpStatus.CREATED, "아티클 북마크 등록에 성공했습니다."); private final HttpStatus httpStatus; private final String message; From 71777d5e857570c23765c02de3e71bc8f73327d8 Mon Sep 17 00:00:00 2001 From: sunseo18 Date: Thu, 13 Jul 2023 01:27:49 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[ADD]=20=EA=B3=B5=EA=B0=84=20=EB=B6=81?= =?UTF-8?q?=EB=A7=88=ED=81=AC=20=EC=A0=80=EC=9E=A5=EC=9D=84=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?#39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indipage/domain/Relation/SpaceBookmarkRelation.java | 7 +++++++ .../indipage/domain/Relation/SpaceBookmarkRelationId.java | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelation.java b/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelation.java index a8e2ec8..859c3fd 100644 --- a/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelation.java +++ b/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelation.java @@ -9,11 +9,13 @@ import javax.persistence.ManyToOne; import javax.persistence.MapsId; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @Entity @Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PROTECTED) public class SpaceBookmarkRelation extends CreatedTimeBaseEntity { @EmbeddedId @@ -29,4 +31,9 @@ public class SpaceBookmarkRelation extends CreatedTimeBaseEntity { @JoinColumn(name = "user_id") private User user; + public static SpaceBookmarkRelation newInstance(Space space, User user) { + return new SpaceBookmarkRelation( + SpaceBookmarkRelationId.newInstance(user, space), space, user); + } + } diff --git a/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelationId.java b/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelationId.java index bffd1f1..1a9401d 100644 --- a/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelationId.java +++ b/src/main/java/indipage/org/indipage/domain/Relation/SpaceBookmarkRelationId.java @@ -1,12 +1,16 @@ package indipage.org.indipage.domain.Relation; +import indipage.org.indipage.domain.Space; +import indipage.org.indipage.domain.User; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Embeddable; +import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @Embeddable +@AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode public class SpaceBookmarkRelationId implements Serializable { @@ -16,4 +20,8 @@ public class SpaceBookmarkRelationId implements Serializable { @Column(name = "space_id", nullable = false) private Long spaceId; + + public static SpaceBookmarkRelationId newInstance(User user, Space space) { + return new SpaceBookmarkRelationId(user.getId(), space.getId()); + } } From ead1bcc6f58fbb5cb2d22ada827c98ad026f075c Mon Sep 17 00:00:00 2001 From: sunseo18 Date: Thu, 13 Jul 2023 01:28:08 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[FEAT]=20=EA=B3=B5=EA=B0=84=20=EB=B6=81?= =?UTF-8?q?=EB=A7=88=ED=81=AC=20=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EA=B5=AC=ED=98=84=20#39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/user/controller/UserController.java | 7 +++++ .../api/user/service/UserService.java | 27 +++++++++++++++++++ .../SpaceBookmarkRelationRepository.java | 13 +++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/main/java/indipage/org/indipage/domain/SpaceBookmarkRelationRepository.java diff --git a/src/main/java/indipage/org/indipage/api/user/controller/UserController.java b/src/main/java/indipage/org/indipage/api/user/controller/UserController.java index 257bb50..7d0df0f 100644 --- a/src/main/java/indipage/org/indipage/api/user/controller/UserController.java +++ b/src/main/java/indipage/org/indipage/api/user/controller/UserController.java @@ -62,4 +62,11 @@ public ApiResponse createArticleBookmark(@PathVariable Long articleId) { userService.createArticleBookmark(1L, articleId); return ApiResponse.success(Success.CREATE_ARTICLE_BOOKMARK_SUCCESS); } + + @GetMapping("/bookmark/space/{spaceId}") + @ResponseStatus(HttpStatus.OK) + public ApiResponse readIsSpaceBookmarked(@PathVariable Long spaceId) { + return ApiResponse.success(Success.READ_IS_SPACE_BOOKMARKED_SUCCESS, + userService.readIsSpaceBookmarked(1L, spaceId)); + } } diff --git a/src/main/java/indipage/org/indipage/api/user/service/UserService.java b/src/main/java/indipage/org/indipage/api/user/service/UserService.java index c56e024..9ecdf53 100644 --- a/src/main/java/indipage/org/indipage/api/user/service/UserService.java +++ b/src/main/java/indipage/org/indipage/api/user/service/UserService.java @@ -12,7 +12,10 @@ import indipage.org.indipage.domain.Relation.ArticleBookmarkRelationId; import indipage.org.indipage.domain.Relation.InviteSpaceRelation; import indipage.org.indipage.domain.Relation.InviteSpaceRelationId; +import indipage.org.indipage.domain.Relation.SpaceBookmarkRelation; +import indipage.org.indipage.domain.Relation.SpaceBookmarkRelationId; import indipage.org.indipage.domain.Space; +import indipage.org.indipage.domain.SpaceBookmarkRelationRepository; import indipage.org.indipage.domain.SpaceRepository; import indipage.org.indipage.domain.Ticket; import indipage.org.indipage.domain.User; @@ -34,6 +37,8 @@ public class UserService { private final SpaceRepository spaceRepository; private final InviteSpaceRelationRepository inviteSpaceRelationRepository; private final ArticleBookmarkRelationRepository articleBookmarkRelationRepository; + private final SpaceBookmarkRelationRepository spaceBookmarkRelationRepository; + public UserDto readUser(final Long userId) { return UserDto.of(findUser(userId)); @@ -118,6 +123,17 @@ public void createArticleBookmark(final Long userId, final Long articleId) { articleBookmarkRelationRepository.save(relation); } + public IsBookmarkedResponseDto readIsSpaceBookmarked(final Long userId, final Long spaceId) { + + User user = findUser(userId); + Space space = findSpace(spaceId); + + if (!isBookMarked(user, space)) { + return IsBookmarkedResponseDto.of(false); + } + return IsBookmarkedResponseDto.of(true); + } + private Space findSpace(Long spaceId) { return spaceRepository.findById(spaceId).orElseThrow( () -> new NotFoundException(Error.NOT_FOUND_SPACE_EXCEPTION, @@ -140,4 +156,15 @@ private boolean isBookMarked(User user, Article article) { return true; } + + private boolean isBookMarked(User user, Space space) { + Optional relation = spaceBookmarkRelationRepository.findSpaceBookmarkRelationBySpaceBookmarkRelationId( + SpaceBookmarkRelationId.newInstance(user, space)); + + if (relation.isEmpty()) { + return false; + } + + return true; + } } diff --git a/src/main/java/indipage/org/indipage/domain/SpaceBookmarkRelationRepository.java b/src/main/java/indipage/org/indipage/domain/SpaceBookmarkRelationRepository.java new file mode 100644 index 0000000..43d6bfc --- /dev/null +++ b/src/main/java/indipage/org/indipage/domain/SpaceBookmarkRelationRepository.java @@ -0,0 +1,13 @@ +package indipage.org.indipage.domain; + +import indipage.org.indipage.domain.Relation.SpaceBookmarkRelation; +import indipage.org.indipage.domain.Relation.SpaceBookmarkRelationId; +import java.util.Optional; +import org.springframework.data.repository.Repository; + +public interface SpaceBookmarkRelationRepository extends + Repository { + Optional findSpaceBookmarkRelationBySpaceBookmarkRelationId( + SpaceBookmarkRelationId spaceBookmarkRelationId); + +} \ No newline at end of file