From c8909b3ab8540b43f40d540b4ba77e9ff9f89544 Mon Sep 17 00:00:00 2001 From: coke98 Date: Mon, 21 Oct 2024 23:47:12 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9D=98=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref: #203 --- .../response/success/InquirySuccess.java | 33 +++++++++++++++++++ .../backend/inquire/InquiryController.java | 30 +++++++++++++++++ .../request/InquiryCreateRequest.java | 4 +++ .../backend/inquire/domain/Inquiry.java | 29 ++++++++++++++++ .../inquire/repository/InquiryRepository.java | 9 +++++ .../inquire/service/InquiryService.java | 20 +++++++++++ 6 files changed, 125 insertions(+) create mode 100644 src/main/java/com/aliens/backend/global/response/success/InquirySuccess.java create mode 100644 src/main/java/com/aliens/backend/inquire/InquiryController.java create mode 100644 src/main/java/com/aliens/backend/inquire/controller/request/InquiryCreateRequest.java create mode 100644 src/main/java/com/aliens/backend/inquire/domain/Inquiry.java create mode 100644 src/main/java/com/aliens/backend/inquire/repository/InquiryRepository.java create mode 100644 src/main/java/com/aliens/backend/inquire/service/InquiryService.java diff --git a/src/main/java/com/aliens/backend/global/response/success/InquirySuccess.java b/src/main/java/com/aliens/backend/global/response/success/InquirySuccess.java new file mode 100644 index 00000000..bc3951b1 --- /dev/null +++ b/src/main/java/com/aliens/backend/global/response/success/InquirySuccess.java @@ -0,0 +1,33 @@ +package com.aliens.backend.global.response.success; + +import org.springframework.http.HttpStatus; + +public enum InquirySuccess implements SuccessCode { + CREATE_INQUIRY_SUCCESS(HttpStatus.OK, "I001", "문의 등록에 성공했습니다."), + ; + + private final HttpStatus httpStatus; + private final String code; + private final String message; + + InquirySuccess(final HttpStatus httpStatus, final String code, final String message) { + this.httpStatus = httpStatus; + this.code = code; + this.message = message; + } + + @Override + public HttpStatus getHttpStatus() { + return httpStatus; + } + + @Override + public String getCode() { + return code; + } + + @Override + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/src/main/java/com/aliens/backend/inquire/InquiryController.java b/src/main/java/com/aliens/backend/inquire/InquiryController.java new file mode 100644 index 00000000..f1f4b5c8 --- /dev/null +++ b/src/main/java/com/aliens/backend/inquire/InquiryController.java @@ -0,0 +1,30 @@ +package com.aliens.backend.inquire; + +import com.aliens.backend.auth.controller.dto.LoginMember; +import com.aliens.backend.global.config.resolver.Login; +import com.aliens.backend.global.response.SuccessResponse; +import com.aliens.backend.global.response.success.InquirySuccess; +import com.aliens.backend.inquire.controller.request.InquiryCreateRequest; +import com.aliens.backend.inquire.service.InquiryService; +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; + +@RequestMapping("/inquiries") +@RestController +public class InquiryController { + + private final InquiryService inquiryService; + + public InquiryController(final InquiryService inquiryService) { + this.inquiryService = inquiryService; + } + + @PostMapping() + public SuccessResponse createInquiry(@Login final LoginMember loginMember, + @RequestBody final InquiryCreateRequest request) { + inquiryService.createInquiry(request, loginMember); + return SuccessResponse.of(InquirySuccess.CREATE_INQUIRY_SUCCESS); + } +} \ No newline at end of file diff --git a/src/main/java/com/aliens/backend/inquire/controller/request/InquiryCreateRequest.java b/src/main/java/com/aliens/backend/inquire/controller/request/InquiryCreateRequest.java new file mode 100644 index 00000000..13f15e7b --- /dev/null +++ b/src/main/java/com/aliens/backend/inquire/controller/request/InquiryCreateRequest.java @@ -0,0 +1,4 @@ +package com.aliens.backend.inquire.controller.request; + +public record InquiryCreateRequest(String content) { +} \ No newline at end of file diff --git a/src/main/java/com/aliens/backend/inquire/domain/Inquiry.java b/src/main/java/com/aliens/backend/inquire/domain/Inquiry.java new file mode 100644 index 00000000..98d9557e --- /dev/null +++ b/src/main/java/com/aliens/backend/inquire/domain/Inquiry.java @@ -0,0 +1,29 @@ +package com.aliens.backend.inquire.domain; + +import jakarta.persistence.*; + +@Entity +public class Inquiry { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "inquiryId") + private Long id; + + @Column + private String content; + + @Column + private Long memberId; + + public Inquiry(String content, Long memberId) { + this.content = content; + this.memberId = memberId; + } + + protected Inquiry() { + } + + public String getContent() { + return content; + } +} \ No newline at end of file diff --git a/src/main/java/com/aliens/backend/inquire/repository/InquiryRepository.java b/src/main/java/com/aliens/backend/inquire/repository/InquiryRepository.java new file mode 100644 index 00000000..ee125f35 --- /dev/null +++ b/src/main/java/com/aliens/backend/inquire/repository/InquiryRepository.java @@ -0,0 +1,9 @@ +package com.aliens.backend.inquire.repository; + +import com.aliens.backend.inquire.domain.Inquiry; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface InquiryRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/aliens/backend/inquire/service/InquiryService.java b/src/main/java/com/aliens/backend/inquire/service/InquiryService.java new file mode 100644 index 00000000..2a637713 --- /dev/null +++ b/src/main/java/com/aliens/backend/inquire/service/InquiryService.java @@ -0,0 +1,20 @@ +package com.aliens.backend.inquire.service; + +import com.aliens.backend.auth.controller.dto.LoginMember; +import com.aliens.backend.inquire.controller.request.InquiryCreateRequest; +import com.aliens.backend.inquire.domain.Inquiry; +import com.aliens.backend.inquire.repository.InquiryRepository; +import org.springframework.stereotype.Service; + +@Service +public class InquiryService { + private final InquiryRepository inquiryRepository; + + public InquiryService(final InquiryRepository inquiryRepository) { + this.inquiryRepository = inquiryRepository; + } + + public void createInquiry(final InquiryCreateRequest request, final LoginMember loginMember) { + inquiryRepository.save(new Inquiry(request.content(), loginMember.memberId())); + } +} \ No newline at end of file From 7ce51c47c900f309d2ab6040d078ba6979ff8cf1 Mon Sep 17 00:00:00 2001 From: coke98 Date: Mon, 21 Oct 2024 23:48:03 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9D=98=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref: #203 --- .../aliens/backend/docs/BaseRestDocsTest.java | 3 ++ .../backend/docs/InquiryRestDocsTest.java | 49 +++++++++++++++++++ .../inquire/service/InquiryServiceTest.java | 46 +++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 src/test/java/com/aliens/backend/docs/InquiryRestDocsTest.java create mode 100644 src/test/java/com/aliens/backend/inquire/service/InquiryServiceTest.java diff --git a/src/test/java/com/aliens/backend/docs/BaseRestDocsTest.java b/src/test/java/com/aliens/backend/docs/BaseRestDocsTest.java index e529918e..e77131d3 100644 --- a/src/test/java/com/aliens/backend/docs/BaseRestDocsTest.java +++ b/src/test/java/com/aliens/backend/docs/BaseRestDocsTest.java @@ -11,6 +11,7 @@ import com.aliens.backend.chat.controller.ChatReportController; import com.aliens.backend.email.controller.EmailController; import com.aliens.backend.global.DummyGenerator; +import com.aliens.backend.inquire.InquiryController; import com.aliens.backend.member.controller.MemberController; import com.aliens.backend.notification.controller.NotificationController; import com.fasterxml.jackson.databind.ObjectMapper; @@ -51,6 +52,8 @@ public abstract class BaseRestDocsTest { protected MarketController marketBoardController; @SpyBean protected NotificationController notificationController; + @SpyBean + protected InquiryController inquiryController; @Autowired diff --git a/src/test/java/com/aliens/backend/docs/InquiryRestDocsTest.java b/src/test/java/com/aliens/backend/docs/InquiryRestDocsTest.java new file mode 100644 index 00000000..3b2c4248 --- /dev/null +++ b/src/test/java/com/aliens/backend/docs/InquiryRestDocsTest.java @@ -0,0 +1,49 @@ +package com.aliens.backend.docs; + +import com.aliens.backend.auth.domain.Member; +import com.aliens.backend.global.response.SuccessResponse; +import com.aliens.backend.global.response.success.InquirySuccess; +import com.aliens.backend.inquire.controller.request.InquiryCreateRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class InquiryRestDocsTest extends BaseRestDocsTest { + @BeforeEach + void setUp() { + Member member = dummyGenerator.generateSingleMember(); + GIVEN_ACCESS_TOKEN = dummyGenerator.generateAccessToken(member); + } + + @Test + @DisplayName("API - 문의 생성") + void createInquiry() throws Exception { + InquiryCreateRequest request = new InquiryCreateRequest("문의 내용"); + final SuccessResponse response = SuccessResponse.of(InquirySuccess.CREATE_INQUIRY_SUCCESS); + doReturn(response).when(inquiryController).createInquiry(any(), any()); + + mockMvc.perform(post("/inquiries") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request)) + .header("Authorization", GIVEN_ACCESS_TOKEN) + ) + .andExpect(status().isOk()) + .andDo(document("inquiry-create", + requestFields( + fieldWithPath("content").description("문의 내용") + ), + responseFields( + fieldWithPath("code").description("응답 코드"), + fieldWithPath("result").description("문의 생성 결과 메시지") + ) + )); + } +} \ No newline at end of file diff --git a/src/test/java/com/aliens/backend/inquire/service/InquiryServiceTest.java b/src/test/java/com/aliens/backend/inquire/service/InquiryServiceTest.java new file mode 100644 index 00000000..54feafcc --- /dev/null +++ b/src/test/java/com/aliens/backend/inquire/service/InquiryServiceTest.java @@ -0,0 +1,46 @@ +package com.aliens.backend.inquire.service; + +import com.aliens.backend.auth.controller.dto.LoginMember; +import com.aliens.backend.auth.domain.Member; +import com.aliens.backend.global.BaseIntegrationTest; +import com.aliens.backend.global.DummyGenerator; +import com.aliens.backend.inquire.controller.request.InquiryCreateRequest; +import com.aliens.backend.inquire.domain.Inquiry; +import com.aliens.backend.inquire.repository.InquiryRepository; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class InquiryServiceTest extends BaseIntegrationTest { + @Autowired + InquiryService inquiryService; + @Autowired + DummyGenerator dummyGenerator; + @Autowired + InquiryRepository inquiryRepository; + + Member givenMember; + LoginMember givenLoginMember; + + @BeforeEach + void setUp() { + givenMember = dummyGenerator.generateSingleMember(); + givenLoginMember = givenMember.getLoginMember(); + } + + @Test + @DisplayName("문의 생성") + void blockPartner() { + //Given + InquiryCreateRequest request = new InquiryCreateRequest("문의 내용"); + + //When + inquiryService.createInquiry(request, givenLoginMember); + + //Then + Inquiry inquiry = inquiryRepository.findAll().get(0); + Assertions.assertEquals(request.content(), inquiry.getContent()); + } +} \ No newline at end of file