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/#52/요청받은 정산 관련 api 개발 #61

Merged
merged 34 commits into from
Aug 9, 2024

Conversation

seongjunnoh
Copy link
Collaborator

@seongjunnoh seongjunnoh commented Aug 3, 2024

📝 요약

  1. 유저가 요청받은 정산 목록을 조회하는 api 개발
    ->요청받은 정산 중 현재 진행중인 정산과 완료된 정산을 구분하여 조회
  2. 유저가 요청받은 정산에 대해 '송금 완료' 버튼을 눌렀을 시, 해당 정산 요청을 완료처리하는 api 개발

이슈 번호 : #52

🔖 변경 사항

[refactor : 요청받은 정산 목록 조회 서비스단 코드 메서드 분리]
-> 이 커밋부터가 현재 pr 의 내용입니다!

✅ 리뷰 요구사항

현재 개발한 api의 플로우는 유저가 요청받은 정산에 대해 송금완료 처리 요청이 들어올 경우,
유저의 송금완료 처리 -> 송금 요청받은 정산의 완료 여부 확인 -> 송금 요청받은 정산의 완료 여부를 response로 전달
이렇게 구성되어 있습니다

아직 화면설계서에는 없으나 추후에 정산 요청을 받은 모든 유저들이 송금 완료 처리 요청을 보낼 경우, 해당 정산에 대한 완료 여부를 프론트단에
알려주기 위해 response를 success 메시지로만 구성할까하다가 정산의 완료여부를 포함하는 것으로 수정했습니다

혹시 response 구성에 대해 다른 의견 있으시면 리뷰 남겨주세요!!

📸 확인 방법 (선택)

이 기능도 또한 아직 테스트 코드를 작성하지는 못했습니다
postman을 통해서 정산 생성, 정산 완료 처리, 정산 목록 조회 api를 섞어가며 db에 들어오는 값을 확인한 결과 문제는 없어 보입니다!!
빠르게 테스트 코드도 작성해보겠습니당



📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

@seongjunnoh seongjunnoh linked an issue Aug 3, 2024 that may be closed by this pull request
4 tasks
Copy link
Member

@hyunn522 hyunn522 left a comment

Choose a reason for hiding this comment

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

LGTM! 가독성도 좋고 더 깔끔해진 것 같아요
마찬가지로 코멘트 확인 부탁드립니다~!
아 그리고 앞으로 브랜치 생성하실 때 develop을 베이스로 해주시면 더 좋을 것 같아요!
review 후 수정사항이 발생하면 머지할 때 충돌나거나 꼬일 가능성이 있어서, 일단 머지한 후 다시 파는 게 충돌을 줄일 수 있다고 알고 있어요
급하게 머지 필요하신 건 말씀해주시면 바로 보도록 하겠습니다!!


private Long payRequestId;

private boolean isComplete; // 유저가 돈 낸 정산의 완료 여부
Copy link
Member

Choose a reason for hiding this comment

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

p2: 정산 요청을 받아서 해당 유저한테 송금을 완료했을 때의 response라면,
타겟 유저 개개인이 정산 완료 여부를 사용하는 곳이 있나요?
타겟 유저한테는 송금 자체가 완료되기만 하면 정산 완료라고 뜨는 것 같아서 여쭤봅니다!
image

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

앗 여기 response에서의 isComplete 는 정산 생성자가 생성한 정산이 해당 유저가 돈을 냄으로써 완료가 되었는지의 여부를 프론트단에게 알려주기 위해 추가한 필드입니다!!
저도 좀 헷갈리긴 하네요 하하 리펙토링시에 변수명을 변경해보거나 추가적인 조치를 해보겠습니당

Copy link
Collaborator

@drbug2000 drbug2000 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 +144 to +146
// TODO 1. 유저가 스페이스에 속하는 지 검증
validateIsUserInSpace(userId, spaceId);

Copy link
Collaborator

