From 1f1b2e010e15d99e2f0280d394ee90b49c452d52 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:12:47 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=9D=91=EB=8B=B5=20dto=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/dto/LikedNewsResponse.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java diff --git a/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java b/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java new file mode 100644 index 000000000..6a24bdb8c --- /dev/null +++ b/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java @@ -0,0 +1,11 @@ +package com.example.solidconnection.news.dto; + +public record LikedNewsResponse( + long id, + boolean isLike +) { + + public static LikedNewsResponse of(long id, boolean isLike) { + return new LikedNewsResponse(id, isLike); + } +} From e83154abae5ca595532765f7ddfe1b0d14825d04 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:13:14 +0900 Subject: [PATCH 02/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20Repository=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/repository/LikedNewsRepository.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java diff --git a/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java b/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java new file mode 100644 index 000000000..3b532a404 --- /dev/null +++ b/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java @@ -0,0 +1,9 @@ +package com.example.solidconnection.news.repository; + +import com.example.solidconnection.news.domain.LikedNews; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LikedNewsRepository extends JpaRepository { + + boolean existsByNewsIdAndSiteUserId(long newsId, long siteUserId); +} From a1d0caf7f4ac6753ee7207ffa9e119145dc97a4d Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:14:38 +0900 Subject: [PATCH 03/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20Service=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/exception/ErrorCode.java | 1 + .../news/domain/LikedNews.java | 5 +++ .../news/service/NewsLikeService.java | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/main/java/com/example/solidconnection/news/service/NewsLikeService.java diff --git a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java index 90a53dad3..1ddc714cf 100644 --- a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java +++ b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java @@ -99,6 +99,7 @@ public enum ErrorCode { // news INVALID_NEWS_ACCESS(HttpStatus.BAD_REQUEST.value(), "자신의 소식지만 제어할 수 있습니다."), + ALREADY_LIKED_NEWS(HttpStatus.BAD_REQUEST.value(), "이미 좋아요한 소식지입니다."), // database diff --git a/src/main/java/com/example/solidconnection/news/domain/LikedNews.java b/src/main/java/com/example/solidconnection/news/domain/LikedNews.java index a50e31659..9b7affad7 100644 --- a/src/main/java/com/example/solidconnection/news/domain/LikedNews.java +++ b/src/main/java/com/example/solidconnection/news/domain/LikedNews.java @@ -33,4 +33,9 @@ public class LikedNews { @Column(name = "site_user_id") private long siteUserId; + + public LikedNews(long newsId, long siteUserId) { + this.newsId = newsId; + this.siteUserId = siteUserId; + } } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java new file mode 100644 index 000000000..c7c749e15 --- /dev/null +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -0,0 +1,34 @@ +package com.example.solidconnection.news.service; + +import com.example.solidconnection.common.exception.CustomException; +import com.example.solidconnection.news.domain.LikedNews; +import com.example.solidconnection.news.dto.LikedNewsResponse; +import com.example.solidconnection.news.repository.LikedNewsRepository; +import com.example.solidconnection.news.repository.NewsRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_NEWS; +import static com.example.solidconnection.common.exception.ErrorCode.NEWS_NOT_FOUND; + +@RequiredArgsConstructor +@Service +public class NewsLikeService { + + private final NewsRepository newsRepository; + private final LikedNewsRepository likedNewsRepository; + + @Transactional + public LikedNewsResponse addNewsLike(long siteUserId, Long newsId) { + if (!newsRepository.existsById(newsId)) { + throw new CustomException(NEWS_NOT_FOUND); + } + if (likedNewsRepository.existsByNewsIdAndSiteUserId(newsId, siteUserId)) { + throw new CustomException(ALREADY_LIKED_NEWS); + } + LikedNews likedNews = new LikedNews(newsId, siteUserId); + LikedNews savedLikedNews = likedNewsRepository.save(likedNews); + return LikedNewsResponse.of(savedLikedNews.getId(), true); + } +} From 0b112215de7cd01cde9825c850256dc7c1867254 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:15:15 +0900 Subject: [PATCH 04/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20Controller=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/controller/NewsController.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index 51b739f8c..de81b5e9e 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -1,11 +1,13 @@ package com.example.solidconnection.news.controller; import com.example.solidconnection.common.resolver.AuthorizedUser; +import com.example.solidconnection.news.dto.LikedNewsResponse; import com.example.solidconnection.news.dto.NewsCommandResponse; import com.example.solidconnection.news.dto.NewsCreateRequest; import com.example.solidconnection.news.dto.NewsListResponse; import com.example.solidconnection.news.dto.NewsUpdateRequest; import com.example.solidconnection.news.service.NewsCommandService; +import com.example.solidconnection.news.service.NewsLikeService; import com.example.solidconnection.news.service.NewsQueryService; import com.example.solidconnection.security.annotation.RequireRoleAccess; import com.example.solidconnection.siteuser.domain.Role; @@ -31,6 +33,7 @@ public class NewsController { private final NewsQueryService newsQueryService; private final NewsCommandService newsCommandService; + private final NewsLikeService newsLikeService; // todo: 추후 Slice 적용 @GetMapping @@ -77,4 +80,13 @@ public ResponseEntity deleteNewsById( NewsCommandResponse newsCommandResponse = newsCommandService.deleteNewsById(siteUser, newsId); return ResponseEntity.ok(newsCommandResponse); } + + @PostMapping("/{news-id}/like") + public ResponseEntity addNewsLike( + @AuthorizedUser SiteUser siteUser, + @PathVariable("news-id") Long newsId + ) { + LikedNewsResponse likedNewsResponse = newsLikeService.addNewsLike(siteUser.getId(), newsId); + return ResponseEntity.ok(likedNewsResponse); + } } From f6a3844cfe68534210b078be2cfe07a59fe55cc2 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:15:54 +0900 Subject: [PATCH 05/18] =?UTF-8?q?test:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/service/NewsLikeServiceTest.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java new file mode 100644 index 000000000..dcc0f9447 --- /dev/null +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -0,0 +1,73 @@ +package com.example.solidconnection.news.service; + +import com.example.solidconnection.common.exception.CustomException; +import com.example.solidconnection.news.domain.News; +import com.example.solidconnection.news.dto.LikedNewsResponse; +import com.example.solidconnection.news.fixture.NewsFixture; +import com.example.solidconnection.news.repository.LikedNewsRepository; +import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.fixture.SiteUserFixture; +import com.example.solidconnection.support.TestContainerSpringBootTest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_NEWS; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; +import static org.junit.jupiter.api.Assertions.assertAll; + +@TestContainerSpringBootTest +@DisplayName("소식지 좋아요 서비스 테스트") +class NewsLikeServiceTest { + + @Autowired + private NewsLikeService newsLikeService; + + @Autowired + private LikedNewsRepository likedNewsRepository; + + @Autowired + private SiteUserFixture siteUserFixture; + + @Autowired + private NewsFixture newsFixture; + + private SiteUser user; + private News news; + + @BeforeEach + void setUp() { + user = siteUserFixture.사용자(); + news = newsFixture.소식지(siteUserFixture.멘토(1, "mentor").getId()); + } + + @Nested + class 소식지_좋아요를_등록한다 { + + @Test + void 성공적으로_좋아요를_등록한다() { + // when + LikedNewsResponse response = newsLikeService.addNewsLike(user.getId(), news.getId()); + + // then + assertAll( + () -> assertThat(response.isLike()).isTrue(), + () -> assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isTrue() + ); + } + + @Test + void 이미_좋아요했으면_예외_응답을_반환한다() { + // given + newsLikeService.addNewsLike(user.getId(), news.getId()); + + // when & then + assertThatCode(() -> newsLikeService.addNewsLike(user.getId(), news.getId())) + .isInstanceOf(CustomException.class) + .hasMessage(ALREADY_LIKED_NEWS.getMessage()); + } + } +} From f7bf68fbdc5030d2ccf06475b66f184b5f1e6955 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:25:17 +0900 Subject: [PATCH 06/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=B7=A8=EC=86=8C=20Service=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/common/exception/ErrorCode.java | 2 +- .../news/repository/LikedNewsRepository.java | 4 ++++ .../news/service/NewsLikeService.java | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java index 1ddc714cf..84b79afc3 100644 --- a/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java +++ b/src/main/java/com/example/solidconnection/common/exception/ErrorCode.java @@ -100,7 +100,7 @@ public enum ErrorCode { // news INVALID_NEWS_ACCESS(HttpStatus.BAD_REQUEST.value(), "자신의 소식지만 제어할 수 있습니다."), ALREADY_LIKED_NEWS(HttpStatus.BAD_REQUEST.value(), "이미 좋아요한 소식지입니다."), - + NOT_LIKED_NEWS(HttpStatus.BAD_REQUEST.value(), "좋아요하지 않은 소식지입니다."), // database DATA_INTEGRITY_VIOLATION(HttpStatus.CONFLICT.value(), "데이터베이스 무결성 제약조건 위반이 발생했습니다."), diff --git a/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java b/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java index 3b532a404..6c9a51585 100644 --- a/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java +++ b/src/main/java/com/example/solidconnection/news/repository/LikedNewsRepository.java @@ -3,7 +3,11 @@ import com.example.solidconnection.news.domain.LikedNews; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface LikedNewsRepository extends JpaRepository { boolean existsByNewsIdAndSiteUserId(long newsId, long siteUserId); + + Optional findByNewsIdAndSiteUserId(long newsId, long siteUserId); } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index c7c749e15..504d3250d 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -11,6 +11,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_NEWS; import static com.example.solidconnection.common.exception.ErrorCode.NEWS_NOT_FOUND; +import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_NEWS; @RequiredArgsConstructor @Service @@ -31,4 +32,15 @@ public LikedNewsResponse addNewsLike(long siteUserId, Long newsId) { LikedNews savedLikedNews = likedNewsRepository.save(likedNews); return LikedNewsResponse.of(savedLikedNews.getId(), true); } + + @Transactional + public LikedNewsResponse cancelNewsLike(long siteUserId, Long newsId) { + if (!newsRepository.existsById(newsId)) { + throw new CustomException(NEWS_NOT_FOUND); + } + LikedNews likedNews = likedNewsRepository.findByNewsIdAndSiteUserId(newsId, siteUserId) + .orElseThrow(() -> new CustomException(NOT_LIKED_NEWS)); + likedNewsRepository.delete(likedNews); + return LikedNewsResponse.of(likedNews.getId(), false); + } } From 1ebb78f76a7c2374cfbd3df4dddf8a2173290436 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:25:31 +0900 Subject: [PATCH 07/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=B7=A8=EC=86=8C=20Controller?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/controller/NewsController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index de81b5e9e..c228aa014 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -89,4 +89,13 @@ public ResponseEntity addNewsLike( LikedNewsResponse likedNewsResponse = newsLikeService.addNewsLike(siteUser.getId(), newsId); return ResponseEntity.ok(likedNewsResponse); } + + @DeleteMapping("/{news-id}/like") + public ResponseEntity cancelNewsLike( + @AuthorizedUser SiteUser siteUser, + @PathVariable("news-id") Long newsId + ) { + LikedNewsResponse likedNewsResponse = newsLikeService.cancelNewsLike(siteUser.getId(), newsId); + return ResponseEntity.ok(likedNewsResponse); + } } From feec4ed0c8a22a5b1fca9c28e58b275eba9460fc Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:26:27 +0900 Subject: [PATCH 08/18] =?UTF-8?q?test:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=B7=A8=EC=86=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/service/NewsLikeServiceTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index dcc0f9447..250862199 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_NEWS; +import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_NEWS; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; import static org.junit.jupiter.api.Assertions.assertAll; @@ -70,4 +71,31 @@ class 소식지_좋아요를_등록한다 { .hasMessage(ALREADY_LIKED_NEWS.getMessage()); } } + + @Nested + class 소식지_좋아요를_취소한다 { + + @Test + void 성공적으로_좋아요를_취소한다() { + // given + newsLikeService.addNewsLike(user.getId(), news.getId()); + + // when + LikedNewsResponse response = newsLikeService.cancelNewsLike(user.getId(), news.getId()); + + // then + assertAll( + () -> assertThat(response.isLike()).isFalse(), + () -> assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isFalse() + ); + } + + @Test + void 좋아요하지_않았으면_예외_응답을_반환한다() { + // when & then + assertThatCode(() -> newsLikeService.cancelNewsLike(user.getId(), news.getId())) + .isInstanceOf(CustomException.class) + .hasMessage(NOT_LIKED_NEWS.getMessage()); + } + } } From 9a06d62f7ccd2549ed89ab4a306cb3c730a5cacb Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:39:27 +0900 Subject: [PATCH 09/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=83=81=ED=83=9C=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20Service=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/service/NewsLikeService.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index 504d3250d..d6b33dbf7 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -20,6 +20,15 @@ public class NewsLikeService { private final NewsRepository newsRepository; private final LikedNewsRepository likedNewsRepository; + @Transactional(readOnly = true) + public LikedNewsResponse getNewsLikeStatus(long siteUserId, Long newsId) { + if (!newsRepository.existsById(newsId)) { + throw new CustomException(NEWS_NOT_FOUND); + } + boolean isLiked = likedNewsRepository.existsByNewsIdAndSiteUserId(newsId, siteUserId); + return LikedNewsResponse.of(newsId, isLiked); + } + @Transactional public LikedNewsResponse addNewsLike(long siteUserId, Long newsId) { if (!newsRepository.existsById(newsId)) { From 82fd744c0769ae4692b392a300ce4039c8427549 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:39:43 +0900 Subject: [PATCH 10/18] =?UTF-8?q?feat:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=83=81=ED=83=9C=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20Controller=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/controller/NewsController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index c228aa014..261db95f2 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -81,6 +81,15 @@ public ResponseEntity deleteNewsById( return ResponseEntity.ok(newsCommandResponse); } + @GetMapping("/{news-id}/like") + public ResponseEntity getNewsLikeStatus( + @AuthorizedUser SiteUser siteUser, + @PathVariable("news-id") Long newsId + ) { + LikedNewsResponse likedNewsResponse = newsLikeService.getNewsLikeStatus(siteUser.getId(), newsId); + return ResponseEntity.ok(likedNewsResponse); + } + @PostMapping("/{news-id}/like") public ResponseEntity addNewsLike( @AuthorizedUser SiteUser siteUser, From 5e57fc6d8d42dbb2ce81017c67dbb28cf9db95f0 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:40:02 +0900 Subject: [PATCH 11/18] =?UTF-8?q?test:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=83=81=ED=83=9C=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/service/NewsLikeServiceTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index 250862199..c44622b37 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -45,6 +45,31 @@ void setUp() { news = newsFixture.소식지(siteUserFixture.멘토(1, "mentor").getId()); } + @Nested + class 소식지_좋아요_상태를_조회한다 { + + @Test + void 좋아요한_소식지인지_확인한다() { + // given + newsLikeService.addNewsLike(user.getId(), news.getId()); + + // when + LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); + + // then + assertThat(response.isLike()).isTrue(); + } + + @Test + void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다() { + // when + LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); + + // then + assertThat(response.isLike()).isFalse(); + } + } + @Nested class 소식지_좋아요를_등록한다 { From 09e0fe72a0af8f614ef5334cc44d9441a39c5430 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:46:27 +0900 Subject: [PATCH 12/18] =?UTF-8?q?refactor:=20newsId=20Long=20->=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 --- .../solidconnection/news/service/NewsLikeService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index d6b33dbf7..78934680b 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -21,7 +21,7 @@ public class NewsLikeService { private final LikedNewsRepository likedNewsRepository; @Transactional(readOnly = true) - public LikedNewsResponse getNewsLikeStatus(long siteUserId, Long newsId) { + public LikedNewsResponse getNewsLikeStatus(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } @@ -30,7 +30,7 @@ public LikedNewsResponse getNewsLikeStatus(long siteUserId, Long newsId) { } @Transactional - public LikedNewsResponse addNewsLike(long siteUserId, Long newsId) { + public LikedNewsResponse addNewsLike(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } @@ -43,7 +43,7 @@ public LikedNewsResponse addNewsLike(long siteUserId, Long newsId) { } @Transactional - public LikedNewsResponse cancelNewsLike(long siteUserId, Long newsId) { + public LikedNewsResponse cancelNewsLike(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } From 2458c25f8ec3272535ab4a7484bac4979e2f2b3e Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:55:03 +0900 Subject: [PATCH 13/18] =?UTF-8?q?refactor:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=84=B1=EA=B3=B5=20=EB=B0=8F=20=EC=B7=A8=EC=86=8C=20?= =?UTF-8?q?=EC=8B=9C=20200=20=EC=83=81=ED=83=9C=EC=BD=94=EB=93=9C=EB=A7=8C?= =?UTF-8?q?=20=EC=A3=BC=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../news/controller/NewsController.java | 10 ++++------ .../news/service/NewsLikeService.java | 8 +++----- .../news/service/NewsLikeServiceTest.java | 15 ++++----------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index 261db95f2..7a393a526 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -91,20 +91,18 @@ public ResponseEntity getNewsLikeStatus( } @PostMapping("/{news-id}/like") - public ResponseEntity addNewsLike( + public void addNewsLike( @AuthorizedUser SiteUser siteUser, @PathVariable("news-id") Long newsId ) { - LikedNewsResponse likedNewsResponse = newsLikeService.addNewsLike(siteUser.getId(), newsId); - return ResponseEntity.ok(likedNewsResponse); + newsLikeService.addNewsLike(siteUser.getId(), newsId); } @DeleteMapping("/{news-id}/like") - public ResponseEntity cancelNewsLike( + public void cancelNewsLike( @AuthorizedUser SiteUser siteUser, @PathVariable("news-id") Long newsId ) { - LikedNewsResponse likedNewsResponse = newsLikeService.cancelNewsLike(siteUser.getId(), newsId); - return ResponseEntity.ok(likedNewsResponse); + newsLikeService.cancelNewsLike(siteUser.getId(), newsId); } } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index 78934680b..e64680123 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -30,7 +30,7 @@ public LikedNewsResponse getNewsLikeStatus(long siteUserId, long newsId) { } @Transactional - public LikedNewsResponse addNewsLike(long siteUserId, long newsId) { + public void addNewsLike(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } @@ -38,18 +38,16 @@ public LikedNewsResponse addNewsLike(long siteUserId, long newsId) { throw new CustomException(ALREADY_LIKED_NEWS); } LikedNews likedNews = new LikedNews(newsId, siteUserId); - LikedNews savedLikedNews = likedNewsRepository.save(likedNews); - return LikedNewsResponse.of(savedLikedNews.getId(), true); + likedNewsRepository.save(likedNews); } @Transactional - public LikedNewsResponse cancelNewsLike(long siteUserId, long newsId) { + public void cancelNewsLike(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } LikedNews likedNews = likedNewsRepository.findByNewsIdAndSiteUserId(newsId, siteUserId) .orElseThrow(() -> new CustomException(NOT_LIKED_NEWS)); likedNewsRepository.delete(likedNews); - return LikedNewsResponse.of(likedNews.getId(), false); } } diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index c44622b37..08bda56a1 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -18,7 +18,6 @@ import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_NEWS; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; -import static org.junit.jupiter.api.Assertions.assertAll; @TestContainerSpringBootTest @DisplayName("소식지 좋아요 서비스 테스트") @@ -76,13 +75,10 @@ class 소식지_좋아요를_등록한다 { @Test void 성공적으로_좋아요를_등록한다() { // when - LikedNewsResponse response = newsLikeService.addNewsLike(user.getId(), news.getId()); + newsLikeService.addNewsLike(user.getId(), news.getId()); // then - assertAll( - () -> assertThat(response.isLike()).isTrue(), - () -> assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isTrue() - ); + assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isTrue(); } @Test @@ -106,13 +102,10 @@ class 소식지_좋아요를_취소한다 { newsLikeService.addNewsLike(user.getId(), news.getId()); // when - LikedNewsResponse response = newsLikeService.cancelNewsLike(user.getId(), news.getId()); + newsLikeService.cancelNewsLike(user.getId(), news.getId()); // then - assertAll( - () -> assertThat(response.isLike()).isFalse(), - () -> assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isFalse() - ); + assertThat(likedNewsRepository.existsByNewsIdAndSiteUserId(news.getId(), user.getId())).isFalse(); } @Test From c9fd16fc8223123ee1baf7f894120d520b41542b Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:57:48 +0900 Subject: [PATCH 14/18] =?UTF-8?q?refactor:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=ED=99=95=EC=9D=B8=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20dto=EC=97=90=20id=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/news/dto/LikedNewsResponse.java | 5 ++--- .../solidconnection/news/service/NewsLikeService.java | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java b/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java index 6a24bdb8c..b854b9bf0 100644 --- a/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java +++ b/src/main/java/com/example/solidconnection/news/dto/LikedNewsResponse.java @@ -1,11 +1,10 @@ package com.example.solidconnection.news.dto; public record LikedNewsResponse( - long id, boolean isLike ) { - public static LikedNewsResponse of(long id, boolean isLike) { - return new LikedNewsResponse(id, isLike); + public static LikedNewsResponse of(boolean isLike) { + return new LikedNewsResponse(isLike); } } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index e64680123..4a48e6ee8 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -25,8 +25,8 @@ public LikedNewsResponse getNewsLikeStatus(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } - boolean isLiked = likedNewsRepository.existsByNewsIdAndSiteUserId(newsId, siteUserId); - return LikedNewsResponse.of(newsId, isLiked); + boolean isLike = likedNewsRepository.existsByNewsIdAndSiteUserId(newsId, siteUserId); + return LikedNewsResponse.of(isLike); } @Transactional From 6e1aa834ce5d3552b7612ed92ead5e2b36fddb87 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:59:12 +0900 Subject: [PATCH 15/18] =?UTF-8?q?style:=20=EC=86=8C=EC=8B=9D=EC=A7=80=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=83=81=ED=83=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/service/NewsLikeServiceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index 08bda56a1..64856c3d9 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -48,7 +48,7 @@ void setUp() { class 소식지_좋아요_상태를_조회한다 { @Test - void 좋아요한_소식지인지_확인한다() { + void 좋아요한_소식지의_좋아요_상태를_조회한다() { // given newsLikeService.addNewsLike(user.getId(), news.getId()); @@ -60,7 +60,7 @@ class 소식지_좋아요_상태를_조회한다 { } @Test - void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다() { + void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다(){ // when LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); From c988806d0e7d6cbc90fad767a12866416059d924 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 18:14:43 +0900 Subject: [PATCH 16/18] =?UTF-8?q?refactor:=20return=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=20ResponseEntity=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 --- .../solidconnection/news/controller/NewsController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index 7a393a526..cdcf8dcf1 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -91,18 +91,20 @@ public ResponseEntity getNewsLikeStatus( } @PostMapping("/{news-id}/like") - public void addNewsLike( + public ResponseEntity addNewsLike( @AuthorizedUser SiteUser siteUser, @PathVariable("news-id") Long newsId ) { newsLikeService.addNewsLike(siteUser.getId(), newsId); + return ResponseEntity.ok().build(); } @DeleteMapping("/{news-id}/like") - public void cancelNewsLike( + public ResponseEntity cancelNewsLike( @AuthorizedUser SiteUser siteUser, @PathVariable("news-id") Long newsId ) { newsLikeService.cancelNewsLike(siteUser.getId(), newsId); + return ResponseEntity.ok().build(); } } From fdbc668526ad79ba7e1cea82f98fb6aaed40ba50 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 22:59:01 +0900 Subject: [PATCH 17/18] =?UTF-8?q?style:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=AA=85=EC=97=90=20=EA=B3=B5=EB=B0=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/news/service/NewsLikeServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index 64856c3d9..58ee3b803 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -60,7 +60,7 @@ class 소식지_좋아요_상태를_조회한다 { } @Test - void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다(){ + void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다() { // when LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); From a635ca3949391c0fc0e81a532e0f20e8c8ce790c Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:16:51 +0900 Subject: [PATCH 18/18] =?UTF-8?q?refactor:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=ED=99=95=EC=9D=B8=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=EB=AA=85=20isNewsLiked=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 --- .../solidconnection/news/controller/NewsController.java | 4 ++-- .../example/solidconnection/news/service/NewsLikeService.java | 2 +- .../solidconnection/news/service/NewsLikeServiceTest.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index cdcf8dcf1..dd522fb47 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -82,11 +82,11 @@ public ResponseEntity deleteNewsById( } @GetMapping("/{news-id}/like") - public ResponseEntity getNewsLikeStatus( + public ResponseEntity isNewsLiked( @AuthorizedUser SiteUser siteUser, @PathVariable("news-id") Long newsId ) { - LikedNewsResponse likedNewsResponse = newsLikeService.getNewsLikeStatus(siteUser.getId(), newsId); + LikedNewsResponse likedNewsResponse = newsLikeService.isNewsLiked(siteUser.getId(), newsId); return ResponseEntity.ok(likedNewsResponse); } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java index 4a48e6ee8..0ca88992f 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsLikeService.java @@ -21,7 +21,7 @@ public class NewsLikeService { private final LikedNewsRepository likedNewsRepository; @Transactional(readOnly = true) - public LikedNewsResponse getNewsLikeStatus(long siteUserId, long newsId) { + public LikedNewsResponse isNewsLiked(long siteUserId, long newsId) { if (!newsRepository.existsById(newsId)) { throw new CustomException(NEWS_NOT_FOUND); } diff --git a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java index 58ee3b803..1bf26bc3c 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsLikeServiceTest.java @@ -53,7 +53,7 @@ class 소식지_좋아요_상태를_조회한다 { newsLikeService.addNewsLike(user.getId(), news.getId()); // when - LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); + LikedNewsResponse response = newsLikeService.isNewsLiked(user.getId(), news.getId()); // then assertThat(response.isLike()).isTrue(); @@ -62,7 +62,7 @@ class 소식지_좋아요_상태를_조회한다 { @Test void 좋아요하지_않은_소식지의_좋아요_상태를_조회한다() { // when - LikedNewsResponse response = newsLikeService.getNewsLikeStatus(user.getId(), news.getId()); + LikedNewsResponse response = newsLikeService.isNewsLiked(user.getId(), news.getId()); // then assertThat(response.isLike()).isFalse();