From a24b3aa77075b933a8a5913fe963bf8115476b76 Mon Sep 17 00:00:00 2001 From: scholar-star Date: Sat, 1 Nov 2025 23:16:38 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81,=20Entity=EC=99=80=20Co?= =?UTF-8?q?ntroller,=20Service=20=ED=86=A0=EB=8C=80=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devSns/controllers/ReplyController.java | 4 +++ .../java/com/example/devSns/dto/PostDTO.java | 12 ++++++++- .../com/example/devSns/dto/PostResponse.java | 14 +++++++++- .../com/example/devSns/entities/Replies.java | 26 +++++++++++++++++++ .../devSns/repositories/ReplyRepository.java | 4 +++ .../example/devSns/services/PostService.java | 22 +++------------- .../example/devSns/services/ReplyService.java | 7 +++++ 7 files changed, 68 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/example/devSns/controllers/ReplyController.java create mode 100644 src/main/java/com/example/devSns/entities/Replies.java create mode 100644 src/main/java/com/example/devSns/repositories/ReplyRepository.java create mode 100644 src/main/java/com/example/devSns/services/ReplyService.java diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java new file mode 100644 index 0000000..c279426 --- /dev/null +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -0,0 +1,4 @@ +package com.example.devSns.controllers; + +public class ReplyController { +} diff --git a/src/main/java/com/example/devSns/dto/PostDTO.java b/src/main/java/com/example/devSns/dto/PostDTO.java index c3cc3cc..4fae29a 100644 --- a/src/main/java/com/example/devSns/dto/PostDTO.java +++ b/src/main/java/com/example/devSns/dto/PostDTO.java @@ -1,6 +1,16 @@ package com.example.devSns.dto; +import com.example.devSns.entities.Posts; + public record PostDTO( String username, String content -) { } +) { + public static Posts dtoToEntity(PostDTO postDTO) { + Posts postEntity = Posts.builder() + .username(postDTO.username()) + .content(postDTO.content()) + .build(); + return postEntity; + } +} diff --git a/src/main/java/com/example/devSns/dto/PostResponse.java b/src/main/java/com/example/devSns/dto/PostResponse.java index c8ff865..d8b37d0 100644 --- a/src/main/java/com/example/devSns/dto/PostResponse.java +++ b/src/main/java/com/example/devSns/dto/PostResponse.java @@ -1,5 +1,6 @@ package com.example.devSns.dto; +import com.example.devSns.entities.Posts; import lombok.*; import java.time.LocalDateTime; @@ -12,4 +13,15 @@ public record PostResponse( Integer like, LocalDateTime createAt, LocalDateTime updateAt -) {} +) { + public static PostResponse entityToDto(Posts post) { + return PostResponse.builder() + .id(post.getId()) + .username(post.getUsername()) + .content(post.getContent()) + .like(post.getLikeit()) + .createAt(post.getCreateat()) + .updateAt(post.getUpdateat()) + .build(); + } +} diff --git a/src/main/java/com/example/devSns/entities/Replies.java b/src/main/java/com/example/devSns/entities/Replies.java new file mode 100644 index 0000000..66739b8 --- /dev/null +++ b/src/main/java/com/example/devSns/entities/Replies.java @@ -0,0 +1,26 @@ +package com.example.devSns.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Replies { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + @NotNull + private String username; + + @NotNull + private String reply; +} diff --git a/src/main/java/com/example/devSns/repositories/ReplyRepository.java b/src/main/java/com/example/devSns/repositories/ReplyRepository.java new file mode 100644 index 0000000..5dd85df --- /dev/null +++ b/src/main/java/com/example/devSns/repositories/ReplyRepository.java @@ -0,0 +1,4 @@ +package com.example.devSns.repositories; + +public interface ReplyRepository { +} diff --git a/src/main/java/com/example/devSns/services/PostService.java b/src/main/java/com/example/devSns/services/PostService.java index 13958ab..fcb7988 100644 --- a/src/main/java/com/example/devSns/services/PostService.java +++ b/src/main/java/com/example/devSns/services/PostService.java @@ -13,30 +13,14 @@ import java.util.ArrayList; import java.util.List; +import static com.example.devSns.dto.PostDTO.dtoToEntity; +import static com.example.devSns.dto.PostResponse.entityToDto; + @Service @RequiredArgsConstructor public class PostService { private final PostRepository postRepository; - public Posts dtoToEntity(PostDTO postDTO) { - Posts postEntity = Posts.builder() - .username(postDTO.username()) - .content(postDTO.content()) - .build(); - return postEntity; - } - - public PostResponse entityToDto(Posts post) { - return PostResponse.builder() - .id(post.getId()) - .username(post.getUsername()) - .content(post.getContent()) - .like(post.getLikeit()) - .createAt(post.getCreateat()) - .updateAt(post.getUpdateat()) - .build(); - } - @Transactional // 트랜잭션 보장 public PostResponse save(PostDTO postDTO) { // post insert Posts postEntity = dtoToEntity(postDTO); diff --git a/src/main/java/com/example/devSns/services/ReplyService.java b/src/main/java/com/example/devSns/services/ReplyService.java new file mode 100644 index 0000000..12d7f6a --- /dev/null +++ b/src/main/java/com/example/devSns/services/ReplyService.java @@ -0,0 +1,7 @@ +package com.example.devSns.services; + +import org.springframework.stereotype.Service; + +@Service +public class ReplyService { +} From 676e68d9e3defa275dfc44545709e61c5a316bb8 Mon Sep 17 00:00:00 2001 From: scholar-star Date: Sat, 1 Nov 2025 23:51:12 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Controller=EC=99=80=20Service=20get,=20crea?= =?UTF-8?q?te=20=EC=A7=84=ED=96=89,=20Entity=EC=97=90=20Join=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devSns/controllers/ReplyController.java | 25 +++++++++++++++++++ .../java/com/example/devSns/dto/ReplyDTO.java | 9 +++++++ .../com/example/devSns/dto/ReplyResponse.java | 8 ++++++ .../com/example/devSns/entities/Replies.java | 10 +++++--- .../example/devSns/services/ReplyService.java | 20 +++++++++++++++ 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/example/devSns/dto/ReplyDTO.java create mode 100644 src/main/java/com/example/devSns/dto/ReplyResponse.java diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java index c279426..7e5ac8f 100644 --- a/src/main/java/com/example/devSns/controllers/ReplyController.java +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -1,4 +1,29 @@ package com.example.devSns.controllers; +import com.example.devSns.dto.ReplyDTO; +import com.example.devSns.dto.ReplyResponse; +import com.example.devSns.services.ReplyService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping +@RequiredArgsConstructor public class ReplyController { + private final ReplyService replyService; + + @GetMapping("/{postId}/comments") + public ResponseEntity> getComments(@PathVariable long postId) { + + } + + @PostMapping("/{postId}/comment") + public ResponseEntity> writeComment(@PathVariable long postId, ReplyDTO comment) { + + } + + } diff --git a/src/main/java/com/example/devSns/dto/ReplyDTO.java b/src/main/java/com/example/devSns/dto/ReplyDTO.java new file mode 100644 index 0000000..ae46057 --- /dev/null +++ b/src/main/java/com/example/devSns/dto/ReplyDTO.java @@ -0,0 +1,9 @@ +package com.example.devSns.dto; + +public record ReplyDTO( + String title, + String username, + String comment +) { + +} diff --git a/src/main/java/com/example/devSns/dto/ReplyResponse.java b/src/main/java/com/example/devSns/dto/ReplyResponse.java new file mode 100644 index 0000000..2fa966c --- /dev/null +++ b/src/main/java/com/example/devSns/dto/ReplyResponse.java @@ -0,0 +1,8 @@ +package com.example.devSns.dto; + +public record ReplyResponse( + long replyId, + String title, + String username, + String comment +) {} \ No newline at end of file diff --git a/src/main/java/com/example/devSns/entities/Replies.java b/src/main/java/com/example/devSns/entities/Replies.java index 66739b8..ea7ae12 100644 --- a/src/main/java/com/example/devSns/entities/Replies.java +++ b/src/main/java/com/example/devSns/entities/Replies.java @@ -1,9 +1,6 @@ package com.example.devSns.entities; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; @@ -18,6 +15,11 @@ public class Replies { @GeneratedValue(strategy = GenerationType.AUTO) private long id; + @JoinColumn(name = "posts_id") + @ManyToOne + @NotNull + private Posts posts; + @NotNull private String username; diff --git a/src/main/java/com/example/devSns/services/ReplyService.java b/src/main/java/com/example/devSns/services/ReplyService.java index 12d7f6a..9413d63 100644 --- a/src/main/java/com/example/devSns/services/ReplyService.java +++ b/src/main/java/com/example/devSns/services/ReplyService.java @@ -1,7 +1,27 @@ package com.example.devSns.services; +import com.example.devSns.dto.ReplyDTO; +import com.example.devSns.dto.ReplyResponse; +import com.example.devSns.repositories.ReplyRepository; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; @Service +@RequiredArgsConstructor public class ReplyService { + private final ReplyRepository replyRepository; + + @Transactional + public List replyGetAll(@PathVariable long postId) { + + } + + @Transactional + public ReplyResponse writeReply(@PathVariable long postId, ReplyDTO reply) { + + } } From 7b94fda3bb27ef524bb6b1188046dce72ccb8a1b Mon Sep 17 00:00:00 2001 From: scholar-star Date: Sat, 1 Nov 2025 23:51:30 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Controller=EC=99=80=20Service=20get,=20crea?= =?UTF-8?q?te=20=EC=A7=84=ED=96=89,=20Entity=EC=97=90=20Join=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/devSns/controllers/ReplyController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java index 7e5ac8f..48bc26d 100644 --- a/src/main/java/com/example/devSns/controllers/ReplyController.java +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -17,12 +17,12 @@ public class ReplyController { @GetMapping("/{postId}/comments") public ResponseEntity> getComments(@PathVariable long postId) { - + return null; } @PostMapping("/{postId}/comment") public ResponseEntity> writeComment(@PathVariable long postId, ReplyDTO comment) { - + return null; } From 7b53c52aba5431918db1a3628c8f9999308f9fe5 Mon Sep 17 00:00:00 2001 From: scholar-star Date: Sun, 2 Nov 2025 18:44:21 +0900 Subject: [PATCH 4/8] =?UTF-8?q?User=20Entity=20=EC=B6=94=EA=B0=80,=20Reply?= =?UTF-8?q?=EC=97=90=20Post=EC=99=80=20User=EC=9D=98=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=20=EA=B4=80=EA=B3=84=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devSns/controllers/ReplyController.java | 2 +- .../java/com/example/devSns/dto/ReplyDTO.java | 16 ++++++++-- .../com/example/devSns/dto/ReplyResponse.java | 15 +++++++-- .../com/example/devSns/entities/Posts.java | 13 +++++++- .../com/example/devSns/entities/Replies.java | 9 +++--- .../com/example/devSns/entities/Users.java | 32 +++++++++++++++++++ .../devSns/repositories/ReplyRepository.java | 8 ++++- .../devSns/repositories/UserRepository.java | 8 +++++ .../example/devSns/services/ReplyService.java | 27 ++++++++++++++-- 9 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/example/devSns/entities/Users.java create mode 100644 src/main/java/com/example/devSns/repositories/UserRepository.java diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java index 48bc26d..f02505d 100644 --- a/src/main/java/com/example/devSns/controllers/ReplyController.java +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -21,7 +21,7 @@ public ResponseEntity> getComments(@PathVariable long postId } @PostMapping("/{postId}/comment") - public ResponseEntity> writeComment(@PathVariable long postId, ReplyDTO comment) { + public ResponseEntity> writeComment(@PathVariable long postId, long userId, ReplyDTO comment) { return null; } diff --git a/src/main/java/com/example/devSns/dto/ReplyDTO.java b/src/main/java/com/example/devSns/dto/ReplyDTO.java index ae46057..c557f8f 100644 --- a/src/main/java/com/example/devSns/dto/ReplyDTO.java +++ b/src/main/java/com/example/devSns/dto/ReplyDTO.java @@ -1,9 +1,19 @@ package com.example.devSns.dto; +import com.example.devSns.entities.Posts; +import com.example.devSns.entities.Replies; +import com.example.devSns.entities.Users; + +import java.util.Optional; + public record ReplyDTO( - String title, - String username, String comment ) { - + public static Replies dtoToEntity(Posts post, Users user, ReplyDTO replyDTO) { + return Replies.builder() + .posts(post) + .users(user) + .reply(replyDTO.comment()) + .build(); + } } diff --git a/src/main/java/com/example/devSns/dto/ReplyResponse.java b/src/main/java/com/example/devSns/dto/ReplyResponse.java index 2fa966c..a5b6b21 100644 --- a/src/main/java/com/example/devSns/dto/ReplyResponse.java +++ b/src/main/java/com/example/devSns/dto/ReplyResponse.java @@ -1,8 +1,19 @@ package com.example.devSns.dto; +import com.example.devSns.entities.Replies; +import lombok.Builder; + +@Builder public record ReplyResponse( long replyId, - String title, String username, String comment -) {} \ No newline at end of file +) { + public static ReplyResponse entityToDTO(Replies replies) { + return ReplyResponse.builder() + .replyId(replies.getId()) + .username(replies.getUsers().getUsername()) + .comment(replies.getReply()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/devSns/entities/Posts.java b/src/main/java/com/example/devSns/entities/Posts.java index 60e2789..e54d567 100644 --- a/src/main/java/com/example/devSns/entities/Posts.java +++ b/src/main/java/com/example/devSns/entities/Posts.java @@ -8,7 +8,6 @@ @Entity @Getter -@Setter @NoArgsConstructor @AllArgsConstructor @Builder @@ -33,4 +32,16 @@ public class Posts { @Column private LocalDateTime updateat; + + public void setCreateat(LocalDateTime createat) { + this.createat = createat; + } + + public void setUpdateat(LocalDateTime updateat) { + this.updateat = updateat; + } + + public void setContent(String content) { + this.content = content; + } } diff --git a/src/main/java/com/example/devSns/entities/Replies.java b/src/main/java/com/example/devSns/entities/Replies.java index ea7ae12..3a4ff6b 100644 --- a/src/main/java/com/example/devSns/entities/Replies.java +++ b/src/main/java/com/example/devSns/entities/Replies.java @@ -2,13 +2,12 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.NoArgsConstructor; +import lombok.*; @Entity @NoArgsConstructor @AllArgsConstructor +@Getter @Builder public class Replies { @Id @@ -20,8 +19,10 @@ public class Replies { @NotNull private Posts posts; + @JoinColumn(name = "users_id") + @ManyToOne @NotNull - private String username; + private Users users; @NotNull private String reply; diff --git a/src/main/java/com/example/devSns/entities/Users.java b/src/main/java/com/example/devSns/entities/Users.java new file mode 100644 index 0000000..8bae64c --- /dev/null +++ b/src/main/java/com/example/devSns/entities/Users.java @@ -0,0 +1,32 @@ +package com.example.devSns.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +public class Users { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + @NotNull + private String username; + + @NotNull + private Integer age; + + private Date birthday; +} diff --git a/src/main/java/com/example/devSns/repositories/ReplyRepository.java b/src/main/java/com/example/devSns/repositories/ReplyRepository.java index 5dd85df..6ca53db 100644 --- a/src/main/java/com/example/devSns/repositories/ReplyRepository.java +++ b/src/main/java/com/example/devSns/repositories/ReplyRepository.java @@ -1,4 +1,10 @@ package com.example.devSns.repositories; -public interface ReplyRepository { +import com.example.devSns.entities.Replies; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ReplyRepository extends JpaRepository { + public List findByPostId(Long postId); } diff --git a/src/main/java/com/example/devSns/repositories/UserRepository.java b/src/main/java/com/example/devSns/repositories/UserRepository.java new file mode 100644 index 0000000..9be1992 --- /dev/null +++ b/src/main/java/com/example/devSns/repositories/UserRepository.java @@ -0,0 +1,8 @@ +package com.example.devSns.repositories; + +import com.example.devSns.entities.Users; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + public Users findById(long userId); +} diff --git a/src/main/java/com/example/devSns/services/ReplyService.java b/src/main/java/com/example/devSns/services/ReplyService.java index 9413d63..1bed343 100644 --- a/src/main/java/com/example/devSns/services/ReplyService.java +++ b/src/main/java/com/example/devSns/services/ReplyService.java @@ -2,26 +2,47 @@ import com.example.devSns.dto.ReplyDTO; import com.example.devSns.dto.ReplyResponse; +import com.example.devSns.entities.Posts; +import com.example.devSns.entities.Replies; +import com.example.devSns.entities.Users; +import com.example.devSns.repositories.PostRepository; import com.example.devSns.repositories.ReplyRepository; +import com.example.devSns.repositories.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor public class ReplyService { private final ReplyRepository replyRepository; + private final PostRepository postRepository; + private final UserRepository userRepository; @Transactional public List replyGetAll(@PathVariable long postId) { - + Posts post = postRepository.findById(postId).orElseThrow(); + List replies = replyRepository.findByPostId(postId); + List repliesResponse = new ArrayList<>(); + for (Replies reply: replies) { + repliesResponse.add(ReplyResponse.entityToDTO(reply)); + } + return repliesResponse; } @Transactional - public ReplyResponse writeReply(@PathVariable long postId, ReplyDTO reply) { - + public ReplyResponse writeReply(@PathVariable long postId, long userId, ReplyDTO reply) { + Posts post = postRepository.findById(postId).orElseThrow(); + Users user = userRepository.findById(userId); + Replies replyEntity = ReplyDTO.dtoToEntity(post, user, reply); + replyRepository.save(replyEntity); + return ReplyResponse.entityToDTO(replyEntity); } + + } From 90ce72330771b5243e63d480a72a0a0f0d49f8c3 Mon Sep 17 00:00:00 2001 From: scholar-star Date: Sun, 2 Nov 2025 23:32:01 +0900 Subject: [PATCH 5/8] =?UTF-8?q?service,=20controller=20=ED=86=A0=EB=8C=80?= =?UTF-8?q?=20=EB=A7=8C=EB=93=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devSns/controllers/ReplyController.java | 10 +++++++++- .../com/example/devSns/entities/Replies.java | 8 ++++++++ .../example/devSns/services/ReplyService.java | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java index f02505d..bde6053 100644 --- a/src/main/java/com/example/devSns/controllers/ReplyController.java +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -20,10 +20,18 @@ public ResponseEntity> getComments(@PathVariable long postId return null; } - @PostMapping("/{postId}/comment") + @PostMapping("/{postId}") public ResponseEntity> writeComment(@PathVariable long postId, long userId, ReplyDTO comment) { return null; } + @PatchMapping("/{postid}") + public ResponseEntity updateComment(@PathVariable long postId, long userId, ReplyDTO comment) { + return null; + } + @DeleteMapping("/{postId}") + public ResponseEntity deleteComment(@PathVariable long postId, long userId) { + return null; + } } diff --git a/src/main/java/com/example/devSns/entities/Replies.java b/src/main/java/com/example/devSns/entities/Replies.java index 3a4ff6b..1966e63 100644 --- a/src/main/java/com/example/devSns/entities/Replies.java +++ b/src/main/java/com/example/devSns/entities/Replies.java @@ -4,6 +4,8 @@ import jakarta.validation.constraints.NotNull; import lombok.*; +import java.time.LocalDateTime; + @Entity @NoArgsConstructor @AllArgsConstructor @@ -26,4 +28,10 @@ public class Replies { @NotNull private String reply; + + @NotNull + private LocalDateTime createAt; + + @NotNull + private LocalDateTime updateAt; } diff --git a/src/main/java/com/example/devSns/services/ReplyService.java b/src/main/java/com/example/devSns/services/ReplyService.java index 1bed343..1e6b998 100644 --- a/src/main/java/com/example/devSns/services/ReplyService.java +++ b/src/main/java/com/example/devSns/services/ReplyService.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Service @RequiredArgsConstructor @@ -44,5 +43,21 @@ public ReplyResponse writeReply(@PathVariable long postId, long userId, ReplyDTO return ReplyResponse.entityToDTO(replyEntity); } + @Transactional + public ReplyResponse updateReply(@PathVariable long postId, long userId, ReplyDTO reply) { + Posts post = postRepository.findById(postId).orElseThrow(); + Users user = userRepository.findById(userId); + Replies replyEntity = ReplyDTO.dtoToEntity(post, user, reply); + replyRepository.save(replyEntity); + return ReplyResponse.entityToDTO(replyEntity); + } + @Transactional + public String deleteReply(@PathVariable long postId, long userId) { + Posts post = postRepository.findById(postId).orElseThrow(); + Users user = userRepository.findById(userId); + Replies replyEntity = replyRepository.findById(postId).orElseThrow(); + replyRepository.delete(replyEntity); + return "성공적으로 삭제되었습니다"; + } } From 3df566e77283de485bc864d7fb004b100187450f Mon Sep 17 00:00:00 2001 From: scholar-star Date: Mon, 3 Nov 2025 15:01:43 +0900 Subject: [PATCH 6/8] =?UTF-8?q?GlobalExceptionHandler=EB=A1=9C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EC=98=AE=EA=B8=B0=EA=B8=B0,?= =?UTF-8?q?=20Controller=20=EA=B8=B0=EB=B3=B8=20=EC=B1=84=EC=9B=8C?= =?UTF-8?q?=EB=84=A3=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devSns/controllers/PostController.java | 14 ---------- .../devSns/controllers/ReplyController.java | 27 ++++++++++++------- .../exceptions/GlobalExceptionHandler.java | 26 ++++++++++++++++++ 3 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 src/main/java/exceptions/GlobalExceptionHandler.java diff --git a/src/main/java/com/example/devSns/controllers/PostController.java b/src/main/java/com/example/devSns/controllers/PostController.java index bfc52d3..a2b971e 100644 --- a/src/main/java/com/example/devSns/controllers/PostController.java +++ b/src/main/java/com/example/devSns/controllers/PostController.java @@ -46,18 +46,4 @@ public ResponseEntity deletePost(@PathVariable Long id) { postService.delete(id); return new ResponseEntity<>("Post deleted", HttpStatus.OK); } - - @ExceptionHandler - public ResponseEntity handleEntityNotFoundException(EntityNotFoundException e) { - ResponseEntity response = - new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); - return response; - } - - @ExceptionHandler - public ResponseEntity handleDataAccessException(DataAccessException e) { - ResponseEntity response = - new ResponseEntity<>("DB 오류", HttpStatus.INTERNAL_SERVER_ERROR); - return response; - } } diff --git a/src/main/java/com/example/devSns/controllers/ReplyController.java b/src/main/java/com/example/devSns/controllers/ReplyController.java index bde6053..cc1c352 100644 --- a/src/main/java/com/example/devSns/controllers/ReplyController.java +++ b/src/main/java/com/example/devSns/controllers/ReplyController.java @@ -4,6 +4,7 @@ import com.example.devSns.dto.ReplyResponse; import com.example.devSns.services.ReplyService; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -15,23 +16,31 @@ public class ReplyController { private final ReplyService replyService; - @GetMapping("/{postId}/comments") - public ResponseEntity> getComments(@PathVariable long postId) { - return null; + @GetMapping("/{postId}/replies") + public ResponseEntity> getReplies(@PathVariable long postId) { + List replies = replyService.replyGetAll(postId); + ResponseEntity> responseEntity = new ResponseEntity<>(replies, HttpStatus.OK); + return responseEntity; } @PostMapping("/{postId}") - public ResponseEntity> writeComment(@PathVariable long postId, long userId, ReplyDTO comment) { - return null; + public ResponseEntity writeReply(@PathVariable long postId, long userId, ReplyDTO reply) { + ReplyResponse replyResponse = replyService.writeReply(postId, userId, reply); + ResponseEntity responseEntity = new ResponseEntity<>(replyResponse, HttpStatus.OK); + return responseEntity; } @PatchMapping("/{postid}") - public ResponseEntity updateComment(@PathVariable long postId, long userId, ReplyDTO comment) { - return null; + public ResponseEntity updateReply(@PathVariable long postId, long userId, ReplyDTO reply) { + ReplyResponse replyResponse = replyService.updateReply(postId, userId, reply); + ResponseEntity responseEntity = new ResponseEntity<>(replyResponse, HttpStatus.OK); + return responseEntity; } @DeleteMapping("/{postId}") - public ResponseEntity deleteComment(@PathVariable long postId, long userId) { - return null; + public ResponseEntity deleteReply(@PathVariable long postId, long userId) { + String deleteCheck = replyService.deleteReply(postId, userId); + ResponseEntity responseEntity = new ResponseEntity<>(deleteCheck, HttpStatus.OK); + return responseEntity; } } diff --git a/src/main/java/exceptions/GlobalExceptionHandler.java b/src/main/java/exceptions/GlobalExceptionHandler.java new file mode 100644 index 0000000..9e7eaad --- /dev/null +++ b/src/main/java/exceptions/GlobalExceptionHandler.java @@ -0,0 +1,26 @@ +package exceptions; + +import jakarta.persistence.EntityNotFoundException; +import org.springframework.dao.DataAccessException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@RestControllerAdvice +public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { + @ExceptionHandler + public ResponseEntity handleEntityNotFoundException(EntityNotFoundException e) { + ResponseEntity response = + new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); + return response; + } + + @ExceptionHandler + public ResponseEntity handleDataAccessException(DataAccessException e) { + ResponseEntity response = + new ResponseEntity<>("DB 오류", HttpStatus.INTERNAL_SERVER_ERROR); + return response; + } +} From 7fe66e92ae488d79d9366bcb1004d248d2ce70ab Mon Sep 17 00:00:00 2001 From: scholar-star Date: Tue, 4 Nov 2025 10:41:57 +0900 Subject: [PATCH 7/8] =?UTF-8?q?ReplyRepository=20findby=20=ED=98=95?= =?UTF-8?q?=ED=83=9C=20=EB=B3=80=EA=B2=BD(postId->Posts),=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/devSns/repositories/ReplyRepository.java | 3 ++- src/main/java/com/example/devSns/services/ReplyService.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/devSns/repositories/ReplyRepository.java b/src/main/java/com/example/devSns/repositories/ReplyRepository.java index 6ca53db..d8fc040 100644 --- a/src/main/java/com/example/devSns/repositories/ReplyRepository.java +++ b/src/main/java/com/example/devSns/repositories/ReplyRepository.java @@ -1,10 +1,11 @@ package com.example.devSns.repositories; +import com.example.devSns.entities.Posts; import com.example.devSns.entities.Replies; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface ReplyRepository extends JpaRepository { - public List findByPostId(Long postId); + public List findByPosts(Posts posts); } diff --git a/src/main/java/com/example/devSns/services/ReplyService.java b/src/main/java/com/example/devSns/services/ReplyService.java index 1e6b998..7bc83bc 100644 --- a/src/main/java/com/example/devSns/services/ReplyService.java +++ b/src/main/java/com/example/devSns/services/ReplyService.java @@ -26,7 +26,7 @@ public class ReplyService { @Transactional public List replyGetAll(@PathVariable long postId) { Posts post = postRepository.findById(postId).orElseThrow(); - List replies = replyRepository.findByPostId(postId); + List replies = replyRepository.findByPosts(post); List repliesResponse = new ArrayList<>(); for (Replies reply: replies) { repliesResponse.add(ReplyResponse.entityToDTO(reply)); From 5f6e17940a6cc70d91aa68e571a57deebc45895c Mon Sep 17 00:00:00 2001 From: scholar-star Date: Tue, 4 Nov 2025 23:56:05 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Post=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/devSns/controllers/PostController.java | 8 +++----- src/main/java/com/example/devSns/dto/PostDTO.java | 6 ++++-- .../java/com/example/devSns/dto/PostResponse.java | 3 ++- src/main/java/com/example/devSns/entities/Posts.java | 5 +++-- .../java/com/example/devSns/entities/Replies.java | 5 +++++ src/main/java/com/example/devSns/entities/Users.java | 5 +---- .../example/devSns/repositories/PostRepository.java | 2 +- .../com/example/devSns/services/PostService.java | 12 ++++++++---- 8 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/example/devSns/controllers/PostController.java b/src/main/java/com/example/devSns/controllers/PostController.java index a2b971e..2534399 100644 --- a/src/main/java/com/example/devSns/controllers/PostController.java +++ b/src/main/java/com/example/devSns/controllers/PostController.java @@ -2,9 +2,7 @@ import com.example.devSns.dto.PostDTO; import com.example.devSns.dto.PostResponse; -import jakarta.persistence.EntityNotFoundException; import lombok.RequiredArgsConstructor; -import org.springframework.dao.DataAccessException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -23,9 +21,9 @@ public ResponseEntity> showPosts() { return new ResponseEntity<>(posts, HttpStatus.OK); } - @GetMapping("/show/{username}") - public ResponseEntity> showPost(@PathVariable String username) { - List post = postService.findByUsername(username); + @GetMapping("/show/{userID}") + public ResponseEntity> showPost(@PathVariable Long userID) { + List post = postService.findByUserID(userID); return new ResponseEntity<>(post, HttpStatus.OK); } diff --git a/src/main/java/com/example/devSns/dto/PostDTO.java b/src/main/java/com/example/devSns/dto/PostDTO.java index 4fae29a..118ec9c 100644 --- a/src/main/java/com/example/devSns/dto/PostDTO.java +++ b/src/main/java/com/example/devSns/dto/PostDTO.java @@ -1,14 +1,16 @@ package com.example.devSns.dto; import com.example.devSns.entities.Posts; +import com.example.devSns.entities.Users; public record PostDTO( + Long userId, String username, String content ) { - public static Posts dtoToEntity(PostDTO postDTO) { + public static Posts dtoToEntity(PostDTO postDTO, Users user) { Posts postEntity = Posts.builder() - .username(postDTO.username()) + .users(user) .content(postDTO.content()) .build(); return postEntity; diff --git a/src/main/java/com/example/devSns/dto/PostResponse.java b/src/main/java/com/example/devSns/dto/PostResponse.java index d8b37d0..467fd48 100644 --- a/src/main/java/com/example/devSns/dto/PostResponse.java +++ b/src/main/java/com/example/devSns/dto/PostResponse.java @@ -1,6 +1,7 @@ package com.example.devSns.dto; import com.example.devSns.entities.Posts; +import com.example.devSns.entities.Users; import lombok.*; import java.time.LocalDateTime; @@ -17,7 +18,7 @@ public record PostResponse( public static PostResponse entityToDto(Posts post) { return PostResponse.builder() .id(post.getId()) - .username(post.getUsername()) + .username(post.getUsers().getUsername()) .content(post.getContent()) .like(post.getLikeit()) .createAt(post.getCreateat()) diff --git a/src/main/java/com/example/devSns/entities/Posts.java b/src/main/java/com/example/devSns/entities/Posts.java index e54d567..87fa483 100644 --- a/src/main/java/com/example/devSns/entities/Posts.java +++ b/src/main/java/com/example/devSns/entities/Posts.java @@ -20,9 +20,10 @@ public class Posts { @Column private String content; + @JoinColumn(name = "users_id") + @ManyToOne @NotNull - @Column - private String username; + private Users users; @Column private int likeit; diff --git a/src/main/java/com/example/devSns/entities/Replies.java b/src/main/java/com/example/devSns/entities/Replies.java index 1966e63..e703199 100644 --- a/src/main/java/com/example/devSns/entities/Replies.java +++ b/src/main/java/com/example/devSns/entities/Replies.java @@ -5,6 +5,8 @@ import lombok.*; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Entity @NoArgsConstructor @@ -34,4 +36,7 @@ public class Replies { @NotNull private LocalDateTime updateAt; + + @OneToMany(mappedBy = "posts", cascade = CascadeType.REMOVE, orphanRemoval = true) + private List replies = new ArrayList<>(); } diff --git a/src/main/java/com/example/devSns/entities/Users.java b/src/main/java/com/example/devSns/entities/Users.java index 8bae64c..600fb2a 100644 --- a/src/main/java/com/example/devSns/entities/Users.java +++ b/src/main/java/com/example/devSns/entities/Users.java @@ -1,9 +1,6 @@ package com.example.devSns.entities; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/com/example/devSns/repositories/PostRepository.java b/src/main/java/com/example/devSns/repositories/PostRepository.java index 44dc0f1..eeaaae1 100644 --- a/src/main/java/com/example/devSns/repositories/PostRepository.java +++ b/src/main/java/com/example/devSns/repositories/PostRepository.java @@ -9,5 +9,5 @@ public interface PostRepository extends JpaRepository { public List findAll(); public Optional findById(Integer id); - public List findByUsername(String username); + public List findByUsersId(Long userID); } diff --git a/src/main/java/com/example/devSns/services/PostService.java b/src/main/java/com/example/devSns/services/PostService.java index fcb7988..a444aac 100644 --- a/src/main/java/com/example/devSns/services/PostService.java +++ b/src/main/java/com/example/devSns/services/PostService.java @@ -3,6 +3,8 @@ import com.example.devSns.dto.PostDTO; import com.example.devSns.dto.PostResponse; import com.example.devSns.entities.Posts; +import com.example.devSns.entities.Users; +import com.example.devSns.repositories.UserRepository; import jakarta.persistence.EntityNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,10 +22,12 @@ @RequiredArgsConstructor public class PostService { private final PostRepository postRepository; + private final UserRepository userRepository; @Transactional // 트랜잭션 보장 - public PostResponse save(PostDTO postDTO) { // post insert - Posts postEntity = dtoToEntity(postDTO); + public PostResponse save(PostDTO postDTO) { + Users user = userRepository.findById(postDTO.userId()).orElseThrow(EntityNotFoundException::new); + Posts postEntity = dtoToEntity(postDTO, user); postEntity.setCreateat(LocalDateTime.now()); Posts resultEntity = postRepository.save(postEntity); return entityToDto(resultEntity); @@ -40,8 +44,8 @@ public List findAll() { // 전체 post 조회 } @Transactional - public List findByUsername(String username) { // 작성자 기준 post 조회 - List postsByName = postRepository.findByUsername(username); + public List findByUserID(Long userID) { // 작성자 기준 post 조회 + List postsByName = postRepository.findByUsersId(userID); List postResponses = new ArrayList<>(); for (Posts post : postsByName) { postResponses.add(entityToDto(post));