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

Feat: 보호자용 마이페이지와 관련된 로직 구현 #31

Merged
merged 16 commits into from
Oct 1, 2024

Conversation

2iedo
Copy link
Collaborator

@2iedo 2iedo commented Sep 30, 2024

#️⃣ 연관된 이슈

#28

📝 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요.(이미지 첨부 가능)

  • 서비스 레이어(GuardService) 구현을 위한 Senior 엔티티 수정 및 SeniorRepository 인터페이스 추가
  • MemberRepository 및 SeniorRepository를 활용하여 GuardService 클래스 구현
  • SeniorRepository에서 Senior를 찾지 못할 경우 발생하는 예외처리인 SeniorNotFoundException 예외 클래스 추가
  • 보호자용 마이페이지 로직에서 예외처리 발생 시 이를 처리하는 GuardControllerAdvice 클래스 추가
  • GuardService 클래스를 활용하여 GuardController 클래스에 있는 api 구현
  • 코드 실행여부 확인 후 Entity 레이어 및 Repository 레이어에 대한 테스트 코드 작성

💬 리뷰 요구사항(선택)

아무래도 Member 엔티티와 연관되어 있는 부분이 많아 피치 않게 Member 엔티티를 수정하게 되었습니다 ㅠㅠ 혹시 로그인 로직과 관련된 클래스 파일 중 제가 수정해야 하는 파일 있으면 알려주세요!
현재 api에서 관리자용 api는 엔티티에 관리자용 계정이 따로 없어 보호자 삭제의 경우 jwt 안에 있는 id를 삭제하게 하였습니다. 추후에 관리자용 계정을 지정하면 이에 맞게 수정하면 될 것 같습니다.
추가로 모든 보호자 조회 ("/api/guards/all")에서도 관리자용 계정이 없어 조회 가능한 사용자를 따로 지정하지 않았습니다.
이해되지 않는 부분이나 이상한 부분 있으시면 코멘트 남겨주시면 감사하겠습니다.

⏰ 현재 버그

테스트 코드 작성 후 모두 통과한 후에 올렸습니다.

✏ Git Close

close #28

@2iedo 2iedo added ✨ Feature 새로운 기능 추가 및 구현하는 경우 ♻️ Refactoring 코드 리팩토링 & 클린 코드 작업을 진행하는 경우 labels Sep 30, 2024
@2iedo 2iedo self-assigned this Sep 30, 2024
@2iedo 2iedo linked an issue Sep 30, 2024 that may be closed by this pull request
6 tasks
Copy link
Member

@GitJIHO GitJIHO left a comment

Choose a reason for hiding this comment

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

고생하셨습니다 :) 궁금한 사항에 대해 간단하게 코멘트 남겼습니다 !

@GitJIHO
Copy link
Member

GitJIHO commented Sep 30, 2024

아 추가로 밑에 Member필드 충돌나있는데 제가 Member앞 pr에서 수정한 입장에서 제 코드랑 충돌 난 것 같네요. 도훈님 이번에 추가하신거 추가해서 충돌해결 하셔도 문제 없을 것 같아요 👍

Copy link
Contributor

@zzoe2346 zzoe2346 left a comment

Choose a reason for hiding this comment

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

살아남은 주석 하나 발견한거 표시했습니다! 고생많으셨습니다👏👏

@2iedo 2iedo merged commit 4b476ce into Weekly Oct 1, 2024
@2iedo 2iedo deleted the Feat/issue-#28 branch October 1, 2024 01:58
cheol-95 pushed a commit that referenced this pull request Oct 8, 2024
* 3주차 산출물

* Chore: 스프링 초기 설정

- .gitignore 파일 추가
- build.gradle 파일 추가후 dependencies 설정
- 자바21

