Skip to content

Commit

Permalink
Merge pull request #24 from kookmin-sw/BE_Feature/#22-comment
Browse files Browse the repository at this point in the history
  • Loading branch information
wjdwlghks authored Apr 20, 2024
2 parents 3896b63 + cbbf06b commit d4eb1d8
Show file tree
Hide file tree
Showing 11 changed files with 185 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.project.capstone.comment.controller;

import com.project.capstone.auth.domain.PrincipalDetails;
import com.project.capstone.comment.controller.dto.CommentResponse;
import com.project.capstone.comment.controller.dto.CreateCommentRequest;
import com.project.capstone.comment.service.CommentService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

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

private final CommentService commentService;

@PostMapping("create")
public ResponseEntity<?> createComment(@AuthenticationPrincipal PrincipalDetails details,
@RequestParam Long postId, @RequestBody CreateCommentRequest request) {
commentService.createPost(details.getUserId(), postId, request);
return ResponseEntity.ok().body("댓글 생성 완료");
}

@GetMapping("/{id}")
public ResponseEntity<?> getComment(@AuthenticationPrincipal PrincipalDetails details,
@PathVariable Long id) {
CommentResponse commentResponse = commentService.getComment(details.getUserId(), id);
return ResponseEntity.ok().body(commentResponse);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.project.capstone.comment.controller.dto;

import com.project.capstone.comment.domain.Comment;

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

public record CommentResponse(
Long id,
Long postId,
UUID memberId,
String body,
LocalDateTime createdAt
) {
public CommentResponse(Comment comment) {
this(comment.getId(), comment.getPost().getId(), comment.getMember().getId(), comment.getBody(), comment.getCreatedAt());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.project.capstone.comment.controller.dto;

public record CreateCommentRequest (
String body
) {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.project.capstone.comment.domain;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.project.capstone.member.domain.Member;
import com.project.capstone.post.domain.Post;
import jakarta.persistence.*;
Expand Down Expand Up @@ -27,9 +28,11 @@ public class Comment {
@Column(name = "created_at")
private LocalDateTime createdAt;

@JsonBackReference
@ManyToOne
private Member member;

@JsonBackReference
@ManyToOne
private Post post;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.project.capstone.comment.domain;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface CommentRepository extends JpaRepository<Comment, Long> {
Optional<Comment> findCommentById(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.project.capstone.comment.exception;

import com.project.capstone.common.exception.BaseException;
import com.project.capstone.common.exception.ExceptionType;

public class CommentException extends BaseException {
public CommentException(ExceptionType exceptionType) {
super(exceptionType);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.project.capstone.comment.exception;

import com.project.capstone.common.exception.ExceptionType;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;

import static org.springframework.http.HttpStatus.NOT_FOUND;

@AllArgsConstructor
public enum CommentExceptionType implements ExceptionType {
COMMENT_NOT_FOUND(NOT_FOUND, 501, "해당 댓글을 찾을 수 없습니다.");
;

private final HttpStatus status;
private final int exceptionCode;
private final String message;

@Override
public HttpStatus httpStatus() {
return status;
}

@Override
public int exceptionCode() {
return exceptionCode;
}

@Override
public String message() {
return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.project.capstone.comment.service;

import com.project.capstone.comment.controller.dto.CommentResponse;
import com.project.capstone.comment.controller.dto.CreateCommentRequest;
import com.project.capstone.comment.domain.Comment;
import com.project.capstone.comment.domain.CommentRepository;
import com.project.capstone.comment.exception.CommentException;
import com.project.capstone.member.domain.Member;
import com.project.capstone.member.domain.MemberRepository;
import com.project.capstone.member.exception.MemberException;
import com.project.capstone.post.domain.Post;
import com.project.capstone.post.domain.PostRepository;
import com.project.capstone.post.exception.PostException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.UUID;

import static com.project.capstone.comment.exception.CommentExceptionType.COMMENT_NOT_FOUND;
import static com.project.capstone.member.exception.MemberExceptionType.MEMBER_NOT_FOUND;
import static com.project.capstone.post.exception.PostExceptionType.POST_NOT_FOUND;

@Service
@RequiredArgsConstructor
@Slf4j
public class CommentService {

private final CommentRepository commentRepository;
private final MemberRepository memberRepository;
private final PostRepository postRepository;

public void createPost(String userId, Long postId, CreateCommentRequest request) {
Member member = memberRepository.findMemberById(UUID.fromString(userId)).orElseThrow(
() -> new MemberException(MEMBER_NOT_FOUND)
);

Post post = postRepository.findPostById(postId).orElseThrow(
() -> new PostException(POST_NOT_FOUND)
);

Comment saved = commentRepository.save(Comment.builder()
.body(request.body())
.member(member)
.post(post)
.build());

member.getComments().add(saved);
post.getComments().add(saved);
}


public CommentResponse getComment(String userId, Long id) {
if (memberRepository.findMemberById(UUID.fromString(userId)).isEmpty()) {
throw new MemberException(MEMBER_NOT_FOUND);
}
Comment comment = commentRepository.findCommentById(id).orElseThrow(
() -> new CommentException(COMMENT_NOT_FOUND)
);
return new CommentResponse(comment);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
@RequiredArgsConstructor
@RequestMapping("/member")
public class MemberController {

@GetMapping("/test")
public ResponseEntity<?> test() {
return ResponseEntity.ok("ok");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.project.capstone.member.domain;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.project.capstone.auth.controller.dto.SignupRequest;
import com.project.capstone.comment.domain.Comment;
import com.project.capstone.memberclub.domain.MemberClub;
Expand Down Expand Up @@ -38,15 +39,19 @@ public class Member {
@Column(name = "created_at")
private LocalDateTime createdAt;

@JsonManagedReference
@OneToMany(mappedBy = "member")
private List<MemberClub> clubs = new ArrayList<>();

@JsonManagedReference
@OneToMany(mappedBy = "member")
private List<Post> posts = new ArrayList<>();

@JsonManagedReference
@OneToMany(mappedBy = "member")
private List<Comment> comments = new ArrayList<>();

@JsonManagedReference
@OneToMany(mappedBy = "member")
private List<Content> contents = new ArrayList<>();

Expand Down
7 changes: 7 additions & 0 deletions backend/src/main/resources/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,10 @@ insert into member_club (id, member_id, club_id) values

insert into post (id, club_id, member_id, title, body, created_at, is_sticky) values
(1, 1, UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")), '게시글 제목 1', '게시글 내용 1', '2023-05-26 15:48:57.450179', true);

insert into comment (id, post_id, member_id, body, created_at) values
(1, 1, UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")), "댓글 1", "2023-05-26 15:48:57.450179");
insert into comment (id, post_id, member_id, body, created_at) values
(2, 1, UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")), "댓글 2", "2023-05-26 15:48:57.450179");
insert into comment (id, post_id, member_id, body, created_at) values
(3, 1, UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")), "댓글 3", "2023-05-26 15:48:57.450179");

0 comments on commit d4eb1d8

Please sign in to comment.