From b14a9e54dfb89d672f1958b994edf5d9cca7de65 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 14:49:28 +0900 Subject: [PATCH 01/12] =?UTF-8?q?refactor:=20dto=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=98=20=EC=97=90=EB=9F=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/reviewme/template/service/TemplateMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/reviewme/template/service/TemplateMapper.java b/backend/src/main/java/reviewme/template/service/TemplateMapper.java index cf721ad04..c50c52db3 100644 --- a/backend/src/main/java/reviewme/template/service/TemplateMapper.java +++ b/backend/src/main/java/reviewme/template/service/TemplateMapper.java @@ -71,7 +71,7 @@ private QuestionResponse mapToQuestionResponse(SectionQuestion sectionQuestion) question.getId(), question.isRequired(), question.getContent(), - question.getContent(), + question.getQuestionType().name(), optionGroupResponse, question.hasGuideline(), question.getGuideline() From 9c65cf9108667cf23664f5312f3e3ee0ae42d34e Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 14:50:01 +0900 Subject: [PATCH 02/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=ED=8F=BC=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20dto=EC=97=90=20Swagger=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/OptionGroupResponse.java | 9 +++++++++ .../template/dto/response/OptionItemResponse.java | 6 ++++++ .../template/dto/response/QuestionResponse.java | 15 +++++++++++++++ .../template/dto/response/SectionResponse.java | 11 +++++++++++ .../template/dto/response/TemplateResponse.java | 9 +++++++++ 5 files changed, 50 insertions(+) diff --git a/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java b/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java index 7fe5732ed..74ec6fcde 100644 --- a/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/OptionGroupResponse.java @@ -1,12 +1,21 @@ package reviewme.template.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(name = "옵션 그룹 응답") public record OptionGroupResponse( + @Schema(description = "옵션 그룹 ID") long optionGroupId, + + @Schema(description = "최소 선택 수") int minCount, + + @Schema(description = "최대 선택 수") int maxCount, + + @Schema(description = "옵션 목록") List options ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java b/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java index a96160598..00efe0cf0 100644 --- a/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/OptionItemResponse.java @@ -1,8 +1,14 @@ package reviewme.template.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(name = "옵션 응답") public record OptionItemResponse( + @Schema(description = "옵션 ID") long optionId, + + @Schema(description = "내용") String content ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java index 8c8a9582d..25b5cc6c6 100644 --- a/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java @@ -1,15 +1,30 @@ package reviewme.template.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; +@Schema(name = "질문 응답") public record QuestionResponse( + @Schema(description = "질문 ID") long questionId, + + @Schema(description = "필수 여부") boolean required, + + @Schema(description = "질문") String content, + + @Schema(description = "질문 유형", examples = {"CHECKBOX", "TEXT"}) String questionType, + + @Schema(description = "옵션 그룹", nullable = true) @Nullable OptionGroupResponse optionGroup, + + @Schema(description = "가이드라인 제공 여부") boolean hasGuideline, + + @Schema(description = "가이드라인", nullable = true) @Nullable String guideline ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java index 5cdc9a3a5..e1fe93b20 100644 --- a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java @@ -1,14 +1,25 @@ package reviewme.template.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import java.util.List; +@Schema(name = "섹션 응답") public record SectionResponse( + @Schema(description = "섹션 ID") long sectionId, + + @Schema(description = "노출 조건", examples = {"ALWAYS", "CONDITIONAL"}) String visible, + + @Schema(description = "선택된 옵션 ID", nullable = true) @Nullable Long onSelectedOptionId, + + @Schema(description = "말머리") String header, + + @Schema(description = "질문 목록") List questions ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java index 8df16a786..a11d4ca03 100644 --- a/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java @@ -1,12 +1,21 @@ package reviewme.template.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(name = "리뷰 폼 응답") public record TemplateResponse( + @Schema(description = "폼 ID") long formId, + + @Schema(description = "리뷰이명") String revieweeName, + + @Schema(description = "프로젝트명") String projectName, + + @Schema(description = "섹션 목록") List sections ) { } From e18f5ff4c46245ef2caf1e25c123b0a747df3b31 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 14:50:16 +0900 Subject: [PATCH 03/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=ED=8F=BC=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC?= =?UTF-8?q?=EC=97=90=20Swagger=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/controller/TemplateApi.java | 51 +++++++++++++++++++ .../controller/TemplateController.java | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/reviewme/template/controller/TemplateApi.java diff --git a/backend/src/main/java/reviewme/template/controller/TemplateApi.java b/backend/src/main/java/reviewme/template/controller/TemplateApi.java new file mode 100644 index 000000000..b44927a87 --- /dev/null +++ b/backend/src/main/java/reviewme/template/controller/TemplateApi.java @@ -0,0 +1,51 @@ +package reviewme.template.controller; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestParam; +import reviewme.template.dto.response.TemplateResponse; + +@Tag(name = "리뷰 폼 관리") +public interface TemplateApi { + + @Operation(summary = "리뷰 폼 요청", description = "리뷰 작성을 위한 리뷰 폼을 요청한다.") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "응답 성공 : 리뷰 폼 응답", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + schema = @Schema(implementation = TemplateResponse.class) + ) + ), + @ApiResponse( + responseCode = "400", + description = "응답 실패 : 올바르지 않은 리뷰 요청 코드입니다.", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + examples = @ExampleObject(value = """ + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "올바르지 않은 리뷰 요청 코드입니다.", + "instance": "/reviews/write" + } + """) + ) + ) + }) + ResponseEntity getReviewForm( + @Parameter(description = "리뷰 요청 코드", required = true) + @RequestParam String reviewRequestCode + ); +} diff --git a/backend/src/main/java/reviewme/template/controller/TemplateController.java b/backend/src/main/java/reviewme/template/controller/TemplateController.java index dad6acd04..7f0d463bd 100644 --- a/backend/src/main/java/reviewme/template/controller/TemplateController.java +++ b/backend/src/main/java/reviewme/template/controller/TemplateController.java @@ -10,7 +10,7 @@ @RestController @RequiredArgsConstructor -public class TemplateController { +public class TemplateController implements TemplateApi { private final TemplateService templateService; From c022de895bc66d75fdf218fb9141e8e80b927871 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:01:35 +0900 Subject: [PATCH 04/12] =?UTF-8?q?docs:=20swagger=20examples=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/template/dto/response/SectionResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java index e1fe93b20..73d7fe8e6 100644 --- a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java @@ -10,7 +10,7 @@ public record SectionResponse( @Schema(description = "섹션 ID") long sectionId, - @Schema(description = "노출 조건", examples = {"ALWAYS", "CONDITIONAL"}) + @Schema(description = "노출 조건") String visible, @Schema(description = "선택된 옵션 ID", nullable = true) From 2b91baff4a5ae3c771b12f367ffa5f16dba837b2 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:16:43 +0900 Subject: [PATCH 05/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=EC=93=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=9A=94=EC=B2=AD=20dto=EC=97=90=20Swagger=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/request/create/CreateReviewAnswerRequest.java | 8 ++++++++ .../review/dto/request/create/CreateReviewRequest.java | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewAnswerRequest.java b/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewAnswerRequest.java index f7992e6d9..63908c848 100644 --- a/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewAnswerRequest.java +++ b/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewAnswerRequest.java @@ -1,10 +1,18 @@ package reviewme.review.dto.request.create; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(name = "리뷰 답변 내용") public record CreateReviewAnswerRequest( + + @Schema(description = "질문 ID") long questionId, + + @Schema(description = "선택된 옵션 ID 목록", nullable = true) List selectedOptionIds, + + @Schema(description = "답변 내용", nullable = true) String text ) { } diff --git a/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewRequest.java b/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewRequest.java index 7c0fc347d..962e91569 100644 --- a/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewRequest.java +++ b/backend/src/main/java/reviewme/review/dto/request/create/CreateReviewRequest.java @@ -1,9 +1,15 @@ package reviewme.review.dto.request.create; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(name = "리뷰 생성 요청") public record CreateReviewRequest( + + @Schema(description = "리뷰 요청 코드") String reviewRequestCode, + + @Schema(description = "답변 목록") List answers ) { } From 711a61027cea731eaab367eb67ac8f6f5de6cf91 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:16:56 +0900 Subject: [PATCH 06/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=EC=93=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=9A=94=EC=B2=AD=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=20Swagger=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/review/controller/ReviewApi.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/reviewme/review/controller/ReviewApi.java b/backend/src/main/java/reviewme/review/controller/ReviewApi.java index 4b1fe10e4..89e3ec256 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewApi.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewApi.java @@ -11,12 +11,13 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; -import reviewme.review.dto.request.CreateReviewRequest; +import reviewme.review.dto.request.create.CreateReviewRequest; import reviewme.review.dto.response.ReceivedReviewsResponse; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; @@ -51,7 +52,36 @@ public interface ReviewApi { ) ) }) - ResponseEntity createReview(@RequestBody CreateReviewRequest request); + ResponseEntity createReview(@RequestBody reviewme.review.dto.request.CreateReviewRequest request); + + + @Operation(summary = "리뷰 등록", description = "리뷰 작성 정보를 받아 리뷰를 등록한다.") + @ApiResponses(value = { + @ApiResponse( + responseCode = "201", + description = "응답 성공 : 리뷰 등록 완료", + headers = { + @Header(name = "Content-Type", description = APPLICATION_JSON_VALUE), + } + ), + @ApiResponse( + responseCode = "400", + description = "응답 실패 : 올바르지 않은 리뷰 요청 코드", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + examples = @ExampleObject(value = """ + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "올바르지 않은 리뷰 요청 코드입니다.", + "instance": "/reviews" + } + """) + ) + ) + }) + ResponseEntity createReview(@Valid @RequestBody CreateReviewRequest request); @Operation(summary = "리뷰 작성 정보 요청", description = "리뷰 작성을 위해 필요한 정보를 요청한다.") From d00bf759b36540dd1ff3820731deea3728c35edf Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:20:25 +0900 Subject: [PATCH 07/12] =?UTF-8?q?docs:=20api=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/review/controller/ReviewApi.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/reviewme/review/controller/ReviewApi.java b/backend/src/main/java/reviewme/review/controller/ReviewApi.java index 89e3ec256..2535ac97d 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewApi.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewApi.java @@ -25,6 +25,9 @@ @Tag(name = "리뷰 관리") public interface ReviewApi { + /** + * v2 + */ @Operation(summary = "리뷰 등록", description = "리뷰 작성 정보를 받아 리뷰를 등록한다.") @ApiResponses(value = { @ApiResponse( @@ -32,7 +35,6 @@ public interface ReviewApi { description = "응답 성공 : 리뷰 등록 완료", headers = { @Header(name = "Content-Type", description = APPLICATION_JSON_VALUE), - @Header(name = "Location", description = "/reviews/{reviewId}") } ), @ApiResponse( @@ -45,16 +47,19 @@ public interface ReviewApi { "type": "about:blank", "title": "Bad Request", "status": 400, - "detail": "올바르지 않은 작성 코드입니다.", - "instance": "/reviews/written" + "detail": "올바르지 않은 리뷰 요청 코드입니다.", + "instance": "/reviews" } """) ) ) }) - ResponseEntity createReview(@RequestBody reviewme.review.dto.request.CreateReviewRequest request); + ResponseEntity createReview(@Valid @RequestBody CreateReviewRequest request); + /** + * v1 + */ @Operation(summary = "리뷰 등록", description = "리뷰 작성 정보를 받아 리뷰를 등록한다.") @ApiResponses(value = { @ApiResponse( @@ -62,6 +67,7 @@ public interface ReviewApi { description = "응답 성공 : 리뷰 등록 완료", headers = { @Header(name = "Content-Type", description = APPLICATION_JSON_VALUE), + @Header(name = "Location", description = "/reviews/{reviewId}") } ), @ApiResponse( @@ -74,14 +80,15 @@ public interface ReviewApi { "type": "about:blank", "title": "Bad Request", "status": 400, - "detail": "올바르지 않은 리뷰 요청 코드입니다.", - "instance": "/reviews" + "detail": "올바르지 않은 작성 코드입니다.", + "instance": "/reviews/written" } """) ) ) }) - ResponseEntity createReview(@Valid @RequestBody CreateReviewRequest request); + ResponseEntity createReview(@RequestBody reviewme.review.dto.request.CreateReviewRequest request); + @Operation(summary = "리뷰 작성 정보 요청", description = "리뷰 작성을 위해 필요한 정보를 요청한다.") From f692c2b9898c910c66651b4cb69c5d480ec757b3 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:22:18 +0900 Subject: [PATCH 08/12] =?UTF-8?q?docs:=20TemplateResponse=20dto=20api=20de?= =?UTF-8?q?scription=20=EB=AA=85=EC=B9=AD=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/template/dto/response/TemplateResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java index a11d4ca03..e0ac347fc 100644 --- a/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/TemplateResponse.java @@ -9,10 +9,10 @@ public record TemplateResponse( @Schema(description = "폼 ID") long formId, - @Schema(description = "리뷰이명") + @Schema(description = "리뷰이 이름") String revieweeName, - @Schema(description = "프로젝트명") + @Schema(description = "프로젝트 이름") String projectName, @Schema(description = "섹션 목록") From aba080813be20ce592690ee0c89316554337873d Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:30:28 +0900 Subject: [PATCH 09/12] =?UTF-8?q?docs:=20=EB=B0=9B=EC=9D=80=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20dto=EC=97=90=20Swagger=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/review/dto/response/ReceivedReviewResponse2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java index 0cf779cc3..4513d43d2 100644 --- a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java +++ b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java @@ -8,7 +8,7 @@ public record ReceivedReviewResponse2( @Schema(description = "리뷰 ID") - long id, + long reviewId, @Schema(description = "리뷰 작성일") LocalDate createdAt, From 3276fc1041851b6ce1d37fc4d5a65c5c584d4fe4 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:30:45 +0900 Subject: [PATCH 10/12] =?UTF-8?q?docs:=20=EB=B0=9B=EC=9D=80=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20Swagger=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/review/controller/ReviewApi.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/backend/src/main/java/reviewme/review/controller/ReviewApi.java b/backend/src/main/java/reviewme/review/controller/ReviewApi.java index 2535ac97d..480f42f7a 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewApi.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewApi.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam; import reviewme.review.dto.request.create.CreateReviewRequest; import reviewme.review.dto.response.ReceivedReviewsResponse; +import reviewme.review.dto.response.ReceivedReviewsResponse2; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; @@ -56,6 +57,38 @@ public interface ReviewApi { }) ResponseEntity createReview(@Valid @RequestBody CreateReviewRequest request); + @Operation(summary = "내가 받은 리뷰 목록 조회", description = "내가 받은 리뷰들을 조회한다.") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "응답 성공 : 리뷰 목록 응답", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + schema = @Schema(implementation = ReceivedReviewsResponse2.class) + ) + ), + @ApiResponse( + responseCode = "400", + description = "응답 실패 : 올바르지 않은 그룹 액세스 코드", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + examples = @ExampleObject(value = """ + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "올바르지 않은 그룹 확인 코드입니다.", + "instance": "/reviews" + } + """) + ) + ) + }) + ResponseEntity findReceivedReviews2( + @Parameter(description = "리뷰 그룹 액세스 코드", required = true) + @RequestHeader("GroupAccessCode") String groupAccessCode + ); + /** * v1 From 11d5a167eb2b462498f2fa7dff04c57441e787d5 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:42:26 +0900 Subject: [PATCH 11/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20dto=20Swagger=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/OptionGroupAnswerResponse.java | 10 +++++++ .../detail/OptionItemAnswerResponse.java | 9 +++++++ .../detail/QuestionAnswerResponse.java | 27 ++++++++++++++++--- .../detail/SectionAnswerResponse.java | 8 ++++++ .../detail/TemplateAnswerResponse.java | 12 +++++++++ .../dto/response/QuestionResponse.java | 6 +++-- .../dto/response/SectionResponse.java | 3 ++- 7 files changed, 69 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionGroupAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionGroupAnswerResponse.java index 894dbaae8..cb0cdcae5 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionGroupAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionGroupAnswerResponse.java @@ -1,11 +1,21 @@ package reviewme.review.service.dto.response.detail; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(name = "옵션 그룹 정보") public record OptionGroupAnswerResponse( + + @Schema(description = "옵션 그룹 ID") long optionGroupId, + + @Schema(description = "최소 선택 수") long minCount, + + @Schema(description = "최대 선택 수") long maxCount, + + @Schema(description = "옵션 목록") List options ) { } diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionItemAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionItemAnswerResponse.java index 6bd424f5f..ca6f3a072 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionItemAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/OptionItemAnswerResponse.java @@ -1,8 +1,17 @@ package reviewme.review.service.dto.response.detail; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(name = "옵션 및 선택 정보") public record OptionItemAnswerResponse( + + @Schema(description = "옵션 ID") long optionId, + + @Schema(description = "내용") String content, + + @Schema(description = "선택 여부") boolean isChecked ) { } diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/QuestionAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/QuestionAnswerResponse.java index 48672e414..db8158eaa 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/QuestionAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/QuestionAnswerResponse.java @@ -1,16 +1,37 @@ package reviewme.review.service.dto.response.detail; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.annotation.Nullable; import reviewme.question.domain.QuestionType; +@Schema(name = "질문 및 답변 정보") public record QuestionAnswerResponse( + + @Schema(description = "질문 ID") long questionId, + + @Schema(description = "필수 여부") boolean required, + + @Schema(description = "질문 유형") QuestionType questionType, + + @Schema(description = "질문") String content, + + @Schema(description = "가이드라인 제공 여부") boolean hasGuideline, - @Nullable String guideline, - @Nullable OptionGroupAnswerResponse optionGroup, - @Nullable String answer + + @Schema(description = "가이드라인", nullable = true) + @Nullable + String guideline, + + @Schema(description = "옵션 그룹", nullable = true) + @Nullable + OptionGroupAnswerResponse optionGroup, + + @Schema(description = "답변", nullable = true) + @Nullable + String answer ) { } diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java index ad2887644..9ce2a21df 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java @@ -1,10 +1,18 @@ package reviewme.review.service.dto.response.detail; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; +@Schema(description = "리뷰 섹션 정보") public record SectionAnswerResponse( + + @Schema(description = "섹션 ID") long sectionId, + + @Schema(description = "말머리") String header, + + @Schema(description = "질문 목록") List questions ) { } diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/TemplateAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/TemplateAnswerResponse.java index 0e838236b..425c852f9 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/TemplateAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/TemplateAnswerResponse.java @@ -1,13 +1,25 @@ package reviewme.review.service.dto.response.detail; +import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; import java.util.List; +@Schema(name = "리뷰 상세 정보") public record TemplateAnswerResponse( + + @Schema(description = "폼 ID") long formId, + + @Schema(description = "리뷰이 이름") String revieweeName, + + @Schema(description = "프로젝트 이름") String projectName, + + @Schema(description = "리뷰 작성일") LocalDate createdAt, + + @Schema(description = "섹션 목록") List sections ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java index 25b5cc6c6..759a65a9c 100644 --- a/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/QuestionResponse.java @@ -19,12 +19,14 @@ public record QuestionResponse( String questionType, @Schema(description = "옵션 그룹", nullable = true) - @Nullable OptionGroupResponse optionGroup, + @Nullable + OptionGroupResponse optionGroup, @Schema(description = "가이드라인 제공 여부") boolean hasGuideline, @Schema(description = "가이드라인", nullable = true) - @Nullable String guideline + @Nullable + String guideline ) { } diff --git a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java index 73d7fe8e6..89bc81e0f 100644 --- a/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java +++ b/backend/src/main/java/reviewme/template/dto/response/SectionResponse.java @@ -14,7 +14,8 @@ public record SectionResponse( String visible, @Schema(description = "선택된 옵션 ID", nullable = true) - @Nullable Long onSelectedOptionId, + @Nullable + Long onSelectedOptionId, @Schema(description = "말머리") String header, From 1940efe8fac93f46afa4feb16ba7b5ea98d56a92 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Mon, 12 Aug 2024 15:47:52 +0900 Subject: [PATCH 12/12] =?UTF-8?q?docs:=20=EB=A6=AC=EB=B7=B0=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20Swagger=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviewme/review/controller/ReviewApi.java | 47 ++++++++++++++++++- .../detail/SectionAnswerResponse.java | 2 +- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/reviewme/review/controller/ReviewApi.java b/backend/src/main/java/reviewme/review/controller/ReviewApi.java index 480f42f7a..9deb9792f 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewApi.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewApi.java @@ -22,6 +22,7 @@ import reviewme.review.dto.response.ReceivedReviewsResponse2; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; +import reviewme.review.service.dto.response.detail.TemplateAnswerResponse; @Tag(name = "리뷰 관리") public interface ReviewApi { @@ -57,6 +58,7 @@ public interface ReviewApi { }) ResponseEntity createReview(@Valid @RequestBody CreateReviewRequest request); + @Operation(summary = "내가 받은 리뷰 목록 조회", description = "내가 받은 리뷰들을 조회한다.") @ApiResponses(value = { @ApiResponse( @@ -85,10 +87,51 @@ public interface ReviewApi { ) }) ResponseEntity findReceivedReviews2( - @Parameter(description = "리뷰 그룹 액세스 코드", required = true) - @RequestHeader("GroupAccessCode") String groupAccessCode + @Parameter( + description = "리뷰 그룹 액세스 코드", + required = true + ) @RequestHeader("GroupAccessCode") String groupAccessCode ); + @Operation(summary = "리뷰 상세 조회", description = "하나의 리뷰를 조회한다.") + @ApiResponses(value = { + @ApiResponse( + responseCode = "200", + description = "응답 성공 : 리뷰 정보 응답", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + schema = @Schema(implementation = TemplateAnswerResponse.class) + ) + ), + @ApiResponse( + responseCode = "400", + description = "응답 실패 : 올바르지 않은 그룹 액세스 코드", + content = @Content( + mediaType = APPLICATION_JSON_VALUE, + examples = @ExampleObject(value = """ + { + "type": "about:blank", + "title": "Bad Request", + "status": 400, + "detail": "올바르지 않은 그룹 확인 코드입니다.", + "instance": "/reviews/{id}" + } + """) + ) + ) + }) + ResponseEntity findReceivedReviewDetailV2( + @Parameter( + description = "조회할 리뷰 ID", + required = true, + example = "1" + ) @PathVariable long id, + + @Parameter( + description = "리뷰 그룹 액세스 코드", + required = true + ) @RequestHeader("GroupAccessCode") String groupAccessCode); + /** * v1 diff --git a/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java b/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java index 9ce2a21df..f0a386d92 100644 --- a/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java +++ b/backend/src/main/java/reviewme/review/service/dto/response/detail/SectionAnswerResponse.java @@ -3,7 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; -@Schema(description = "리뷰 섹션 정보") +@Schema(name = "리뷰 섹션 정보") public record SectionAnswerResponse( @Schema(description = "섹션 ID")