Skip to content
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## TODO List
- [o] 게시글 생성 API 구현
- [o] 게시글 수정 API 구현
-[ ] 존재하지 않는 게시글 수정 요청 시 예외 처리
-[o] 게시글 수정 서비스 구현
- [ ] 게시글 삭제 API 구현
- [ ] 게시글 삭제 시 예외 케이스 구현
- [ ] 게시글이 이미 삭제된 경우 예외 처리
- [ ] 존재하지 않는 게시글 삭제 요청 시 예외 처리
- [ ] 게시글 삭제 서비스 구현
- [ ] 게시글 조회 API 구현
- [ ] 존재하지 않는 게시글 조회 요청 시 예외 처리
- [ ] 게시글 조회 서비스 구현
- --------------------------------------------------------------
- [ ] 댓글 생성 API 구현
- [ ] 댓글 수정 API 구현
-[ ] 존재하지 않는 댓글 수정 요청 시 예외 처리
-[ ] 댓글 수정 서비스 구현
- [ ] 댓글 삭제 API 구현
- [ ] 댓글 삭제 시 예외 케이스 구현
- [ ] 댓글이 이미 삭제된 경우 예외 처리
- [ ] 존재하지 않는 댓글 삭제 요청 시 예외 처리
- [ ] 댓글 삭제 서비스 구현
- [ ] 댓글 조회 API 구현
- [ ] 존재하지 않는 댓글 조회 요청 시 예외 처리
- [ ] 댓글 조회 서비스 구현
...
---

## 구현 시 어렵거나 이해가 되지 않는 부분
- 수정시에 수정 메서드를 어디에 구현해야 할지 모르겠다
-
-
2 changes: 2 additions & 0 deletions src/main/java/io/sparta/board/BoardApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/io/sparta/board/application/CommentService.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
36 changes: 36 additions & 0 deletions src/main/java/io/sparta/board/application/PostService.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
49 changes: 49 additions & 0 deletions src/main/java/io/sparta/board/domain/Comment.java
Original file line number Diff line number Diff line change
@@ -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;
}
55 changes: 55 additions & 0 deletions src/main/java/io/sparta/board/domain/Post.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Comment, UUID> {

}
10 changes: 10 additions & 0 deletions src/main/java/io/sparta/board/infrastructure/PostRepository.java
Original file line number Diff line number Diff line change
@@ -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<Post, UUID> {


}
26 changes: 26 additions & 0 deletions src/main/java/io/sparta/board/presentaion/CommentController.java
Original file line number Diff line number Diff line change
@@ -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<String> createComment(@RequestBody Comment comment) {

commentService.save(comment);
return ResponseEntity.ok("생성");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.sparta.board.presentaion;

public class CommentRequestDto {

}
39 changes: 39 additions & 0 deletions src/main/java/io/sparta/board/presentaion/PostController.java
Original file line number Diff line number Diff line change
@@ -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<PostResponseDto> 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));
}
}
12 changes: 12 additions & 0 deletions src/main/java/io/sparta/board/presentaion/PostRequestDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.sparta.board.presentaion;

import lombok.Getter;

@Getter
public class PostRequestDto {

private String title;

private String content;

}
43 changes: 43 additions & 0 deletions src/main/java/io/sparta/board/presentaion/PostResponseDto.java
Original file line number Diff line number Diff line change
@@ -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();
}
}