-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[신윤섭] 3차 과제 제출 #12
base: develop
Are you sure you want to change the base?
[신윤섭] 3차 과제 제출 #12
Conversation
- key 값이 공유 되지 않도록 application.properties 제외
- SaveSinglePostRequest.java - SavePostsByExcelRequest.java
- id를 기반으로 게시글 생성 - request dto을 record로 변경 시 생긴 코드 수정 반영
- AUTO -> IDENTITY
- JdbcTemplate를 이용한 Batch Insert
- id를 기반으로 게시글 조회 및 영속성 컨텍스트 이용한 조회수 증가
- 오타 수정 및 직관적인 네이밍 반영
- likes를 기반으로한 Pageable 정렬 기능 추가 위함
- 페이지네이션과 추가 기능(현재, 전체 페이지 수) 구현 - likes 값에 따른 DESC 정렬
- 메서드명을 더 정확하게 수정 - URI 경로를 RESTful 원칙에 맞게 수정 - /search → /{id} - /single → / - /delete → /{id}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굿굿 너무 고생하셨습니다!
윤섭닙도 같이 동시성 문제, 인덱싱, 조회 최적화 쪽으로 파보셨으면 좋겠습니다!
page.getTotalPages(), | ||
page.getTotalElements() | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 이렇게 따로 PageResponse를 만들어서 사용하시는군요!
맨날 Page 응답하면 Warning 뜨던데 이렇게 처리하면 좋을 거 같네요! 배워갑니다
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; | ||
|
||
@NonNull |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@NonNull
을 필드와 생성자에서 모두 사용하시는 군요!
생성자에 붙이면 lombok이 처리해줄텐데 중복되는 느낌으로 필드에도 붙여주신 이유가 있을까요?
이 부분에서 @Column(nullable=false)
대신 @NonNull
을 붙이신 이유가 궁금합니다!
return new Post(title, content, name, VIEWS_INIT_VALUE, LIKES_INIT_VALUE); | ||
}) | ||
.toList(); | ||
postJdbcRepository.saveAllPost(posts); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우왁 그레잇.,.,
} catch (Exception e) { | ||
log.error("Failed to save single post", e); | ||
throw ApiException.from(INTERNAL_SERVER_ERROR); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분에서 try catch예외처리를 해주신 이유가 궁급합니다!
@Override | ||
public PostDto findPostById(Long id) { | ||
try { | ||
Post findPost = postRepository.findById(id).orElseThrow(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시 여기서 orElseThrow에서 어떤 예외를 던질지 명시해주지 않은 이유가 있으신가요!?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드가 일관성 있으면서 보기에 좋은것같아요! 많이 배워갑니다 💯
@Builder | ||
public record PostDto(@NonNull String title, @NonNull String content, @NonNull String name, int views, int likes) { | ||
|
||
public static PostDto from(Post post) { | ||
return new PostDto(post.getTitle(), post.getContent(), post.getName(), post.getViews(), post.getLikes()); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
레코드에 빌더를 쓰니까 더 코드가 깔끔해지네요! 저도 사용해봐야겠어요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
예외도 꼼꼼히 처리하신거같아요 👍
private final static int VIEWS_INIT_VALUE = 0; | ||
private final static int LIKES_INIT_VALUE = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍
import cotato.backend.domains.post.dto.request.SavePostsByExcelRequest; | ||
import cotato.backend.domains.post.dto.request.SaveSinglePostRequest; | ||
|
||
public interface PostService { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PostService 로 PostServiceImpl 을 한번 감싼 형태의 구조를 채택하신 이유가 궁금합니다!
Post API 구현 체크리스트 및 API 명세
1. Post 엔티티 설계 및 구현
2. 게시글 단일 생성 기능
POST /api/posts
3. 게시글 다중 생성 기능 (엑셀)
POST /api/posts/excel
4. 게시글 조회 기능
GET /api/posts/{id}
5. 게시글 목록 조회 기능
GET /api/posts
6. 게시글 삭제 기능
DELETE /api/posts/{id}
고민되는 점
Pageable
도 한 번 더 살펴볼 필요가 있을 것 같다.