-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- 아이디와 패스워드가 설정된 값과 일치하면 관리자 토큰 발급 #156
- Loading branch information
amaran-th
committed
Nov 19, 2023
1 parent
8a95686
commit d44fb36
Showing
11 changed files
with
273 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
backend/emm-sale/src/main/java/com/emmsale/admin/login/api/AdminLoginApi.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package com.emmsale.admin.login.api; | ||
|
||
import com.emmsale.admin.login.application.AdminLoginService; | ||
import com.emmsale.admin.login.application.dto.AdminLoginRequest; | ||
import com.emmsale.admin.login.application.dto.AdminTokenResponse; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@RequestMapping("/admin/login") | ||
public class AdminLoginApi { | ||
|
||
private final AdminLoginService adminLoginService; | ||
|
||
public AdminLoginApi(final AdminLoginService adminLoginService) { | ||
this.adminLoginService = adminLoginService; | ||
} | ||
|
||
@PostMapping | ||
public ResponseEntity<AdminTokenResponse> login(@RequestBody final AdminLoginRequest request) { | ||
return ResponseEntity.ok().body(adminLoginService.createAdminToken(request)); | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
backend/emm-sale/src/main/java/com/emmsale/admin/login/application/AdminLoginService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package com.emmsale.admin.login.application; | ||
|
||
import com.emmsale.admin.login.application.dto.AdminLoginRequest; | ||
import com.emmsale.admin.login.application.dto.AdminTokenResponse; | ||
import com.emmsale.login.exception.LoginException; | ||
import com.emmsale.login.exception.LoginExceptionType; | ||
import com.emmsale.login.utils.JwtTokenProvider; | ||
import javax.transaction.Transactional; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@Transactional | ||
@RequiredArgsConstructor | ||
public class AdminLoginService { | ||
|
||
private final JwtTokenProvider tokenProvider; | ||
@Value("${data.admin_login.id}") | ||
private String adminId; | ||
@Value("${data.admin_login.password}") | ||
private String adminPassword; | ||
@Value("${data.admin_login.member_id}") | ||
private Long adminMemberId; | ||
|
||
public AdminTokenResponse createAdminToken(final AdminLoginRequest request) { | ||
validateNotNullRequest(request); | ||
validateAdminLoginInformation(request); | ||
final String accessToken = tokenProvider.createToken(String.valueOf(adminMemberId)); | ||
|
||
return new AdminTokenResponse(accessToken); | ||
} | ||
|
||
private void validateNotNullRequest(final AdminLoginRequest request) { | ||
if (request == null) { | ||
throw new LoginException(LoginExceptionType.NOT_FOUND_ADMIN_LOGIN_INFORMATION); | ||
} | ||
} | ||
|
||
private void validateAdminLoginInformation(final AdminLoginRequest request) { | ||
if (!(request.getId().equals(adminId) && request.getPassword().equals(adminPassword))) { | ||
throw new LoginException(LoginExceptionType.INVALID_ADMIN_LOGIN_INFORMATION); | ||
} | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
...end/emm-sale/src/main/java/com/emmsale/admin/login/application/dto/AdminLoginRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.emmsale.admin.login.application.dto; | ||
|
||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Getter | ||
@RequiredArgsConstructor | ||
public class AdminLoginRequest { | ||
|
||
final String id; | ||
final String password; | ||
|
||
} |
11 changes: 11 additions & 0 deletions
11
...nd/emm-sale/src/main/java/com/emmsale/admin/login/application/dto/AdminTokenResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.emmsale.admin.login.application.dto; | ||
|
||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
@Getter | ||
public class AdminTokenResponse { | ||
|
||
private final String accessToken; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
...end/emm-sale/src/test/java/com/emmsale/admin/login/application/AdminLoginServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
package com.emmsale.admin.login.application; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.BDDMockito.given; | ||
|
||
import com.emmsale.admin.login.application.dto.AdminLoginRequest; | ||
import com.emmsale.admin.login.application.dto.AdminTokenResponse; | ||
import com.emmsale.helper.ServiceIntegrationTestHelper; | ||
import com.emmsale.login.exception.LoginException; | ||
import com.emmsale.login.exception.LoginExceptionType; | ||
import com.emmsale.login.utils.JwtTokenProvider; | ||
import org.assertj.core.api.Assertions; | ||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.boot.test.context.SpringBootTest; | ||
import org.springframework.boot.test.mock.mockito.MockBean; | ||
|
||
@SpringBootTest | ||
class AdminLoginServiceTest extends ServiceIntegrationTestHelper { | ||
|
||
@Autowired | ||
private AdminLoginService adminLoginService; | ||
@MockBean | ||
private JwtTokenProvider tokenProvider; | ||
@Value("${data.admin_login.id}") | ||
private String adminId; | ||
@Value("${data.admin_login.password}") | ||
private String adminPassword; | ||
@Value("${data.admin_login.member_id}") | ||
private Long adminMemberId; | ||
|
||
@Test | ||
@DisplayName("관리자 아이디, 패스워드로 사용자를 조회하여 토큰을 생성한다.") | ||
void createAdminToken_success() { | ||
// given | ||
final Long memberId = adminMemberId; | ||
final AdminLoginRequest request = new AdminLoginRequest(adminId, adminPassword); | ||
final String expectAccessToken = "expect_access_token"; | ||
given(tokenProvider.createToken(String.valueOf(memberId))).willReturn(expectAccessToken); | ||
|
||
// when | ||
final AdminTokenResponse actualToken = adminLoginService.createAdminToken(request); | ||
|
||
// then | ||
assertEquals(expectAccessToken, actualToken.getAccessToken()); | ||
} | ||
|
||
@Test | ||
@DisplayName("관리자 정보 요청이 null이면 예외를 반환한다.") | ||
void createAdminToken_fail_not_found_request() { | ||
// given | ||
final LoginExceptionType expectExceptionType = LoginExceptionType.NOT_FOUND_ADMIN_LOGIN_INFORMATION; | ||
|
||
// when | ||
final ThrowingCallable actual = () -> adminLoginService.createAdminToken(null); | ||
|
||
// then | ||
Assertions.assertThatThrownBy(actual) | ||
.isInstanceOf(LoginException.class) | ||
.hasMessage(expectExceptionType.errorMessage()); | ||
} | ||
|
||
@Test | ||
@DisplayName("관리자 아이디가 올바르지 않으면 예외를 반환한다.") | ||
void createAdminToken_fail_invalid_id() { | ||
// given | ||
final AdminLoginRequest request = new AdminLoginRequest("invalid", adminPassword); | ||
final LoginExceptionType expectExceptionType = LoginExceptionType.INVALID_ADMIN_LOGIN_INFORMATION; | ||
|
||
// when | ||
final ThrowingCallable actual = () -> adminLoginService.createAdminToken( | ||
request); | ||
|
||
// then | ||
Assertions.assertThatThrownBy(actual) | ||
.isInstanceOf(LoginException.class) | ||
.hasMessage(expectExceptionType.errorMessage()); | ||
} | ||
|
||
@Test | ||
@DisplayName("관리자 패스워드가 올바르지 않으면 예외를 반환한다.") | ||
void createAdminToken_fail_invalid_password() { | ||
// given | ||
final AdminLoginRequest request = new AdminLoginRequest(adminId, "invalid"); | ||
final LoginExceptionType expectExceptionType = LoginExceptionType.INVALID_ADMIN_LOGIN_INFORMATION; | ||
|
||
// when | ||
final ThrowingCallable actual = () -> adminLoginService.createAdminToken( | ||
request); | ||
|
||
// then | ||
Assertions.assertThatThrownBy(actual) | ||
.isInstanceOf(LoginException.class) | ||
.hasMessage(expectExceptionType.errorMessage()); | ||
} | ||
|
||
} |