@drbug2000 drbug2000 Aug 8, 2024

Choose a reason for hiding this comment

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

p1: 해당PayRequestTargetId가 user꺼가 맞는지 확인하는 과정이 있으면 좋을 것 같습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

아하 이런 검증 로직이 있어도 좋을거같네요!! 코드 리펙토링 시에 추가해보겠습니다!!

Comment on lines +215 to +220
// TODO 3. PayRequest의 완료 여부 파악
PayRequest payRequest = payRequestTargetById.getPayRequest();
boolean payRequestCompleteStatus = isPayRequestComplete(payRequest);
if (payRequestCompleteStatus) {
payRequest.changeCompleteStatus(true);
}
Copy link
Collaborator

@drbug2000 drbug2000 Aug 8, 2024

Choose a reason for hiding this comment

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

p3: "완료 취소"와 같은 기능이 생길 수 있기 때문에, isPayRequestComplete(payRequest)의 return 값이 false여도 동작 가능하게 수정하면 어떠한가 싶습니다.

물론 현재 기획상으로는 취소 기능이 없어 문제는 없어보이네요. 현재 로직 상 한번 completeStatus=true가 되면 false가 되지 않는 다는 것을 인지하고 있으면 될 것 같습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

넵 현재 기획상으로 정산 요청에 대해 송금을 한 유저들이 다시 이것을 취소하는 플로우는 없는거같아 일단 이렇게 구현해봤습니다!
그런데 확장성을 고려하여 말씀해주신 플로우도 생각해볼수가 있군요!! 참고하겠습니당~~

Comment on lines 119 to 122
// TODO 4. 정산 생성
payService.createPay(userId, spaceId, postPayCreateRequest);

return new BaseResponse<>("정산 생성 성공");
Copy link
Collaborator

@drbug2000 drbug2000 Aug 8, 2024

Choose a reason for hiding this comment

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

p2: response에 payRequestId를 넣어 주는 건 어떻게 생각하시나요
프론트 측에서 정산 생성 후 바로 정산 상세보기 화면으로 넘어가는 요구사항이 생기면 필요하다고 생각합니다.
다른 기능들에서도 "생성" API에 response로 성공 여부 뿐만 아니라 생성한 자원의 Id를 넘겨주는 걸 고려하면 좋을 것 같아요

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

앗 post and get 구조를 위해서 id를 넘겨주는거도 좋다고 생각했지만, 프론트 측에서 정산 생성 후 바로 정산 상세보기 화면으로 넘어가는 플로우가 아니라 자신이 생성한 정산목록으로부터 해당 정산 id를 다시 알기 때문에 굳이 response로 넘겨줄필요가 있을까 싶어서 일단 빼봤습니다!
프론트단과 api 연동과정에서 서로 소통후에 생성 관련 api들의 response로 생성된 리소스의 id를 넘겨주는 방식을 고려해보겠습니다!!

Comment on lines +14 to +16
private List<PayReceiveInfoDto> payReceiveInfoDtoListIncomplete = new ArrayList<>();

private List<PayReceiveInfoDto> payReceiveInfoDtoListComplete = new ArrayList<>();
Copy link
Collaborator

@drbug2000 drbug2000 Aug 8, 2024

Choose a reason for hiding this comment

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

p2: 이름이 예뻤으면 좋겠어요
response body에 JSON으로 담겨서 프론트에서 읽어야하기 때문에, Dto와는 다르게 이름이 단순해도 괜찮다고 생각합니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

하하 변수명에 너무많은 의미를 담았나 싶네요 프론트분들이 읽을거니 단순화시키는것도 좋아보이네요! 리펙토링시에 참고하겠습니다!!

@drbug2000
Copy link
Collaborator