* Feat: 팀원 모두 참여한 초기 Swagger (#3)

* Feat: 팀원 모두 참여한 초기 Swagger

- controller, dto 코드 구현
- Swagger setting
- dto의 getter는 스웨거를 위한 것

* Refactor: HelloCallController '요청' 관련 리팩토링(RequestBody->PathVariable)

- RequestBody로 helloCallId 받던걸 PathVariable로 받도록 변경
- 쓸모 없어진 클래스 제거

* Refactor: CallbackController '요청' 관련 리팩토링(RequestBody->PathVariable)

- RequestBody로 callbackId 받던걸 PathVariable로 받도록 변경
- 쓸모 없어진 클래스 제거

* Refactor: PointRequest 로 통일

- PointWithdrawRequest -> PointRequest
- 둘 다 `int price;`만 가지고 있음
- 쓸모 없어진 클래스 제거

* 4주차 최종 산출물(Weekly-4->Develop) (#18)

* Refactor: class DTO를 record DTO로 수정 (#11)

* Refactor: CallbackResponse class를 record로 변경

* Refactor: GuardController관련 DTO들 record로 변경

* Refactor: GuardGuidelineController관련 DTO들 record로 변경

* Refactor: HelloCallController관련 DTO들 record로 변경

* Refactor: PointController관련 DTO들 record로 변경

* Refactor: SinittoController관련 DTO들 record로 변경

* Refactor: MemberController관련 DTO들 record로 변경

* Refactor: ReviewController관련 DTO들 record로 변경

* Refactor: AuthController관련 DTO들 record로 변경

* Refactor: SinittoGuideline 관련 클래스 제거

- Sinitto가이드라인은 프론트에서 구현하기때문에 Sinitto가이드라인 관련 클래스는 불필요함

* Refactor: record 스타일 통일

* Refactor: package 재구성 (#12)

* Feat: MemberId위한 MethodArgumentResolver 구현 (#13)

- MemberId Annotation 구현
- MemberIdArgumentResolver class 구현
- WebConfig class 구현 후 MemberIdArgumentResolver 세팅

* Feat: 초기 Entity 구현 (#15)

* Feat: 초기 Entity 구현

-  @EnableJpaAuditing 하여 @EntityListeners(AuditingEntityListener.class) 활성화
- 속성 구성
- 연관관계 구성

* Feat: 엔티티 속성에 @NotNull 적용

* Refactor: Senior의 GuardGuideLine에 대한 `@OneToMany` 제거

- GuardGuideLine에서 Senior를 `ManyToOne`으로 매핑해 놓았다.

* Feat: `@OnDelete`로 CASCADE 적용하여 연관 엔티티 삭제 시 일관성 유지

* Feat: 4주차 최종 산출물

* Chore: 잘못된 머지 결과 수정

* Chore: 잘못된 머지 결과 수정(중복 SwaggerConfig 제거)

* Chore: 잘못된 머지 결과 수정(중복 SwaggerConfig 제거)

* Feat: Resolver JWT 데이터 추출 로직 추가, 카카오 로그인 및 JWT 로직 구현 (#29)

* feat: UnauthorizedException 정의 및 RestControllerAdvice 작성을 위한 MemberControllerAdvice 생성, Unauthorized에 대한 global exception 구현

* feat: JWT 생성 및 refresh 로직 구현, Resolver에서 MemberId 반환 로직 구현

* refactor: 코드 리팩토링

* feat: 카카오 요청 api 및 카카오 토큰 저장 로직 구현, 카카오 토큰 만료시 자동 리프레쉬 로직 구현

* fix: 이미 카카오토큰이 저장된 경우, 업데이트만 수행하도록 수정

* fix: 파일 이름 오타 수정

* feat: 카카오 로그인을 경유하는 서버 회원가입 및 로그인 비즈니스 로직 구현, Bean 순환 참조 문제 해결 위한 읜존성 제거

* refactor: 인증 관련 로직 member -> auth 로 위치 변경

* feat: 카카오 로그인 및 멤버 회원가입 controller 구현, 임시 CORS 오류 해결

* test: member와 auth 도메인에 대한 단위테스트, repo테스트 추가 및 기본생성자 접근 권한을 protected로 변경

* refactor: 코드 자동 리팩토링

* fix: 멤버 여부 확인 find -> exist로 변환 후 테스트코드 추가, advice에 basePackage 적용

* fix: jwt.secret 값을 dev 속성으로 위치 변경 및 KakaoProperties frontendUri 필드 삭제

* Feat: 보호자용 마이페이지와 관련된 로직 구현 (#31)

* feat : SeniorRepository 인터페이스 추가

* feat : GuardService 클래스 추가

* feat : SeniorNotFoundException 클래스 추가

* feat : GuardControllerAdvice 클래스 추가

* feat : GuardController에 있는 api 구현

* feat : updateMember 메소드 추가

* feat : mapToResponse 메소드, updateSenior 메소드 추가 및 getter 추가

* feat : SeniorTest 클래스 추가
Senior 엔티티에 대한 테스트 코드

* feat : SeniorRepositoryTest 클래스 추가
SeniorRepository에 대한 테스트 코드

* refactor : basePackage 추가

* feat : findByIsSinitto 메소드 추가
모든 보호자 불러오는데 사용

* refactor : Transactional 어노테이션 추가 및 업데이트 시 save 메소드 제거

* refactor : responseEntity 리턴하도록 변경

* refactor : 주석 제거

* Feat: 콜백서비스 기능 구현 (#32)

* Feat: 콜백 리스트(페이징) 보기 기능 구현

- 필요한 getter 구현
- CallbackResponse에 callbackId, seniorId 추가
- 당장 isSiniito() 가 필요하여 Member 코드 수정. 추후 충돌 가능성 존재
- Senior 도 필요한 getter 가 있어 수정. 추후 충돌 가능성 존재
- 예외 처리 할 Advice 구현
- 필요한 레포지토리 구현
- 콜백 리스트 보기 기능 비즈니스 로직(서비스층) 구현
- 테스트 구현

* Build: Twilio SDK 의존성 추가

* Feat: 가독성 향상을 위해 Callback의 String status -> Enum 타입으로 변경

- 하드코딩 방지
- 가독성 향상
- 유지 관리 용이

* Chore: 필요없어진 기능(콜백 상세보기) 제거

* Feat: 콜백 수락, 취소, 완료 기능 구현

- 콜백에 할당된 멤버를 식별위해 assignedMemberId 속성를 Callback에 추가
- enum CallbackStatus 내부 속성 이름 변경
- 공통 ForbiddenException 클래스 구현. forbidden응답을 할 예외에 상속용

* Feat: Callback 생성자에 assignedMemberId 추가

* Feat: Member, Senior 에 생성자 추가

* Feat: SeniorRepository 생성

- 테스트할 때 save()가 필요해 생성
- 시니어 추가 기능 만들때 어차피 추가 되는것으로 판단

* Test: CallbackServce, Callback 테스트 구현

- 서비스층은 mockito 를 활용한 테스트
- Callback Entity 는 `@DataJpaTest`활용한 테스트

* Feat: Twilio 관련 도움주는 역할하는 TwilioHelper.java 구현

* Feat: Callback 엔티티에 예외처리 더 꼼꼼히 구현

- 외부 CallbackStatus Enum을 내부 Status Enum으로 변경
- Callback 에 changeStatusToWaiting 구현
- 테스트 더 추가

* Feat: Twilio 활용한 콜백 등록(추가) 기능 구현

- 테스트 구현

* Test: TwilioHelperTest에 DisplayName 추가

* Feat: Callback Entity 의 메서드에 더 촘촘한 예외 처리

- 더 자세한 테스트 추가

* Test: CallbackServiceTest에 Display 설정

- 불필요하다 판단한 테스트 제거

* Refactor: 메서드 이름 형식 통일

* Feat: 더 풍부한 예외 메시지 추가

* Fix: 잘못 상속한 부분 수정

* Fix: 본인이 만든 SeniorRepository 제거
- 서로 다른 패키지에 만들어서 SeniorRepository가 2개가되어 애플리케이션이 실행이 안되었음

* Feat: 더 디테일한 에러 응답을 위해 `ResponseEntity` 적용

* Refactor: Callback 초기화시 assignedMemberId `null`초기화로 변경

* Feat: 조회 전용 서비스 메서드에 `@Transactional(readOnly = true)` 도입

* Feat: Swagger에서 JWT 활용 기능 활성화 (#35)

* Feat: Swagger 설정에 SecuritySchme 추가

* Feat: Swagger 문서에 memberId 숨기기위해 `@MemberId`에 `@Parameter(hidden=true)` 붙임

* Feat: Member, Auth 도메인 에서는 JWT 제외 시키기 위한 내용 추가

- 전역으로 `SecurityRequirement().addList("bearerAuth")`를 설정해놓음. 이를 피하기 위한 `security = @securityrequirement(name = "JWT제외")`

* Feat: 시니또용 마이페이지와 관련된 로직 및 테스트 코드 구현 (#36)

* feat: 시니또용 마이페이지와 관련된 로직 및 테스트 코드 구현

* refactor: [미구현] 표시 삭제

* feat: 시니또 계좌정보 관련 api 추가

* refactor: 코드 컨벤션에 맞게 수정

* fix: updateMember 메서드 오류 수정

* feat: 계좌정보 dto 분리

---------

Co-authored-by: JIHO LEE <161289673+GitJIHO@users.noreply.github.com>
Co-authored-by: 2iedo <162278702+2iedo@users.noreply.github.com>
Co-authored-by: eunsoni <135586807+eunsoni@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 새로운 기능 추가 및 구현하는 경우 ♻️ Refactoring 코드 리팩토링 & 클린 코드 작업을 진행하는 경우
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Feat : 보호자용 마이페이지와 관련된 로직 구현
3 participants