-
Notifications
You must be signed in to change notification settings - Fork 0
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
[FIX/#82] 이미 인증된 동네가 존재할 때 동네 인증 재진행 시 예외 처리 추가 #83
Changes from 4 commits
e17cbea
1d4a14d
fc8c62d
dca00f3
2cf0b7c
796cdfa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.acon.server.member.api.response; | ||
|
||
public record AreaResponse( | ||
String area | ||
) { | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,14 @@ | ||
package com.acon.server.member.api.response; | ||
|
||
public record MemberAreaResponse( | ||
String area | ||
Long id, | ||
String name | ||
) { | ||
|
||
public static MemberAreaResponse of( | ||
final Long id, | ||
final String name | ||
) { | ||
return new MemberAreaResponse(id, name); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ | |
import com.acon.server.global.external.s3.S3Adapter; | ||
import com.acon.server.member.api.response.AcornCountResponse; | ||
import com.acon.server.member.api.response.LoginResponse; | ||
import com.acon.server.member.api.response.MemberAreaResponse; | ||
import com.acon.server.member.api.response.PreSignedUrlResponse; | ||
import com.acon.server.member.api.response.ProfileResponse; | ||
import com.acon.server.member.api.response.ReissueTokenResponse; | ||
|
@@ -99,7 +100,9 @@ public LoginResponse login( | |
String accessToken = jwtTokenProvider.issueAccessToken(memberAuthentication); | ||
String refreshToken = jwtTokenProvider.issueRefreshToken(memberId); | ||
|
||
return LoginResponse.of(accessToken, refreshToken); | ||
boolean hasVerifiedArea = existsVerifiedAreaByMemberId(memberId); | ||
|
||
return LoginResponse.of(accessToken, refreshToken, hasVerifiedArea); | ||
} | ||
|
||
protected Long fetchMemberId( | ||
|
@@ -125,32 +128,40 @@ protected Long fetchMemberId( | |
return member.getId(); | ||
} | ||
|
||
private boolean existsVerifiedAreaByMemberId(Long memberId) { | ||
List<VerifiedAreaEntity> verifiedAreaEntityList = verifiedAreaRepository.findAllByMemberId(memberId); | ||
return !verifiedAreaEntityList.isEmpty(); | ||
} | ||
|
||
@Transactional | ||
public String createMemberArea( | ||
public MemberAreaResponse createMemberArea( | ||
final Double latitude, | ||
final Double longitude | ||
) { | ||
MemberEntity memberEntity = memberRepository.findByIdOrElseThrow(principalHandler.getUserIdFromPrincipal()); | ||
|
||
// 추후 여러 동네 인증이 가능하게 되면 제거 예정 | ||
if (existsVerifiedAreaByMemberId(memberEntity.getId())) { | ||
throw new BusinessException(ErrorType.ALREADY_VERIFIED_AREA_ERROR); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Q2: 요거 추후 한 동네에 대한 재인증 로직이 추가되면 어떻게 수정할 예정이신가요 ?! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아마 그런 로직이 추가될 때쯤 원래 기획대로 여러 동네 인증이 가능하지 않을까 싶어요!
|
||
|
||
String legalDong = naverMapsAdapter.getReverseGeoCodingResult(latitude, longitude); | ||
Optional<VerifiedAreaEntity> optionalVerifiedAreaEntity = verifiedAreaRepository.findByMemberIdAndName( | ||
memberEntity.getId(), legalDong); | ||
|
||
optionalVerifiedAreaEntity.ifPresentOrElse( | ||
verifiedAreaEntity -> { | ||
VerifiedArea verifiedArea = verifiedAreaMapper.toDomain(verifiedAreaEntity); | ||
verifiedArea.updateVerifiedDate(LocalDate.now()); | ||
verifiedAreaRepository.save(verifiedAreaMapper.toEntity(verifiedArea)); | ||
}, | ||
() -> verifiedAreaRepository.save( | ||
VerifiedAreaEntity.builder() | ||
.name(legalDong) | ||
.memberId(memberEntity.getId()) | ||
.verifiedDate(Collections.singletonList(LocalDate.now())) | ||
.build() | ||
) | ||
); | ||
VerifiedAreaEntity savedVerifiedAreaEntity = optionalVerifiedAreaEntity.map(verifiedAreaEntity -> { | ||
VerifiedArea verifiedArea = verifiedAreaMapper.toDomain(verifiedAreaEntity); | ||
verifiedArea.updateVerifiedDate(LocalDate.now()); | ||
return verifiedAreaRepository.save(verifiedAreaMapper.toEntity(verifiedArea)); | ||
}).orElseGet(() -> verifiedAreaRepository.save( | ||
VerifiedAreaEntity.builder() | ||
.name(legalDong) | ||
.memberId(memberEntity.getId()) | ||
.verifiedDate(Collections.singletonList(LocalDate.now())) | ||
.build() | ||
)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3: 요거 요런 식으로 메서드로 빼도 좋을 것 같아요 (그냥 제안입니다잉) private VerifiedAreaEntity updateVerifiedAreaEntity(VerifiedAreaEntity entity, LocalDate currentDate) {
VerifiedArea verifiedArea = verifiedAreaMapper.toDomain(entity);
verifiedArea.updateVerifiedDate(currentDate);
return verifiedAreaRepository.save(verifiedAreaMapper.toEntity(verifiedArea));
}
private VerifiedAreaEntity createVerifiedAreaEntity(String legalDong, Long memberId, LocalDate currentDate) {
return verifiedAreaRepository.save(
VerifiedAreaEntity.builder()
.name(legalDong)
.memberId(memberId)
.verifiedDate(Collections.singletonList(currentDate))
.build()
);
} LocalDate currentDate = LocalDate.now();
VerifiedAreaEntity savedVerifiedAreaEntity = optionalVerifiedAreaEntity
.map(entity -> updateVerifiedAreaEntity(entity, currentDate))
.orElseGet(() -> createVerifiedAreaEntity(legalDong, memberEntity.getId(), currentDate)); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 훨씬 명시적인 것 같아 수정했습니다! 796cdfa |
||
|
||
return legalDong; | ||
return MemberAreaResponse.of(savedVerifiedAreaEntity.getId(), savedVerifiedAreaEntity.getName()); | ||
} | ||
|
||
@Transactional(readOnly = true) | ||
|
@@ -280,6 +291,7 @@ public ReissueTokenResponse reissueToken(String refreshToken) { | |
public void withdrawMember(String reason, String refreshToken) { | ||
MemberEntity memberEntity = memberRepository.findByIdOrElseThrow(principalHandler.getUserIdFromPrincipal()); | ||
|
||
// TODO: memberId 존재하는 테이블에 member row 제거 ( 리뷰 테이블 제외 ) | ||
memberRepository.deleteById(memberEntity.getId()); | ||
jwtTokenProvider.deleteRefreshToken(refreshToken); | ||
// TODO: 엑세스 토큰 블랙리스트 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2:
이거 JPA 메서드로 할 수 있을 것 같기도 한데요 ?!
이런 느낌?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그렇네용 수정했습니다~!
2cf0b7c