diff --git a/src/main/java/com/example/springhw32/controller/CommentController.java b/src/main/java/com/example/springhw32/controller/CommentController.java index 0ee065d..b67d55a 100644 --- a/src/main/java/com/example/springhw32/controller/CommentController.java +++ b/src/main/java/com/example/springhw32/controller/CommentController.java @@ -1,5 +1,27 @@ package com.example.springhw32.controller; +import com.example.springhw32.dto.CommentDto; +import com.example.springhw32.service.CommentService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/posts") public class CommentController { + private final CommentService commentService; + + //댓글 작성 + @PostMapping("/comments") + public CommentDto addComment(@ModelAttribute CommentDto commentDto, @RequestParam Long postId) { + return commentService.addComment(commentDto, postId); + } + //특정 게시물에 달린 모든 댓글 조회 + @GetMapping("/comments/postid") + public List getCommentByPostId(@PathVariable Long postId) { + return commentService.getCommentByPostId(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..1956a70 100644 --- a/src/main/java/com/example/springhw32/controller/PostController.java +++ b/src/main/java/com/example/springhw32/controller/PostController.java @@ -1,5 +1,40 @@ package com.example.springhw32.controller; +import com.example.springhw32.dto.PostDto; +import com.example.springhw32.service.PostService; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/posts") public class PostController { + private final PostService postService; + + //글작성 + @PostMapping("") + public PostDto save(@ModelAttribute PostDto postDto, Long userId) { + return postService.save(postDto, userId); + } + + //최신순으로 글 조회 + @GetMapping("") + public List findAllByOrderByCreatedAtDesc() { + return postService.findAllByOrderByCreatedAtDesc(); + } + + //작성자 글 조회 + @GetMapping("/{writer}") + public List findAllByWriter(@PathVariable("writer") Long userId) { + return postService.findAllByWriter(userId); + } + //댓글 많은 순 조회 + @GetMapping("/comments") + public List findAllByOrderByCommentNumberDesc() { + return postService.findAllByOrderByCommentNumberDesc(); + } } diff --git a/src/main/java/com/example/springhw32/controller/UserController.java b/src/main/java/com/example/springhw32/controller/UserController.java index 3b321ac..b1a2814 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; -public class UserController { +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.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +@RestController +@RequiredArgsConstructor +public class UserController { + private final UserService userService; + //회원가입 + @PostMapping("/users") + public UserDto signup(@ModelAttribute UserDto userDto) { + return userService.signup(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..725cc43 100644 --- a/src/main/java/com/example/springhw32/dto/CommentDto.java +++ b/src/main/java/com/example/springhw32/dto/CommentDto.java @@ -1,5 +1,11 @@ package com.example.springhw32.dto; -public class CommentDto { +import com.example.springhw32.entity.Post; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter +public class CommentDto { + 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..58cd75c 100644 --- a/src/main/java/com/example/springhw32/dto/PostDto.java +++ b/src/main/java/com/example/springhw32/dto/PostDto.java @@ -1,5 +1,16 @@ package com.example.springhw32.dto; -public class PostDto { +import com.example.springhw32.entity.User; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; +@Getter +@Setter +public class PostDto { + private String title; + private String content; + private LocalDateTime createdAt; + private int commentNumber; } diff --git a/src/main/java/com/example/springhw32/dto/UserDto.java b/src/main/java/com/example/springhw32/dto/UserDto.java index cbbbe2e..f71ccd4 100644 --- a/src/main/java/com/example/springhw32/dto/UserDto.java +++ b/src/main/java/com/example/springhw32/dto/UserDto.java @@ -1,5 +1,11 @@ package com.example.springhw32.dto; -public class UserDto { +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter +public class UserDto { + private String username; + private String password; } diff --git a/src/main/java/com/example/springhw32/entity/Comment.java b/src/main/java/com/example/springhw32/entity/Comment.java index be818a0..dda7ff4 100644 --- a/src/main/java/com/example/springhw32/entity/Comment.java +++ b/src/main/java/com/example/springhw32/entity/Comment.java @@ -1,5 +1,21 @@ package com.example.springhw32.entity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.apache.catalina.users.GenericRole; + +@Entity +@Getter +@Setter public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long Id; + + @ManyToOne + private Post post; + + 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..b108bcb 100644 --- a/src/main/java/com/example/springhw32/entity/Post.java +++ b/src/main/java/com/example/springhw32/entity/Post.java @@ -1,5 +1,30 @@ package com.example.springhw32.entity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Entity +@Getter +@Setter public class Post { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long Id; + + @ManyToOne + private User user; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String content; + + private int commentNumber; + + 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..7274db0 100644 --- a/src/main/java/com/example/springhw32/entity/User.java +++ b/src/main/java/com/example/springhw32/entity/User.java @@ -1,5 +1,21 @@ package com.example.springhw32.entity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Getter +@Setter public class User { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long Id; + + @Column(nullable = false, unique = true) + private String username; + + @Column(nullable = false) + private String password; } diff --git a/src/main/java/com/example/springhw32/repository/CommentRepository.java b/src/main/java/com/example/springhw32/repository/CommentRepository.java index 83dcd99..321fd87 100644 --- a/src/main/java/com/example/springhw32/repository/CommentRepository.java +++ b/src/main/java/com/example/springhw32/repository/CommentRepository.java @@ -1,5 +1,10 @@ package com.example.springhw32.repository; -public interface CommentRepository { +import com.example.springhw32.entity.Comment; +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +public interface CommentRepository extends JpaRepository { + public 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..5fe63f2 100644 --- a/src/main/java/com/example/springhw32/repository/PostRepository.java +++ b/src/main/java/com/example/springhw32/repository/PostRepository.java @@ -1,5 +1,12 @@ package com.example.springhw32.repository; -public interface PostRepository { +import com.example.springhw32.entity.Post; +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +public interface PostRepository extends JpaRepository { + public List findAllByOrderByCreatedAtDesc(); + public List findAllByUserId(Long userId); + public List findAllByOrderByCommentNumberDesc(); } diff --git a/src/main/java/com/example/springhw32/repository/UserRepository.java b/src/main/java/com/example/springhw32/repository/UserRepository.java index 877a215..ae8c6b0 100644 --- a/src/main/java/com/example/springhw32/repository/UserRepository.java +++ b/src/main/java/com/example/springhw32/repository/UserRepository.java @@ -1,5 +1,9 @@ package com.example.springhw32.repository; -public interface UserRepository { +import com.example.springhw32.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + +public interface UserRepository extends JpaRepository { } diff --git a/src/main/java/com/example/springhw32/service/CommentService.java b/src/main/java/com/example/springhw32/service/CommentService.java index ec0c937..afd4e73 100644 --- a/src/main/java/com/example/springhw32/service/CommentService.java +++ b/src/main/java/com/example/springhw32/service/CommentService.java @@ -1,5 +1,47 @@ package com.example.springhw32.service; +import com.example.springhw32.dto.CommentDto; +import com.example.springhw32.entity.Comment; +import com.example.springhw32.entity.Post; +import com.example.springhw32.repository.CommentRepository; +import com.example.springhw32.repository.PostRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor public class CommentService { + private final CommentRepository commentRepository; + private final PostRepository postRepository; + + //댓글 작성 + public CommentDto addComment(CommentDto commentDto, Long postId) { + Post post = postRepository.findById(postId).orElseThrow(); + + Comment comment = new Comment(); + comment.setPost(post); + comment.setText(commentDto.getText()); + commentRepository.save(comment); + + post.setCommentNumber(post.getCommentNumber() + 1); + postRepository.save(post); + + return commentDto; + } + + //특정 개시물에 달린 모든 댓글 조회 + public List getCommentByPostId(Long postId) { + List commentDtos = commentRepository.findAllByPostId(postId).stream() + .map(this::EntityToDto).collect(Collectors.toList()); + return commentDtos; + } + private CommentDto EntityToDto(Comment comment) { + CommentDto commentDto = new CommentDto(); + commentDto.setText(comment.getText()); + return commentDto; + } } diff --git a/src/main/java/com/example/springhw32/service/PostService.java b/src/main/java/com/example/springhw32/service/PostService.java index b029d55..07cc2e0 100644 --- a/src/main/java/com/example/springhw32/service/PostService.java +++ b/src/main/java/com/example/springhw32/service/PostService.java @@ -1,5 +1,63 @@ package com.example.springhw32.service; +import com.example.springhw32.dto.PostDto; +import com.example.springhw32.entity.Post; +import com.example.springhw32.repository.PostRepository; +import com.example.springhw32.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PostMapping; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor public class PostService { + private final PostRepository postRepository; + private final UserRepository userRepository; + + //글 작성 + public PostDto save(PostDto postDto, Long userId) { + Post post = new Post(); + post.setTitle(postDto.getTitle()); + post.setContent(postDto.getContent()); + post.setUser(userRepository.findById(userId).orElse(null)); + post.setCommentNumber(0); + post.setCreatedAt(LocalDateTime.now()); + postRepository.save(post); + return postDto; + } + + //최신순으로 글 조회 + public List findAllByOrderByCreatedAtDesc() { + List postDtos = postRepository.findAllByOrderByCreatedAtDesc().stream() + .map(this::EntityToDto).collect(Collectors.toList()); + return postDtos; + } + + //특정 회원이 작성한 글 조회 + public List findAllByWriter(Long userId) { + List postDtos = postRepository.findAllByUserId(userId).stream() + .map(this::EntityToDto).collect(Collectors.toList()); + return postDtos; + } + + //댓글이 많은 순으로 정렬 조회 + public List findAllByOrderByCommentNumberDesc() { + List postDtos = postRepository.findAllByOrderByCommentNumberDesc().stream() + .map(this::EntityToDto).collect(Collectors.toList()); + return postDtos; + } + private PostDto EntityToDto(Post post) { + PostDto postDto = new PostDto(); + postDto.setTitle(post.getTitle()); + postDto.setContent(post.getContent()); + postDto.setCreatedAt(post.getCreatedAt()); + postDto.setCommentNumber(post.getCommentNumber()); + return postDto; + } } diff --git a/src/main/java/com/example/springhw32/service/UserService.java b/src/main/java/com/example/springhw32/service/UserService.java index 8badccf..6672aef 100644 --- a/src/main/java/com/example/springhw32/service/UserService.java +++ b/src/main/java/com/example/springhw32/service/UserService.java @@ -1,5 +1,23 @@ 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; + +@Service +@RequiredArgsConstructor public class UserService { + private final UserRepository userRepository; + //회원가입 + public UserDto signup(UserDto userDto) { + User user = new User(); + user.setUsername(userDto.getUsername()); + user.setPassword(userDto.getPassword()); + userRepository.save(user); + return userDto; + } + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9b78d0c..5f39bc2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 - username: your_username - password: your_password + url: jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 + username: root + password: na58745874@ driver-class-name: com.mysql.cj.jdbc.Driver jpa: