Skip to content

Commit 2b1fbfd

Browse files
committed
ADD memberRegister
1 parent 1e5cb05 commit 2b1fbfd

File tree

9 files changed

+191
-0
lines changed

9 files changed

+191
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.example.security.jwt.account.application;
22

3+
import com.example.security.jwt.account.application.dto.RequestAccount;
34
import com.example.security.jwt.account.application.dto.ResponseAccount;
45

56
public interface AccountService {
67

78
ResponseAccount.Token authenticate(String username, String password);
89

10+
ResponseAccount.Information registerMember(RequestAccount.RegisterMember registerMemberDto);
11+
912
}

src/main/java/com/example/security/jwt/account/application/AccountServiceImpl.java

+22
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,30 @@
11
package com.example.security.jwt.account.application;
22

3+
import com.example.security.jwt.account.application.dto.RequestAccount;
34
import com.example.security.jwt.account.application.dto.ResponseAccount;
5+
import com.example.security.jwt.account.domain.AccountRepository;
6+
import com.example.security.jwt.account.domain.entity.Account;
47
import com.example.security.jwt.account.domain.entity.AccountAdapter;
8+
import com.example.security.jwt.global.exception.ApplicationException;
9+
import com.example.security.jwt.global.exception.CommonErrorCode;
510
import com.example.security.jwt.global.security.TokenProvider;
611
import lombok.RequiredArgsConstructor;
12+
import org.springframework.context.ApplicationContextException;
713
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
814
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
915
import org.springframework.security.core.Authentication;
1016
import org.springframework.stereotype.Service;
17+
import org.springframework.transaction.annotation.Transactional;
18+
19+
import java.util.Optional;
1120

