From cd43ecc0975769b53b486d19022151de25e7c6a9 Mon Sep 17 00:00:00 2001
From: kkj6235 <kkj6235@ajou.ac.kr>
Date: Mon, 13 Nov 2023 13:17:28 +0900
Subject: [PATCH] feat : add Comment, Post, and User DTO classes

---
 .../board/conroller/BoardController.java      | 35 -------
 .../java/umc/spring/board/domain/Board.java   | 39 --------
 .../umc/spring/board/dto/BoardRequestDto.java | 33 -------
 .../spring/board/dto/BoardResponseDto.java    | 36 -------
 .../board/repository/BoardRepository.java     | 10 --
 .../spring/board/service/BoardService.java    |  9 --
 .../member/controller/MemberController.java   |  4 -
 .../java/umc/spring/member/domain/Member.java | 16 ---
 .../spring/member/dto/MemberRequestDto.java   |  4 -
 .../member/repository/MemberRepository.java   |  7 --
 .../spring/member/service/MemberService.java  |  4 -
 .../post/controller/PostController.java       | 33 +++++++
 .../umc/spring/post/data/dto/CommentDto.java  | 13 +++
 .../spring/post/data/dto/CommentResDto.java   | 31 ++++++
 .../umc/spring/post/data/dto/PostDto.java     | 15 +++
 .../umc/spring/post/data/dto/PostResDto.java  | 45 +++++++++
 .../umc/spring/post/data/dto/UserInfoDto.java | 14 +++
 .../umc/spring/post/data/dto/UserJoinDto.java | 10 ++
 .../spring/post/data/dto/UserLoginDto.java    |  9 ++
 .../umc/spring/post/data/entity/Post.java     | 30 ++++++
 .../post/repository/PostRepository.java       |  9 ++
 .../umc/spring/post/service/PostService.java  | 29 ++++++
 .../spring/post/service/PostServiceImpl.java  | 99 +++++++++++++++++++
 23 files changed, 337 insertions(+), 197 deletions(-)
 delete mode 100644 src/main/java/umc/spring/board/conroller/BoardController.java
 delete mode 100644 src/main/java/umc/spring/board/domain/Board.java
 delete mode 100644 src/main/java/umc/spring/board/dto/BoardRequestDto.java
 delete mode 100644 src/main/java/umc/spring/board/dto/BoardResponseDto.java
 delete mode 100644 src/main/java/umc/spring/board/repository/BoardRepository.java
 delete mode 100644 src/main/java/umc/spring/board/service/BoardService.java
 delete mode 100644 src/main/java/umc/spring/member/controller/MemberController.java
 delete mode 100644 src/main/java/umc/spring/member/domain/Member.java
 delete mode 100644 src/main/java/umc/spring/member/dto/MemberRequestDto.java
 delete mode 100644 src/main/java/umc/spring/member/repository/MemberRepository.java
 delete mode 100644 src/main/java/umc/spring/member/service/MemberService.java
 create mode 100644 src/main/java/umc/spring/post/controller/PostController.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/CommentDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/CommentResDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/PostDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/PostResDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/UserInfoDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/UserJoinDto.java
 create mode 100644 src/main/java/umc/spring/post/data/dto/UserLoginDto.java
 create mode 100644 src/main/java/umc/spring/post/data/entity/Post.java
 create mode 100644 src/main/java/umc/spring/post/repository/PostRepository.java
 create mode 100644 src/main/java/umc/spring/post/service/PostService.java
 create mode 100644 src/main/java/umc/spring/post/service/PostServiceImpl.java

