Skip to content

Commit f97f36f

Browse files
committed
ADMIN 회원가입 추가
1 parent e1b62bf commit f97f36f

File tree

7 files changed

+148
-2
lines changed

7 files changed

+148
-2
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public interface AccountService {
99

1010
ResponseAccount.Information registerMember(RequestAccount.RegisterMember registerMemberDto);
1111

12-
ResponseAccount.Information getAccountWithAuthorities(String username);
12+
ResponseAccount.Information registerAdmin(RequestAccount.RegisterAdmin registerAdminDto);
1313

14+
ResponseAccount.Information getAccountWithAuthorities(String username);
1415
}

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

+25-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public ResponseAccount.Token authenticate(String username, String password) {
4747

4848
// 인증 정보를 기준으로 jwt access 토큰 생성
4949
String accessToken = tokenProvider.createToken(authentication);
50-
Date expiredTime = tokenProvider.getExpiredTime(accessToken);
50+
Date expiredTime = tokenProvider.getExpiredTime(accessToken); // 토큰 정보에서 만료된 정보를 가져옴
5151

5252
// 위에서 loadUserByUsername를 호출하였으므로 AccountAdapter가 시큐리티 컨텍스트에 저장되어 Account 엔티티 정보를 우리는 알 수 있음
5353
// 유저 정보에서 중치를 꺼내 리프레시 토큰 가중치에 할당, 나중에 액세스토큰 재발급 시도 시 유저정보 가중치 > 리프레시 토큰이라면 실패
@@ -87,6 +87,30 @@ public ResponseAccount.Information registerMember(RequestAccount.RegisterMember
8787
return ResponseAccount.Information.of(accountRepository.save(user));
8888
}
8989

90+
@Override
91+
public ResponseAccount.Information registerAdmin(RequestAccount.RegisterAdmin registerAdminDto) {
92+
Optional<Account> accountOptional = accountRepository.findOneWithAuthoritiesByUsername(registerAdminDto.username());
93+
94+
if(accountOptional.isPresent()) {
95+
throw new ApplicationException(CommonErrorCode.CONFLICT, "이미 가입되어있는 유저");
96+
}
97+
98+
//이건 부팅 시 data.sql에서 INSERT로 디비에 반영
99+
Authority authority = Authority.builder()
100+
.authorityName("ROLE_ADMIN")
101+
.build();
102+
103+
Account user = Account.builder()
104+
.username(registerAdminDto.username())
105+
.password(passwordEncoder.encode(registerAdminDto.password()))
106+
.nickname(registerAdminDto.nickname())
107+
.authorities(Collections.singleton(authority))
108+
.activated(true)
109+
.build();
110+
111+
return ResponseAccount.Information.of(accountRepository.save(user));
112+
}
113+
90114
@Transactional(readOnly = true)
91115
@Override
92116
public ResponseAccount.Information getAccountWithAuthorities(String username) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.security.jwt.admin.facade;
2+
3+
import com.example.security.jwt.admin.facade.dto.RequestAdminFacade;
4+
import com.example.security.jwt.admin.facade.dto.ResponseAdminFacade;
5+
6+
public interface AdminFacade {
7+
8+
ResponseAdminFacade.Information signup(RequestAdminFacade.Register registerDto);
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.example.security.jwt.admin.facade;
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.admin.facade.dto.RequestAdminFacade;
7+
import com.example.security.jwt.admin.facade.dto.ResponseAdminFacade;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Service;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
@Service
13+
@RequiredArgsConstructor
14+
public class AdminFacadeImpl implements AdminFacade {
15+
16+
private final AccountService accountService;
17+
18+
// admin 회원가입 메서드
19+
@Transactional
20+
@Override
21+
public ResponseAdminFacade.Information signup(RequestAdminFacade.Register registerDto) {
22+
ResponseAccount.Information response = accountService.registerAdmin(RequestAccount.RegisterAdmin.builder()
23+
.nickname(registerDto.nickname())
24+
.password(registerDto.password())
25+
.username(registerDto.username())
26+
.build());
27+
28+
return ResponseAdminFacade.Information.builder()
29+
.authoritySet(response.authoritySet())
30+
.nickname(response.nickname())
31+
.tokenWeight(response.tokenWeight())
32+
.password(response.password())
33+
.username(response.username())
34+
.build();
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.security.jwt.admin.facade.dto;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
import jakarta.validation.constraints.Size;
5+
import lombok.Builder;
6+
7+
public record RequestAdminFacade() {
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 = 50)
16+
String password,
17+
18+
@NotNull
19+
@Size(min = 3, max = 50)
20+
String nickname
21+
) {
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.example.security.jwt.admin.facade.dto;
2+
3+
import lombok.Builder;
4+
5+
import java.util.Set;
6+
7+
public record ResponseAdminFacade() {
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+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.example.security.jwt.admin.presentation;
2+
3+
import com.example.security.jwt.admin.facade.AdminFacade;
4+
import com.example.security.jwt.admin.facade.dto.RequestAdminFacade;
5+
import com.example.security.jwt.admin.facade.dto.ResponseAdminFacade;
6+
import com.example.security.jwt.global.dto.CommonResponse;
7+
import com.example.security.jwt.member.facacde.MemberFacade;
8+
import com.example.security.jwt.member.facacde.dto.RequestMemberFacade;
9+
import com.example.security.jwt.member.facacde.dto.ResponseMemberFacade;
10+
import jakarta.validation.Valid;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.http.ResponseEntity;
13+
import org.springframework.web.bind.annotation.PostMapping;
14+
import org.springframework.web.bind.annotation.RequestBody;
15+
import org.springframework.web.bind.annotation.RequestMapping;
16+
import org.springframework.web.bind.annotation.RestController;
17+
18+
@RestController
19+
@RequestMapping("/api/v1")
20+
@RequiredArgsConstructor
21+
public class AdminController {
22+
23+
private final AdminFacade adminFacade;
24+
25+
@PostMapping("/admin/members")
26+
public ResponseEntity<CommonResponse> signup(@Valid @RequestBody RequestAdminFacade.Register AdminRegisterDto) {
27+
ResponseAdminFacade.Information userInfo = adminFacade.signup(AdminRegisterDto);
28+
29+
CommonResponse response = CommonResponse.builder()
30+
.success(true)
31+
.response(userInfo)
32+
.build();
33+
34+
return ResponseEntity.ok(response);
35+
}
36+
}

0 commit comments

Comments
 (0)