From 7cd015f59258336fa130f9429a5d8158738b63d8 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:06:00 +0900 Subject: [PATCH 01/13] =?UTF-8?q?ReadMe=20=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..00f0580 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +## TODO List +- [o] 게시글 생성 API 구현 +- [o] 게시글 수정 API 구현 + -[ ] 존재하지 않는 게시글 수정 요청 시 예외 처리 + -[o] 게시글 수정 서비스 구현 +- [ ] 게시글 삭제 API 구현 + - [ ] 게시글 삭제 시 예외 케이스 구현 + - [ ] 게시글이 이미 삭제된 경우 예외 처리 + - [ ] 존재하지 않는 게시글 삭제 요청 시 예외 처리 + - [ ] 게시글 삭제 서비스 구현 +- [ ] 게시글 조회 API 구현 + - [ ] 존재하지 않는 게시글 조회 요청 시 예외 처리 + - [ ] 게시글 조회 서비스 구현 +- -------------------------------------------------------------- +- [ ] 댓글 생성 API 구현 +- [ ] 댓글 수정 API 구현 + -[ ] 존재하지 않는 댓글 수정 요청 시 예외 처리 + -[ ] 댓글 수정 서비스 구현 +- [ ] 댓글 삭제 API 구현 + - [ ] 댓글 삭제 시 예외 케이스 구현 + - [ ] 댓글이 이미 삭제된 경우 예외 처리 + - [ ] 존재하지 않는 댓글 삭제 요청 시 예외 처리 + - [ ] 댓글 삭제 서비스 구현 +- [ ] 댓글 조회 API 구현 + - [ ] 존재하지 않는 댓글 조회 요청 시 예외 처리 + - [ ] 댓글 조회 서비스 구현 +... +--- + +## 구현 시 어렵거나 이해가 되지 않는 부분 +- 수정시에 수정 메서드를 어디에 구현해야 할지 모르겠다 +- +- \ No newline at end of file From 7b99ee868bf475ea1e03b2ac61cc967b6d9e30c6 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:07:03 +0900 Subject: [PATCH 02/13] =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=B4=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/io/sparta/board/BoardApplication.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/sparta/board/BoardApplication.java b/src/main/java/io/sparta/board/BoardApplication.java index 2b72c52..09f7ee1 100644 --- a/src/main/java/io/sparta/board/BoardApplication.java +++ b/src/main/java/io/sparta/board/BoardApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class BoardApplication { public static void main(String[] args) { From e24ebae6ac953b244d39b5a40042043b7814f066 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:07:32 +0900 Subject: [PATCH 03/13] =?UTF-8?q?=EB=8C=93=EA=B8=80=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EB=B0=8F=20=EC=97=94=ED=8B=B0=ED=8B=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/sparta/board/domain/Comment.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/main/java/io/sparta/board/domain/Comment.java diff --git a/src/main/java/io/sparta/board/domain/Comment.java b/src/main/java/io/sparta/board/domain/Comment.java new file mode 100644 index 0000000..bf0832c --- /dev/null +++ b/src/main/java/io/sparta/board/domain/Comment.java @@ -0,0 +1,49 @@ +package io.sparta.board.domain; + + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Temporal; +import jakarta.persistence.TemporalType; +import java.time.LocalDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor +@EntityListeners(AuditingEntityListener.class) +@Table(name="p_comment") +public class Comment { + + @Id + @Column(nullable = false) + private UUID id; + + @Column(nullable = false) + private UUID post_id; + + @Column(nullable = false) + private String content; + + @Column(nullable = false) + private Boolean deleted; + + @CreatedDate + @Column(nullable = false , updatable = false) + @Temporal(TemporalType.TIMESTAMP) + private LocalDateTime created_at; + + @CreatedDate + @Column(nullable = false , updatable = false) + @Temporal(TemporalType.TIMESTAMP) + private LocalDateTime updated_at; +} From e0998ea05e8c3180c0f948221456401a6611d10e Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:08:02 +0900 Subject: [PATCH 04/13] =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/presentaion/CommentController.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/io/sparta/board/presentaion/CommentController.java diff --git a/src/main/java/io/sparta/board/presentaion/CommentController.java b/src/main/java/io/sparta/board/presentaion/CommentController.java new file mode 100644 index 0000000..b04a872 --- /dev/null +++ b/src/main/java/io/sparta/board/presentaion/CommentController.java @@ -0,0 +1,26 @@ +package io.sparta.board.presentaion; + +import io.sparta.board.application.CommentService; +import io.sparta.board.domain.Comment; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +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/comment") +@RequiredArgsConstructor +public class CommentController { + + private final CommentService commentService; + + //댓글 생성 + @PostMapping("/create") + public ResponseEntity createComment(@RequestBody Comment comment) { + + commentService.save(comment); + return ResponseEntity.ok("생성"); + } +} From 2fb045c782fefa6cffb23c0644faf868844d6796 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:08:14 +0900 Subject: [PATCH 05/13] =?UTF-8?q?=EB=8C=93=EA=B8=80=20JPA=EB=A0=88?= =?UTF-8?q?=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sparta/board/infrastructure/CommentRepository.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/io/sparta/board/infrastructure/CommentRepository.java diff --git a/src/main/java/io/sparta/board/infrastructure/CommentRepository.java b/src/main/java/io/sparta/board/infrastructure/CommentRepository.java new file mode 100644 index 0000000..4039937 --- /dev/null +++ b/src/main/java/io/sparta/board/infrastructure/CommentRepository.java @@ -0,0 +1,9 @@ +package io.sparta.board.infrastructure; + +import io.sparta.board.domain.Comment; +import java.util.UUID; +import org.springframework.data.repository.CrudRepository; + +public interface CommentRepository extends CrudRepository { + +} From 597a0a976afbb166265965bab5365f9496b36285 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:08:32 +0900 Subject: [PATCH 06/13] =?UTF-8?q?=EB=8C=93=EA=B8=80=20Dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/sparta/board/presentaion/CommentRequestDto.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/io/sparta/board/presentaion/CommentRequestDto.java diff --git a/src/main/java/io/sparta/board/presentaion/CommentRequestDto.java b/src/main/java/io/sparta/board/presentaion/CommentRequestDto.java new file mode 100644 index 0000000..dfe9a0e --- /dev/null +++ b/src/main/java/io/sparta/board/presentaion/CommentRequestDto.java @@ -0,0 +1,5 @@ +package io.sparta.board.presentaion; + +public class CommentRequestDto { + +} From 519e342312b3034ca03a6dbefa2c11dbc8eb1735 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:08:42 +0900 Subject: [PATCH 07/13] =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/application/CommentService.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/io/sparta/board/application/CommentService.java diff --git a/src/main/java/io/sparta/board/application/CommentService.java b/src/main/java/io/sparta/board/application/CommentService.java new file mode 100644 index 0000000..1faf852 --- /dev/null +++ b/src/main/java/io/sparta/board/application/CommentService.java @@ -0,0 +1,20 @@ +package io.sparta.board.application; + +import io.sparta.board.domain.Comment; +import io.sparta.board.infrastructure.CommentRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class CommentService { + + private final CommentRepository commentRepository; + + public void save(Comment comment) { + + commentRepository.save(comment); + } +} From 4256978aa8adc2d6a2d90843d1373a8fe7e7f0cc Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:08:52 +0900 Subject: [PATCH 08/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=20=EB=B0=8F=20=EC=97=94=ED=8B=B0=ED=8B=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/sparta/board/domain/Post.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/main/java/io/sparta/board/domain/Post.java diff --git a/src/main/java/io/sparta/board/domain/Post.java b/src/main/java/io/sparta/board/domain/Post.java new file mode 100644 index 0000000..a91bbfe --- /dev/null +++ b/src/main/java/io/sparta/board/domain/Post.java @@ -0,0 +1,55 @@ +package io.sparta.board.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.time.LocalDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor +@EntityListeners(AuditingEntityListener.class) +@Table(name="p_post") +public class Post { + + @Id + @GeneratedValue + @Column(nullable = false) + private UUID id; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String content; + + private Boolean deleted; + + @CreatedDate + @Column(nullable = false , updatable = false) + private LocalDateTime created_at; + + @LastModifiedDate + @Column + private LocalDateTime updated_at; + + public Post(String title, String content) { + this.title = title; + this.content = content; + } + public void update(String title, String content) { + this.title = title; + this.content = content; + } +} From f51688b8562eb8e6eb038baab53cc35f2f0b1e3d Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:09:00 +0900 Subject: [PATCH 09/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/presentaion/PostController.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/io/sparta/board/presentaion/PostController.java diff --git a/src/main/java/io/sparta/board/presentaion/PostController.java b/src/main/java/io/sparta/board/presentaion/PostController.java new file mode 100644 index 0000000..3f3223f --- /dev/null +++ b/src/main/java/io/sparta/board/presentaion/PostController.java @@ -0,0 +1,39 @@ +package io.sparta.board.presentaion; + +import io.sparta.board.application.PostService; +import io.sparta.board.domain.Post; +import io.sparta.board.infrastructure.PostRepository; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/post") +@RequiredArgsConstructor +public class PostController { + + private final PostService postService; + private final PostRepository postRepository; + + //게시글 생성 + @PostMapping("/create") + public ResponseEntity post(@RequestBody PostRequestDto postRequestDto) { + + postService.save(postRequestDto); + + return ResponseEntity.ok(postService.save(postRequestDto)); + } + + @PatchMapping("/{post_id}") + public ResponseEntity updatePost(@PathVariable("post_id") UUID id,@RequestBody PostRequestDto postRequestDto) { + postService.updatePost(id,postRequestDto); + + return ResponseEntity.ok(postService.updatePost(id,postRequestDto)); + } +} From 01cbd74f8405508ea762ac79df4c110093cbc0db Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:09:07 +0900 Subject: [PATCH 10/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=A0=88?= =?UTF-8?q?=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/sparta/board/infrastructure/PostRepository.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/io/sparta/board/infrastructure/PostRepository.java diff --git a/src/main/java/io/sparta/board/infrastructure/PostRepository.java b/src/main/java/io/sparta/board/infrastructure/PostRepository.java new file mode 100644 index 0000000..d665aa4 --- /dev/null +++ b/src/main/java/io/sparta/board/infrastructure/PostRepository.java @@ -0,0 +1,10 @@ +package io.sparta.board.infrastructure; + +import io.sparta.board.domain.Post; +import java.util.UUID; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostRepository extends JpaRepository { + + +} From 9eed4b30634c4b0b27974ca34e968791919fed0d Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:09:18 +0900 Subject: [PATCH 11/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=9A=94?= =?UTF-8?q?=EC=B2=ADdto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/sparta/board/presentaion/PostRequestDto.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/io/sparta/board/presentaion/PostRequestDto.java diff --git a/src/main/java/io/sparta/board/presentaion/PostRequestDto.java b/src/main/java/io/sparta/board/presentaion/PostRequestDto.java new file mode 100644 index 0000000..4cb36d0 --- /dev/null +++ b/src/main/java/io/sparta/board/presentaion/PostRequestDto.java @@ -0,0 +1,12 @@ +package io.sparta.board.presentaion; + +import lombok.Getter; + +@Getter +public class PostRequestDto { + + private String title; + + private String content; + +} From 9ae42f2ebae243ded792f7d557c2695a28a0b45e Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:09:26 +0900 Subject: [PATCH 12/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/presentaion/PostResponseDto.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/java/io/sparta/board/presentaion/PostResponseDto.java diff --git a/src/main/java/io/sparta/board/presentaion/PostResponseDto.java b/src/main/java/io/sparta/board/presentaion/PostResponseDto.java new file mode 100644 index 0000000..bf6d4aa --- /dev/null +++ b/src/main/java/io/sparta/board/presentaion/PostResponseDto.java @@ -0,0 +1,43 @@ +package io.sparta.board.presentaion; + +import io.sparta.board.domain.Post; +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import java.time.LocalDateTime; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; + +@Getter +@NoArgsConstructor +public class PostResponseDto { + + @Id + private UUID id; + + private String title; + + private String content; + + private Boolean deleted; + + @CreatedDate + @Column(nullable = false , updatable = false) + private LocalDateTime created_at; + + @LastModifiedDate + @Column + private LocalDateTime updated_at; + + public PostResponseDto(Post post) { + this.id = post.getId(); + this.title = post.getTitle(); + this.content = post.getContent(); + this.deleted = post.getDeleted(); + this.created_at = post.getCreated_at(); + this.updated_at = post.getUpdated_at(); + } +} From cac454dc33891974852a8e2da8a60ea83888cfe5 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Wed, 2 Apr 2025 20:09:33 +0900 Subject: [PATCH 13/13] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sparta/board/application/PostService.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/io/sparta/board/application/PostService.java diff --git a/src/main/java/io/sparta/board/application/PostService.java b/src/main/java/io/sparta/board/application/PostService.java new file mode 100644 index 0000000..9303bfc --- /dev/null +++ b/src/main/java/io/sparta/board/application/PostService.java @@ -0,0 +1,36 @@ +package io.sparta.board.application; + +import io.sparta.board.domain.Post; +import io.sparta.board.infrastructure.PostRepository; +import io.sparta.board.presentaion.PostRequestDto; +import io.sparta.board.presentaion.PostResponseDto; +import jakarta.transaction.Transactional; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Transactional +public class PostService { + + private final PostRepository postRepository; + + public PostResponseDto save(PostRequestDto postRequestDto) { + + Post post = new Post( + postRequestDto.getTitle(), + postRequestDto.getContent() + ); + postRepository.save(post); + return new PostResponseDto(post); + } + + public PostResponseDto updatePost(UUID postid, PostRequestDto postRequestDto) { + Post post = postRepository.findById(postid).orElse(null); + post.update(postRequestDto.getTitle(), postRequestDto.getContent()); + + postRepository.save(post); + return new PostResponseDto(post); + } +}