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/#67/스페이스 가입 view api #72

Merged
merged 2 commits into from
Aug 11, 2024

Conversation

seongjunnoh
Copy link
Collaborator

@seongjunnoh seongjunnoh commented Aug 10, 2024

📝 요약

스페이스 가입 view 를 위한 데이터를 response에 담아 보내주는 api 개발

이슈 번호 : #67

🔖 변경 사항

jwt에 담긴 userId와 pathVariable 로 얻을 수 있는 spaceId로 해당 유저가 이미 스페이스에 가입되어 있는 유저인지를 검증하기 위한 코드를 컨트롤러단에 구성하였습니다.
현재는 이미 스페이스에 가입된 유저일 경우, 기존의 exception 과 동일하게 500 에러가 response로 전송됩니다
상준님이 개발하신 exception handler가 develop 브랜치에 머지되면, 이슈 생성 후 예외처리의 리펙토링을 진행하겠습니다

✅ 리뷰 요구사항

유저가 이미 스페이스에 가입되어 있는 경우, 예외처리를 통해 response로 4xx 예외를 보내는 방법과 response 에 해당 유저가 스페이스에 가입되어 있는 지의 여부를 나타내는 필드를 추가하는 방법 중 전자가 낫다는 판단하에 개발을 진행하였습니다.
컨트롤러 단에서 검증 로직을 통해 유저가 이미 스페이스에 가입되어 있는 경우, 굳이 스페이스 가입 view 를 위해 db 를 방문하여 데이터를 얻어오는 후작업을 할 필요가 없다고 판단했기 때문입니다.
혹시 다른 의견 있으시면 리뷰 남겨주세요!!

📸 확인 방법 (선택)

postman을 이용하여 유저가 스페이스에 가입되어 있지 않은 경우, 이미 가입된 경우의 결과를 확인하였습니다
리펙토링 시에 테스트 코드를 추가해보겠습니다



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

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

@seongjunnoh seongjunnoh linked an issue Aug 10, 2024 that may be closed by this pull request
3 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!!
말씀하신 오버헤드 부분은 현재 controller단에 있는 검증 부분을 service단에서 진행하고
성공 여부 필드에 데이터를 담아 early return시키는 방법으로 해결할 수도 있을 것 같습니다


// TODO 5. return
return new GetSpaceJoinDto.Response(
getSpaceJoinDto.getSpaceProfileImg(),
Copy link
Member

Choose a reason for hiding this comment

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

p2: spaceBySpaceId.getSpaceProfileImg()를 바로 넘기지 않고 dto로 한 번 래핑하신 이유가 있을까요??

Copy link
Collaborator Author

@seongjunnoh seongjunnoh Aug 11, 2024

Choose a reason for hiding this comment

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

Space 엔티티의 필드로부터 스페이스 이름, 썸네일 url, LocalDateTime 형태의 스페이스 생성일 이렇게 3개의 정보를 얻을 수 있는데, response를 구성하기 위해서는 추가적으로 스페이스 가입 멤버 수가 필요하고 또한 스페이스 생성일을 format 처리도 필요해서 dto의 필드와 dto 내부 Response 클래스의 필드를 구분하였습니다!!
따라서 Space 엔티티에서 얻은 spaceProfileImg 정보를 dto의 필드값으로 가지고 있는 상태여서, return 타입을 구성할 때 dto의 spaceProfileImg 를 사용하였습니다

Space spaceBySpaceId = spaceDao.findSpaceBySpaceId(spaceId);

// 해당 유저가 스페이스에 가입되어 있는지를 확인
Optional<UserSpace> userSpaceByUserAndSpace = userSpaceDao.findUserSpaceByUserAndSpace(userByUserId, spaceBySpaceId);
Copy link
Member

Choose a reason for hiding this comment

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

p3: UserSpaceUtilsisUserInSpace 메소드를 활용할 수 있을 것 같아요

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

UserSpaceUtils의 isUserInSpace 메서드는 해당 유저가 스페이스에 속해있지 않을 경우 예외를 발생시키지만, 해당 스페이스 가입 view api 플로우에서는 유저가 스페이스에 이미 가입되어 있는 경우 예외를 발생시키는 것이 맞다고 판단해서 UserSpaceUtils에 새로운 메서드를 생성하여 코드를 구성하였습니다!!

@seongjunnoh
Copy link
Collaborator Author

LGTM!! 말씀하신 오버헤드 부분은 현재 controller단에 있는 검증 부분을 service단에서 진행하고 성공 여부 필드에 데이터를 담아 early return시키는 방법으로 해결할 수도 있을 것 같습니다

오 프론트분들과 api 연동작업하면서 한번 논의할 필요는 있을거같네요! 의견 감사합니당

@seongjunnoh seongjunnoh merged commit 2fa6e85 into develop Aug 11, 2024
3 checks passed
Comment on lines +12 to +16
private String spaceProfileImg;

private String spaceName;

private LocalDateTime createdAt;
Copy link
Collaborator

Choose a reason for hiding this comment

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

아래 static class Response 와 중복되는 필드를 갖는데 어떤 의미인지 궁금합니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Space 엔티티의 필드로부터 스페이스 이름, 썸네일 url, LocalDateTime 형태의 스페이스 생성일 이렇게 3개의 정보를 얻을 수 있는데, response를 구성하기 위해서는 추가적으로 스페이스 가입 멤버 수가 필요하고 또한 스페이스 생성일을 format 처리도 필요해서 dto의 필드와 dto 내부 Response 클래스의 필드를 구분하였습니다!!

@hyunn522 hyunn522 deleted the feat/#67/스페이스-가입-view-api branch August 12, 2024 08:08
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 : 스페이스 가입 view api
3 participants