1221
@Service
1322
@RequiredArgsConstructor
1423
public class AccountServiceImpl implements AccountService{
1524

1625
private final TokenProvider tokenProvider;
1726
private final AuthenticationManagerBuilder authenticationManagerBuilder;
27+
private final AccountRepository accountRepository;
1828
// private final RefreshTokenProvider refreshTokenProvider;
1929

2030

@@ -41,4 +51,16 @@ public ResponseAccount.Token authenticate(String username, String password) {
4151
//.refreshToke()
4252
.build();
4353
}
54+
55+
@Transactional
56+
@Override
57+
public ResponseAccount.Information registerMember(RequestAccount.RegisterMember registerMemberDto) {
58+
Optional<Account> accountOptional = accountRepository.findOneWithAuthoritiesByUsername(registerMemberDto.username());
59+
60+
if(accountOptional.isPresent()) {
61+
throw new ApplicationException(CommonErrorCode.CONFLICT, "이미 가입되어있는 유저");
62+
}
63+
64+
return null;
65+
}
4466
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.example.security.jwt.account.presentation;
2+
3+
import com.example.security.jwt.account.application.AccountService;
4+
import com.example.security.jwt.account.application.dto.RequestAccount;
5+
import com.example.security.jwt.account.application.dto.ResponseAccount;
6+
import com.example.security.jwt.global.dto.CommonResponse;
7+
import com.example.security.jwt.global.security.CustomJwtFilter;
8+
import jakarta.validation.Valid;
9+
import org.springframework.http.HttpHeaders;
10+
import org.springframework.http.HttpStatus;
11+
import org.springframework.http.ResponseEntity;
12+
import org.springframework.web.bind.annotation.PostMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RestController;
16+
17+
@RestController
18+
@RequestMapping("/api/v1/accounts")
19+
public class AccountController {
20+
private final AccountService accountService;
21+
22+
// 생성자 주입
23+
public AccountController(AccountService accountService) {
24+
this.accountService = accountService;
25+
}
26+
27+
@PostMapping("/token") // Acount 인증 API
28+
public ResponseEntity<CommonResponse> authorize(@Valid @RequestBody RequestAccount.Login loginDto) {
29+
30+
ResponseAccount.Token token = accountService.authenticate(loginDto.username(), loginDto.password());
31+
32+
//response header에도 넣고 응답 객체에도 저장
33+
HttpHeaders headers = new HttpHeaders();
34+
headers.add(CustomJwtFilter.AUTHORIZATION_HEADER, "Bearer " + token.accessToken());
35+
36+
// 응답
37+
CommonResponse response = CommonResponse.builder()
38+
.success(true)
39+
.response(token)
40+
.build();
41+
42+
return new ResponseEntity<>(response, headers, HttpStatus.OK);
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.example.security.jwt.global.exception;
2+
3+
import lombok.Getter;
4+
import org.springframework.web.server.ResponseStatusException;
5+
6+
@Getter
7+
public class ApplicationException extends ResponseStatusException {
8+
private final BaseErrorCode errorCode;
9+
10+
public ApplicationException(BaseErrorCode errorCode) {
11+
super(errorCode.getHttpStatus(), errorCode.getMessage());
12+
this.errorCode = errorCode;
13+
}
14+
15+
public ApplicationException(BaseErrorCode errorCode, String message) {
16+
super(errorCode.getHttpStatus(), message);
17+
this.errorCode = errorCode;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.security.jwt.global.exception;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import org.springframework.http.HttpStatus;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public enum CommonErrorCode implements BaseErrorCode {
10+
11+
//인증, 인가 실패는 security.hander 쪽에 있음
12+
CONFLICT(HttpStatus.CONFLICT, "COMMON_001", "리소스 중복"),
13+
REQUEST_PARAMETER_BIND_FAILED(HttpStatus.BAD_REQUEST, "COMMON_002", "PARAMETER_BIND_FAILED"),
14+
BAD_REQUEST(HttpStatus.BAD_REQUEST, "COMMON_003", "BAD REQUEST"),
15+
;
16+
17+
18+
private final HttpStatus httpStatus;
19+
private final String code;
20+
private final String message;
21+
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.security.jwt.member.facacde;
2+
3+
import com.example.security.jwt.member.facacde.dto.RequestMemberFacade;
4+
import com.example.security.jwt.member.facacde.dto.ResponseMemberFacade;
5+
6+
public interface MemberFacade {
7+
8+
ResponseMemberFacade.Information signup(RequestMemberFacade.Register registerDto);
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.example.security.jwt.member.facacde.dto;
2+
3+
import com.example.security.jwt.account.application.AccountService;
4+
import com.example.security.jwt.account.application.dto.RequestAccount;
5+
import com.example.security.jwt.account.application.dto.ResponseAccount;
6+
import com.example.security.jwt.member.facacde.MemberFacade;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
10+
@Service
11+
@RequiredArgsConstructor
12+
public class MemberFacadeImpl implements MemberFacade {
13+
14+
private final AccountService accountService;
15+
16+
@Override
17+
public ResponseMemberFacade.Information signup(RequestMemberFacade.Register registerDto) {
18+
ResponseAccount.Information response = accountService.registerMember(RequestAccount.RegisterMember.builder()
19+
.nickname(registerDto.nickname())
20+
.username(registerDto.username())
21+
.password(registerDto.password())
22+
.build());
23+
24+
return ResponseMemberFacade.Information.builder()
25+
.authoritySet(response.authoritySet())
26+
.nickname(response.nickname())
27+
.tokenWeight(response.tokenWeight())
28+
.password(response.password())
29+
.username(response.username())
30+
.build();
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.security.jwt.member.facacde.dto;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
import jakarta.validation.constraints.Size;
5+
import lombok.Builder;
6+
7+
public record RequestMemberFacade() {
8+
@Builder
9+
public record Register(
10+
@NotNull
11+
@Size(min =3, max = 50)
12+
String username,
13+
14+
@NotNull
15+
@Size(min =3, max = 100)
16+
String password,
17+
18+
@NotNull
19+
@Size(min =3, max = 100)
20+
String nickname
21+
) {
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.example.security.jwt.member.facacde.dto;
2+
3+
import lombok.Builder;
4+
import java.util.Set;
5+
6+
public record ResponseMemberFacade() {
7+
8+
@Builder
9+
public record Information(
10+
String username,
11+
String password,
12+
String nickname,
13+
Long tokenWeight,
14+
Set<String> authoritySet
15+
) {
16+
}
17+
}

0 commit comments

Comments
 (0)