Skip to content
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

Merged
merged 13 commits into from
Mar 13, 2024
Merged

Conversation

gunsight1
Copy link
Collaborator

@gunsight1 gunsight1 commented Mar 12, 2024

💡 Motivation and Context

여기에 왜 이 PR이 필요했는지, PR을 통해 무엇이 바뀌는지에 대해서 설명해 주세요
게시판 API 초안을 작성 하였습니다.
CRUD의 대한 API 통신 테스트 완료하였습니다. 편의상 성공 이미지는 하나만 올렸습니다.

image


🔨 Modified

여기에 무엇이 크게 바뀌었는지 설명해 주세요

-이제는 ID를 찾기위해 토큰 탐색을 하지 않고, 헤더에서 즉시 가져다 쓰면 됩니다.
안타깝게도 memberNo를 알기 위해서는 findById를 여전히 써야하긴 합니다.
-> 아래 more 항목의 리팩토링 관련하여 작업 진행시 프론트에서 memberNo도 같이 보내어
별도 과정없이 저장해야 할 테이블에 즉시 insert 처리를 할 수 있을꺼라 판단됩니다.
도메인 작업하시면서 코드 수정 할 일이 생긴다면 관련하여 리팩토링 진행 부탁드립니다.
image

  • 게시글 타입은 아래와 같이 Enum 클래스로 관리되고 정의됩니다.
    QNA 질문과 답변 , FREE 자유게시판 , BOAST 자랑게시판 , RECOMMAND 추천게시판 , NOTICE , 공지사항 , REPLY 댓글
    image

  • 게시판 작성 후 댓글에 대해선 bbsNo에 대해 upperNo를 기반으로 테이블 트리 구조를 가져갑니다.
    즉, 특정 글의 댓글 조회시엔 upperNo를 조회 조건으로 가져가면 됩니다.

  • 게시글 등록과 수정 처리는 saveBBS 메서드 하나만을 사용합니다. 의도치않은 클린코드

image


🌟 More

  • 여기에 PR 이후 추가로 해야 할 일에 대해서 설명해 주세요

- 프론트엔드 개발자와 API 연동시 검색에 대한 필터 조건 추가 필요 할 수 있습니다.
- 첨부파일 로직이 추가 되어야 합니다.
- 플랫폼 전체 조회 로직을 볼 때 조회, 등록시 연관관계가 있는 정보에 대해 필요 이상으로 많이 조회합니다.
이 부분에 대해 필요한 정보만 주고 받도록 리팩토링 필요합니다.
- 테스트코드 작성해야 합니다.
- JPA delete 메서드를 사용해서 삭제 요청을 보내면 바로 flush가 되지 않는 이슈가 있습니다.

📋 커밋 전 체크리스트

  • 추가/변경에 대한 단위 테스트를 완료하였습니다.
  • 컨벤션에 맞게 작성하였습니다.

🤟🏻 PR로 완료된 이슈

closes #275, #284

@gunsight1 gunsight1 added 🖥️ BackEnd 서버 관련 💡 Feature 새로운 기능 추가, 혹은 구현 labels Mar 12, 2024
@gunsight1 gunsight1 self-assigned this Mar 12, 2024
Copy link
Collaborator

@chan99k chan99k left a 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");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Header 에서 Id 참조할 수 있는 점 확인하였습니다

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 좋아요ㅎㅎ

Comment on lines +33 to +34
@JoinColumn(name = "member_no", nullable = false, updatable = false)
private Member member;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Member 엔티티는 변경사항이 없는 것 같은데, BBS 쪽에서만 매핑이 되어 있는 것으로 이해하면 될까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 글 조회, 작성시 작성자 정보가 누구인지 찾기위해 BBS쪽에만 있습니다. jpa 관점에서 이게 올바른 매핑인지는 모르겠네요

Copy link
Collaborator

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);
Copy link
Collaborator

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 최적화

Copy link
Collaborator

@HyunJunSon HyunJunSon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

게시판 CRUD 확인했습니다.

Copy link
Collaborator

@linglong67 linglong67 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드는 확인했는데, 일부 내용 반영해주셔야 될 것 같아서 우선 코멘트 상태로 두겠습니다~!

Comment on lines +9 to +15
Page<BBSListDto> getBBSWithCondition(String type, String keyword, Pageable pageable);

BBS findOneByBbsNo(Long bbsNo);

Page<BBS> findAllByUpperNo(Long upperNo, Pageable pageable);

void deleteByBbsNo(Long bbsNo);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BBSRepositoryJPA, BBSRepositoryDSL을 상속받고 있고 올려주신 코드를 보면 JPA, DSL에서 모두 선언해두었기 때문에 이 내용은 삭제하셔도 될 것 같습니다~!

Copy link
Collaborator

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 로 변경 필요하겠군요

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

타임스탬프로 변경 후 파일명 변경해서 재커밋 했습니다.

Copy link
Collaborator

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()));
Copy link
Collaborator

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");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 좋아요ㅎㅎ

Comment on lines +47 to +50
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);
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BBSDto 에 toEntity 대신 위 방식을 선택하신 이유가 있으신가요? (그냥 궁금해서 여쭤보는 거에요ㅎㅎ)

Copy link
Collaborator

@linglong67 linglong67 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sql 파일 수정 확인했습니다~!

@gunsight1 gunsight1 merged commit 6781a49 into Kernel360:develop Mar 13, 2024
@gunsight1 gunsight1 deleted the feature_bbs branch March 13, 2024 08:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🖥️ BackEnd 서버 관련 💡 Feature 새로운 기능 추가, 혹은 구현
Projects
None yet
Development

Successfully merging this pull request may close these issues.

fix :: 작성자 정보 조회 로직 변경
4 participants