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

[BE] feat: 회원의 학생 인증 정보 조회 API 구현 (#496) #531

Merged
merged 5 commits into from
Oct 19, 2023

Conversation

xxeol2
Copy link
Member

@xxeol2 xxeol2 commented Oct 13, 2023

📌 관련 이슈

✨ PR 세부 내용

마이페이지 및 티케팅시 필요한 회원의 학생 인증 정보 조회 API를 구현하였습니다!

@xxeol2 xxeol2 added the BE 백엔드에 관련된 작업 label Oct 13, 2023
@xxeol2 xxeol2 self-assigned this Oct 13, 2023
@xxeol2 xxeol2 linked an issue Oct 13, 2023 that may be closed by this pull request
@github-actions
Copy link

github-actions bot commented Oct 13, 2023

Unit Test Results

  78 files    78 suites   12s ⏱️
239 tests 239 ✔️ 0 💤 0
243 runs  243 ✔️ 0 💤 0

Results for commit 8ddcdf9.

♻️ This comment has been updated with latest results.

@xxeol2 xxeol2 marked this pull request as ready for review October 13, 2023 06:36
Copy link
Collaborator

@seokjin8678 seokjin8678 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 17 to 22
public static StudentResponse notVerified() {
return new StudentResponse(
false,
null
);
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

인증이 되지 않은 사용자는 해당 정적 메서드를 호출하여 응답을 반환하는군요!
하지만 매번 새로운 인스턴스 값을 넘겨줄 필요가 있을 것 같지는 않아요! (record 클래스가 불변하므로)
따라서 다음과 같이 캐싱된 값을 넘겨줘도 좋을 것 같네요!

Suggested change
public static StudentResponse notVerified() {
return new StudentResponse(
false,
null
);
}
private static final StudentResponse NOT_VERIFIED = new StudentResponse(false, null);
...
public static StudentResponse notVerified() {
return NOT_VERIFIED;
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

글렌이 제안해주신 방법이 캐싱뿐만 아니라 상수 형식으로 빼놓기에 전 '가독성 측면에서도 더 좋을 수 있겠다' 라는 생각도 드네요

Copy link
Member Author

Choose a reason for hiding this comment

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

오, 가독성과 캐싱 두가지 이점을 모두 챙길 수 있겠군요! 반영하겠습니다

Comment on lines 104 to 109
public StudentResponse findVerification(Long memberId) {
Optional<Student> student = studentRepository.findByMemberIdWithFetch(memberId);
return student
.map(value -> StudentResponse.verified(value.getSchool()))
.orElseGet(StudentResponse::notVerified);
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

다음과 같이 라인 수를 줄일 수 있을 것 같네요!
물론 선택입니다. 👍

Suggested change
public StudentResponse findVerification(Long memberId) {
Optional<Student> student = studentRepository.findByMemberIdWithFetch(memberId);
return student
.map(value -> StudentResponse.verified(value.getSchool()))
.orElseGet(StudentResponse::notVerified);
}
public StudentResponse findVerification(Long memberId) {
return studentRepository.findByMemberIdWithFetch(memberId)
.map(value -> StudentResponse.verified(value.getSchool()))
.orElseGet(StudentResponse::notVerified);
}

Copy link
Collaborator

Choose a reason for hiding this comment

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

또한 지금 StudentService 클래스의 필드 수를 보고 있는데 의존하고 있는 객체가 어마무시하네요.
이 부분에 대해서는 추후 서비스를 작은 서비스로 분리시켜도 좋을 것 같아요!

Comment on lines 18 to 24
@Query("""
SELECT st
FROM Student st
LEFT JOIN FETCH st.school sc
WHERE st.member.id = :memberId
""")
Optional<Student> findByMemberIdWithFetch(@Param("memberId") Long memberId);
Copy link
Collaborator

Choose a reason for hiding this comment

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

🦅👀

Suggested change
@Query("""
SELECT st
FROM Student st
LEFT JOIN FETCH st.school sc
WHERE st.member.id = :memberId
""")
Optional<Student> findByMemberIdWithFetch(@Param("memberId") Long memberId);
@Query("""
SELECT st
FROM Student st
LEFT JOIN FETCH st.school sc
WHERE st.member.id = :memberId
""")
Optional<Student> findByMemberIdWithFetch(@Param("memberId") Long memberId);

Copy link
Collaborator

Choose a reason for hiding this comment

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

또한 School에 대해 left join을 하기보단 inner join을 해도 괜찮지 않을까요?
학생은 학교가 있어야만 존재하니까..

Copy link
Member Author

Choose a reason for hiding this comment

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

inner join 좋은 아이디어인 것 같아요!!

@seokjin8678 seokjin8678 requested review from carsago and BGuga October 14, 2023 08:25
Copy link
Collaborator

@carsago carsago 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 17 to 22
public static StudentResponse notVerified() {
return new StudentResponse(
false,
null
);
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

글렌이 제안해주신 방법이 캐싱뿐만 아니라 상수 형식으로 빼놓기에 전 '가독성 측면에서도 더 좋을 수 있겠다' 라는 생각도 드네요

Copy link
Collaborator

@seokjin8678 seokjin8678 left a comment

Choose a reason for hiding this comment

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

리뷰 반영 확인했습니다!

Copy link
Member

@BGuga BGuga left a comment

Choose a reason for hiding this comment

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

깔끔하네요!! 수고하셨습니다!

@seokjin8678 seokjin8678 merged commit b3987db into dev Oct 19, 2023
3 checks passed
@seokjin8678 seokjin8678 deleted the feat/#496 branch October 19, 2023 02:59
seokjin8678 added a commit that referenced this pull request Nov 16, 2023
* [AN/USER] feat: 티켓 예매 디자인 수정 (#567) (#570)

* feat: 티켓 예매 바텀 시트 화면 디자인 수정

* feat: 포스터 크기 수정

* refactor: 티켓을 선택하면 INVISIBLE로 변환

* refactor: 화면 겹치는 현상 제거

* refactor: 불필요한 공백 제거

---------

Co-authored-by: re4rk <[email protected]>

* [AN/USER] feat: 페스타고 유저 앱 버전 변경 (#571) (#572)

* [BE] chore: 개발 환경의 서브 모듈을 업데이트 (#573) (#574)

* refactor: 사용하지 않게된 클래스를 제거한다. (#513)

* [BE] feat: 회원의 학생 인증 정보 조회 API 구현 (#496) (#531)

* refactor: 메서드 네이밍 수정 (verifiacte -> verify)

* feat: 학생 인증 정보 조회 기능 구현

* refactor: findByMemberIdWithFetch INNER JOIN으로 수정

* refactor: inner line return 으로 수정

* refactor: 캐싱된 Response 반환

* [AN/USER] fix: 예매 완료 화면 버그 픽스 (#575) (#576)

* fix: getParcelableExtraCompat

* update: 버전 변경

* [ALL] 프로젝트 README 추가 (#552) (#577)

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* docs: 기능 간단 소개 작성

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* docs: update

* Update README.md

줄바꿈 수정

* docs: Update README.md

* Update README.md

백엔드 기술스택 추가

* Update README.md

- JUnit5 오타 수정

* Update README.md

백엔드 기술스택 flyway 추가

* 인프라 아키텍처 사진 추가

* Update infra structure image

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

---------

Co-authored-by: xxeol2 <[email protected]>
Co-authored-by: Hyun-Seo Oh / 오현서 <[email protected]>
Co-authored-by: 해시 <[email protected]>
Co-authored-by: Guga <[email protected]>

* [AN/USER] refactor: ViewModel Test Code Dispatcher Rule 추가 (#590)

* feat: coroutine dispatcher main rule 추가

* refactor: 티켓 예매 화면 ViewModel 테스트 리팩터링

* refactor: 티켓 목록 화면 ViewModel 테스트 리팩터링

* refactor: 티켓 기록 화면 ViewModel 테스트 리팩터링

* refactor: 티켓 입장 화면 ViewModel 테스트 리팩터링

* refactor: 학생 인증 화면 ViewModel 테스트 리팩터링

* refactor: 로그인 화면 ViewModel 테스트 리팩터링

* refactor: 학교 선택 화면 ViewModel 테스트 리팩터링

* refactor: 마이페이지 화면 ViewModel 테스트 리팩터링

* refactor: 홈 화면 ViewModel 테스트 리팩터링

* refactor: 축제 목록 화면 ViewModel 테스트 리팩터링

* refactor: 마이페이지 화면 ViewModel 테스트 재변경

* [AN/USER] feat: 버튼 더블 클릭 막기(#584) (#585)

* feat: SingleClick Util 추가

* feat: 바텀 시트 바깥 클릭 막기

* feat: single 클릭 적용

* refactor: SingleClick 메서드명 변경

* refactor: xml 파일 호출 순서 맞추기

* [AN/USER] feat: 홈 화면에서 뒤로가기 누르면 곧바로 종료되지 않는다. (#588)

* feat: 홈화면 뒤로가기 상수 추가

* feat: 홈화면 뒤로가기 두 번 클릭 시 종료

* [AN/USER] feat: SingleLivedata 제거 (#586) (#587)

* refactor: 사용하지않는 SingleLiveData 제거

* refactor: 사용하지않는 Event 제거

* [AN/USER] feat: 예매 실패 케이스 처리(#369) (#593)

* feat: 에러 코드를 구분한다

* feat: API 요청 실패 결과에 따라 에러 코드를 예외로 던진다

* feat: 티켓 예매 요청에 실패하면 예외 이벤트가 발생한다.

* feat: 에러 코드에 따라 다른 메세지를 띄운다

* [AN/USER] refactor: 네트워크 에러 로깅을 확장함수 없이 직접 처리한다(#595) (#596)

refactor: 네트워크 에러 로깅을 확장함수 없이 직접 처리한다

* [BE] feat: 축제 조회 필터링 구현(#602) (#603)

* feat: specification 정의

* feat: FestivalFilter 정의

* feat: 축제 진행 상태에 따른 Controller, Service 생성

* refactor: private 생성자를 lombok 을 통해 생성

* chore: 괄호 제거

* chore: 변수 상수화

* chore: given 절 타입 명시

* feat: 축제 조회 ALL 삭제 및 기본값을 진행 중으로 변경

* feat: 축제 당일이 Progress에 포함되도록 변경 및 Spec 리팩터링

* feat: 축제 진행 상황별 정렬 조건 추가

* chore: 메서드 순서 변경

* chore: index 추가

* chore: 에러 메시지 변경

* chore: test 개행 변경 및 변수 재활용

* [AN/USER] feat: 홈화면 필터링 기능을 제공한다 (#600) (#606)

* feat: 축제 목록 필터 이름 상수화

* feat: 축제 목록 칩 색깔 및 텍스트 스타일 작성

* feat: 축제 목록 칩으로 필터링하기 화면 그리기

* feat: 축제 필터 분류 정의

* feat: FestivalRepository 필터링 요청 가능하도록 재정의

* feat: 축제 목록 ViewModel 에 축제 필터링 기능 적용

* feat: 축제 목록 Fragment 에 필터링 기능 적용

* feat: 축제 목록 필터링 API 연동 작업

* feat: 페스타고 홈화면 아이콘 추가

* refactor: 칩 색깔 selector 네이밍 수정

* refactor: 축제 목록 칩 색깔 네이밍 변경

* feat: 필터링 칩 다크모드 적용

* feat: 필터링 상태를 ViewModel 에서 관리하지 않는다

* feat: 현재 선택된 칩의 필터링에 해당하는 리스트를 요청한다

* fix: Loading 이 아니면 구성 변경 시 축제 목록을 재요청하지 않는다

* [BE] refactor: /stages/{stageId}/tickets API의 N+1을 해결한다.(#517) (#578)

* refactor: findAllByStageId fetch 조인으로 변경

* refactor: fetch join 메서드 사용하도록 변경

* chore: Inner 조건 명시하도록 변경

* [BE] 도메인 엔티티의 예외를 정의, 적용하고 테스트 패키지 구조를 정리한다. (#482) (#515)

* feat: DomainValidException 추가

* fix: DomainValidException -> ValidException 변경, 수정

* feat: Validator 검증 로직 추가

* refactor: 검증 로직 도메인에 적용

* refactor: ValidException 에러코드 수정, Validator 로직 추가

* feat: Admin 검증 추가

* feat: EntryCode 검증 추가

* refactor: 검증 로직 대폭 개선

* test: 테스트 코드 패키지 구조에 맞게 이동

* test: 테스트 코드 추가

* test: Member 테스트 코드 추가

* fix: EntryState IllegalArgumentException 변경

* fix: 테스트 코드 깨짐 수정

* refactor: Validator 호출 시 필드명 변수로 추출

* feat: IllegalArgumentException을 대체하는 UnexpectedException 추가, 적용

* feat: OAuth2Clients 중복 추가 시 에러 로그 추가

* feat: UnexpectedException 예외 핸들러 추가

---------

Co-authored-by: BGuga <[email protected]>

* [BE] test properties show sql 관련 설정 삭제 (#605) (#607)

test: 테스트 로그에 쿼리 로그 제거하도록 변경

* [BE] refactor: 사용하지 않는 AdminService 제거 (#610) (#611)

* test: 테스트 코드에 서비스 클래스 제거

* refactor: AdminService 삭제

* refactor: AdminDTO 삭제

* style: 개행 수정

* [BE] 학교 정보 API에 Swagger Annotation을 추가 (#597) (#598)

feat: SchoolController에 Swagger 정보 추가

Co-authored-by: hyunseo <>

* [AN/USER] feat: 축제 목록 화면 UX 개선(#614) (#615)

* [AN] release: v1.2.0 (#618) (#619)

chore: release v1.2.0

---------

Co-authored-by: re4rk <[email protected]>
Co-authored-by: 해시 <[email protected]>
Co-authored-by: Hyun-Seo Oh / 오현서 <[email protected]>
Co-authored-by: xxeol2 <[email protected]>
Co-authored-by: seokjin8678 <[email protected]>
Co-authored-by: Guga <[email protected]>
seokjin8678 pushed a commit that referenced this pull request Nov 16, 2023
* refactor: 메서드 네이밍 수정 (verifiacte -> verify)

* feat: 학생 인증 정보 조회 기능 구현

* refactor: findByMemberIdWithFetch INNER JOIN으로 수정

* refactor: inner line return 으로 수정

* refactor: 캐싱된 Response 반환
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드에 관련된 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 학생 인증 여부를 확인하는 API를 구현한다.
4 participants