From 8e88d153db2b81b018d737c64358d686585bef12 Mon Sep 17 00:00:00 2001 From: thguss Date: Tue, 16 Jul 2024 22:41:50 +0900 Subject: [PATCH 1/4] fix: update fcm token at login --- .../java/com/smeem/application/domain/auth/AuthService.java | 5 ++++- .../java/com/smeem/application/domain/member/Member.java | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java index 0732d448..e2e09c77 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java @@ -28,7 +28,10 @@ public class AuthService implements AuthUseCase { public SignInResponse signIn(String socialAccessToken, SignInRequest request) { val social = oauthPort.login(request.socialType(), socialAccessToken); val signedMember = signIn(social, request); - memberPort.update(signedMember.updateSmeemToken(tokenGenerator.generateRefreshToken(signedMember.getId()))); + signedMember.updateTokenInLogin( + tokenGenerator.generateRefreshToken(signedMember.getId()), + request.fcmToken()); + memberPort.update(signedMember); return SignInResponse.of(tokenGenerator.generateAccessToken(signedMember.getId()), signedMember); } diff --git a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java index 4b188512..19ddef45 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java @@ -47,9 +47,9 @@ public void visit() { /** * update */ - public Member updateSmeemToken(String refreshToken) { + public void updateTokenInLogin(String refreshToken, String fcmToken) { this.refreshToken = refreshToken; - return this; + this.fcmToken = fcmToken; } public Member updateDiaryComboCount(boolean diaryWrittenYesterday) { From 0d39f896712749417c0c5e3535515d5465ba2d9b Mon Sep 17 00:00:00 2001 From: thguss Date: Tue, 16 Jul 2024 23:11:09 +0900 Subject: [PATCH 2/4] add: add welcome badge in sign-up --- .../smeem/application/domain/auth/AuthService.java | 14 +++++++++++++- .../smeem/application/domain/member/Member.java | 4 ++++ .../input/dto/response/auth/SignInResponse.java | 11 +++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java index e2e09c77..10e5dba8 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java @@ -1,5 +1,6 @@ package com.smeem.application.domain.auth; +import com.smeem.application.domain.badge.Badge; import com.smeem.application.domain.member.Member; import com.smeem.application.port.input.AuthUseCase; import com.smeem.application.port.input.dto.request.auth.SignInRequest; @@ -7,6 +8,7 @@ import com.smeem.application.port.input.dto.response.auth.GenerateTokenResponse; import com.smeem.application.port.input.dto.response.auth.SignInResponse; import com.smeem.application.port.output.oauth.OauthPort; +import com.smeem.application.port.output.persistence.BadgePort; import com.smeem.application.port.output.persistence.MemberPort; import com.smeem.common.logger.HookLogger; import com.smeem.common.logger.LoggingMessage; @@ -15,6 +17,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -23,16 +27,24 @@ public class AuthService implements AuthUseCase { private final OauthPort oauthPort; private final TokenGenerator tokenGenerator; private final HookLogger hookLogger; + private final BadgePort badgePort; @Transactional public SignInResponse signIn(String socialAccessToken, SignInRequest request) { val social = oauthPort.login(request.socialType(), socialAccessToken); val signedMember = signIn(social, request); + val acquiredBadges = new ArrayList(); + if (signedMember.isNew()) { + acquiredBadges.add(badgePort.saveWelcomeBadgeToMember(signedMember.getId())); + } signedMember.updateTokenInLogin( tokenGenerator.generateRefreshToken(signedMember.getId()), request.fcmToken()); memberPort.update(signedMember); - return SignInResponse.of(tokenGenerator.generateAccessToken(signedMember.getId()), signedMember); + return SignInResponse.of( + tokenGenerator.generateAccessToken(signedMember.getId()), + signedMember, + acquiredBadges); } private Member signIn(Member.Social social, SignInRequest request) { diff --git a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java index 19ddef45..6ee6d799 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java @@ -44,6 +44,10 @@ public void visit() { this.visitDays++; } + public boolean isNew() { + return this.username == null; + } + /** * update */ diff --git a/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java b/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java index 5feffb76..8ad0077e 100644 --- a/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java +++ b/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java @@ -1,10 +1,14 @@ package com.smeem.application.port.input.dto.response.auth; +import com.smeem.application.domain.badge.Badge; import com.smeem.application.domain.member.Member; +import com.smeem.application.port.input.dto.response.badge.AcquiredBadgeResponse; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AccessLevel; import lombok.Builder; +import java.util.List; + @Builder(access = AccessLevel.PRIVATE) public record SignInResponse( @Schema(description = "스밈 액세스 토큰") @@ -14,15 +18,18 @@ public record SignInResponse( @Schema(description = "서비스에 등록된 회원인가?") boolean isRegistered, @Schema(description = "학습계획을 가진 회원인가?") - boolean hasPlan + boolean hasPlan, + @Schema(description = "일기 작성 후 획득한 배지 정보") + List badges ) { - public static SignInResponse of(String accessToken, Member member) { + public static SignInResponse of(String accessToken, Member member, List badges) { return SignInResponse.builder() .accessToken(accessToken) .refreshToken(member.getRefreshToken()) .isRegistered(member.getUsername() != null) .hasPlan(member.getGoalId() != null) + .badges(badges.stream().map(AcquiredBadgeResponse::from).toList()) .build(); } } From ff9cc95b7a98e7870f34a1ec912f57a25ec3bc05 Mon Sep 17 00:00:00 2001 From: thguss Date: Tue, 16 Jul 2024 23:13:33 +0900 Subject: [PATCH 3/4] fix: fix status response code --- .../src/main/java/com/smeem/http/controller/AuthApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smeem-input-http/src/main/java/com/smeem/http/controller/AuthApi.java b/smeem-input-http/src/main/java/com/smeem/http/controller/AuthApi.java index 5f1095b0..c058fb8f 100644 --- a/smeem-input-http/src/main/java/com/smeem/http/controller/AuthApi.java +++ b/smeem-input-http/src/main/java/com/smeem/http/controller/AuthApi.java @@ -39,7 +39,7 @@ public SmeemResponse generateToken(Principal principal) { return SmeemResponse.of(authUseCase.generateToken(memberId), SmeemMessage.GENERATE_TOKEN); } - @ResponseStatus(HttpStatus.NO_CONTENT) + @ResponseStatus(HttpStatus.OK) @PostMapping("/sign-out") public SmeemResponse signOut(Principal principal) { val memberId = smeemConverter.toMemberId(principal); @@ -47,7 +47,7 @@ public SmeemResponse signOut(Principal principal) { return SmeemResponse.of(SmeemMessage.SIGNED_OUT); } - @ResponseStatus(HttpStatus.NO_CONTENT) + @ResponseStatus(HttpStatus.OK) @DeleteMapping public SmeemResponse withdraw(Principal principal, @RequestBody(required = false) WithdrawRequest request) { val memberId = smeemConverter.toMemberId(principal); From a3d5545e9381fbcdeb1be0705138b0b4a7e49269 Mon Sep 17 00:00:00 2001 From: thguss Date: Tue, 16 Jul 2024 23:45:21 +0900 Subject: [PATCH 4/4] fix: fix method acquired welcome badge logic --- .../smeem/application/domain/auth/AuthService.java | 14 +------------- .../smeem/application/domain/member/Member.java | 2 +- .../application/domain/member/MemberService.java | 4 ++-- .../input/dto/response/auth/SignInResponse.java | 11 ++--------- 4 files changed, 6 insertions(+), 25 deletions(-) diff --git a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java index 10e5dba8..e2e09c77 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/auth/AuthService.java @@ -1,6 +1,5 @@ package com.smeem.application.domain.auth; -import com.smeem.application.domain.badge.Badge; import com.smeem.application.domain.member.Member; import com.smeem.application.port.input.AuthUseCase; import com.smeem.application.port.input.dto.request.auth.SignInRequest; @@ -8,7 +7,6 @@ import com.smeem.application.port.input.dto.response.auth.GenerateTokenResponse; import com.smeem.application.port.input.dto.response.auth.SignInResponse; import com.smeem.application.port.output.oauth.OauthPort; -import com.smeem.application.port.output.persistence.BadgePort; import com.smeem.application.port.output.persistence.MemberPort; import com.smeem.common.logger.HookLogger; import com.smeem.common.logger.LoggingMessage; @@ -17,8 +15,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -27,24 +23,16 @@ public class AuthService implements AuthUseCase { private final OauthPort oauthPort; private final TokenGenerator tokenGenerator; private final HookLogger hookLogger; - private final BadgePort badgePort; @Transactional public SignInResponse signIn(String socialAccessToken, SignInRequest request) { val social = oauthPort.login(request.socialType(), socialAccessToken); val signedMember = signIn(social, request); - val acquiredBadges = new ArrayList(); - if (signedMember.isNew()) { - acquiredBadges.add(badgePort.saveWelcomeBadgeToMember(signedMember.getId())); - } signedMember.updateTokenInLogin( tokenGenerator.generateRefreshToken(signedMember.getId()), request.fcmToken()); memberPort.update(signedMember); - return SignInResponse.of( - tokenGenerator.generateAccessToken(signedMember.getId()), - signedMember, - acquiredBadges); + return SignInResponse.of(tokenGenerator.generateAccessToken(signedMember.getId()), signedMember); } private Member signIn(Member.Social social, SignInRequest request) { diff --git a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java index 6ee6d799..2fd864df 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/member/Member.java @@ -44,7 +44,7 @@ public void visit() { this.visitDays++; } - public boolean isNew() { + public boolean signUp() { return this.username == null; } diff --git a/smeem-application/src/main/java/com/smeem/application/domain/member/MemberService.java b/smeem-application/src/main/java/com/smeem/application/domain/member/MemberService.java index a53dd91b..5eed225e 100644 --- a/smeem-application/src/main/java/com/smeem/application/domain/member/MemberService.java +++ b/smeem-application/src/main/java/com/smeem/application/domain/member/MemberService.java @@ -39,7 +39,6 @@ public class MemberService implements MemberUseCase { @Transactional public UpdateMemberResponse updateMember(long memberId, UpdateMemberRequest request) { val foundMember = memberPort.findById(memberId); - val isSignIn = foundMember.getUsername() == null; val acquiredBadges = new ArrayList(); if (request.username() != null) { @@ -50,7 +49,8 @@ public UpdateMemberResponse updateMember(long memberId, UpdateMemberRequest requ } memberPort.update(foundMember); - if (isSignIn) { + if (foundMember.signUp()) { + acquiredBadges.add(badgePort.saveWelcomeBadgeToMember(foundMember.getId())); hookLogger.send(LoggingMessage.signIn(request.username(), memberPort.countAll())); } diff --git a/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java b/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java index 8ad0077e..5feffb76 100644 --- a/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java +++ b/smeem-application/src/main/java/com/smeem/application/port/input/dto/response/auth/SignInResponse.java @@ -1,14 +1,10 @@ package com.smeem.application.port.input.dto.response.auth; -import com.smeem.application.domain.badge.Badge; import com.smeem.application.domain.member.Member; -import com.smeem.application.port.input.dto.response.badge.AcquiredBadgeResponse; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AccessLevel; import lombok.Builder; -import java.util.List; - @Builder(access = AccessLevel.PRIVATE) public record SignInResponse( @Schema(description = "스밈 액세스 토큰") @@ -18,18 +14,15 @@ public record SignInResponse( @Schema(description = "서비스에 등록된 회원인가?") boolean isRegistered, @Schema(description = "학습계획을 가진 회원인가?") - boolean hasPlan, - @Schema(description = "일기 작성 후 획득한 배지 정보") - List badges + boolean hasPlan ) { - public static SignInResponse of(String accessToken, Member member, List badges) { + public static SignInResponse of(String accessToken, Member member) { return SignInResponse.builder() .accessToken(accessToken) .refreshToken(member.getRefreshToken()) .isRegistered(member.getUsername() != null) .hasPlan(member.getGoalId() != null) - .badges(badges.stream().map(AcquiredBadgeResponse::from).toList()) .build(); } }