Skip to content

Commit

Permalink
Feat: 게시글 조회 api 구현 (#57)
Browse files Browse the repository at this point in the history
* #54 - refactor: 단순 패키지 위치 변경

* #54 - feat: 게시글 id로 게시글 조회 구현

* #54 - test: 게시글 조회 테스트 구현
  • Loading branch information
GGHDMS authored Jan 31, 2024
1 parent 1495c2e commit 12f20e5
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package cotato.bookitlist.post.controller;

import cotato.bookitlist.config.security.jwt.AuthDetails;
import cotato.bookitlist.post.dto.PostRegisterRequest;
import cotato.bookitlist.post.dto.PostUpdateRequest;
import cotato.bookitlist.post.dto.requeset.PostRegisterRequest;
import cotato.bookitlist.post.dto.requeset.PostUpdateRequest;
import cotato.bookitlist.post.dto.response.PostResponse;
import cotato.bookitlist.post.service.PostService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -47,4 +48,11 @@ public ResponseEntity<Void> updatePost(
return ResponseEntity.ok().build();
}

@GetMapping("/{post-id}")
public ResponseEntity<PostResponse> getPost(
@PathVariable("post-id") Long postId
) {
return ResponseEntity.ok(PostResponse.from(postService.getPost(postId)));
}

}
26 changes: 26 additions & 0 deletions src/main/java/cotato/bookitlist/post/dto/PostDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package cotato.bookitlist.post.dto;

import cotato.bookitlist.post.domain.Post;

public record PostDto(
Long postId,
Long memberId,
Long bookId,
String title,
String content,
int likeCount,
int viewCount
) {

public static PostDto from(Post entity) {
return new PostDto(
entity.getId(),
entity.getMember().getId(),
entity.getBook().getId(),
entity.getTitle(),
entity.getContent(),
entity.getLikeCount(),
entity.getViewCount()
);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cotato.bookitlist.post.dto;
package cotato.bookitlist.post.dto.requeset;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package cotato.bookitlist.post.dto;
package cotato.bookitlist.post.dto.requeset;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package cotato.bookitlist.post.dto.response;

import cotato.bookitlist.post.dto.PostDto;

public record PostResponse(
Long postId,
Long memberId,
Long bookId,
String title,
String content,
int likeCount,
int viewCount
) {

public static PostResponse from(PostDto dto) {
return new PostResponse(
dto.postId(),
dto.memberId(),
dto.bookId(),
dto.title(),
dto.content(),
dto.likeCount(),
dto.viewCount()
);
}
}
10 changes: 8 additions & 2 deletions src/main/java/cotato/bookitlist/post/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
import cotato.bookitlist.member.domain.Member;
import cotato.bookitlist.member.repository.MemberRepository;
import cotato.bookitlist.post.domain.Post;
import cotato.bookitlist.post.dto.PostRegisterRequest;
import cotato.bookitlist.post.dto.PostUpdateRequest;
import cotato.bookitlist.post.dto.PostDto;
import cotato.bookitlist.post.dto.requeset.PostRegisterRequest;
import cotato.bookitlist.post.dto.requeset.PostUpdateRequest;
import cotato.bookitlist.post.repository.PostRepository;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -41,4 +42,9 @@ public void updatePost(Long postId, PostUpdateRequest request, Long memberId) {

post.updatePost(member, request.title(), request.content());
}

public PostDto getPost(Long postId) {
return PostDto.from(postRepository.findById(postId)
.orElseThrow(() -> new EntityNotFoundException("게시글을 찾을 수 없습니다.")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import cotato.bookitlist.annotation.WithCustomMockUser;
import cotato.bookitlist.post.dto.PostRegisterRequest;
import cotato.bookitlist.post.dto.PostUpdateRequest;
import cotato.bookitlist.post.dto.requeset.PostRegisterRequest;
import cotato.bookitlist.post.dto.requeset.PostUpdateRequest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
Expand All @@ -18,8 +18,7 @@

import java.util.List;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand Down Expand Up @@ -157,5 +156,28 @@ private static List<PostUpdateRequest> provideInvalidPostUpdateRequest() {
);
}

@Test
@DisplayName("게시글을 조회한다.")
void givenPostId_whenGettingPost_thenPostResponse() throws Exception {
//given

//when & then
mockMvc.perform(get("/posts/1")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
;
}

@Test
@DisplayName("없는 게시글 id로 조회하면 에러를 반환한다.")
void givenNonExistedPostId_whenGettingPost_thenErrorResponse() throws Exception {
//given

//when & then
mockMvc.perform(get("/posts/10")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound())
;
}
}

0 comments on commit 12f20e5

Please sign in to comment.