Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 0 additions & 66 deletions src/docs/asciidoc/apis/auth-api.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -65,69 +65,3 @@ operation::auth-update-refresh-token[snippets='http-response,response-fields']
// operation::auth-update-refresh-token-error[snippets='http-response,response-fields']

'''

=== 이메일 인증 코드 발송 (회원 가입)

`POST /members/emails/codes/signup`

회원가입에 사용할 이메일 인증 코드를 요청한 이메일 주소로 발송합니다.

==== 요청 헤더

operation::member-email-auth-code-create[snippets='request-headers']

==== 요청 본문 (JSON)

operation::member-email-auth-code-create[snippets='http-request,request-fields']

==== 성공 응답

성공 시 `201 Created` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답 (이미 가입된 이메일)

operation::member-email-auth-code-create-error[snippets='http-response,response-fields']

'''

=== 이메일 인증 코드 발송 (비밀번호 변경 시)

`POST /members/passwords/reset`

비밀번호 찾기에 사용할 이메일 인증 코드를 요청한 이메일 주소로 발송합니다.

==== 요청 헤더

operation::member-password-auth-code-create[snippets='request-headers']

==== 요청 본문 (JSON)

operation::member-password-auth-code-create[snippets='http-request,request-fields']

==== 성공 응답

성공 시 `201 Created` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답 (이미 가입된 이메일)

operation::member-password-auth-code-create-error[snippets='http-response,response-fields']

'''

=== 이메일 인증 코드 검증

`GET /members/emails/codes/verify`

이메일로 발송된 인증 코드가 올바른지 검증합니다.

==== 쿼리 파라미터

operation::member-email-auth-code-verify[snippets='query-parameters']

==== 성공 응답

인증 성공 시, `200 OK` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답 (잘못된 인증 코드)

operation::member-email-auth-code-verify-error[snippets='http-response,response-fields']
78 changes: 72 additions & 6 deletions src/docs/asciidoc/apis/member-api.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,9 @@ operation::member-quest-property-read[snippets='request-headers']

operation::member-quest-property-read[snippets='http-response,response-fields']

==== 에러 응답

operation::member-quest-property-read-error[snippets='http-response,response-fields']
// ==== 에러 응답
//
// operation::member-quest-property-read-error[snippets='http-response,response-fields']

'''

Expand All @@ -207,9 +207,9 @@ operation::member-password-reset[snippets='http-request,request-fields']

성공 시 `204 No Content` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답

operation::member-password-reset-error[snippets='http-response,response-fields']
// ==== 에러 응답
//
// operation::member-password-reset-error[snippets='http-response,response-fields']

'''

Expand Down Expand Up @@ -328,3 +328,69 @@ operation::member-widget-update[snippets='http-request,request-fields']
// ==== 에러 응답
//
// operation::member-quest-property-update-error[snippets='http-response,response-fields']

=== 이메일 인증 코드 발송 (회원 가입)

`POST /members/emails/codes/signup`

회원가입에 사용할 이메일 인증 코드를 요청한 이메일 주소로 발송합니다.

==== 요청 헤더

operation::member-email-auth-code-create[snippets='request-headers']

==== 요청 본문 (JSON)

operation::member-email-auth-code-create[snippets='http-request,request-fields']

==== 성공 응답

성공 시 `201 Created` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답 (이미 가입된 이메일)

operation::member-email-auth-code-create-error[snippets='http-response,response-fields']

'''

=== 이메일 인증 코드 발송 (비밀번호 변경 시)

`POST /members/emails/codes/passwords/reset`

비밀번호 찾기에 사용할 이메일 인증 코드를 요청한 이메일 주소로 발송합니다.

==== 요청 헤더

operation::member-password-auth-code-create[snippets='request-headers']

==== 요청 본문 (JSON)

operation::member-password-auth-code-create[snippets='http-request,request-fields']

==== 성공 응답

성공 시 `201 Created` 상태 코드와 함께 빈 응답 본문을 반환합니다.

==== 에러 응답 (이미 가입된 이메일)

operation::member-password-auth-code-create-error[snippets='http-response,response-fields']

