From 7d863d164d20e91a147b432a051845c7c867be98 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Fri, 9 Feb 2024 21:38:36 +0000 Subject: [PATCH 01/13] =?UTF-8?q?[ADD]=20=EC=8A=A4=ED=8F=AC=EC=B8=A0=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=20=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/query/dto/response/SportResponse.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/sports/server/query/dto/response/SportResponse.java diff --git a/src/main/java/com/sports/server/query/dto/response/SportResponse.java b/src/main/java/com/sports/server/query/dto/response/SportResponse.java new file mode 100644 index 00000000..17596d18 --- /dev/null +++ b/src/main/java/com/sports/server/query/dto/response/SportResponse.java @@ -0,0 +1,16 @@ +package com.sports.server.query.dto.response; + +import com.sports.server.command.sport.domain.Sport; + +public record SportResponse( + Long id, + String name + +) { + public SportResponse(Sport sport) { + this( + sport.getId(), + sport.getName() + ); + } +} From 411aa4f1d54f7e85888bad95b4fd77abd08b8fe6 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Fri, 9 Feb 2024 21:39:20 +0000 Subject: [PATCH 02/13] =?UTF-8?q?[FEAT]=20=EC=A2=85=EB=AA=A9=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/application/SportQueryService.java | 20 ++++++++++++++++++ .../presentation/SportQueryController.java | 21 +++++++++++++++++++ .../repository/SportQueryRepository.java | 10 +++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/com/sports/server/query/application/SportQueryService.java create mode 100644 src/main/java/com/sports/server/query/presentation/SportQueryController.java create mode 100644 src/main/java/com/sports/server/query/repository/SportQueryRepository.java diff --git a/src/main/java/com/sports/server/query/application/SportQueryService.java b/src/main/java/com/sports/server/query/application/SportQueryService.java new file mode 100644 index 00000000..e00bb751 --- /dev/null +++ b/src/main/java/com/sports/server/query/application/SportQueryService.java @@ -0,0 +1,20 @@ +package com.sports.server.query.application; + +import com.sports.server.query.dto.response.SportResponse; +import com.sports.server.query.repository.SportQueryRepository; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class SportQueryService { + + private final SportQueryRepository sportQueryRepository; + + public List findAll() { + return sportQueryRepository.findAll().stream().map(SportResponse::new).toList(); + } +} diff --git a/src/main/java/com/sports/server/query/presentation/SportQueryController.java b/src/main/java/com/sports/server/query/presentation/SportQueryController.java new file mode 100644 index 00000000..8d481edf --- /dev/null +++ b/src/main/java/com/sports/server/query/presentation/SportQueryController.java @@ -0,0 +1,21 @@ +package com.sports.server.query.presentation; + +import com.sports.server.query.application.SportQueryService; +import com.sports.server.query.dto.response.SportResponse; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/sports") +public class SportQueryController { + + private SportQueryService sportQueryService; + + public ResponseEntity> findAll() { + return ResponseEntity.ok(sportQueryService.findAll()); + } +} diff --git a/src/main/java/com/sports/server/query/repository/SportQueryRepository.java b/src/main/java/com/sports/server/query/repository/SportQueryRepository.java new file mode 100644 index 00000000..401627c9 --- /dev/null +++ b/src/main/java/com/sports/server/query/repository/SportQueryRepository.java @@ -0,0 +1,10 @@ +package com.sports.server.query.repository; + +import com.sports.server.command.record.domain.Record; +import com.sports.server.command.sport.domain.Sport; +import java.util.List; +import org.springframework.data.repository.Repository; + +public interface SportQueryRepository extends Repository { + List findAll(); +} From dc3ba5a514bd349603838e334de45f04ef5e44a0 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Sun, 11 Feb 2024 11:07:26 +0000 Subject: [PATCH 03/13] =?UTF-8?q?[FIX]=20=EB=88=84=EB=9D=BD=EB=90=9C=20@Ge?= =?UTF-8?q?tMapping102=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/query/presentation/SportQueryController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sports/server/query/presentation/SportQueryController.java b/src/main/java/com/sports/server/query/presentation/SportQueryController.java index 8d481edf..d6a78b52 100644 --- a/src/main/java/com/sports/server/query/presentation/SportQueryController.java +++ b/src/main/java/com/sports/server/query/presentation/SportQueryController.java @@ -5,16 +5,18 @@ import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor -@RequestMapping("/sports") +@RequestMapping("/sports" ) public class SportQueryController { private SportQueryService sportQueryService; + @GetMapping public ResponseEntity> findAll() { return ResponseEntity.ok(sportQueryService.findAll()); } From 129d737b0c183c80db789a0407ad3d668d0663ff Mon Sep 17 00:00:00 2001 From: Jin409 Date: Sun, 11 Feb 2024 11:45:39 +0000 Subject: [PATCH 04/13] =?UTF-8?q?[FIX]=20=EB=88=84=EB=9D=BD=EB=90=9C=20Fin?= =?UTF-8?q?al=20=ED=82=A4=EC=9B=8C=EB=93=9C=20=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/query/presentation/SportQueryController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sports/server/query/presentation/SportQueryController.java b/src/main/java/com/sports/server/query/presentation/SportQueryController.java index d6a78b52..2ca06c7c 100644 --- a/src/main/java/com/sports/server/query/presentation/SportQueryController.java +++ b/src/main/java/com/sports/server/query/presentation/SportQueryController.java @@ -14,10 +14,10 @@ @RequestMapping("/sports" ) public class SportQueryController { - private SportQueryService sportQueryService; + private final SportQueryService sportQueryService; @GetMapping public ResponseEntity> findAll() { return ResponseEntity.ok(sportQueryService.findAll()); } -} +} \ No newline at end of file From d4d3457894e0bd1bfc640f88d1c506dafefb2521 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Sun, 11 Feb 2024 15:49:13 +0000 Subject: [PATCH 05/13] =?UTF-8?q?[FIX]=20Repository=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sports/server/query/repository/SportQueryRepository.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sports/server/query/repository/SportQueryRepository.java b/src/main/java/com/sports/server/query/repository/SportQueryRepository.java index 401627c9..9b4cb509 100644 --- a/src/main/java/com/sports/server/query/repository/SportQueryRepository.java +++ b/src/main/java/com/sports/server/query/repository/SportQueryRepository.java @@ -1,10 +1,9 @@ package com.sports.server.query.repository; -import com.sports.server.command.record.domain.Record; import com.sports.server.command.sport.domain.Sport; import java.util.List; import org.springframework.data.repository.Repository; -public interface SportQueryRepository extends Repository { +public interface SportQueryRepository extends Repository { List findAll(); -} +} \ No newline at end of file From 36edd8d4536b51cf9bfe55a3ae55be7973ac423d Mon Sep 17 00:00:00 2001 From: Jin409 Date: Sun, 11 Feb 2024 15:49:32 +0000 Subject: [PATCH 06/13] =?UTF-8?q?[TEST]=20=EC=8A=A4=ED=8F=AC=EC=B8=A0=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=9D=B8=EC=88=98=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance/SportQueryAcceptanceTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java diff --git a/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java b/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java new file mode 100644 index 00000000..8cbbfcc8 --- /dev/null +++ b/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java @@ -0,0 +1,43 @@ +package com.sports.server.query.acceptance; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import com.sports.server.query.dto.response.SportResponse; +import com.sports.server.support.AcceptanceTest; +import io.restassured.RestAssured; +import io.restassured.response.ExtractableResponse; +import io.restassured.response.Response; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.test.context.jdbc.Sql; + +@Sql("/game-fixture.sql") +public class SportQueryAcceptanceTest extends AcceptanceTest { + + @Test + void 모든_종목을_조회한다() { + + // when + ExtractableResponse response = RestAssured.given().log().all() + .when() + .contentType(MediaType.APPLICATION_JSON_VALUE) + .get("/sports") + .then().log().all() + .extract(); + + // then + List actual = toResponses(response, SportResponse.class); + assertAll( + () -> assertThat(response.statusCode()).isEqualTo(HttpStatus.OK.value()), + () -> assertThat(actual) + .map(SportResponse::id) + .containsExactly(1L, 2L), + () -> assertThat(actual) + .map(SportResponse::name) + .containsExactly("농구", "루미큐브")); + } + +} From 9e85df83971d03e5584d7596804abacafd529104 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Sun, 11 Feb 2024 15:49:53 +0000 Subject: [PATCH 07/13] =?UTF-8?q?[TEST]=20DocumentationTest=20=EC=97=90=20?= =?UTF-8?q?=EC=8A=A4=ED=8F=AC=EC=B8=A0=20=EC=A0=84=EC=B2=B4=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B4=80=EB=A0=A8=20=EC=84=A4=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sports/server/support/DocumentationTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/sports/server/support/DocumentationTest.java b/src/test/java/com/sports/server/support/DocumentationTest.java index 7cf635c7..82399bc8 100644 --- a/src/test/java/com/sports/server/support/DocumentationTest.java +++ b/src/test/java/com/sports/server/support/DocumentationTest.java @@ -19,10 +19,12 @@ import com.sports.server.query.application.GameTeamQueryService; import com.sports.server.query.application.LeagueQueryService; import com.sports.server.query.application.LineupPlayerQueryService; +import com.sports.server.query.application.SportQueryService; import com.sports.server.query.application.TimelineQueryService; import com.sports.server.query.presentation.CheerTalkQueryController; import com.sports.server.query.presentation.GameQueryController; import com.sports.server.query.presentation.LeagueQueryController; +import com.sports.server.query.presentation.SportQueryController; import com.sports.server.query.presentation.TimelineQueryController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; @@ -40,7 +42,8 @@ CheerTalkQueryController.class, GameQueryController.class, LeagueQueryController.class, - TimelineQueryController.class + TimelineQueryController.class, + SportQueryController.class }) @Import({ TimeLogTemplate.class @@ -49,8 +52,8 @@ public class DocumentationTest { private static final OperationRequestPreprocessor HOST_INFO = preprocessRequest(modifyUris() - .scheme("https") - .host("www.api.hufstreaming.site") + .scheme("https" ) + .host("www.api.hufstreaming.site" ) .removePort(), prettyPrint() ); @@ -92,4 +95,7 @@ public class DocumentationTest { @MockBean protected TimelineQueryService timelineQueryService; + + @MockBean + protected SportQueryService sportQueryService; } From 96aad43403dcdb41ed6fd16566d312b45379e487 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Mon, 12 Feb 2024 20:12:31 +0000 Subject: [PATCH 08/13] =?UTF-8?q?[TEST]=20=EC=8A=A4=ED=8F=AC=EC=B8=A0=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SportQueryControllerTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java diff --git a/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java new file mode 100644 index 00000000..ee3383ce --- /dev/null +++ b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java @@ -0,0 +1,47 @@ +package com.sports.server.query.presentation; + +import static org.mockito.BDDMockito.given; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.sports.server.query.dto.response.SportResponse; +import com.sports.server.support.DocumentationTest; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.restdocs.payload.JsonFieldType; +import org.springframework.test.web.servlet.ResultActions; + +public class SportQueryControllerTest extends DocumentationTest { + + @Test + void 종목을_전체_조회한다() throws Exception { + + // given + List responses = List.of( + new SportResponse(1L, "농구"), + new SportResponse(2L, "루미큐브") + ); + + given(sportQueryService.findAll()) + .willReturn(responses); + + // when + ResultActions result = mockMvc.perform(get("/sports") + .contentType(MediaType.APPLICATION_JSON) + ); + + // then + result.andExpect((status().isOk())) + .andDo(RESULT_HANDLER.document( + responseFields( + fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("종목의 ID"), + fieldWithPath("[].name").type(JsonFieldType.STRING).description("종목의 이름") + ) + )); + + } + +} From 135c2a9ebdc7b782e5c1f11757f7dd0c5d56f2d9 Mon Sep 17 00:00:00 2001 From: does Date: Wed, 14 Feb 2024 13:51:09 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[TEST]=20rest=20docs=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=ED=95=B4=EA=B2=B0=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/CheerTalkControllerTest.java | 2 +- .../game/presentation/GameControllerTest.java | 2 +- .../presentation/ReportControllerTest.java | 2 +- .../CheerTalkQueryControllerTest.java | 2 +- .../presentation/GameQueryControllerTest.java | 10 ++--- .../LeagueQueryControllerTest.java | 4 +- .../SportQueryControllerTest.java | 2 +- .../TimelineQueryControllerTest.java | 2 +- .../server/support/DocumentationTest.java | 37 +++---------------- .../sports/server/support/RestDocsConfig.java | 28 ++++++++++++++ 10 files changed, 47 insertions(+), 44 deletions(-) create mode 100644 src/test/java/com/sports/server/support/RestDocsConfig.java diff --git a/src/test/java/com/sports/server/command/cheertalk/presentation/CheerTalkControllerTest.java b/src/test/java/com/sports/server/command/cheertalk/presentation/CheerTalkControllerTest.java index 3600c8aa..5fef5492 100644 --- a/src/test/java/com/sports/server/command/cheertalk/presentation/CheerTalkControllerTest.java +++ b/src/test/java/com/sports/server/command/cheertalk/presentation/CheerTalkControllerTest.java @@ -27,7 +27,7 @@ class CheerTalkControllerTest extends DocumentationTest { ); result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( requestFields( fieldWithPath("content").type(JsonFieldType.STRING).description("응원톡의 내용"), fieldWithPath("gameTeamId").type(JsonFieldType.NUMBER).description("응원하는 게임팀") diff --git a/src/test/java/com/sports/server/command/game/presentation/GameControllerTest.java b/src/test/java/com/sports/server/command/game/presentation/GameControllerTest.java index 0e6e6b43..157a85ac 100644 --- a/src/test/java/com/sports/server/command/game/presentation/GameControllerTest.java +++ b/src/test/java/com/sports/server/command/game/presentation/GameControllerTest.java @@ -32,7 +32,7 @@ public class GameControllerTest extends DocumentationTest { //then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), diff --git a/src/test/java/com/sports/server/command/report/presentation/ReportControllerTest.java b/src/test/java/com/sports/server/command/report/presentation/ReportControllerTest.java index e1858b45..c60d53c1 100644 --- a/src/test/java/com/sports/server/command/report/presentation/ReportControllerTest.java +++ b/src/test/java/com/sports/server/command/report/presentation/ReportControllerTest.java @@ -28,7 +28,7 @@ public class ReportControllerTest extends DocumentationTest { //then result.andExpect((status().isNoContent())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( requestFields( fieldWithPath("cheerTalkId").type(JsonFieldType.NUMBER).description("신고하는 응원톡의 ID") ) diff --git a/src/test/java/com/sports/server/query/presentation/CheerTalkQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/CheerTalkQueryControllerTest.java index d4c69485..38525e23 100644 --- a/src/test/java/com/sports/server/query/presentation/CheerTalkQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/CheerTalkQueryControllerTest.java @@ -51,7 +51,7 @@ public class CheerTalkQueryControllerTest extends DocumentationTest { ); result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( queryParameters( parameterWithName("cursor").description("마지막 응원톡의 ID"), parameterWithName("size").description("조회하고자 하는 응원톡의 개수") diff --git a/src/test/java/com/sports/server/query/presentation/GameQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/GameQueryControllerTest.java index 289744eb..da855396 100644 --- a/src/test/java/com/sports/server/query/presentation/GameQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/GameQueryControllerTest.java @@ -44,7 +44,7 @@ class GameQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), @@ -78,7 +78,7 @@ class GameQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), @@ -121,7 +121,7 @@ class GameQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( queryParameters( parameterWithName("league_id").description("대회의 ID"), parameterWithName("status").description("게임의 상태"), @@ -161,7 +161,7 @@ class GameQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), @@ -205,7 +205,7 @@ class GameQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), diff --git a/src/test/java/com/sports/server/query/presentation/LeagueQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/LeagueQueryControllerTest.java index 0ab20d39..f72b15ff 100644 --- a/src/test/java/com/sports/server/query/presentation/LeagueQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/LeagueQueryControllerTest.java @@ -38,7 +38,7 @@ public class LeagueQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( responseFields( fieldWithPath("[].leagueId").type(JsonFieldType.NUMBER).description("리그의 ID"), fieldWithPath("[].name").type(JsonFieldType.STRING).description("리그의 이름") @@ -67,7 +67,7 @@ public class LeagueQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("leagueId").description("리그의 ID") ), diff --git a/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java index ee3383ce..d2e2f420 100644 --- a/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java @@ -35,7 +35,7 @@ public class SportQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( responseFields( fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("종목의 ID"), fieldWithPath("[].name").type(JsonFieldType.STRING).description("종목의 이름") diff --git a/src/test/java/com/sports/server/query/presentation/TimelineQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/TimelineQueryControllerTest.java index b2095568..39a0ff78 100644 --- a/src/test/java/com/sports/server/query/presentation/TimelineQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/TimelineQueryControllerTest.java @@ -49,7 +49,7 @@ public class TimelineQueryControllerTest extends DocumentationTest { // then result.andExpect((status().isOk())) - .andDo(RESULT_HANDLER.document( + .andDo(restDocsHandler.document( pathParameters( parameterWithName("gameId").description("게임의 ID") ), diff --git a/src/test/java/com/sports/server/support/DocumentationTest.java b/src/test/java/com/sports/server/support/DocumentationTest.java index 82399bc8..4d4ec822 100644 --- a/src/test/java/com/sports/server/support/DocumentationTest.java +++ b/src/test/java/com/sports/server/support/DocumentationTest.java @@ -1,11 +1,5 @@ package com.sports.server.support; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.modifyUris; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; - import com.fasterxml.jackson.databind.ObjectMapper; import com.sports.server.command.cheertalk.application.CheerTalkService; import com.sports.server.command.cheertalk.presentation.CheerTalkController; @@ -14,25 +8,14 @@ import com.sports.server.command.report.application.ReportService; import com.sports.server.command.report.presentation.ReportController; import com.sports.server.common.log.TimeLogTemplate; -import com.sports.server.query.application.CheerTalkQueryService; -import com.sports.server.query.application.GameQueryService; -import com.sports.server.query.application.GameTeamQueryService; -import com.sports.server.query.application.LeagueQueryService; -import com.sports.server.query.application.LineupPlayerQueryService; -import com.sports.server.query.application.SportQueryService; -import com.sports.server.query.application.TimelineQueryService; -import com.sports.server.query.presentation.CheerTalkQueryController; -import com.sports.server.query.presentation.GameQueryController; -import com.sports.server.query.presentation.LeagueQueryController; -import com.sports.server.query.presentation.SportQueryController; -import com.sports.server.query.presentation.TimelineQueryController; +import com.sports.server.query.application.*; +import com.sports.server.query.presentation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; -import org.springframework.restdocs.operation.preprocess.OperationRequestPreprocessor; import org.springframework.test.web.servlet.MockMvc; @WebMvcTest(controllers = { @@ -46,22 +29,14 @@ SportQueryController.class }) @Import({ - TimeLogTemplate.class + TimeLogTemplate.class, + RestDocsConfig.class }) @AutoConfigureRestDocs public class DocumentationTest { - private static final OperationRequestPreprocessor HOST_INFO = preprocessRequest(modifyUris() - .scheme("https" ) - .host("www.api.hufstreaming.site" ) - .removePort(), prettyPrint() - ); - - protected static final RestDocumentationResultHandler RESULT_HANDLER = document( - "{class-name}/{method-name}", - HOST_INFO, - preprocessResponse(prettyPrint()) - ); + @Autowired + protected RestDocumentationResultHandler restDocsHandler; @Autowired protected MockMvc mockMvc; diff --git a/src/test/java/com/sports/server/support/RestDocsConfig.java b/src/test/java/com/sports/server/support/RestDocsConfig.java new file mode 100644 index 00000000..c9a8c9b0 --- /dev/null +++ b/src/test/java/com/sports/server/support/RestDocsConfig.java @@ -0,0 +1,28 @@ +package com.sports.server.support; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation; +import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.restdocs.operation.preprocess.OperationRequestPreprocessor; + +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; + +@TestConfiguration +public class RestDocsConfig { + + private static final OperationRequestPreprocessor HOST_INFO = preprocessRequest(modifyUris() + .scheme("https" ) + .host("www.api.hufstreaming.site" ) + .removePort(), prettyPrint() + ); + + @Bean + public RestDocumentationResultHandler restDocsMockMvcConfigurationCustomizer() { + return MockMvcRestDocumentation.document( + "{class-name}/{method-name}", + HOST_INFO, + preprocessResponse(prettyPrint()) + ); + } +} From efc19c1988c500a673ef009c21ae20831582869f Mon Sep 17 00:00:00 2001 From: Jin409 Date: Wed, 14 Feb 2024 12:58:35 +0000 Subject: [PATCH 10/13] =?UTF-8?q?[DOCS]=20=EC=8A=A4=ED=8F=AC=EC=B8=A0=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94=20=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/docs/asciidoc/api.adoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/docs/asciidoc/api.adoc b/src/docs/asciidoc/api.adoc index 5b735952..0c8aabb5 100644 --- a/src/docs/asciidoc/api.adoc +++ b/src/docs/asciidoc/api.adoc @@ -61,5 +61,13 @@ operation::league-query-controller-test/리그_전체를_조회한다[snippets=' operation::league-query-controller-test/리그의_해당하는_스포츠_전체를_조회한다[snippets='http-request,path-parameters,http-response,response-fields'] == 타임라인 API + === 게임의 타임라인 조회 + operation::timeline-query-controller-test/타임라인을_조회한다[snippets='http-request,path-parameters,http-response,response-fields'] + +== 스포츠 API + +=== 스포츠 전체 조회 + +operation::sport-query-controller-test/종목을_전체_조회한다[snippets='http-request,http-response,response-fields'] \ No newline at end of file From f2c8a4fa54ddce5426cd4e3dc0fd7e8ca71641c0 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Wed, 14 Feb 2024 19:01:12 +0000 Subject: [PATCH 11/13] =?UTF-8?q?[TEST]=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EC=9A=A9=EC=96=B4=EC=97=90=20=EB=A7=9E=EC=B6=B0=20=EC=A2=85?= =?UTF-8?q?=EB=AA=A9=EC=9D=84=20=EB=AA=A8=EB=91=90=20=EC=8A=A4=ED=8F=AC?= =?UTF-8?q?=EC=B8=A0=EB=A1=9C=20=EC=88=98=EC=A0=95=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/acceptance/SportQueryAcceptanceTest.java | 2 +- .../query/presentation/SportQueryControllerTest.java | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java b/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java index 8cbbfcc8..56ef18c0 100644 --- a/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java +++ b/src/test/java/com/sports/server/query/acceptance/SportQueryAcceptanceTest.java @@ -18,7 +18,7 @@ public class SportQueryAcceptanceTest extends AcceptanceTest { @Test - void 모든_종목을_조회한다() { + void 모든_스포츠를_조회한다() { // when ExtractableResponse response = RestAssured.given().log().all() diff --git a/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java index d2e2f420..2cf43e73 100644 --- a/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java +++ b/src/test/java/com/sports/server/query/presentation/SportQueryControllerTest.java @@ -17,7 +17,7 @@ public class SportQueryControllerTest extends DocumentationTest { @Test - void 종목을_전체_조회한다() throws Exception { + void 스포츠를_전체_조회한다() throws Exception { // given List responses = List.of( @@ -37,11 +37,10 @@ public class SportQueryControllerTest extends DocumentationTest { result.andExpect((status().isOk())) .andDo(restDocsHandler.document( responseFields( - fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("종목의 ID"), - fieldWithPath("[].name").type(JsonFieldType.STRING).description("종목의 이름") + fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("스포츠의 ID"), + fieldWithPath("[].name").type(JsonFieldType.STRING).description("스포츠의 이름") ) )); } - -} +} \ No newline at end of file From c5fc90f8c00fc66fe1c7e00fbdc28a68d961045d Mon Sep 17 00:00:00 2001 From: Jin409 Date: Wed, 14 Feb 2024 19:01:46 +0000 Subject: [PATCH 12/13] =?UTF-8?q?[DOCS]=20=EC=82=AC=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8=EC=84=9C=ED=99=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B4=80=EB=A0=A8=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=A3=BC=EC=84=9D=20=EC=B2=98=EB=A6=AC=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/docs/asciidoc/api.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docs/asciidoc/api.adoc b/src/docs/asciidoc/api.adoc index 0c8aabb5..9464b889 100644 --- a/src/docs/asciidoc/api.adoc +++ b/src/docs/asciidoc/api.adoc @@ -56,7 +56,7 @@ operation::report-controller-test/응원톡을_신고한다[snippets='http-reque operation::league-query-controller-test/리그_전체를_조회한다[snippets='http-request,http-response,response-fields'] -=== 리그에 해당하는 스포츠 종목 조회 +=== 리그에 해당하는 스포츠 전체 조회 operation::league-query-controller-test/리그의_해당하는_스포츠_전체를_조회한다[snippets='http-request,path-parameters,http-response,response-fields'] @@ -64,7 +64,7 @@ operation::league-query-controller-test/리그의_해당하는_스포츠_전체 === 게임의 타임라인 조회 -operation::timeline-query-controller-test/타임라인을_조회한다[snippets='http-request,path-parameters,http-response,response-fields'] +// operation::timeline-query-controller-test/타임라인을_조회한다[snippets='http-request,path-parameters,http-response,response-fields'] == 스포츠 API From ae2e23955c4ccdbeea678c2e7bd43043a617f796 Mon Sep 17 00:00:00 2001 From: Jin409 Date: Wed, 14 Feb 2024 19:10:42 +0000 Subject: [PATCH 13/13] =?UTF-8?q?[DOCS]=20=EC=8A=A4=ED=8F=AC=EC=B8=A0=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=ED=99=94=20=EC=B6=94=EA=B0=80=20#102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/docs/api.html | 135 ++++++++---------------- 1 file changed, 46 insertions(+), 89 deletions(-) diff --git a/src/main/resources/static/docs/api.html b/src/main/resources/static/docs/api.html index dacff4ca..fed59e20 100644 --- a/src/main/resources/static/docs/api.html +++ b/src/main/resources/static/docs/api.html @@ -475,7 +475,7 @@

