diff --git a/src/main/java/com/example/springhw32/controller/CommentController.java b/src/main/java/com/example/springhw32/controller/CommentController.java index 0ee065d..b446148 100644 --- a/src/main/java/com/example/springhw32/controller/CommentController.java +++ b/src/main/java/com/example/springhw32/controller/CommentController.java @@ -1,5 +1,31 @@ package com.example.springhw32.controller; +import com.example.springhw32.dto.CommentDto; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.entity.User; +import com.example.springhw32.service.CommentService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/posts/comments") public class CommentController { + private final CommentService commentService; + @PostMapping("") + public CommentDto createComments(@ModelAttribute CommentDto commentDto,Long userId, Long postId){ + + return commentService.createComments(commentDto,userId,postId); + } + + @GetMapping("/{postId}") + public List getCommentsByPostId(@PathVariable Long postId){ + return commentService.getCommentsByPostId(postId); + + } + + } diff --git a/src/main/java/com/example/springhw32/controller/PostController.java b/src/main/java/com/example/springhw32/controller/PostController.java index 317774b..0c3b960 100644 --- a/src/main/java/com/example/springhw32/controller/PostController.java +++ b/src/main/java/com/example/springhw32/controller/PostController.java @@ -1,5 +1,47 @@ package com.example.springhw32.controller; +import com.example.springhw32.dto.CommentDto; +import com.example.springhw32.dto.PostDto; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.service.PostService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/posts") public class PostController { + private final PostService postService; + + @PostMapping("") + public PostDto create(Long userId, + @ModelAttribute PostDto postDto){ + return postService.create(userId,postDto); + } + + @GetMapping("") + public List getRecentPosts(){ + + return postService.getRecentPosts(); + + } + + @GetMapping("/{writer}") + public List getPostsByWriter(@PathVariable("writer")String nickName){ + return postService.getPostsByWriter(nickName); + + + } + + @GetMapping("/comments") + public List getPopularPosts(){ + + return postService.getPopularPosts(); + } + + + } diff --git a/src/main/java/com/example/springhw32/controller/UserController.java b/src/main/java/com/example/springhw32/controller/UserController.java index 3b321ac..94712ba 100644 --- a/src/main/java/com/example/springhw32/controller/UserController.java +++ b/src/main/java/com/example/springhw32/controller/UserController.java @@ -1,5 +1,20 @@ package com.example.springhw32.controller; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +@RequiredArgsConstructor +@RestController public class UserController { + private final UserService userService; + @PostMapping("/users") + public UserDto join(@ModelAttribute UserDto userDto){ + return userService.join(userDto); + } + + } diff --git a/src/main/java/com/example/springhw32/dto/CommentDto.java b/src/main/java/com/example/springhw32/dto/CommentDto.java index a9d04fa..febd08c 100644 --- a/src/main/java/com/example/springhw32/dto/CommentDto.java +++ b/src/main/java/com/example/springhw32/dto/CommentDto.java @@ -1,5 +1,29 @@ package com.example.springhw32.dto; +import com.example.springhw32.entity.Comment; +import com.example.springhw32.entity.Post; +import com.example.springhw32.entity.User; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class CommentDto { + public CommentDto(Comment comment) { + this.post = comment.getPost(); + this.user = comment.getUser(); + this.text = comment.getText(); + + + } + + @ManyToOne + private Post post; + + @OneToOne + private User user; + + private String text; } diff --git a/src/main/java/com/example/springhw32/dto/PostDto.java b/src/main/java/com/example/springhw32/dto/PostDto.java index cde1eda..5f9a234 100644 --- a/src/main/java/com/example/springhw32/dto/PostDto.java +++ b/src/main/java/com/example/springhw32/dto/PostDto.java @@ -1,5 +1,32 @@ package com.example.springhw32.dto; +import com.example.springhw32.entity.Post; +import com.example.springhw32.entity.User; +import jakarta.persistence.ManyToOne; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor public class PostDto { + public PostDto(Post post) { + this.user = post.getUser(); + this.title = post.getTitle(); + this.content = post.getContent(); + this.commentCnt = post.getCommentCnt(); + this.createdAt = post.getCreatedAt(); + + } + @ManyToOne + private User user; + + private String title; + private String content; + private Long commentCnt; + private LocalDateTime createdAt; } diff --git a/src/main/java/com/example/springhw32/dto/UserDto.java b/src/main/java/com/example/springhw32/dto/UserDto.java index cbbbe2e..eceffb0 100644 --- a/src/main/java/com/example/springhw32/dto/UserDto.java +++ b/src/main/java/com/example/springhw32/dto/UserDto.java @@ -1,5 +1,14 @@ package com.example.springhw32.dto; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class UserDto { + private String username; + private String password; + private String nickname; + } diff --git a/src/main/java/com/example/springhw32/entity/Comment.java b/src/main/java/com/example/springhw32/entity/Comment.java index be818a0..8672f5d 100644 --- a/src/main/java/com/example/springhw32/entity/Comment.java +++ b/src/main/java/com/example/springhw32/entity/Comment.java @@ -1,5 +1,24 @@ package com.example.springhw32.entity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.IdGeneratorType; +@Getter +@Setter +@Entity public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @ManyToOne + private Post post; + + @OneToOne + private User user; + + private String text; + } diff --git a/src/main/java/com/example/springhw32/entity/Post.java b/src/main/java/com/example/springhw32/entity/Post.java index 38b5e81..938e280 100644 --- a/src/main/java/com/example/springhw32/entity/Post.java +++ b/src/main/java/com/example/springhw32/entity/Post.java @@ -1,5 +1,25 @@ package com.example.springhw32.entity; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity public class Post { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @ManyToOne + private User user; + + private String title; + private String content; + + private Long commentCnt; + private LocalDateTime createdAt; } diff --git a/src/main/java/com/example/springhw32/entity/User.java b/src/main/java/com/example/springhw32/entity/User.java index 447989d..e5c92bc 100644 --- a/src/main/java/com/example/springhw32/entity/User.java +++ b/src/main/java/com/example/springhw32/entity/User.java @@ -1,5 +1,22 @@ package com.example.springhw32.entity; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String username; + private String password; + private String nickname; } diff --git a/src/main/java/com/example/springhw32/repository/CommentRepository.java b/src/main/java/com/example/springhw32/repository/CommentRepository.java index 83dcd99..66c0cd6 100644 --- a/src/main/java/com/example/springhw32/repository/CommentRepository.java +++ b/src/main/java/com/example/springhw32/repository/CommentRepository.java @@ -1,5 +1,13 @@ package com.example.springhw32.repository; -public interface CommentRepository { +import com.example.springhw32.entity.Comment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CommentRepository extends JpaRepository { + List findAllByPostId(Long postId); } diff --git a/src/main/java/com/example/springhw32/repository/PostRepository.java b/src/main/java/com/example/springhw32/repository/PostRepository.java index 14b8546..d3340e8 100644 --- a/src/main/java/com/example/springhw32/repository/PostRepository.java +++ b/src/main/java/com/example/springhw32/repository/PostRepository.java @@ -1,5 +1,14 @@ package com.example.springhw32.repository; -public interface PostRepository { +import com.example.springhw32.entity.Post; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.List; + +@Repository +public interface PostRepository extends JpaRepository { + List findAllByOrderByCreatedAtDesc(); + List findAllByUserId(Long userId); + List findAllByOrderByCommentCntDesc(); } diff --git a/src/main/java/com/example/springhw32/repository/UserRepository.java b/src/main/java/com/example/springhw32/repository/UserRepository.java index 877a215..f4f9ea5 100644 --- a/src/main/java/com/example/springhw32/repository/UserRepository.java +++ b/src/main/java/com/example/springhw32/repository/UserRepository.java @@ -1,5 +1,13 @@ package com.example.springhw32.repository; -public interface UserRepository { +import com.example.springhw32.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface UserRepository extends JpaRepository { + User findByNickname(String nickname); } diff --git a/src/main/java/com/example/springhw32/service/CommentService.java b/src/main/java/com/example/springhw32/service/CommentService.java index ec0c937..92f868b 100644 --- a/src/main/java/com/example/springhw32/service/CommentService.java +++ b/src/main/java/com/example/springhw32/service/CommentService.java @@ -1,5 +1,50 @@ package com.example.springhw32.service; +import com.example.springhw32.dto.CommentDto; +import com.example.springhw32.dto.PostDto; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.entity.Comment; +import com.example.springhw32.entity.Post; +import com.example.springhw32.entity.User; +import com.example.springhw32.repository.CommentRepository; +import com.example.springhw32.repository.PostRepository; +import com.example.springhw32.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service +@Transactional public class CommentService { + private final CommentRepository commentRepository; + private final UserRepository userRepository; + private final PostRepository postRepository; + + //댓글 작성 + public CommentDto createComments(CommentDto commentDto, Long userId, Long postId){ + User user = userRepository.findById(userId).orElseThrow(); + Post post = postRepository.findById(postId).orElseThrow(); + + Comment comment = new Comment(); + comment.setText(commentDto.getText()); + comment.setPost(post); + comment.setUser(user); + commentRepository.save(comment); + + return commentDto; + + } + //특정게시물의 모든댓글 조회 + public List getCommentsByPostId(Long postId){ + return commentRepository.findAllByPostId(postId).stream() + .map(CommentDto::new) + .collect(Collectors.toList()); + + + } } diff --git a/src/main/java/com/example/springhw32/service/PostService.java b/src/main/java/com/example/springhw32/service/PostService.java index b029d55..03ee8d6 100644 --- a/src/main/java/com/example/springhw32/service/PostService.java +++ b/src/main/java/com/example/springhw32/service/PostService.java @@ -1,5 +1,73 @@ package com.example.springhw32.service; +import com.example.springhw32.dto.PostDto; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.entity.Post; +import com.example.springhw32.entity.User; +import com.example.springhw32.repository.PostRepository; +import com.example.springhw32.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +@Service public class PostService { + private final PostRepository postRepository; + private final UserRepository userRepository; + + public PostDto create(Long userId, + PostDto postDto){ + //Id 찾기 + User user = userRepository.findById(userId).orElseThrow(); + //만든 유처 post에 집어넣기 + Post post = new Post(); + post.setUser(user); + post.setTitle(postDto.getTitle()); + post.setContent(postDto.getContent()); + //레포지토리에 저장하기 + postRepository.save(post); + + return postDto; + + } + //글 최신 순 글 조회 + + public List getRecentPosts(){ + return postRepository.findAllByOrderByCreatedAtDesc() + .stream() + .map(PostDto::new) + .collect(Collectors.toList()); + + + } + + //작성자 글 조회 + public List getPostsByWriter(String nickname){ + // 닉네임으로 찾고 + User user = userRepository.findByNickname(nickname); + + return postRepository.findAllByUserId(user.getId()).stream() + .map(PostDto::new) + .collect(Collectors.toList()); + + + + + } + + + //댓글 많은 순 글 조회 + public List getPopularPosts(){ + return postRepository.findAllByOrderByCommentCntDesc().stream() + .map(PostDto::new) + .collect(Collectors.toList()); + + + } + + } diff --git a/src/main/java/com/example/springhw32/service/UserService.java b/src/main/java/com/example/springhw32/service/UserService.java index 8badccf..d261e53 100644 --- a/src/main/java/com/example/springhw32/service/UserService.java +++ b/src/main/java/com/example/springhw32/service/UserService.java @@ -1,5 +1,22 @@ package com.example.springhw32.service; +import com.example.springhw32.dto.UserDto; +import com.example.springhw32.entity.User; +import com.example.springhw32.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +@RequiredArgsConstructor +@Service public class UserService { + private final UserRepository userRepository; + + public UserDto join(UserDto userDto){ + User user = new User(); + user.setUsername(userDto.getUsername()); + user.setNickname(userDto.getNickname()); + user.setPassword(userDto.getPassword()); + userRepository.save(user); + return userDto; + } }