diff --git a/src/main/java/umc/spring/board/conroller/BoardController.java b/src/main/java/umc/spring/board/conroller/BoardController.java
deleted file mode 100644
index c82ace7..0000000
--- a/src/main/java/umc/spring/board/conroller/BoardController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package umc.spring.board.conroller;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-import umc.spring.board.domain.Board;
-import umc.spring.board.dto.BoardRequestDto;
-import umc.spring.board.dto.BoardResponseDto;
-import umc.spring.board.repository.BoardRepository;
-
-import java.util.List;
-
-@RestController
-@RequiredArgsConstructor
-@RequestMapping("/api/posts")
-public class BoardController {
-
-    private final BoardRepository boardRepository;
-
-    @PostMapping("/upload")
-    public void upload(@RequestBody BoardRequestDto boardDto){
-        System.out.println(boardDto);
-        Board board = boardDto.toBoard();
-        boardRepository.save(board);
-    }
-
-    @GetMapping("/")
-    public List<BoardResponseDto> getPosts(){
-        return boardRepository.findAll().stream().map(BoardResponseDto::toDto).toList();
-    }
-
-    @GetMapping("/{id}")
-    public BoardResponseDto getPost(@PathVariable(name="id") Long boardId){
-        return BoardResponseDto.toDto(boardRepository.findById(boardId).orElseThrow(RuntimeException::new));
-    }
-}
diff --git a/src/main/java/umc/spring/board/domain/Board.java b/src/main/java/umc/spring/board/domain/Board.java
deleted file mode 100644
index fdf04c7..0000000
--- a/src/main/java/umc/spring/board/domain/Board.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package umc.spring.board.domain;
-
-import jakarta.persistence.*;
-import lombok.*;
-import org.hibernate.annotations.CreationTimestamp;
-import umc.spring.member.domain.Member;
-
-import java.sql.Date;
-
-@Entity
-@Getter
-@Setter
-public class Board {
-
-    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    private String title;
-
-    private String author;
-
-    private String body;
-
-    @CreationTimestamp
-    private Date date;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "member_id")
-    Member member;
-
-    protected Board(){}
-
-    @Builder
-    public Board(String title, String author, String body) {
-        this.title = title;
-        this.author = author;
-        this.body = body;
-    }
-}
diff --git a/src/main/java/umc/spring/board/dto/BoardRequestDto.java b/src/main/java/umc/spring/board/dto/BoardRequestDto.java
deleted file mode 100644
index 37e6818..0000000
--- a/src/main/java/umc/spring/board/dto/BoardRequestDto.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package umc.spring.board.dto;
-
-
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import umc.spring.board.domain.Board;
-
-@Getter
-@Setter
-public class BoardRequestDto {
-
-    private String title;
-
-    private String author;
-
-    private String body;
-
-    @Builder
-    public BoardRequestDto(String title, String author, String body) {
-        this.title = title;
-        this.author = author;
-        this.body = body;
-    }
-
-    public Board toBoard() {
-        return Board.builder()
-                .author(this.getAuthor())
-                .title(this.getTitle())
-                .body(this.getBody())
-                .build();
-    }
-}
diff --git a/src/main/java/umc/spring/board/dto/BoardResponseDto.java b/src/main/java/umc/spring/board/dto/BoardResponseDto.java
deleted file mode 100644
index 29950a4..0000000
--- a/src/main/java/umc/spring/board/dto/BoardResponseDto.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package umc.spring.board.dto;
-
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import umc.spring.board.domain.Board;
-
-@Getter
-@Setter
-public class BoardResponseDto {
-
-    private Long id;
-
-    private String title;
-
-    private String author;
-
-    private String body;
-
-    @Builder
-    public BoardResponseDto(Long id, String title, String author, String body) {
-        this.id = id;
-        this.title = title;
-        this.author = author;
-        this.body = body;
-    }
-
-    public static BoardResponseDto toDto(Board board){
-        return BoardResponseDto.builder()
-                .id(board.getId())
-                .body(board.getBody())
-                .title(board.getTitle())
-                .author(board.getAuthor())
-                .build();
-    }
-}
diff --git a/src/main/java/umc/spring/board/repository/BoardRepository.java b/src/main/java/umc/spring/board/repository/BoardRepository.java
deleted file mode 100644
index 4c9b4b7..0000000
--- a/src/main/java/umc/spring/board/repository/BoardRepository.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package umc.spring.board.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import umc.spring.board.domain.Board;
-
-import java.util.Optional;
-
-public interface BoardRepository extends JpaRepository<Board, Long> {
-    Optional<Board> findById(Long id);
-}
\ No newline at end of file
diff --git a/src/main/java/umc/spring/board/service/BoardService.java b/src/main/java/umc/spring/board/service/BoardService.java
deleted file mode 100644
index 82a99ff..0000000
--- a/src/main/java/umc/spring/board/service/BoardService.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package umc.spring.board.service;
-
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-@Service
-@Transactional(readOnly = true)
-public class BoardService {
-}
diff --git a/src/main/java/umc/spring/member/controller/MemberController.java b/src/main/java/umc/spring/member/controller/MemberController.java
deleted file mode 100644
index 29c005a..0000000
--- a/src/main/java/umc/spring/member/controller/MemberController.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package umc.spring.member.controller;
-
-public class MemberController {
-}
diff --git a/src/main/java/umc/spring/member/domain/Member.java b/src/main/java/umc/spring/member/domain/Member.java
deleted file mode 100644
index 6b22895..0000000
--- a/src/main/java/umc/spring/member/domain/Member.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package umc.spring.member.domain;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-
-@Entity
-@Getter
-public class Member {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    private String username;
-
-}
diff --git a/src/main/java/umc/spring/member/dto/MemberRequestDto.java b/src/main/java/umc/spring/member/dto/MemberRequestDto.java
deleted file mode 100644
index e7e87cd..0000000
--- a/src/main/java/umc/spring/member/dto/MemberRequestDto.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package umc.spring.member.dto;
-
-public class MemberRequestDto {
-}
diff --git a/src/main/java/umc/spring/member/repository/MemberRepository.java b/src/main/java/umc/spring/member/repository/MemberRepository.java
deleted file mode 100644
index 8d22cc9..0000000
--- a/src/main/java/umc/spring/member/repository/MemberRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package umc.spring.member.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import umc.spring.member.domain.Member;
-
-public interface MemberRepository extends JpaRepository<Long, Member> {
-}
diff --git a/src/main/java/umc/spring/member/service/MemberService.java b/src/main/java/umc/spring/member/service/MemberService.java
deleted file mode 100644
index 795b016..0000000
--- a/src/main/java/umc/spring/member/service/MemberService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package umc.spring.member.service;
-
-public class MemberService {
-}
diff --git a/src/main/java/umc/spring/post/controller/PostController.java b/src/main/java/umc/spring/post/controller/PostController.java
new file mode 100644
index 0000000..0909aca
--- /dev/null
+++ b/src/main/java/umc/spring/post/controller/PostController.java
@@ -0,0 +1,33 @@
+package com.umc.post.controller;
+
+import com.umc.post.data.dto.PostDto;
+import com.umc.post.data.entity.Post;
+import com.umc.post.service.service.PostService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/posts")
+public class PostController {
+
+    private final PostService postService;
+
+    public PostController(PostService postService) {
+        this.postService = postService;
+    }
+
+    @PostMapping("/upload")
+    public void upload(@RequestBody PostDto postDto){
+        postService.upload(postDto);
+    }
+    @GetMapping("")
+    public List<Post> getAllPost(){
+        return postService.getAllPost();
+
+    }
+    @GetMapping("/{id}")
+    public Post getPostById(@PathVariable Long id){
+        return postService.getPostById(id);
+    }
+}
diff --git a/src/main/java/umc/spring/post/data/dto/CommentDto.java b/src/main/java/umc/spring/post/data/dto/CommentDto.java
new file mode 100644
index 0000000..23567b6
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/CommentDto.java
@@ -0,0 +1,13 @@
+package umc.spring.post.data.dto;
+
+import lombok.Data;
+
+@Data
+public class CommentDto {
+
+    private Long postId;
+    private Long userId;
+    private String author;
+    private String text;
+
+}
diff --git a/src/main/java/umc/spring/post/data/dto/CommentResDto.java b/src/main/java/umc/spring/post/data/dto/CommentResDto.java
new file mode 100644
index 0000000..18e0d6a
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/CommentResDto.java
@@ -0,0 +1,31 @@
+package umc.spring.post.data.dto;
+
+import jakarta.persistence.Column;
+import lombok.Builder;
+import lombok.Data;
+import umc.spring.post.data.entity.Comment;
+import umc.spring.post.data.entity.Post;
+
+import java.util.Date;
+
+@Data
+@Builder
+public class CommentResDto {
+    private Long id;
+    private Long postId;
+    private Long userId;
+    private String author;
+    private String text;
+    private Date timestamp;
+    public static CommentResDto toDTO(Comment comment){
+
+        return CommentResDto.builder()
+                .id(comment.getId())
+                .postId(comment.getPostId())
+                .userId(comment.getUserId())
+                .author(comment.getAuthor())
+                .timestamp(comment.getTimestamp())
+                .text(comment.getText()).build();
+    }
+
+}
diff --git a/src/main/java/umc/spring/post/data/dto/PostDto.java b/src/main/java/umc/spring/post/data/dto/PostDto.java
new file mode 100644
index 0000000..0b08be5
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/PostDto.java
@@ -0,0 +1,15 @@
+package umc.spring.post.data.dto;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Data
+public class PostDto {
+    Long userId;
+    String title;
+    String author;
+    String body;
+    String image;
+    int likeCount;
+}
diff --git a/src/main/java/umc/spring/post/data/dto/PostResDto.java b/src/main/java/umc/spring/post/data/dto/PostResDto.java
new file mode 100644
index 0000000..48ef01f
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/PostResDto.java
@@ -0,0 +1,45 @@
+package umc.spring.post.data.dto;
+
+import jakarta.persistence.*;
+import lombok.*;
+import umc.spring.post.data.entity.Comment;
+import umc.spring.post.data.entity.Post;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@Builder
+public class PostResDto {
+    Long id;
+    Long userId;
+    String title;
+    String author;
+    String body;
+    String image;
+    int likeCount;
+    Date createdTime;
+    Date modifiedTime;
+    List<CommentResDto> comments;
+    public static PostResDto toDTO(Post post){
+        List<CommentResDto> resDtos = new ArrayList<>();
+        post.getComments().forEach(comment -> {
+            CommentResDto dto = CommentResDto.toDTO(comment);
+            resDtos.add(dto);
+        });
+        return PostResDto.builder()
+                .id(post.getId())
+                .userId(post.getUserId())
+                .title(post.getTitle())
+                .author(post.getAuthor())
+                .body(post.getBody())
+                .image(post.getImage())
+                .likeCount(post.getLikeCount())
+                .createdTime(post.getCreatedTime())
+                .modifiedTime(post.getModifiedTime())
+                .comments(resDtos).build();
+    }
+
+
+}
diff --git a/src/main/java/umc/spring/post/data/dto/UserInfoDto.java b/src/main/java/umc/spring/post/data/dto/UserInfoDto.java
new file mode 100644
index 0000000..bd96f34
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/UserInfoDto.java
@@ -0,0 +1,14 @@
+package umc.spring.post.data.dto;
+
+import lombok.*;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+public class UserInfoDto {
+    private String userId;
+    private String memberRole;
+
+}
\ No newline at end of file
diff --git a/src/main/java/umc/spring/post/data/dto/UserJoinDto.java b/src/main/java/umc/spring/post/data/dto/UserJoinDto.java
new file mode 100644
index 0000000..a6701bd
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/UserJoinDto.java
@@ -0,0 +1,10 @@
+package umc.spring.post.data.dto;
+
+import lombok.Data;
+
+@Data
+public class UserJoinDto {
+    private String userId;
+    private String password;
+    private String userName;
+}
\ No newline at end of file
diff --git a/src/main/java/umc/spring/post/data/dto/UserLoginDto.java b/src/main/java/umc/spring/post/data/dto/UserLoginDto.java
new file mode 100644
index 0000000..24d523d
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/dto/UserLoginDto.java
@@ -0,0 +1,9 @@
+package umc.spring.post.data.dto;
+
+import lombok.Data;
+
+@Data
+public class UserLoginDto {
+    String userId;
+    String password;
+}
diff --git a/src/main/java/umc/spring/post/data/entity/Post.java b/src/main/java/umc/spring/post/data/entity/Post.java
new file mode 100644
index 0000000..a3b743c
--- /dev/null
+++ b/src/main/java/umc/spring/post/data/entity/Post.java
@@ -0,0 +1,30 @@
+package com.umc.post.data.entity;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Entity
+@Table(name = "Post")
+@Getter @Setter
+public class Post{
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(nullable = false)
+    private Long id;
+
+    @Column(nullable = false)
+    private String title;
+
+    @Column(nullable = false)
+    private String author;
+
+    @Column(nullable = false)
+    private String body;
+
+    @Column(nullable = false)
+    private Date timestamp;
+}
diff --git a/src/main/java/umc/spring/post/repository/PostRepository.java b/src/main/java/umc/spring/post/repository/PostRepository.java
new file mode 100644
index 0000000..7d8540a
--- /dev/null
+++ b/src/main/java/umc/spring/post/repository/PostRepository.java
@@ -0,0 +1,9 @@
+package umc.spring.post.repository.repository;
+
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import umc.spring.post.data.entity.Post;
+
+public interface PostRepository extends JpaRepository<Post,Long> {
+
+}
diff --git a/src/main/java/umc/spring/post/service/PostService.java b/src/main/java/umc/spring/post/service/PostService.java
new file mode 100644
index 0000000..f24774b
--- /dev/null
+++ b/src/main/java/umc/spring/post/service/PostService.java
@@ -0,0 +1,29 @@
+package umc.spring.post.service.service;
+
+
+import umc.spring.post.data.dto.PostDto;
+import umc.spring.post.data.entity.Post;
+
+import java.util.List;
+
+public interface PostService {
+    void upload(PostDto postDto);
+
+    List<Post> getAllPost();
+
+    Post getPostById(Long id);
+
+    void likeCrew(Long id);
+
+    void dislikeCrew(Long id);
+
+    void deletePost(Long id);
+
+
+    void editPost(PostDto postDto, Long id);
+
+    List<Post> search(String title);
+
+
+    void createComment(Long id);
+}
diff --git a/src/main/java/umc/spring/post/service/PostServiceImpl.java b/src/main/java/umc/spring/post/service/PostServiceImpl.java
new file mode 100644
index 0000000..fcb0dae
--- /dev/null
+++ b/src/main/java/umc/spring/post/service/PostServiceImpl.java
@@ -0,0 +1,99 @@
+package umc.spring.post.service.service;
+
+
+import org.springframework.stereotype.Service;
+import umc.spring.post.data.dto.PostDto;
+import umc.spring.post.data.entity.Post;
+import umc.spring.post.repository.repository.PostRepository;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class PostServiceImpl implements PostService{
+
+    private final PostRepository postRepository;
+
+    public PostServiceImpl(PostRepository postRepository) {
+        this.postRepository = postRepository;
+    }
+
+    @Override
+    public void upload(PostDto postDto){
+        Post post = new Post();
+        setPost(postDto, post);
+        post.setCreatedTime((new Date()));
+        post.setModifiedTime(post.getCreatedTime());
+        postRepository.save(post);
+    }
+
+    @Override
+    public List<Post> getAllPost(){
+        return postRepository.findAll();
+    }
+
+
+    @Override
+    public Post getPostById(Long id){
+        return postRepository.findById(id).get();
+    }
+
+    @Override
+    public void likeCrew(Long id) {
+        Post post = getPostById(id);
+        int likeCount = post.getLikeCount();
+        post.setLikeCount(++likeCount);
+    }
+
+    @Override
+    public void dislikeCrew(Long id) {
+        Post post = getPostById(id);
+        int likeCount = post.getLikeCount();
+        if(likeCount!=0){
+            post.setLikeCount(--likeCount);
+        }
+    }
+
+    @Override
+    public void deletePost(Long id) {
+        postRepository.deleteById(id);
+    }
+    
+    @Override
+    public void editPost(PostDto postDto,Long id) {
+        Post post = getPostById(id);
+        setPost(postDto,post);
+        post.setModifiedTime(new Date());
+    }
+
+    @Override
+    public List<Post> search(String title) {
+        List<Post> postList = postRepository.findAll();
+        List<Post> findList = new ArrayList<>();
+
+        postList.iterator().forEachRemaining(post->{
+            if(post.getTitle().equals(title)){
+                findList.add(post);
+            }
+        });
+        return findList;
+    }
+
+    @Override
+    public void createComment(Long id) {
+
+        Post post = getPostById(id);
+
+        post.set
+
+    }
+
+    private static void setPost(PostDto postDto, Post post) {
+        post.setTitle(postDto.getTitle());
+        post.setBody(postDto.getBody());
+        post.setAuthor(postDto.getAuthor());
+        post.setLikeCount(postDto.getLikeCount());
+        post.setImage(postDto.getImage());
+    }
+}
-- 
GitLab