훕치치 관객 서버 API 문서

  • 리그 API
  • 타임라인 API @@ -483,6 +483,11 @@

    훕치치 관객 서버 API 문서

  • 게임의 타임라인 조회
  • +
  • 스포츠 API + +
  • @@ -499,7 +504,7 @@

    POST /cheer-talks HTTP/1.1 Content-Type: application/json;charset=UTF-8 Content-Length: 53 -Host: localhost:8080 +Host: www.api.hufstreaming.site { "content" : "응원해요~", @@ -557,7 +562,7 @@

    GET /games/1/cheer-talks?cursor=1&size=2 HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site
    @@ -700,7 +705,7 @@

    GET /games/1 HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site @@ -843,7 +848,7 @@

    GET /games/1/video HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site @@ -919,7 +924,7 @@

    GET /games?league_id=1&status=PLAYING&sport_id=1&sport_id=2&cursor=12&size=10 HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site @@ -1091,7 +1096,7 @@

    GET /games/1/cheer HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site @@ -1183,7 +1188,7 @@

    GET /games/1/lineup HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site @@ -1323,7 +1328,7 @@

    POST /games/1/cheer HTTP/1.1 Content-Type: application/json;charset=UTF-8 Content-Length: 42 -Host: localhost:8080 +Host: www.api.hufstreaming.site { "gameTeamId" : 1, @@ -1387,7 +1392,7 @@

    POST /reports HTTP/1.1 Content-Type: application/json;charset=UTF-8 Content-Length: 23 -Host: localhost:8080 +Host: www.api.hufstreaming.site { "cheerTalkId" : 1 @@ -1444,7 +1449,7 @@

    GET /leagues HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site
    @@ -1500,19 +1505,19 @@

    -

    리그에 해당하는 스포츠 종목 조회

    +

    리그에 해당하는 스포츠 전체 조회

    -

    HTTP request

    +

    HTTP request

    GET /leagues/1/sports HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site
    -

    Path parameters

    +

    Path parameters

    @@ -1534,7 +1539,7 @@

    Table 1. /leagues/{leagueId}/sports
    @@ -1591,40 +1596,27 @@

    타임라 + +
    +

    스포츠 API

    +
    +
    +

    스포츠 전체 조회

    -

    HTTP request

    +

    HTTP request

    -
    GET /games/1/timeline HTTP/1.1
    +
    GET /sports HTTP/1.1
     Content-Type: application/json;charset=UTF-8
    -Host: localhost:8080
    +Host: www.api.hufstreaming.site

    - ---- - - - - - - - - - - - - -
    Table 1. /games/{gameId}/timeline
    ParameterDescription

    gameId

    게임의 ID

    -
    -
    -

    HTTP response

    +

    HTTP response

    HTTP/1.1 200 OK
    @@ -1632,40 +1624,20 @@ 

    -

    Response fields

    +

    Response fields

    @@ -1681,29 +1653,14 @@

    [].gameQuarter

    -

    - - - - + - - - - - - + - + - - - - - - +

    String

    쿼터의 이름

    [].records[].scoredAt

    [].id

    Number

    득점한 시간

    [].records[].playerName

    String

    득점한 선수의 이름

    종목의 ID

    [].records[].teamName

    [].name

    String

    팀 이름

    [].records[].score

    Number

    득점한 점수

    종목의 이름

    @@ -1715,7 +1672,7 @@