LGTM! 가독성도 좋고 더 깔끔해진 것 같아요 마찬가지로 코멘트 확인 부탁드립니다~! 아 그리고 앞으로 브랜치 생성하실 때 develop을 베이스로 해주시면 더 좋을 것 같아요! review 후 수정사항이 발생하면 머지할 때 충돌나거나 꼬일 가능성이 있어서, 일단 머지한 후 다시 파는 게 충돌을 줄일 수 있다고 알고 있어요 급하게 머지 필요하신 건 말씀해주시면 바로 보도록 하겠습니다!!

동의합니다.
앞 내용이 필요한 PR이라면 하나의 PR로 묶는 것도 좋다고 생각합니다!

Copy link
Collaborator Author

@seongjunnoh seongjunnoh left a comment

Choose a reason for hiding this comment

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

리뷰 감사합니다!! 이전에 작업하던 브랜치들의 코드가 필요했어서 이전 pr의 내용들을 merge해서 작업을 진행했었는데, 말씀해주신 부분에 동의합니다!! 머지가 필요한 코드는 따로 얘기드리거나 알람설정을 해두는 방향으로 해보겠습니다!


private Long payRequestId;

private boolean isComplete; // 유저가 돈 낸 정산의 완료 여부
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

앗 여기 response에서의 isComplete 는 정산 생성자가 생성한 정산이 해당 유저가 돈을 냄으로써 완료가 되었는지의 여부를 프론트단에게 알려주기 위해 추가한 필드입니다!!
저도 좀 헷갈리긴 하네요 하하 리펙토링시에 변수명을 변경해보거나 추가적인 조치를 해보겠습니당

Comment on lines 119 to 122
// TODO 4. 정산 생성
payService.createPay(userId, spaceId, postPayCreateRequest);

return new BaseResponse<>("정산 생성 성공");
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

앗 post and get 구조를 위해서 id를 넘겨주는거도 좋다고 생각했지만, 프론트 측에서 정산 생성 후 바로 정산 상세보기 화면으로 넘어가는 플로우가 아니라 자신이 생성한 정산목록으로부터 해당 정산 id를 다시 알기 때문에 굳이 response로 넘겨줄필요가 있을까 싶어서 일단 빼봤습니다!
프론트단과 api 연동과정에서 서로 소통후에 생성 관련 api들의 response로 생성된 리소스의 id를 넘겨주는 방식을 고려해보겠습니다!!

Comment on lines +144 to +146
// TODO 1. 유저가 스페이스에 속하는 지 검증
validateIsUserInSpace(userId, spaceId);

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

아하 이런 검증 로직이 있어도 좋을거같네요!! 코드 리펙토링 시에 추가해보겠습니다!!

Comment on lines +215 to +220
// TODO 3. PayRequest의 완료 여부 파악
PayRequest payRequest = payRequestTargetById.getPayRequest();
boolean payRequestCompleteStatus = isPayRequestComplete(payRequest);
if (payRequestCompleteStatus) {
payRequest.changeCompleteStatus(true);
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

넵 현재 기획상으로 정산 요청에 대해 송금을 한 유저들이 다시 이것을 취소하는 플로우는 없는거같아 일단 이렇게 구현해봤습니다!
그런데 확장성을 고려하여 말씀해주신 플로우도 생각해볼수가 있군요!! 참고하겠습니당~~

Comment on lines +14 to +16
private List<PayReceiveInfoDto> payReceiveInfoDtoListIncomplete = new ArrayList<>();

private List<PayReceiveInfoDto> payReceiveInfoDtoListComplete = new ArrayList<>();
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

하하 변수명에 너무많은 의미를 담았나 싶네요 프론트분들이 읽을거니 단순화시키는것도 좋아보이네요! 리펙토링시에 참고하겠습니다!!

@seongjunnoh seongjunnoh merged commit f42e863 into develop Aug 9, 2024
3 checks passed
@hyunn522 hyunn522 deleted the feat/#52/요청받은-정산-관련-api-개발 branch August 10, 2024 17:23
seongjunnoh added a commit that referenced this pull request Oct 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat : 요청받은 정산 관련 api 개발
3 participants