Skip to content

Commit 0fd6146

Browse files
authored
Merge pull request #205 from Re-4aliens/develop
2024-10-22 [Release Note]
2 parents c9e636c + 8eb151a commit 0fd6146

File tree

9 files changed

+223
-0
lines changed

9 files changed

+223
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.aliens.backend.global.response.success;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
public enum InquirySuccess implements SuccessCode {
6+
CREATE_INQUIRY_SUCCESS(HttpStatus.OK, "I001", "문의 등록에 성공했습니다."),
7+
;
8+
9+
private final HttpStatus httpStatus;
10+
private final String code;
11+
private final String message;
12+
13+
InquirySuccess(final HttpStatus httpStatus, final String code, final String message) {
14+
this.httpStatus = httpStatus;
15+
this.code = code;
16+
this.message = message;
17+
}
18+
19+
@Override
20+
public HttpStatus getHttpStatus() {
21+
return httpStatus;
22+
}
23+
24+
@Override
25+
public String getCode() {
26+
return code;
27+
}
28+
29+
@Override
30+
public String getMessage() {
31+
return message;
32+
}
33+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.aliens.backend.inquire;
2+
3+
import com.aliens.backend.auth.controller.dto.LoginMember;
4+
import com.aliens.backend.global.config.resolver.Login;
5+
import com.aliens.backend.global.response.SuccessResponse;
6+
import com.aliens.backend.global.response.success.InquirySuccess;
7+
import com.aliens.backend.inquire.controller.request.InquiryCreateRequest;
8+
import com.aliens.backend.inquire.service.InquiryService;
9+
import org.springframework.web.bind.annotation.PostMapping;
10+
import org.springframework.web.bind.annotation.RequestBody;
11+
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
@RequestMapping("/inquiries")
15+
@RestController
16+
public class InquiryController {
17+
18+
private final InquiryService inquiryService;
19+
20+
public InquiryController(final InquiryService inquiryService) {
21+
this.inquiryService = inquiryService;
22+
}
23+
24+
@PostMapping()
25+
public SuccessResponse<?> createInquiry(@Login final LoginMember loginMember,
26+
@RequestBody final InquiryCreateRequest request) {
27+
inquiryService.createInquiry(request, loginMember);
28+
return SuccessResponse.of(InquirySuccess.CREATE_INQUIRY_SUCCESS);
29+
}
30+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.aliens.backend.inquire.controller.request;
2+
3+
public record InquiryCreateRequest(String content) {
4+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.aliens.backend.inquire.domain;
2+
3+
import jakarta.persistence.*;
4+
5+
@Entity
6+
public class Inquiry {
7+
@Id
8+
@GeneratedValue(strategy = GenerationType.IDENTITY)
9+
@Column(name = "inquiryId")
10+
private Long id;
11+
12+
@Column
13+
private String content;
14+
15+
@Column
16+
private Long memberId;
17+
18+
public Inquiry(String content, Long memberId) {
19+
this.content = content;
20+
this.memberId = memberId;
21+
}
22+
23+
protected Inquiry() {
24+
}
25+
26+
public String getContent() {
27+
return content;
28+
}
29+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.aliens.backend.inquire.repository;
2+
3+
import com.aliens.backend.inquire.domain.Inquiry;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface InquiryRepository extends JpaRepository<Inquiry, Long> {
9+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.aliens.backend.inquire.service;
2+
3+
import com.aliens.backend.auth.controller.dto.LoginMember;
4+
import com.aliens.backend.inquire.controller.request.InquiryCreateRequest;
5+
import com.aliens.backend.inquire.domain.Inquiry;
6+
import com.aliens.backend.inquire.repository.InquiryRepository;
7+
import org.springframework.stereotype.Service;
8+
9+
@Service
10+
public class InquiryService {
11+
private final InquiryRepository inquiryRepository;
12+
13+
public InquiryService(final InquiryRepository inquiryRepository) {
14+
this.inquiryRepository = inquiryRepository;
15+
}
16+
17+
public void createInquiry(final InquiryCreateRequest request, final LoginMember loginMember) {
18+
inquiryRepository.save(new Inquiry(request.content(), loginMember.memberId()));
19+
}
20+
}

src/test/java/com/aliens/backend/docs/BaseRestDocsTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.aliens.backend.chat.controller.ChatReportController;
1212
import com.aliens.backend.email.controller.EmailController;
1313
import com.aliens.backend.global.DummyGenerator;
14+
import com.aliens.backend.inquire.InquiryController;
1415
import com.aliens.backend.member.controller.MemberController;
1516
import com.aliens.backend.notification.controller.NotificationController;
1617
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -51,6 +52,8 @@ public abstract class BaseRestDocsTest {
5152
protected MarketController marketBoardController;
5253
@SpyBean
5354
protected NotificationController notificationController;
55+
@SpyBean
56+
protected InquiryController inquiryController;
5457

5558

5659
@Autowired
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.aliens.backend.docs;
2+
3+
import com.aliens.backend.auth.domain.Member;
4+
import com.aliens.backend.global.response.SuccessResponse;
5+
import com.aliens.backend.global.response.success.InquirySuccess;
6+
import com.aliens.backend.inquire.controller.request.InquiryCreateRequest;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.DisplayName;
9+
import org.junit.jupiter.api.Test;
10+
import org.springframework.http.MediaType;
11+
12+
import static org.mockito.ArgumentMatchers.any;
13+
import static org.mockito.Mockito.doReturn;
14+
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
15+
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post;
16+
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
17+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
18+
19+
class InquiryRestDocsTest extends BaseRestDocsTest {
20+
@BeforeEach
21+
void setUp() {
22+
Member member = dummyGenerator.generateSingleMember();
23+
GIVEN_ACCESS_TOKEN = dummyGenerator.generateAccessToken(member);
24+
}
25+
26+
@Test
27+
@DisplayName("API - 문의 생성")
28+
void createInquiry() throws Exception {
29+
InquiryCreateRequest request = new InquiryCreateRequest("문의 내용");
30+
final SuccessResponse<?> response = SuccessResponse.of(InquirySuccess.CREATE_INQUIRY_SUCCESS);
31+
doReturn(response).when(inquiryController).createInquiry(any(), any());
32+
33+
mockMvc.perform(post("/inquiries")
34+
.contentType(MediaType.APPLICATION_JSON)
35+
.content(objectMapper.writeValueAsString(request))
36+
.header("Authorization", GIVEN_ACCESS_TOKEN)
37+
)
38+
.andExpect(status().isOk())
39+
.andDo(document("inquiry-create",
40+
requestFields(
41+
fieldWithPath("content").description("문의 내용")
42+
),
43+
responseFields(
44+
fieldWithPath("code").description("응답 코드"),
45+
fieldWithPath("result").description("문의 생성 결과 메시지")
46+
)
47+
));
48+
}
49+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.aliens.backend.inquire.service;
2+
3+
import com.aliens.backend.auth.controller.dto.LoginMember;
4+
import com.aliens.backend.auth.domain.Member;
5+
import com.aliens.backend.global.BaseIntegrationTest;
6+
import com.aliens.backend.global.DummyGenerator;
7+
import com.aliens.backend.inquire.controller.request.InquiryCreateRequest;
8+
import com.aliens.backend.inquire.domain.Inquiry;
9+
import com.aliens.backend.inquire.repository.InquiryRepository;
10+
import org.junit.jupiter.api.Assertions;
11+
import org.junit.jupiter.api.BeforeEach;
12+
import org.junit.jupiter.api.DisplayName;
13+
import org.junit.jupiter.api.Test;
14+
import org.springframework.beans.factory.annotation.Autowired;
15+
16+
class InquiryServiceTest extends BaseIntegrationTest {
17+
@Autowired
18+
InquiryService inquiryService;
19+
@Autowired
20+
DummyGenerator dummyGenerator;
21+
@Autowired
22+
InquiryRepository inquiryRepository;
23+
24+
Member givenMember;
25+
LoginMember givenLoginMember;
26+
27+
@BeforeEach
28+
void setUp() {
29+
givenMember = dummyGenerator.generateSingleMember();
30+
givenLoginMember = givenMember.getLoginMember();
31+
}
32+
33+
@Test
34+
@DisplayName("문의 생성")
35+
void blockPartner() {
36+
//Given
37+
InquiryCreateRequest request = new InquiryCreateRequest("문의 내용");
38+
39+
//When
40+
inquiryService.createInquiry(request, givenLoginMember);
41+
42+
//Then
43+
Inquiry inquiry = inquiryRepository.findAll().get(0);
44+
Assertions.assertEquals(request.content(), inquiry.getContent());
45+
}
46+
}

0 commit comments

Comments
 (0)