Skip to content

Commit cdcf9d4

Browse files
committed
THT-Server-250 [App] 회원가입전 계정 문의하기 API
1 parent 71c4bfc commit cdcf9d4

File tree

5 files changed

+126
-0
lines changed

5 files changed

+126
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.tht.thtapis.facade.user;
2+
3+
import com.tht.domain.entity.inquiry.InquiryService;
4+
import com.tht.thtapis.facade.Facade;
5+
import com.tht.thtapis.facade.setting.InquiryRequest;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.transaction.annotation.Transactional;
8+
9+
@Facade
10+
@RequiredArgsConstructor
11+
@Transactional(readOnly = true)
12+
public class InquiryFacade {
13+
14+
private final InquiryService inquiryService;
15+
16+
@Transactional
17+
public void inquiryForLogin(final InquiryRequest request) {
18+
inquiryService.beforeLogin(request.contents(), request.userEmail(), request.isEmailAgree());
19+
}
20+
21+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.tht.thtapis.ui;
2+
3+
import com.tht.thtapis.facade.setting.InquiryRequest;
4+
import com.tht.thtapis.facade.user.InquiryFacade;
5+
import jakarta.validation.Valid;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.http.HttpStatus;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
@RestController
14+
@RequiredArgsConstructor
15+
public class InquiryController {
16+
17+
private final InquiryFacade inquiryFacade;
18+
19+
@PostMapping("/users/login/inquiry")
20+
public ResponseEntity<Object> inquiryUserJoin(@RequestBody @Valid InquiryRequest request) {
21+
22+
inquiryFacade.inquiryForLogin(request);
23+
return ResponseEntity.status(HttpStatus.CREATED).build();
24+
}
25+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.tht.thtapis.documentation;
2+
3+
import com.epages.restdocs.apispec.ResourceSnippetParameters;
4+
import com.epages.restdocs.apispec.Schema;
5+
import com.tht.thtapis.controller.config.ControllerTestConfig;
6+
import com.tht.thtapis.facade.setting.InquiryRequest;
7+
import com.tht.thtapis.facade.user.InquiryFacade;
8+
import com.tht.thtapis.fixture.setting.InquiryRequestFixture;
9+
import com.tht.thtapis.ui.InquiryController;
10+
import org.junit.jupiter.api.DisplayName;
11+
import org.junit.jupiter.api.Test;
12+
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
13+
import org.springframework.boot.test.mock.mockito.MockBean;
14+
import org.springframework.http.MediaType;
15+
import org.springframework.test.web.servlet.ResultActions;
16+
17+
import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document;
18+
import static com.epages.restdocs.apispec.ResourceDocumentation.resource;
19+
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
20+
import static org.springframework.restdocs.operation.preprocess.Preprocessors.*;
21+
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
22+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
23+
24+
@WebMvcTest(InquiryController.class)
25+
class InquiryDocs extends ControllerTestConfig {
26+
27+
@MockBean
28+
InquiryFacade inquiryFacade;
29+
30+
@Test
31+
@DisplayName("로그인 및 회원가입 전 문의하기 docs")
32+
void inquiryDocs() throws Exception {
33+
34+
InquiryRequest request = InquiryRequestFixture.make();
35+
String requestBody = ControllerTestConfig.objectMapper.writeValueAsString(request);
36+
37+
final ResultActions resultActions = mockMvc.perform(post("/users/login/inquiry")
38+
.contentType(MediaType.APPLICATION_JSON)
39+
.accept(MediaType.APPLICATION_JSON)
40+
.content(requestBody)
41+
).andDo(
42+
document("로그인 및 회원가입 전 문의하기",
43+
preprocessRequest(prettyPrint()),
44+
preprocessResponse(prettyPrint()),
45+
resource(
46+
ResourceSnippetParameters.builder()
47+
.tag("유저 - 로그인")
48+
.description("로그인 및 회원가입 전 문의하기")
49+
.requestFields(
50+
fieldWithPath("userEmail").description("문의 답장 받을 이메일"),
51+
fieldWithPath("contents").description("유저 디바이스 키"),
52+
fieldWithPath("isEmailAgree").description("메일 정보동의 제공 여부")
53+
)
54+
.requestSchema(Schema.schema("InquiryRequest"))
55+
.build()
56+
))
57+
);
58+
59+
resultActions.andExpect(status().isCreated());
60+
61+
}
62+
}

tht-core/domain/src/main/java/com/tht/domain/entity/inquiry/InquiryService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ public void receiptInquiry(final String userUuid, final String contents, final S
1717
repository.save(userInquiry);
1818
}
1919

20+
@Transactional
21+
public void beforeLogin(final String contents, final String userEmail, final boolean emailAgree) {
22+
final UserInquiry anonymous = UserInquiry.createForAnonymous(contents, userEmail, emailAgree);
23+
repository.save(anonymous);
24+
}
2025
}

tht-core/domain/src/main/java/com/tht/domain/entity/inquiry/UserInquiry.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,17 @@ public static UserInquiry createInquiry(final String userUuid, final String cont
6363
.inquiryStatus(InquiryStatus.RECEPTION)
6464
.build();
6565
}
66+
67+
public static UserInquiry createForAnonymous(final String contents, final String userEmail, final boolean emailAgree) {
68+
if (!emailAgree) {
69+
throw UserInquiryException.isFalseEmailAgree();
70+
}
71+
72+
return UserInquiry.builder()
73+
.contents(contents)
74+
.userEmail(userEmail)
75+
.isEmailAgree(emailAgree)
76+
.inquiryStatus(InquiryStatus.RECEPTION)
77+
.build();
78+
}
6679
}

0 commit comments

Comments
 (0)