From 801b7ec281c3c1c5133d4883b5a605ba1d9c85b8 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:24 +0900 Subject: [PATCH 01/66] =?UTF-8?q?Article=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java new file mode 100644 index 0000000..d720416 --- /dev/null +++ b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java @@ -0,0 +1,12 @@ +package com.idol.board.repository.article; + +import com.idol.board.domain.entity.Article; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +public interface ArticleJpaRepository extends JpaRepository { + +} From bdf0dc6adb7b14a77f93a91d52478f7eae297ee0 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:45 +0900 Subject: [PATCH 02/66] =?UTF-8?q?Article=20Custom=20Error=20Exception=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ArticleNotFoundException.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/idol/global/exception/ArticleNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java new file mode 100644 index 0000000..caae945 --- /dev/null +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -0,0 +1,11 @@ +package com.idol.global.exception; + +public class ArticleNotFoundException extends RuntimeException { + public ArticleNotFoundException(String message) { + super(message); + } + + public ArticleNotFoundException(Long articleId) { + super("게시물을 찾을 수 없습니다: " + articleId); + } +} \ No newline at end of file From fe6bd8c7adbb874eea8f7750678470bca4b3c2bb Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:45:42 +0900 Subject: [PATCH 03/66] =?UTF-8?q?Auditing=20=EC=84=A4=EC=A0=95=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 --- src/main/java/com/idol/IdolApplication.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/idol/IdolApplication.java b/src/main/java/com/idol/IdolApplication.java index 4dfc5f5..062e146 100644 --- a/src/main/java/com/idol/IdolApplication.java +++ b/src/main/java/com/idol/IdolApplication.java @@ -6,6 +6,7 @@ @EnableJpaAuditing @SpringBootApplication +@EnableJpaAuditing public class IdolApplication { public static void main(String[] args) { From 2152da02fe08792e43cb73e6da8a687b0b433885 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 04/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From 454f8411fd4b5c96ae96ed753f4254d7f4a03afc Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 05/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From 396cef32e19faa46a01bd9ac9df2a748186147d3 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 06/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From 7747f5a88636c28a686f60edcdecad5799c8a6e5 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:03:07 +0900 Subject: [PATCH 07/66] =?UTF-8?q?Comment=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/repository/comment/CommentJpaRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java new file mode 100644 index 0000000..8751ff2 --- /dev/null +++ b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java @@ -0,0 +1,8 @@ +package com.idol.board.repository.comment; + +import com.idol.board.domain.entity.Comment; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CommentJpaRepository extends JpaRepository { + +} From d4fd8b2c5c198d3208d9a7e723e6aa824ad4c7d3 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:03:35 +0900 Subject: [PATCH 08/66] =?UTF-8?q?Comment=20Controller=20Create=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateCommentController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java diff --git a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java new file mode 100644 index 0000000..91261de --- /dev/null +++ b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.comment.command; + +import com.idol.board.dto.request.comment.CommentCreateRequestDto; +import com.idol.board.usecase.comment.command.CreateCommentUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateCommentController { + private final CreateCommentUseCase createCommentUseCase; + + @PostMapping("/{articleId}/comment") + public ApiResponse createComment(@PathVariable Long articleId, @RequestBody CommentCreateRequestDto requestDto) { + // TODO :: 인증 연결 + Long userId = 1231414314L; + Long commentId = createCommentUseCase.createComment(requestDto, userId, articleId); + + return ApiResponse.ok(commentId, "댓글 생성 성공"); + } +} From 3750f17851c79142915f799d4bbf86ec02a38452 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:41:22 +0900 Subject: [PATCH 09/66] =?UTF-8?q?application=20yml=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC/=EB=A1=9C=EC=BB=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Conflicts: # src/main/resources/application.yml --- src/main/resources/application-dev.yml | 28 +++++++++++++++++ src/main/resources/application-local.yml | 38 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..4ad3353 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: validate + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 0 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..8f7c990 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,38 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/board + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: create + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 8080 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + +cloud: + aws: + s3: + bucket: codit-project # 버킷 이름 + stack.auto: false + region.static: ap-northeast-2 # 버킷 리전 + credentials: + access-key: ${ACCESS_KEY} + secret-key: ${SECRET_KEY} From 309ec688526b97b6445dce9c4da642180abe64d8 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 10/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From 5835c4fc0750bf66096828635669fd71b09dc369 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 11/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From a7e7a27109b9d9cb85a01062585d71ddc035b841 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 12/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From 86e59f9cfc483d181bd26be5e8e71b8be9ade024 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:13:32 +0900 Subject: [PATCH 13/66] =?UTF-8?q?application.yml=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 ----------------- src/main/resources/application-local.yml | 38 ------------------------ 2 files changed, 66 deletions(-) delete mode 100644 src/main/resources/application-dev.yml delete mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml deleted file mode 100644 index 4ad3353..0000000 --- a/src/main/resources/application-dev.yml +++ /dev/null @@ -1,28 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${DB_URL} - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: validate - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 0 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml deleted file mode 100644 index 8f7c990..0000000 --- a/src/main/resources/application-local.yml +++ /dev/null @@ -1,38 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/board - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: create - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 8080 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ - -cloud: - aws: - s3: - bucket: codit-project # 버킷 이름 - stack.auto: false - region.static: ap-northeast-2 # 버킷 리전 - credentials: - access-key: ${ACCESS_KEY} - secret-key: ${SECRET_KEY} From e9ee80419ebae5bce7299f978ac677c49cad369e Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 3 Jun 2025 21:38:45 +0900 Subject: [PATCH 14/66] =?UTF-8?q?Article=20Repository=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java deleted file mode 100644 index d720416..0000000 --- a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.idol.board.repository.article; - -import com.idol.board.domain.entity.Article; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.transaction.annotation.Transactional; - -public interface ArticleJpaRepository extends JpaRepository { - -} From 13854f0a8fee61f4a7ba5ae62342ac019fed4588 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:22 +0900 Subject: [PATCH 15/66] =?UTF-8?q?Comment=20Error=20Exception=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/CommentNotFoundException.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/idol/global/exception/CommentNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java new file mode 100644 index 0000000..868b874 --- /dev/null +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -0,0 +1,11 @@ +package com.idol.global.exception; + +public class CommentNotFoundException extends RuntimeException { + public CommentNotFoundException(String message) { + super(message); + } + + public CommentNotFoundException(Long commentId) { + super("해당 댓글을 찾을 수 없습니다: " + commentId); + } +} \ No newline at end of file From e600d50ff059f511e8fcc8476e462b5bbe79b2b5 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:33 +0900 Subject: [PATCH 16/66] =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateCommentController.java | 23 ------------------- .../comment/CommentJpaRepository.java | 8 ------- 2 files changed, 31 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java delete mode 100644 src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java diff --git a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java deleted file mode 100644 index 91261de..0000000 --- a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.comment.command; - -import com.idol.board.dto.request.comment.CommentCreateRequestDto; -import com.idol.board.usecase.comment.command.CreateCommentUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateCommentController { - private final CreateCommentUseCase createCommentUseCase; - - @PostMapping("/{articleId}/comment") - public ApiResponse createComment(@PathVariable Long articleId, @RequestBody CommentCreateRequestDto requestDto) { - // TODO :: 인증 연결 - Long userId = 1231414314L; - Long commentId = createCommentUseCase.createComment(requestDto, userId, articleId); - - return ApiResponse.ok(commentId, "댓글 생성 성공"); - } -} diff --git a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java deleted file mode 100644 index 8751ff2..0000000 --- a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.idol.board.repository.comment; - -import com.idol.board.domain.entity.Comment; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface CommentJpaRepository extends JpaRepository { - -} From c7176bd3ec4439d12d45be0890eb77f4e6a8af18 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:53 +0900 Subject: [PATCH 17/66] =?UTF-8?q?Comment=20Read=20=EC=A0=84=EC=9A=A9=20Dao?= =?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 --- .../board/repository/mapper/CommentReadDao.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/mapper/CommentReadDao.java diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java new file mode 100644 index 0000000..f2f409a --- /dev/null +++ b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java @@ -0,0 +1,14 @@ +package com.idol.board.repository.mapper; + +import java.sql.Timestamp; + +public record CommentReadDao ( + Long commentId, + String content, + Long parentCommentId, + Long writerId, + boolean isDeleted, + Timestamp createdAt, + boolean secret +){ +} \ No newline at end of file From 85b20684b90e4fc51d269f8ffd4a8df31758f9f5 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:41:22 +0900 Subject: [PATCH 18/66] =?UTF-8?q?application=20yml=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC/=EB=A1=9C=EC=BB=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 +++++++++++++++++ src/main/resources/application-local.yml | 38 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..4ad3353 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: validate + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 0 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..8f7c990 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,38 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/board + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: create + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 8080 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + +cloud: + aws: + s3: + bucket: codit-project # 버킷 이름 + stack.auto: false + region.static: ap-northeast-2 # 버킷 리전 + credentials: + access-key: ${ACCESS_KEY} + secret-key: ${SECRET_KEY} From 86fc5875a71a8a66d16bf0d3d65569a132a4bf79 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:24 +0900 Subject: [PATCH 19/66] =?UTF-8?q?Article=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java new file mode 100644 index 0000000..d720416 --- /dev/null +++ b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java @@ -0,0 +1,12 @@ +package com.idol.board.repository.article; + +import com.idol.board.domain.entity.Article; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +public interface ArticleJpaRepository extends JpaRepository { + +} From 263051348b003c4a79c388229348b845074dbdb2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 20/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From 0dee76d65d3d5568f84ff7c1c7fea6267507fb0e Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 21/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From 71120a9d253b50a0fa8ffc33d852f332d3e3035b Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 22/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From 70cda7b1448f038eb1d5198e63ae985f5097e0a2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:13:32 +0900 Subject: [PATCH 23/66] =?UTF-8?q?application.yml=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 ----------------- src/main/resources/application-local.yml | 38 ------------------------ 2 files changed, 66 deletions(-) delete mode 100644 src/main/resources/application-dev.yml delete mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml deleted file mode 100644 index 4ad3353..0000000 --- a/src/main/resources/application-dev.yml +++ /dev/null @@ -1,28 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${DB_URL} - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: validate - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 0 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml deleted file mode 100644 index 8f7c990..0000000 --- a/src/main/resources/application-local.yml +++ /dev/null @@ -1,38 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/board - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: create - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 8080 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ - -cloud: - aws: - s3: - bucket: codit-project # 버킷 이름 - stack.auto: false - region.static: ap-northeast-2 # 버킷 리전 - credentials: - access-key: ${ACCESS_KEY} - secret-key: ${SECRET_KEY} From 359edc213df35a8766d5258058f6da30bae75c43 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 3 Jun 2025 21:38:45 +0900 Subject: [PATCH 24/66] =?UTF-8?q?Article=20Repository=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java deleted file mode 100644 index d720416..0000000 --- a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.idol.board.repository.article; - -import com.idol.board.domain.entity.Article; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.transaction.annotation.Transactional; - -public interface ArticleJpaRepository extends JpaRepository { - -} From 7d1f5d113d329128d9dc25fd9e661a765b2db23e Mon Sep 17 00:00:00 2001 From: baejiwon Date: Fri, 6 Jun 2025 22:54:45 +0900 Subject: [PATCH 25/66] =?UTF-8?q?=EA=B0=9C=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/idol/board/repository/mapper/CommentReadDao.java | 2 +- .../com/idol/global/exception/ArticleNotFoundException.java | 2 +- .../com/idol/global/exception/CommentNotFoundException.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java index f2f409a..05005a5 100644 --- a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java +++ b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java @@ -11,4 +11,4 @@ public record CommentReadDao ( Timestamp createdAt, boolean secret ){ -} \ No newline at end of file +} diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java index caae945..f236d78 100644 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -8,4 +8,4 @@ public ArticleNotFoundException(String message) { public ArticleNotFoundException(Long articleId) { super("게시물을 찾을 수 없습니다: " + articleId); } -} \ No newline at end of file +} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java index 868b874..6874d5a 100644 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -8,4 +8,4 @@ public CommentNotFoundException(String message) { public CommentNotFoundException(Long commentId) { super("해당 댓글을 찾을 수 없습니다: " + commentId); } -} \ No newline at end of file +} From 04a5816750da460f8e83a2e8b6cea0e85da5aea2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sun, 8 Jun 2025 23:07:50 +0900 Subject: [PATCH 26/66] =?UTF-8?q?ErrorException=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/ArticleNotFoundException.java | 22 +++++++++---------- .../exception/CommentNotFoundException.java | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java index f236d78..867310d 100644 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -1,11 +1,11 @@ -package com.idol.global.exception; - -public class ArticleNotFoundException extends RuntimeException { - public ArticleNotFoundException(String message) { - super(message); - } - - public ArticleNotFoundException(Long articleId) { - super("게시물을 찾을 수 없습니다: " + articleId); - } -} +//package com.idol.global.exception; +// +//public class ArticleNotFoundException extends RuntimeException { +// public ArticleNotFoundException(String message) { +// super(message); +// } +// +// public ArticleNotFoundException(Long articleId) { +// super("게시물을 찾을 수 없습니다: " + articleId); +// } +//} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java index 6874d5a..2834ebb 100644 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -1,11 +1,11 @@ -package com.idol.global.exception; - -public class CommentNotFoundException extends RuntimeException { - public CommentNotFoundException(String message) { - super(message); - } - - public CommentNotFoundException(Long commentId) { - super("해당 댓글을 찾을 수 없습니다: " + commentId); - } -} +//package com.idol.global.exception; +// +//public class CommentNotFoundException extends RuntimeException { +// public CommentNotFoundException(String message) { +// super(message); +// } +// +// public CommentNotFoundException(Long commentId) { +// super("해당 댓글을 찾을 수 없습니다: " + commentId); +// } +//} From 705a5250d86d829886d45d2a7f0e3477014d34c2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sun, 8 Jun 2025 23:13:23 +0900 Subject: [PATCH 27/66] =?UTF-8?q?Dao=20->=20QueryResult=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/repository/mapper/CommentReadDao.java | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/mapper/CommentReadDao.java diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java deleted file mode 100644 index 05005a5..0000000 --- a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.idol.board.repository.mapper; - -import java.sql.Timestamp; - -public record CommentReadDao ( - Long commentId, - String content, - Long parentCommentId, - Long writerId, - boolean isDeleted, - Timestamp createdAt, - boolean secret -){ -} From 869933b215badd9bb4a0b64bf5a39770325dea0c Mon Sep 17 00:00:00 2001 From: JIWON <82360230+qowl880@users.noreply.github.com> Date: Tue, 10 Jun 2025 13:53:18 +0900 Subject: [PATCH 28/66] Update IdolApplication.java --- src/main/java/com/idol/IdolApplication.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/idol/IdolApplication.java b/src/main/java/com/idol/IdolApplication.java index 062e146..4dfc5f5 100644 --- a/src/main/java/com/idol/IdolApplication.java +++ b/src/main/java/com/idol/IdolApplication.java @@ -6,7 +6,6 @@ @EnableJpaAuditing @SpringBootApplication -@EnableJpaAuditing public class IdolApplication { public static void main(String[] args) { From 14a244d1253c3f423dadc8d9ad5dd2034f31bf72 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sat, 14 Jun 2025 09:27:21 +0900 Subject: [PATCH 29/66] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=20=EA=B2=80=EC=82=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ArticleNotFoundException.java | 11 ----------- .../global/exception/CommentNotFoundException.java | 11 ----------- 2 files changed, 22 deletions(-) delete mode 100644 src/main/java/com/idol/global/exception/ArticleNotFoundException.java delete mode 100644 src/main/java/com/idol/global/exception/CommentNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java deleted file mode 100644 index 867310d..0000000 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ /dev/null @@ -1,11 +0,0 @@ -//package com.idol.global.exception; -// -//public class ArticleNotFoundException extends RuntimeException { -// public ArticleNotFoundException(String message) { -// super(message); -// } -// -// public ArticleNotFoundException(Long articleId) { -// super("게시물을 찾을 수 없습니다: " + articleId); -// } -//} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java deleted file mode 100644 index 2834ebb..0000000 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ /dev/null @@ -1,11 +0,0 @@ -//package com.idol.global.exception; -// -//public class CommentNotFoundException extends RuntimeException { -// public CommentNotFoundException(String message) { -// super(message); -// } -// -// public CommentNotFoundException(Long commentId) { -// super("해당 댓글을 찾을 수 없습니다: " + commentId); -// } -//} From 762541d108576ba38fc8071b32f39cc9b29a269b Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:41:36 +0900 Subject: [PATCH 30/66] =?UTF-8?q?Article=20Entity=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/idol/board/domain/entity/Article.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/idol/board/domain/entity/Article.java b/src/main/java/com/idol/board/domain/entity/Article.java index 6ce03dd..08b92ed 100644 --- a/src/main/java/com/idol/board/domain/entity/Article.java +++ b/src/main/java/com/idol/board/domain/entity/Article.java @@ -21,8 +21,11 @@ @Table(name = "article") @Getter @ToString +@Builder +@AllArgsConstructor // 생성자마다 builder 사용 @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Where(clause = "is_deleted = false") public class Article extends BaseEntity { From 3f722260bf91c44bef26d8dd8b78773a7f39fa88 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:24 +0900 Subject: [PATCH 31/66] =?UTF-8?q?Article=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java new file mode 100644 index 0000000..d720416 --- /dev/null +++ b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java @@ -0,0 +1,12 @@ +package com.idol.board.repository.article; + +import com.idol.board.domain.entity.Article; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +public interface ArticleJpaRepository extends JpaRepository { + +} From 98c77a5c55a88b0e2f77afc38ba4f3347e4b5de0 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:45 +0900 Subject: [PATCH 32/66] =?UTF-8?q?Article=20Custom=20Error=20Exception=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ArticleNotFoundException.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/idol/global/exception/ArticleNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java new file mode 100644 index 0000000..caae945 --- /dev/null +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -0,0 +1,11 @@ +package com.idol.global.exception; + +public class ArticleNotFoundException extends RuntimeException { + public ArticleNotFoundException(String message) { + super(message); + } + + public ArticleNotFoundException(Long articleId) { + super("게시물을 찾을 수 없습니다: " + articleId); + } +} \ No newline at end of file From 9300fea0fbdd8ddb5846984d7df6bb103274634e Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:45:42 +0900 Subject: [PATCH 33/66] =?UTF-8?q?Auditing=20=EC=84=A4=EC=A0=95=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 --- src/main/java/com/idol/IdolApplication.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/idol/IdolApplication.java b/src/main/java/com/idol/IdolApplication.java index 4dfc5f5..062e146 100644 --- a/src/main/java/com/idol/IdolApplication.java +++ b/src/main/java/com/idol/IdolApplication.java @@ -6,6 +6,7 @@ @EnableJpaAuditing @SpringBootApplication +@EnableJpaAuditing public class IdolApplication { public static void main(String[] args) { From e2926c7d00df8e647260f476aed33ad27cb26e66 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 34/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From 8e39029254dbfff9ed6996263568696fc2b5d882 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 35/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From 57ee0e4b1724efec7d11059fadd9fc3469930682 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 36/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From a70f8d9f731a2ba8feeb18012a08ac83e8f7a235 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:52:47 +0900 Subject: [PATCH 37/66] =?UTF-8?q?S3=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EB=B0=8F=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imageUpload/service/command/ImageExpirationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java b/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java index 01c65ec..f92c408 100644 --- a/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java +++ b/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java @@ -12,4 +12,4 @@ public class ImageExpirationService implements ImageExpirationUseCase { public Duration getExpirationDuration() { return Duration.ofHours(1); } -} \ No newline at end of file +} From e6e27a059e6f2b39690b1fa4424f024b51890755 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:03:07 +0900 Subject: [PATCH 38/66] =?UTF-8?q?Comment=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/repository/comment/CommentJpaRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java new file mode 100644 index 0000000..8751ff2 --- /dev/null +++ b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java @@ -0,0 +1,8 @@ +package com.idol.board.repository.comment; + +import com.idol.board.domain.entity.Comment; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CommentJpaRepository extends JpaRepository { + +} From eb956a17f7a4ce3f509764e4d0ba6b586028f5d8 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:03:35 +0900 Subject: [PATCH 39/66] =?UTF-8?q?Comment=20Controller=20Create=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateCommentController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java diff --git a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java new file mode 100644 index 0000000..91261de --- /dev/null +++ b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.comment.command; + +import com.idol.board.dto.request.comment.CommentCreateRequestDto; +import com.idol.board.usecase.comment.command.CreateCommentUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateCommentController { + private final CreateCommentUseCase createCommentUseCase; + + @PostMapping("/{articleId}/comment") + public ApiResponse createComment(@PathVariable Long articleId, @RequestBody CommentCreateRequestDto requestDto) { + // TODO :: 인증 연결 + Long userId = 1231414314L; + Long commentId = createCommentUseCase.createComment(requestDto, userId, articleId); + + return ApiResponse.ok(commentId, "댓글 생성 성공"); + } +} From 2f9ab08a8e9a0ad1db95fd8eee3b300bfb9dcd5c Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:41:22 +0900 Subject: [PATCH 40/66] =?UTF-8?q?application=20yml=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC/=EB=A1=9C=EC=BB=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Conflicts: # src/main/resources/application.yml --- src/main/resources/application-dev.yml | 28 +++++++++++++++++ src/main/resources/application-local.yml | 38 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..4ad3353 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: validate + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 0 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..8f7c990 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,38 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/board + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: create + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 8080 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + +cloud: + aws: + s3: + bucket: codit-project # 버킷 이름 + stack.auto: false + region.static: ap-northeast-2 # 버킷 리전 + credentials: + access-key: ${ACCESS_KEY} + secret-key: ${SECRET_KEY} From dc29f8832c40e060ca37da93a091e280bb835b46 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 41/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From bf64b32902909c69377097fdfa8fe2a9864fb63f Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 42/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From 1e39ab42352a53ff00f183343c9397b7575f9269 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 43/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From a8bdcf39bf2ca426e502dfcdfc68c1ae98de6176 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:13:32 +0900 Subject: [PATCH 44/66] =?UTF-8?q?application.yml=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 ----------------- src/main/resources/application-local.yml | 38 ------------------------ 2 files changed, 66 deletions(-) delete mode 100644 src/main/resources/application-dev.yml delete mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml deleted file mode 100644 index 4ad3353..0000000 --- a/src/main/resources/application-dev.yml +++ /dev/null @@ -1,28 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${DB_URL} - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: validate - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 0 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml deleted file mode 100644 index 8f7c990..0000000 --- a/src/main/resources/application-local.yml +++ /dev/null @@ -1,38 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/board - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: create - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 8080 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ - -cloud: - aws: - s3: - bucket: codit-project # 버킷 이름 - stack.auto: false - region.static: ap-northeast-2 # 버킷 리전 - credentials: - access-key: ${ACCESS_KEY} - secret-key: ${SECRET_KEY} From f40c4b9d5b658489dfdb0b1b33e57345072a1838 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 3 Jun 2025 21:38:45 +0900 Subject: [PATCH 45/66] =?UTF-8?q?Article=20Repository=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java deleted file mode 100644 index d720416..0000000 --- a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.idol.board.repository.article; - -import com.idol.board.domain.entity.Article; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.transaction.annotation.Transactional; - -public interface ArticleJpaRepository extends JpaRepository { - -} From 9fdfb984b0e09d9115ab8e477d578c0aa8e07c87 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:22 +0900 Subject: [PATCH 46/66] =?UTF-8?q?Comment=20Error=20Exception=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/CommentNotFoundException.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/idol/global/exception/CommentNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java new file mode 100644 index 0000000..868b874 --- /dev/null +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -0,0 +1,11 @@ +package com.idol.global.exception; + +public class CommentNotFoundException extends RuntimeException { + public CommentNotFoundException(String message) { + super(message); + } + + public CommentNotFoundException(Long commentId) { + super("해당 댓글을 찾을 수 없습니다: " + commentId); + } +} \ No newline at end of file From 89326d22415ba29203486bdf1fdcf244bd8bddfa Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:33 +0900 Subject: [PATCH 47/66] =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateCommentController.java | 23 ------------------- .../comment/CommentJpaRepository.java | 8 ------- 2 files changed, 31 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java delete mode 100644 src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java diff --git a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java b/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java deleted file mode 100644 index 91261de..0000000 --- a/src/main/java/com/idol/board/controller/comment/command/CreateCommentController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.comment.command; - -import com.idol.board.dto.request.comment.CommentCreateRequestDto; -import com.idol.board.usecase.comment.command.CreateCommentUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateCommentController { - private final CreateCommentUseCase createCommentUseCase; - - @PostMapping("/{articleId}/comment") - public ApiResponse createComment(@PathVariable Long articleId, @RequestBody CommentCreateRequestDto requestDto) { - // TODO :: 인증 연결 - Long userId = 1231414314L; - Long commentId = createCommentUseCase.createComment(requestDto, userId, articleId); - - return ApiResponse.ok(commentId, "댓글 생성 성공"); - } -} diff --git a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java b/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java deleted file mode 100644 index 8751ff2..0000000 --- a/src/main/java/com/idol/board/repository/comment/CommentJpaRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.idol.board.repository.comment; - -import com.idol.board.domain.entity.Comment; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface CommentJpaRepository extends JpaRepository { - -} From d310bcd158476e33e056364a7447352e9a5a2251 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 4 Jun 2025 14:57:53 +0900 Subject: [PATCH 48/66] =?UTF-8?q?Comment=20Read=20=EC=A0=84=EC=9A=A9=20Dao?= =?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 --- .../board/repository/mapper/CommentReadDao.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/mapper/CommentReadDao.java diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java new file mode 100644 index 0000000..f2f409a --- /dev/null +++ b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java @@ -0,0 +1,14 @@ +package com.idol.board.repository.mapper; + +import java.sql.Timestamp; + +public record CommentReadDao ( + Long commentId, + String content, + Long parentCommentId, + Long writerId, + boolean isDeleted, + Timestamp createdAt, + boolean secret +){ +} \ No newline at end of file From d9c82b61ba86d94f5fec28b91766dc9854b4786e Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:41:22 +0900 Subject: [PATCH 49/66] =?UTF-8?q?application=20yml=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC/=EB=A1=9C=EC=BB=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 +++++++++++++++++ src/main/resources/application-local.yml | 38 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..4ad3353 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: validate + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 0 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..8f7c990 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,38 @@ +spring: + application: + name: idol + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/board + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: create + properties: + hibernate: + format_sql: true + highlight_sql: true + generate_statistics: false + show-sql: true + open-in-view: false + +server: + port: 8080 + +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8761/eureka/ + +cloud: + aws: + s3: + bucket: codit-project # 버킷 이름 + stack.auto: false + region.static: ap-northeast-2 # 버킷 리전 + credentials: + access-key: ${ACCESS_KEY} + secret-key: ${SECRET_KEY} From b83d8bea5644cfc4790aef893328bae9e67832c9 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:42:24 +0900 Subject: [PATCH 50/66] =?UTF-8?q?Article=20Repository=20Jpa=20/=20Query=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java new file mode 100644 index 0000000..d720416 --- /dev/null +++ b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java @@ -0,0 +1,12 @@ +package com.idol.board.repository.article; + +import com.idol.board.domain.entity.Article; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +public interface ArticleJpaRepository extends JpaRepository { + +} From eb7c2cde91e37699058e6efb5883ce462027eeb2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:14 +0900 Subject: [PATCH 51/66] =?UTF-8?q?Article=20Create=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java new file mode 100644 index 0000000..c8af750 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java @@ -0,0 +1,27 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.dto.request.article.ArticleCreateRequestDto; +import com.idol.board.usecase.article.command.CreateArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +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.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class CreateArticleController { + + private final CreateArticleUseCase createArticleUseCase; + + @PostMapping() + public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { + Long writerId = 1312441414L; + Long articleId = createArticleUseCase.createArticle(requestDto, writerId); + return ApiResponse.ok(articleId, "게시글 작성 성공"); + } + + +} From fece12bb7349d9cee12b36c6bb0e973f241fc10c Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:48:22 +0900 Subject: [PATCH 52/66] =?UTF-8?q?Article=20Delete=20Controller=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/DeleteArticleController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java new file mode 100644 index 0000000..3d62df2 --- /dev/null +++ b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java @@ -0,0 +1,23 @@ +package com.idol.board.controller.article.command; + +import com.idol.board.usecase.article.command.DeleteArticleUseCase; +import com.idol.global.common.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +public class DeleteArticleController { + private final DeleteArticleUseCase deleteArticleUseCase; + + @DeleteMapping("/{articleId}") + public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { + Long resultId = deleteArticleUseCase.delete(articleId); + + return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); + } +} From 0dba4517ac02a057202ccfcf84572deaa138f032 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 11:50:58 +0900 Subject: [PATCH 53/66] =?UTF-8?q?Article=20Controller=20CUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CreateArticleController.java | 27 ------------------- .../command/DeleteArticleController.java | 23 ---------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/com/idol/board/controller/article/command/CreateArticleController.java delete mode 100644 src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java diff --git a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java b/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java deleted file mode 100644 index c8af750..0000000 --- a/src/main/java/com/idol/board/controller/article/command/CreateArticleController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.dto.request.article.ArticleCreateRequestDto; -import com.idol.board.usecase.article.command.CreateArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class CreateArticleController { - - private final CreateArticleUseCase createArticleUseCase; - - @PostMapping() - public ApiResponse createArticle(@RequestBody ArticleCreateRequestDto requestDto) { - Long writerId = 1312441414L; - Long articleId = createArticleUseCase.createArticle(requestDto, writerId); - return ApiResponse.ok(articleId, "게시글 작성 성공"); - } - - -} diff --git a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java b/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java deleted file mode 100644 index 3d62df2..0000000 --- a/src/main/java/com/idol/board/controller/article/command/DeleteArticleController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.idol.board.controller.article.command; - -import com.idol.board.usecase.article.command.DeleteArticleUseCase; -import com.idol.global.common.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/board") -@RequiredArgsConstructor -public class DeleteArticleController { - private final DeleteArticleUseCase deleteArticleUseCase; - - @DeleteMapping("/{articleId}") - public ApiResponse deleteArticle(@PathVariable("articleId") Long articleId) { - Long resultId = deleteArticleUseCase.delete(articleId); - - return ApiResponse.ok(resultId, "게시물 삭제가 완료되었습니다."); - } -} From 0a53a2310b6a06357f2c9fc77df3b771642e1395 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Wed, 28 May 2025 12:13:32 +0900 Subject: [PATCH 54/66] =?UTF-8?q?application.yml=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 28 ----------------- src/main/resources/application-local.yml | 38 ------------------------ 2 files changed, 66 deletions(-) delete mode 100644 src/main/resources/application-dev.yml delete mode 100644 src/main/resources/application-local.yml diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml deleted file mode 100644 index 4ad3353..0000000 --- a/src/main/resources/application-dev.yml +++ /dev/null @@ -1,28 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${DB_URL} - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: validate - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 0 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml deleted file mode 100644 index 8f7c990..0000000 --- a/src/main/resources/application-local.yml +++ /dev/null @@ -1,38 +0,0 @@ -spring: - application: - name: idol - - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/board - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: create - properties: - hibernate: - format_sql: true - highlight_sql: true - generate_statistics: false - show-sql: true - open-in-view: false - -server: - port: 8080 - -eureka: - client: - serviceUrl: - defaultZone: http://localhost:8761/eureka/ - -cloud: - aws: - s3: - bucket: codit-project # 버킷 이름 - stack.auto: false - region.static: ap-northeast-2 # 버킷 리전 - credentials: - access-key: ${ACCESS_KEY} - secret-key: ${SECRET_KEY} From f1e345f8e28d7cdce44c1a657116847b1f4d6a04 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 3 Jun 2025 21:38:07 +0900 Subject: [PATCH 55/66] =?UTF-8?q?SoftDelete=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/idol/board/domain/entity/Article.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/idol/board/domain/entity/Article.java b/src/main/java/com/idol/board/domain/entity/Article.java index 08b92ed..bf8c9f8 100644 --- a/src/main/java/com/idol/board/domain/entity/Article.java +++ b/src/main/java/com/idol/board/domain/entity/Article.java @@ -21,8 +21,6 @@ @Table(name = "article") @Getter @ToString -@Builder -@AllArgsConstructor // 생성자마다 builder 사용 @NoArgsConstructor(access = AccessLevel.PROTECTED) @Where(clause = "is_deleted = false") From 9109b379df944605e48a2098e46e371da811a725 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 3 Jun 2025 21:38:45 +0900 Subject: [PATCH 56/66] =?UTF-8?q?Article=20Repository=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/article/ArticleJpaRepository.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java diff --git a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java b/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java deleted file mode 100644 index d720416..0000000 --- a/src/main/java/com/idol/board/repository/article/ArticleJpaRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.idol.board.repository.article; - -import com.idol.board.domain.entity.Article; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.transaction.annotation.Transactional; - -public interface ArticleJpaRepository extends JpaRepository { - -} From ae823c6d4e12781ebea13acbf394c0736c9a8611 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Fri, 6 Jun 2025 22:54:45 +0900 Subject: [PATCH 57/66] =?UTF-8?q?=EA=B0=9C=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/idol/board/repository/mapper/CommentReadDao.java | 2 +- .../com/idol/global/exception/ArticleNotFoundException.java | 2 +- .../com/idol/global/exception/CommentNotFoundException.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java index f2f409a..05005a5 100644 --- a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java +++ b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java @@ -11,4 +11,4 @@ public record CommentReadDao ( Timestamp createdAt, boolean secret ){ -} \ No newline at end of file +} diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java index caae945..f236d78 100644 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -8,4 +8,4 @@ public ArticleNotFoundException(String message) { public ArticleNotFoundException(Long articleId) { super("게시물을 찾을 수 없습니다: " + articleId); } -} \ No newline at end of file +} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java index 868b874..6874d5a 100644 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -8,4 +8,4 @@ public CommentNotFoundException(String message) { public CommentNotFoundException(Long commentId) { super("해당 댓글을 찾을 수 없습니다: " + commentId); } -} \ No newline at end of file +} From 945caafdcfc4b6f659ab7a699052b9f9340fadc6 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sun, 8 Jun 2025 23:07:50 +0900 Subject: [PATCH 58/66] =?UTF-8?q?ErrorException=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/ArticleNotFoundException.java | 22 +++++++++---------- .../exception/CommentNotFoundException.java | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java index f236d78..867310d 100644 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java @@ -1,11 +1,11 @@ -package com.idol.global.exception; - -public class ArticleNotFoundException extends RuntimeException { - public ArticleNotFoundException(String message) { - super(message); - } - - public ArticleNotFoundException(Long articleId) { - super("게시물을 찾을 수 없습니다: " + articleId); - } -} +//package com.idol.global.exception; +// +//public class ArticleNotFoundException extends RuntimeException { +// public ArticleNotFoundException(String message) { +// super(message); +// } +// +// public ArticleNotFoundException(Long articleId) { +// super("게시물을 찾을 수 없습니다: " + articleId); +// } +//} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java index 6874d5a..2834ebb 100644 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ b/src/main/java/com/idol/global/exception/CommentNotFoundException.java @@ -1,11 +1,11 @@ -package com.idol.global.exception; - -public class CommentNotFoundException extends RuntimeException { - public CommentNotFoundException(String message) { - super(message); - } - - public CommentNotFoundException(Long commentId) { - super("해당 댓글을 찾을 수 없습니다: " + commentId); - } -} +//package com.idol.global.exception; +// +//public class CommentNotFoundException extends RuntimeException { +// public CommentNotFoundException(String message) { +// super(message); +// } +// +// public CommentNotFoundException(Long commentId) { +// super("해당 댓글을 찾을 수 없습니다: " + commentId); +// } +//} From 9911f0b07d3e2a44f7c45ce811769effb31fc8c7 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sun, 8 Jun 2025 23:13:23 +0900 Subject: [PATCH 59/66] =?UTF-8?q?Dao=20->=20QueryResult=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/repository/mapper/CommentReadDao.java | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 src/main/java/com/idol/board/repository/mapper/CommentReadDao.java diff --git a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java b/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java deleted file mode 100644 index 05005a5..0000000 --- a/src/main/java/com/idol/board/repository/mapper/CommentReadDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.idol.board.repository.mapper; - -import java.sql.Timestamp; - -public record CommentReadDao ( - Long commentId, - String content, - Long parentCommentId, - Long writerId, - boolean isDeleted, - Timestamp createdAt, - boolean secret -){ -} From c09af92db5a4e42e58607a6d7eca201cb204fbf7 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sun, 8 Jun 2025 23:16:52 +0900 Subject: [PATCH 60/66] =?UTF-8?q?S3=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imageUpload/service/command/ImageExpirationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java b/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java index f92c408..01c65ec 100644 --- a/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java +++ b/src/main/java/com/idol/imageUpload/service/command/ImageExpirationService.java @@ -12,4 +12,4 @@ public class ImageExpirationService implements ImageExpirationUseCase { public Duration getExpirationDuration() { return Duration.ofHours(1); } -} +} \ No newline at end of file From d82ef105ac7d463c1db84c2884079f1518eed5ec Mon Sep 17 00:00:00 2001 From: JIWON <82360230+qowl880@users.noreply.github.com> Date: Tue, 10 Jun 2025 13:53:18 +0900 Subject: [PATCH 61/66] Update IdolApplication.java --- src/main/java/com/idol/IdolApplication.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/idol/IdolApplication.java b/src/main/java/com/idol/IdolApplication.java index 062e146..4dfc5f5 100644 --- a/src/main/java/com/idol/IdolApplication.java +++ b/src/main/java/com/idol/IdolApplication.java @@ -6,7 +6,6 @@ @EnableJpaAuditing @SpringBootApplication -@EnableJpaAuditing public class IdolApplication { public static void main(String[] args) { From b4ef511e239037fc068fbb3772ec23973f5d9d8d Mon Sep 17 00:00:00 2001 From: baejiwon Date: Sat, 14 Jun 2025 09:27:21 +0900 Subject: [PATCH 62/66] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=20=EA=B2=80=EC=82=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ArticleNotFoundException.java | 11 ----------- .../global/exception/CommentNotFoundException.java | 11 ----------- 2 files changed, 22 deletions(-) delete mode 100644 src/main/java/com/idol/global/exception/ArticleNotFoundException.java delete mode 100644 src/main/java/com/idol/global/exception/CommentNotFoundException.java diff --git a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java b/src/main/java/com/idol/global/exception/ArticleNotFoundException.java deleted file mode 100644 index 867310d..0000000 --- a/src/main/java/com/idol/global/exception/ArticleNotFoundException.java +++ /dev/null @@ -1,11 +0,0 @@ -//package com.idol.global.exception; -// -//public class ArticleNotFoundException extends RuntimeException { -// public ArticleNotFoundException(String message) { -// super(message); -// } -// -// public ArticleNotFoundException(Long articleId) { -// super("게시물을 찾을 수 없습니다: " + articleId); -// } -//} diff --git a/src/main/java/com/idol/global/exception/CommentNotFoundException.java b/src/main/java/com/idol/global/exception/CommentNotFoundException.java deleted file mode 100644 index 2834ebb..0000000 --- a/src/main/java/com/idol/global/exception/CommentNotFoundException.java +++ /dev/null @@ -1,11 +0,0 @@ -//package com.idol.global.exception; -// -//public class CommentNotFoundException extends RuntimeException { -// public CommentNotFoundException(String message) { -// super(message); -// } -// -// public CommentNotFoundException(Long commentId) { -// super("해당 댓글을 찾을 수 없습니다: " + commentId); -// } -//} From 84840ad2b2a78a62a4e5a0f171a9cf175bacdc28 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Tue, 17 Jun 2025 22:28:27 +0900 Subject: [PATCH 63/66] =?UTF-8?q?@Where=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/idol/board/domain/entity/Article.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/idol/board/domain/entity/Article.java b/src/main/java/com/idol/board/domain/entity/Article.java index bf8c9f8..6ce03dd 100644 --- a/src/main/java/com/idol/board/domain/entity/Article.java +++ b/src/main/java/com/idol/board/domain/entity/Article.java @@ -23,7 +23,6 @@ @ToString // 생성자마다 builder 사용 @NoArgsConstructor(access = AccessLevel.PROTECTED) -@Where(clause = "is_deleted = false") public class Article extends BaseEntity { From 890b0a43a479711d1587d723c95d2755080dba72 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Thu, 19 Jun 2025 08:53:03 +0900 Subject: [PATCH 64/66] =?UTF-8?q?=EC=98=A4=EB=A5=98=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20=EC=A3=BC=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/JwtServiceIntegrationTest.java | 218 +++++++++--------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java b/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java index e16b3cf..fcc94a3 100644 --- a/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java +++ b/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java @@ -1,109 +1,109 @@ -package com.idol.domains.auth.service; - -import com.idol.domains.auth.repository.RefreshTokenRepository; -import com.idol.global.config.TestcontainersRedisConfig; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.test.context.ActiveProfiles; - -import java.util.HashMap; -import java.util.Map; - -import static org.assertj.core.api.Assertions.assertThat; - -@ActiveProfiles("test") -@SpringBootTest -@Import(TestcontainersRedisConfig.class) -class JwtServiceIntegrationTest { - - @Autowired - private JwtService jwtService; - - @Autowired - private RefreshTokenService refreshTokenService; - - @Autowired - private RefreshTokenRepository refreshTokenRepository; - - @Autowired - private RedisTemplate redisTemplate; - - @BeforeEach - void setUp() { - refreshTokenRepository.deleteAll(); - } - - @AfterEach - void tearDown() { - refreshTokenRepository.deleteAll(); - } - - @Test - @DisplayName("토큰 생성과 검증의 전체 플로우가 정상 작동한다") - void tokenLifecycle_Success() { - // given - String memberId = "12345"; - Map claims = new HashMap<>(); - - // when - String accessToken = jwtService.generateAccessToken(memberId, claims); - String refreshToken = jwtService.generateRefreshToken(memberId); - - // then - assertThat(jwtService.isTokenValid(accessToken)).isTrue(); - assertThat(jwtService.isTokenValid(refreshToken)).isTrue(); - - assertThat(jwtService.extractMemberId(accessToken)).isEqualTo(memberId); - assertThat(jwtService.extractMemberId(refreshToken)).isEqualTo(memberId); - - assertThat(jwtService.validateRefreshToken(refreshToken)).isTrue(); - } - - @Test - @DisplayName("잘못된 멤버ID로 토큰 검증 시 실패한다") - void validateToken_WrongMemberId_Fail() { - // given - String memberId = "12345"; - String wrongMemberId = "67890"; - String token = jwtService.generateAccessToken(memberId); - - // when - boolean isValid = jwtService.validateToken(token, wrongMemberId); - - // then - assertThat(isValid).isFalse(); - } - - @Test - @DisplayName("빈 claims로 액세스 토큰을 생성할 수 있다") - void generateAccessToken_EmptyClaims_Success() { - // given - String memberId = "12345"; - - // when - String token = jwtService.generateAccessToken(memberId); - - // then - assertThat(jwtService.isTokenValid(token)).isTrue(); - assertThat(jwtService.extractMemberId(token)).isEqualTo(memberId); - } - - @Test - @DisplayName("존재하지 않는 리프레시 토큰 검증 시 실패한다") - void validateRefreshToken_NotExists_Fail() { - // given - String fakeToken = "fake.refresh.token"; - - // when - boolean isValid = jwtService.validateRefreshToken(fakeToken); - - // then - assertThat(isValid).isFalse(); - } -} +//package com.idol.domains.auth.service; +// +//import com.idol.domains.auth.repository.RefreshTokenRepository; +//import com.idol.global.config.TestcontainersRedisConfig; +//import org.junit.jupiter.api.AfterEach; +//import org.junit.jupiter.api.BeforeEach; +//import org.junit.jupiter.api.DisplayName; +//import org.junit.jupiter.api.Test; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.context.annotation.Import; +//import org.springframework.data.redis.core.RedisTemplate; +//import org.springframework.test.context.ActiveProfiles; +// +//import java.util.HashMap; +//import java.util.Map; +// +//import static org.assertj.core.api.Assertions.assertThat; +// +//@ActiveProfiles("test") +//@SpringBootTest +//@Import(TestcontainersRedisConfig.class) +//class JwtServiceIntegrationTest { +// +// @Autowired +// private JwtService jwtService; +// +// @Autowired +// private RefreshTokenService refreshTokenService; +// +// @Autowired +// private RefreshTokenRepository refreshTokenRepository; +// +// @Autowired +// private RedisTemplate redisTemplate; +// +// @BeforeEach +// void setUp() { +// refreshTokenRepository.deleteAll(); +// } +// +// @AfterEach +// void tearDown() { +// refreshTokenRepository.deleteAll(); +// } +// +// @Test +// @DisplayName("토큰 생성과 검증의 전체 플로우가 정상 작동한다") +// void tokenLifecycle_Success() { +// // given +// String memberId = "12345"; +// Map claims = new HashMap<>(); +// +// // when +// String accessToken = jwtService.generateAccessToken(memberId, claims); +// String refreshToken = jwtService.generateRefreshToken(memberId); +// +// // then +// assertThat(jwtService.isTokenValid(accessToken)).isTrue(); +// assertThat(jwtService.isTokenValid(refreshToken)).isTrue(); +// +// assertThat(jwtService.extractMemberId(accessToken)).isEqualTo(memberId); +// assertThat(jwtService.extractMemberId(refreshToken)).isEqualTo(memberId); +// +// assertThat(jwtService.validateRefreshToken(refreshToken)).isTrue(); +// } +// +// @Test +// @DisplayName("잘못된 멤버ID로 토큰 검증 시 실패한다") +// void validateToken_WrongMemberId_Fail() { +// // given +// String memberId = "12345"; +// String wrongMemberId = "67890"; +// String token = jwtService.generateAccessToken(memberId); +// +// // when +// boolean isValid = jwtService.validateToken(token, wrongMemberId); +// +// // then +// assertThat(isValid).isFalse(); +// } +// +// @Test +// @DisplayName("빈 claims로 액세스 토큰을 생성할 수 있다") +// void generateAccessToken_EmptyClaims_Success() { +// // given +// String memberId = "12345"; +// +// // when +// String token = jwtService.generateAccessToken(memberId); +// +// // then +// assertThat(jwtService.isTokenValid(token)).isTrue(); +// assertThat(jwtService.extractMemberId(token)).isEqualTo(memberId); +// } +// +// @Test +// @DisplayName("존재하지 않는 리프레시 토큰 검증 시 실패한다") +// void validateRefreshToken_NotExists_Fail() { +// // given +// String fakeToken = "fake.refresh.token"; +// +// // when +// boolean isValid = jwtService.validateRefreshToken(fakeToken); +// +// // then +// assertThat(isValid).isFalse(); +// } +//} From ab156e80965b6af0252117500d6105d2c58c2db2 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Thu, 19 Jun 2025 09:01:27 +0900 Subject: [PATCH 65/66] =?UTF-8?q?aws=20=EA=B4=80=EB=A0=A8=20=EC=84=A4?= =?UTF-8?q?=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 --- .../service/JwtServiceIntegrationTest.java | 218 +++++++++--------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java b/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java index fcc94a3..e16b3cf 100644 --- a/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java +++ b/src/test/java/com/idol/domains/auth/service/JwtServiceIntegrationTest.java @@ -1,109 +1,109 @@ -//package com.idol.domains.auth.service; -// -//import com.idol.domains.auth.repository.RefreshTokenRepository; -//import com.idol.global.config.TestcontainersRedisConfig; -//import org.junit.jupiter.api.AfterEach; -//import org.junit.jupiter.api.BeforeEach; -//import org.junit.jupiter.api.DisplayName; -//import org.junit.jupiter.api.Test; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.test.context.SpringBootTest; -//import org.springframework.context.annotation.Import; -//import org.springframework.data.redis.core.RedisTemplate; -//import org.springframework.test.context.ActiveProfiles; -// -//import java.util.HashMap; -//import java.util.Map; -// -//import static org.assertj.core.api.Assertions.assertThat; -// -//@ActiveProfiles("test") -//@SpringBootTest -//@Import(TestcontainersRedisConfig.class) -//class JwtServiceIntegrationTest { -// -// @Autowired -// private JwtService jwtService; -// -// @Autowired -// private RefreshTokenService refreshTokenService; -// -// @Autowired -// private RefreshTokenRepository refreshTokenRepository; -// -// @Autowired -// private RedisTemplate redisTemplate; -// -// @BeforeEach -// void setUp() { -// refreshTokenRepository.deleteAll(); -// } -// -// @AfterEach -// void tearDown() { -// refreshTokenRepository.deleteAll(); -// } -// -// @Test -// @DisplayName("토큰 생성과 검증의 전체 플로우가 정상 작동한다") -// void tokenLifecycle_Success() { -// // given -// String memberId = "12345"; -// Map claims = new HashMap<>(); -// -// // when -// String accessToken = jwtService.generateAccessToken(memberId, claims); -// String refreshToken = jwtService.generateRefreshToken(memberId); -// -// // then -// assertThat(jwtService.isTokenValid(accessToken)).isTrue(); -// assertThat(jwtService.isTokenValid(refreshToken)).isTrue(); -// -// assertThat(jwtService.extractMemberId(accessToken)).isEqualTo(memberId); -// assertThat(jwtService.extractMemberId(refreshToken)).isEqualTo(memberId); -// -// assertThat(jwtService.validateRefreshToken(refreshToken)).isTrue(); -// } -// -// @Test -// @DisplayName("잘못된 멤버ID로 토큰 검증 시 실패한다") -// void validateToken_WrongMemberId_Fail() { -// // given -// String memberId = "12345"; -// String wrongMemberId = "67890"; -// String token = jwtService.generateAccessToken(memberId); -// -// // when -// boolean isValid = jwtService.validateToken(token, wrongMemberId); -// -// // then -// assertThat(isValid).isFalse(); -// } -// -// @Test -// @DisplayName("빈 claims로 액세스 토큰을 생성할 수 있다") -// void generateAccessToken_EmptyClaims_Success() { -// // given -// String memberId = "12345"; -// -// // when -// String token = jwtService.generateAccessToken(memberId); -// -// // then -// assertThat(jwtService.isTokenValid(token)).isTrue(); -// assertThat(jwtService.extractMemberId(token)).isEqualTo(memberId); -// } -// -// @Test -// @DisplayName("존재하지 않는 리프레시 토큰 검증 시 실패한다") -// void validateRefreshToken_NotExists_Fail() { -// // given -// String fakeToken = "fake.refresh.token"; -// -// // when -// boolean isValid = jwtService.validateRefreshToken(fakeToken); -// -// // then -// assertThat(isValid).isFalse(); -// } -//} +package com.idol.domains.auth.service; + +import com.idol.domains.auth.repository.RefreshTokenRepository; +import com.idol.global.config.TestcontainersRedisConfig; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.test.context.ActiveProfiles; + +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +@ActiveProfiles("test") +@SpringBootTest +@Import(TestcontainersRedisConfig.class) +class JwtServiceIntegrationTest { + + @Autowired + private JwtService jwtService; + + @Autowired + private RefreshTokenService refreshTokenService; + + @Autowired + private RefreshTokenRepository refreshTokenRepository; + + @Autowired + private RedisTemplate redisTemplate; + + @BeforeEach + void setUp() { + refreshTokenRepository.deleteAll(); + } + + @AfterEach + void tearDown() { + refreshTokenRepository.deleteAll(); + } + + @Test + @DisplayName("토큰 생성과 검증의 전체 플로우가 정상 작동한다") + void tokenLifecycle_Success() { + // given + String memberId = "12345"; + Map claims = new HashMap<>(); + + // when + String accessToken = jwtService.generateAccessToken(memberId, claims); + String refreshToken = jwtService.generateRefreshToken(memberId); + + // then + assertThat(jwtService.isTokenValid(accessToken)).isTrue(); + assertThat(jwtService.isTokenValid(refreshToken)).isTrue(); + + assertThat(jwtService.extractMemberId(accessToken)).isEqualTo(memberId); + assertThat(jwtService.extractMemberId(refreshToken)).isEqualTo(memberId); + + assertThat(jwtService.validateRefreshToken(refreshToken)).isTrue(); + } + + @Test + @DisplayName("잘못된 멤버ID로 토큰 검증 시 실패한다") + void validateToken_WrongMemberId_Fail() { + // given + String memberId = "12345"; + String wrongMemberId = "67890"; + String token = jwtService.generateAccessToken(memberId); + + // when + boolean isValid = jwtService.validateToken(token, wrongMemberId); + + // then + assertThat(isValid).isFalse(); + } + + @Test + @DisplayName("빈 claims로 액세스 토큰을 생성할 수 있다") + void generateAccessToken_EmptyClaims_Success() { + // given + String memberId = "12345"; + + // when + String token = jwtService.generateAccessToken(memberId); + + // then + assertThat(jwtService.isTokenValid(token)).isTrue(); + assertThat(jwtService.extractMemberId(token)).isEqualTo(memberId); + } + + @Test + @DisplayName("존재하지 않는 리프레시 토큰 검증 시 실패한다") + void validateRefreshToken_NotExists_Fail() { + // given + String fakeToken = "fake.refresh.token"; + + // when + boolean isValid = jwtService.validateRefreshToken(fakeToken); + + // then + assertThat(isValid).isFalse(); + } +} From c109bfbe437d7aca7574a313c3b9b7f7b8c9cab9 Mon Sep 17 00:00:00 2001 From: baejiwon Date: Mon, 23 Jun 2025 23:05:53 +0900 Subject: [PATCH 66/66] =?UTF-8?q?Transactional=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idol/board/service/article/query/ReadArticleService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/idol/board/service/article/query/ReadArticleService.java b/src/main/java/com/idol/board/service/article/query/ReadArticleService.java index 0db06da..af385dd 100644 --- a/src/main/java/com/idol/board/service/article/query/ReadArticleService.java +++ b/src/main/java/com/idol/board/service/article/query/ReadArticleService.java @@ -44,7 +44,7 @@ public class ReadArticleService implements ReadArticleUseCase { private final WishRepository wishRepository; @Override - + @Transactional(readOnly = true) public ArticleReadResponseDto readArticle(Long articleId, Long userId) { Article article = articleRepository.findByArticleId(articleId) .orElseThrow(() -> new NotFoundException("Article", articleId)); @@ -94,6 +94,7 @@ public ArticleReadResponseDto readArticle(Long articleId, Long userId) { @Override + @Transactional(readOnly = true) public List searchArticleList( BigCategory bigCategory, SmallCategory smallCategory, String location, Long date, String sort, boolean sortAsc, Long limit, Long page, Long memberId) {