Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/java/io/sparta/board/BoardApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//수정
@SpringBootApplication
public class BoardApplication {

Expand Down
9 changes: 9 additions & 0 deletions src/main/java/io/sparta/board/config/JpaConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.sparta.board.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}
49 changes: 49 additions & 0 deletions src/main/java/io/sparta/board/controller/CommentController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.sparta.board.controller;

import io.sparta.board.dto.request.CommentCreateRequestDto;
import io.sparta.board.dto.request.CommentUpdateRequestDto;
import io.sparta.board.dto.response.CommentDetailResponseDto;
import io.sparta.board.service.CommentService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class CommentController {

private final CommentService commentService;

@PostMapping("/posts/{postId}/comments")
public ResponseEntity<CommentDetailResponseDto> createComment(
@PathVariable UUID postId,
@RequestBody CommentCreateRequestDto dto
) {
return ResponseEntity.ok(commentService.createComment(postId, dto));
}

@GetMapping("/posts/{postId}/comments")
public ResponseEntity<List<CommentDetailResponseDto>> getCommentsByPost(
@PathVariable UUID postId
) {
return ResponseEntity.ok(commentService.getCommentsByPost(postId));
}

@PutMapping("/comments/{commentId}")
public ResponseEntity<CommentDetailResponseDto> updateComment(
@PathVariable UUID commentId,
@RequestBody CommentUpdateRequestDto dto
) {
return ResponseEntity.ok(commentService.updateComment(commentId, dto));
}

@DeleteMapping("/comments/{commentId}")
public ResponseEntity<Void> deleteComment(@PathVariable UUID commentId) {
commentService.deleteComment(commentId);
return ResponseEntity.noContent().build();
}
}
51 changes: 51 additions & 0 deletions src/main/java/io/sparta/board/controller/PostController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.sparta.board.controller;

import io.sparta.board.dto.request.PostCreateRequestDto;
import io.sparta.board.dto.request.PostUpdateRequestDto;
import io.sparta.board.dto.response.PostDetailResponseDto;
import io.sparta.board.service.PostService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.UUID;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/posts")
public class PostController {

private final PostService postService;

@GetMapping("/{id}")
public ResponseEntity<PostDetailResponseDto> getPost(@PathVariable UUID id) {
return ResponseEntity.ok(postService.getPost(id));
}

@GetMapping
public ResponseEntity<List<PostDetailResponseDto>> getAllPosts() {
return ResponseEntity.ok(postService.getAllPosts());
}

@PostMapping
public ResponseEntity<PostDetailResponseDto> createPost(@RequestBody PostCreateRequestDto dto) {
return ResponseEntity.ok(postService.createPost(dto));
}

@PutMapping("/{id}")
public ResponseEntity<PostDetailResponseDto> updatePost(
@PathVariable UUID id,
@RequestBody PostUpdateRequestDto dto
) {
return ResponseEntity.ok(postService.updatePost(id, dto));
}

@DeleteMapping("/{id}")
public ResponseEntity<Void> deletePost(@PathVariable UUID id) {
postService.deletePost(id);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.sparta.board.dto.request;

import lombok.Getter;

@Getter
public class CommentCreateRequestDto {
private String content;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.sparta.board.dto.request;

import lombok.Getter;

@Getter
public class CommentUpdateRequestDto {
private String content;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.sparta.board.dto.request;

import lombok.Getter;

@Getter
public class PostCreateRequestDto {
private String title;
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.sparta.board.dto.request;

import lombok.Getter;

@Getter
public class PostUpdateRequestDto {
private String title;
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.sparta.board.dto.response;

import io.sparta.board.entity.Comment;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.UUID;

@Getter
public class CommentDetailResponseDto {
private UUID id;
private String content;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;

public CommentDetailResponseDto(Comment comment) {
this.id = comment.getId();
this.content = comment.getContent();
this.createdAt = comment.getCreatedAt();
this.updatedAt = comment.getUpdatedAt();
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.sparta.board.dto.response;

import io.sparta.board.entity.Post;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.UUID;

@Getter
public class PostDetailResponseDto {
private UUID id;
private String title;
private String content;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;

public PostDetailResponseDto(Post post) {
this.id = post.getId();
this.title = post.getTitle();
this.content = post.getContent();
this.createdAt = post.getCreatedAt();
this.updatedAt = post.getUpdatedAt();
}
}
25 changes: 25 additions & 0 deletions src/main/java/io/sparta/board/entity/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.sparta.board.entity;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

@CreatedDate
@Column(nullable = false, updatable = false)
private LocalDateTime createdAt;

@LastModifiedDate
@Column(nullable = false)
private LocalDateTime updatedAt;
}
47 changes: 47 additions & 0 deletions src/main/java/io/sparta/board/entity/Comment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package io.sparta.board.entity;

import jakarta.persistence.*;
import lombok.*;

import java.util.UUID;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "p_comment")
public class Comment extends BaseEntity {

@Id
@GeneratedValue
@Column(name = "comment_id", nullable = false, updatable = false)
private UUID id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="post_id", nullable=false)
private Post post;

@Column(nullable = false)
private String content;

@Column(nullable = false)
private boolean deleted = false;

public void update(String content) {
this.content = content;
}

public void softDelete() {
this.deleted = true;
}

public static Comment toEntity(Post post, String content) {
return Comment.builder()
.post(post)
.content(content)
.deleted(false)
.build();
}
}
49 changes: 49 additions & 0 deletions src/main/java/io/sparta/board/entity/Post.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.sparta.board.entity;

import io.sparta.board.dto.request.PostCreateRequestDto;
import jakarta.persistence.*;
import lombok.*;

import java.util.UUID;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "p_post")
public class Post extends BaseEntity {

@Id
@Column(name = "post_id", nullable = false)
@GeneratedValue
private UUID id;

@Column(nullable = false, length = 100)
private String title;

@Column(nullable = false)
private String content;

@Column(nullable = false)
private boolean deleted = false;

public static Post toEntity(PostCreateRequestDto dto) {
return Post.builder()
.title(dto.getTitle())
.content(dto.getContent())
.deleted(false)
.build();
}

public void update(String title, String content) {
this.title = title;
this.content = content;
}

public void softDelete() {
this.deleted = true;
}

}
12 changes: 12 additions & 0 deletions src/main/java/io/sparta/board/repository/CommentRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.sparta.board.repository;

import io.sparta.board.entity.Comment;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.UUID;

public interface CommentRepository extends JpaRepository<Comment, UUID> {
List<Comment> findAllByPostIdAndDeletedFalse(UUID postId);
}

15 changes: 15 additions & 0 deletions src/main/java/io/sparta/board/repository/PostRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.sparta.board.repository;

import io.sparta.board.entity.Post;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

public interface PostRepository extends JpaRepository<Post, UUID> {

List<Post> findAllByDeletedFalse();
Optional<Post> findByIdAndDeletedFalse(UUID id);

}
Loading