-
Notifications
You must be signed in to change notification settings - Fork 5
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
feature 게시판 API 초안 작성 #290
Conversation
…ountTypeByPlatform로 메서드 명 변경 * 전체 회원 대상으로 조회하는 findByMemberId 추가
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.
고생하셨습니다!!
@@ -13,7 +13,7 @@ public class AuditConfig implements AuditorAware<String> { | |||
@Override | |||
public Optional<String> getCurrentAuditor() { | |||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); | |||
String createId = Optional.ofNullable(request.getParameter("id")).orElse("admin"); | |||
String createId = Optional.ofNullable(request.getHeader("Id")).orElse("admin"); |
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.
Header 에서 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.
오 좋아요ㅎㅎ
@JoinColumn(name = "member_no", nullable = false, updatable = false) | ||
private Member member; |
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.
Member 엔티티는 변경사항이 없는 것 같은데, BBS 쪽에서만 매핑이 되어 있는 것으로 이해하면 될까요?
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.
네 글 조회, 작성시 작성자 정보가 누구인지 찾기위해 BBS쪽에만 있습니다. jpa 관점에서 이게 올바른 매핑인지는 모르겠네요
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.
하신것처럼 최대한 단방향매핑으로 처리하고 양방향은 꼭 필요할 때만 사용하라고 듣긴 했습니다
) | ||
.fetchOne(); | ||
|
||
return new PageImpl<>(bbs, pageable, totalCount); |
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.
PageableExecutionUtils
이거 사용하시면 조~금 더 최적화 된다고 합니다.
Long totalCount = queryFactory
.select(bBS.count())
.from(bBS)
.where(
finalPredicate,
keywordContains(keyword)
);
return PageableExecutionUtils.getPage(reviews, pageable, �totalCount::fetchOne);
형태로 쓰시면 될 거 같아요. "마지막 페이지이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때" 카운트 쿼리를 생략해주는 것으로 압니다.
참고 :: countQuery 최적화
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.
게시판 CRUD 확인했습니다.
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<BBSListDto> getBBSWithCondition(String type, String keyword, Pageable pageable); | ||
|
||
BBS findOneByBbsNo(Long bbsNo); | ||
|
||
Page<BBS> findAllByUpperNo(Long upperNo, Pageable pageable); | ||
|
||
void deleteByBbsNo(Long bbsNo); |
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.
BBSRepositoryJPA, BBSRepositoryDSL을 상속받고 있고 올려주신 코드를 보면 JPA, DSL에서 모두 선언해두었기 때문에 이 내용은 삭제하셔도 될 것 같습니다~!
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.
순서대로 PR Merge 된다고 했을 때, 제가 V1.0.12 까지 만들어 PR Merged 상태이고 찬규님 이전 PR에 V1.0.14까지 만드신 상태라
파일명 변경 후 Merge 되어야할 것 같습니다
추가로 찬규님꺼 먼저 된다고 하면 create_at, modified_at 도 TIMESTAMP 로 변경 필요하겠군요
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.
DSL, DSLImpl, JPA 파일의 명명방식을 통일하면 더 좋을 것 같긴 한데, 수정하실 일이 있다면 고려해주세요ㅎㅎ
물론 이건 필수적인 부분은 아니고 다른 의견이 있으시다면 그 전에 올린 파일들을 수정해도 무방합니다
public Page<BBSListDto> getBBSWithCondition(String type, String keyword, Pageable pageable) { | ||
|
||
Predicate finalPredicate = bBS.isVisible.eq(true) | ||
.and(bBS.type.eq(BBSType.valueOf(type).name())); |
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.
defaultValue = "" 로 설정해두셨던데 BBSType.valueOf(type) 에서 이슈는 없나요??
@@ -13,7 +13,7 @@ public class AuditConfig implements AuditorAware<String> { | |||
@Override | |||
public Optional<String> getCurrentAuditor() { | |||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); | |||
String createId = Optional.ofNullable(request.getParameter("id")).orElse("admin"); | |||
String createId = Optional.ofNullable(request.getHeader("Id")).orElse("admin"); |
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.
오 좋아요ㅎㅎ
public static BBS save(Long bbsNo, Long upperNo, String type, String title, String contents, Boolean isVisible, Long viewCount, Member member){ | ||
|
||
return new BBS (bbsNo, upperNo, type, title, contents, isVisible, viewCount, member); | ||
} |
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.
BBSDto 에 toEntity 대신 위 방식을 선택하신 이유가 있으신가요? (그냥 궁금해서 여쭤보는 거에요ㅎㅎ)
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.
sql 파일 수정 확인했습니다~!
💡 Motivation and Context
여기에 왜 이 PR이 필요했는지, PR을 통해 무엇이 바뀌는지에 대해서 설명해 주세요
게시판 API 초안을 작성 하였습니다.
CRUD의 대한 API 통신 테스트 완료하였습니다. 편의상 성공 이미지는 하나만 올렸습니다.
🔨 Modified
-이제는 ID를 찾기위해 토큰 탐색을 하지 않고, 헤더에서 즉시 가져다 쓰면 됩니다.
안타깝게도 memberNo를 알기 위해서는 findById를 여전히 써야하긴 합니다.
-> 아래 more 항목의 리팩토링 관련하여 작업 진행시 프론트에서 memberNo도 같이 보내어
별도 과정없이 저장해야 할 테이블에 즉시 insert 처리를 할 수 있을꺼라 판단됩니다.
도메인 작업하시면서 코드 수정 할 일이 생긴다면 관련하여 리팩토링 진행 부탁드립니다.
게시글 타입은 아래와 같이 Enum 클래스로 관리되고 정의됩니다.
QNA 질문과 답변 , FREE 자유게시판 , BOAST 자랑게시판 , RECOMMAND 추천게시판 , NOTICE , 공지사항 , REPLY 댓글
게시판 작성 후 댓글에 대해선 bbsNo에 대해 upperNo를 기반으로 테이블 트리 구조를 가져갑니다.
즉, 특정 글의 댓글 조회시엔 upperNo를 조회 조건으로 가져가면 됩니다.
게시글 등록과 수정 처리는 saveBBS 메서드 하나만을 사용합니다.
의도치않은 클린코드🌟 More
- 프론트엔드 개발자와 API 연동시 검색에 대한 필터 조건 추가 필요 할 수 있습니다.
- 첨부파일 로직이 추가 되어야 합니다.
- 플랫폼 전체 조회 로직을 볼 때 조회, 등록시 연관관계가 있는 정보에 대해 필요 이상으로 많이 조회합니다.
이 부분에 대해 필요한 정보만 주고 받도록 리팩토링 필요합니다.
- 테스트코드 작성해야 합니다.
- JPA delete 메서드를 사용해서 삭제 요청을 보내면 바로 flush가 되지 않는 이슈가 있습니다.
📋 커밋 전 체크리스트
🤟🏻 PR로 완료된 이슈
closes #275, #284