728x90
체크 사항
- 회원, 비회원이 모두 볼 수 있다.
- 글의 제목, 내용, 글쓴이, 작성 날짜, 마지막 수정 날짜까지 표시한다.
Dto
PostReadResponse
@AllArgsConstructor
@NoArgsConstructor
@Getter @Builder
public class PostReadResponse {
private Integer id;
private String title;
private String body;
private String userName;
private LocalDateTime createdAt;
private LocalDateTime lastModifiedAt;
}
id, title, body, userName, createdAt, lastModifiedAt의 정보를 받아오길 바라므로, 해당 데이터를 담을 필드를 구성한 dto를 생성하였습니다.
Controller
@RequestMapping("/api/v1/posts")
@RestController
@RequiredArgsConstructor
@Slf4j
public class PostController {
private final PostService postService;
@GetMapping("/{postId}")
public Response<PostReadResponse> getPost(@PathVariable Integer postId){
log.info("postId = {}", postId);
PostReadResponse post = postService.getPost(postId);
return Response.success(post);
}
}
@pathVariable을 사용하여 postId를 받아오고 받아온 postId를 바탕으로 해당 postId를 갖고 있는 게시글의 정보를 받아올 예정입니다.
post의 정보를 잘 받아왔다면, 해당 정보를 그대로 반환합니다.
Service
@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
public PostReadResponse getPost(Integer postId) {
Post readPost = postRepository.findById(postId)
.orElseThrow(
() -> new SNSAppException(ErrorCode.POST_NOT_FOUND, "해당 페이지가 없습니다.")
);
return PostReadResponse.builder()
.id(readPost.getId())
.title(readPost.getTitle())
.body(readPost.getBody())
.userName(readPost.getUser().getUserName())
.createdAt(readPost.getCreatedAt())
.lastModifiedAt(readPost.getLastModifiedAt())
.build();
}
}
받아온 postId를 사용하여 postRepository의 findById 메서드를 실행시켜 db에서 해당 조건에 맞는 Post 정보를 받아 옵니다. 메서드를 실행시켰을 때, 받아오는 정보가 없다면 예외를 발생시킵니다.
무사히 Post 정보를 받아왔다면, PostReadResponse에 맞춰 id, title, body, userName, createdAt, lastModifiedAt 데이터를 넣어준 후 컨트롤러로 반환시킵니다.
결과
반응형
'프로젝트 > Archive' 카테고리의 다른 글
[03] 게시된 포스트 수정 (0) | 2022.12.23 |
---|---|
[03] 게시된 모든 포스트 목록 보기 (0) | 2022.12.23 |
[03] 포스트 등록 만들기 (0) | 2022.12.23 |
[03] 포스트 기능 만들기 준비 (0) | 2022.12.23 |
[02] 로그인 기능 만들기 - 2 (0) | 2022.12.21 |