'''

=== 이메일 인증 코드 검증

`GET /members/emails/codes/verify`

이메일로 발송된 인증 코드가 올바른지 검증합니다.

==== 쿼리 파라미터

operation::member-email-auth-code-verify[snippets='query-parameters']

==== 성공 응답

operation::member-email-auth-code-verify[snippets='http-response,response-fields']

==== 에러 응답 (잘못된 인증 코드)

operation::member-email-auth-code-verify-error[snippets='http-response,response-fields']
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand Down Expand Up @@ -38,8 +36,8 @@ public ResponseEntity<CreateEmailCodeResponse> createForPassword(@RequestBody Cr
return ResponseEntity.status(HttpStatus.CREATED).body(CreateEmailCodeResponse.of(emailCode));
}

@GetMapping("/verify")
public ResponseEntity<VerifyEmailCodeResponse> verify(@ModelAttribute VerifyEmailCodeRequest request) {
@PostMapping("/verify")
public ResponseEntity<VerifyEmailCodeResponse> verify(@RequestBody VerifyEmailCodeRequest request) {
String temporaryToken = verifyEmailCodeUseCase.verify(request.getEmail(), request.getCode());
return ResponseEntity.status(HttpStatus.OK).body(VerifyEmailCodeResponse.of(temporaryToken));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
@Getter
public class ResetPasswordRequest {

private String email;
private String newPassword;
private String temporaryToken;
private final String email;
private final String newPassword;
private final String temporaryToken;

private ResetPasswordRequest(String email, String newPassword, String temporaryToken) {
this.email = email;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.springframework.restdocs.restassured.RestDocumentationFilter;

import com.gomo.app.core.member.documentation.snippet.VerifyEmailAuthCodeSnippet;
import com.gomo.app.core.member.presentation.request.VerifyEmailCodeRequest;
import com.gomo.app.support.auth.application.port.CreateAuthCodePortIn;
import com.gomo.app.support.auth.domain.repository.AuthCodeRepository;
import com.gomo.app.support.auth.exception.AuthErrorCode;
Expand Down Expand Up @@ -44,10 +45,9 @@ void verify_email_auth_code_with_correct_code() {
String authCode = authCodeRepository.findByEmail(sessionEmail).get();
given(this.specification).filter(filter)
.header(CONTENT_TYPE, APPLICATION_JSON_VALUE)
.param("email", sessionEmail)
.param("code", authCode)
.body(VerifyEmailCodeRequest.of(sessionEmail, authCode))
.when()
.get(URL)
.post(URL)
.then()
.statusCode(OK.value());
}
Expand All @@ -57,10 +57,9 @@ void verify_email_auth_code_with_correct_code() {
void verify_email_auth_code_with_incorrect_code() {
given(this.specification).filter(errorFilter)
.header(CONTENT_TYPE, APPLICATION_JSON_VALUE)
.param("email", sessionEmail)
.param("code", "00000")
.body(VerifyEmailCodeRequest.of(sessionEmail, "000000"))
.when()
.get(URL)
.post(URL)
.then()
.statusCode(AuthErrorCode.INVALID_AUTH_CODE.getHttpStatus())
.body("timestamp", instanceOf(String.class))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static org.springframework.restdocs.operation.preprocess.Preprocessors.*;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.*;
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.*;

import org.springframework.restdocs.payload.JsonFieldType;
Expand All @@ -14,9 +13,9 @@
public class VerifyEmailAuthCodeSnippet {
private static final String IDENTIFIER = "member-email-auth-code-verify";

private static final Snippet QUERY_PARAMETERS = queryParameters(
parameterWithName("email").description("인증 코드를 받은 이메일 주소"),
parameterWithName("code").description("이메일로 발송된 인증 코드")
private static final Snippet REQUEST_FIELDS = requestFields(
fieldWithPath("email").description("인증 코드를 받은 이메일 주소"),
fieldWithPath("code").description("이메일로 발송된 인증 코드")
);

private static final Snippet RESPONSE_FIELDS = responseFields(
Expand All @@ -28,7 +27,7 @@ public static RestDocumentationFilter create() {
IDENTIFIER,
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()),
QUERY_PARAMETERS,
REQUEST_FIELDS,
RESPONSE_FIELDS
);
}
Expand All @@ -38,7 +37,7 @@ public static RestDocumentationFilter createError() {
IDENTIFIER + "-error",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()),
QUERY_PARAMETERS,
REQUEST_FIELDS,
ErrorResponseFields.RESPONSE_FIELDS
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import com.gomo.app.test.WithRabbitMQ;
import com.rabbitmq.client.ShutdownSignalException;

@DisplayName("[Infrastructure Integration]: RabbitMQ 접근 테스트")
@DisplayName("[Infrastructure Integration]: RabbitMQ 접근 테스트 (Flaky Test)")
@IntegrationTest
@WithRabbitMQ
class RabbitMQClientTest {
Expand Down