Skip to content

Commit 806d4c5

Browse files
committed
CLAP-60 Feat: 로그인 기능 구현
<footer> - 관련: #19
1 parent cf4a349 commit 806d4c5

File tree

5 files changed

+74
-11
lines changed

5 files changed

+74
-11
lines changed

src/main/java/clap/server/application/AuthService.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package clap.server.application.mapper.response;
2+
3+
import clap.server.adapter.inbound.web.dto.auth.LoginResponse;
4+
import clap.server.adapter.inbound.web.dto.auth.MemberInfoResponse;
5+
import clap.server.domain.model.member.Member;
6+
7+
public class AuthResponseMapper {
8+
private AuthResponseMapper() {
9+
throw new IllegalArgumentException();
10+
}
11+
12+
public static LoginResponse toLoginResponse(final String accessToken, final String refreshToken, final Member member) {
13+
return new LoginResponse(
14+
accessToken,
15+
refreshToken,
16+
toMemberInfoResponse(member)
17+
);
18+
}
19+
20+
public static MemberInfoResponse toMemberInfoResponse(Member member) {
21+
return new MemberInfoResponse(
22+
member.getMemberId(),
23+
member.getMemberInfo().getName(),
24+
member.getMemberInfo().getNickname(),
25+
member.getMemberInfo().getRole(),
26+
member.getStatus()
27+
);
28+
}
29+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package clap.server.application.port.inbound.auth;
22

3-
public interface AuthUsecase {
3+
import clap.server.adapter.inbound.web.dto.auth.LoginResponse;
44

5+
public interface AuthUsecase {
6+
LoginResponse login(String nickname, String password);
57
}

src/main/java/clap/server/application/port/outbound/member/LoadMemberPort.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ public interface LoadMemberPort {
88
Optional<Member> findById(Long id);
99

1010
Optional<Member> findActiveMemberById(Long id);
11+
12+
Optional<Member> findByNickname(String nickname);
1113
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package clap.server.application.service.auth;
2+
3+
import clap.server.adapter.inbound.web.dto.auth.LoginResponse;
4+
import clap.server.domain.model.auth.CustomJwts;
5+
import clap.server.application.mapper.response.AuthResponseMapper;
6+
import clap.server.application.port.inbound.auth.AuthUsecase;
7+
import clap.server.application.port.outbound.member.LoadMemberPort;
8+
import clap.server.common.annotation.architecture.ApplicationService;
9+
import clap.server.domain.model.member.Member;
10+
import clap.server.exception.ApplicationException;
11+
import clap.server.exception.code.MemberErrorCode;
12+
import lombok.RequiredArgsConstructor;
13+
import lombok.extern.slf4j.Slf4j;
14+
import org.springframework.security.crypto.password.PasswordEncoder;
15+
import org.springframework.transaction.annotation.Transactional;
16+
17+
@ApplicationService
18+
@RequiredArgsConstructor
19+
class AuthService implements AuthUsecase {
20+
private final LoadMemberPort loadMemberPort;
21+
private final IssueTokenService issueTokenService;
22+
private final PasswordEncoder passwordEncoder;
23+
24+
@Override
25+
@Transactional
26+
public LoginResponse login(String nickname, String password) {
27+
Member member = loadMemberPort.findByNickname(nickname).orElseThrow(
28+
() -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND));
29+
if (passwordEncoder.matches(password, member.getPassword())) {
30+
CustomJwts jwts = issueTokenService.createToken(member);
31+
return AuthResponseMapper.toLoginResponse(
32+
jwts.accessToken(),
33+
jwts.refreshToken(),
34+
member
35+
);
36+
} else {
37+
throw new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND);
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)