Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] docs: Swagger API 문서 업데이트 #313

Merged
merged 14 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 115 additions & 2 deletions backend/src/main/java/reviewme/review/controller/ReviewApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,131 @@
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.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 {

/**
* v2
*/
@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<Void> 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<ReceivedReviewsResponse2> findReceivedReviews2(
@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<TemplateAnswerResponse> findReceivedReviewDetailV2(
@Parameter(
description = "조회할 리뷰 ID",
required = true,
example = "1"
) @PathVariable long id,

@Parameter(
description = "리뷰 그룹 액세스 코드",
required = true
) @RequestHeader("GroupAccessCode") String groupAccessCode);


/**
* v1
*/
@Operation(summary = "리뷰 등록", description = "리뷰 작성 정보를 받아 리뷰를 등록한다.")
@ApiResponses(value = {
@ApiResponse(
Expand Down Expand Up @@ -51,7 +163,8 @@ public interface ReviewApi {
)
)
})
ResponseEntity<Void> createReview(@RequestBody CreateReviewRequest request);
ResponseEntity<Void> createReview(@RequestBody reviewme.review.dto.request.CreateReviewRequest request);



@Operation(summary = "리뷰 작성 정보 요청", description = "리뷰 작성을 위해 필요한 정보를 요청한다.")
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Long> selectedOptionIds,

@Schema(description = "답변 내용", nullable = true)
String text
) {
}
Original file line number Diff line number Diff line change
@@ -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<CreateReviewAnswerRequest> answers
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
public record ReceivedReviewResponse2(

@Schema(description = "리뷰 ID")
long id,
long reviewId,

@Schema(description = "리뷰 작성일")
LocalDate createdAt,
Expand Down
Original file line number Diff line number Diff line change
@@ -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<OptionItemAnswerResponse> options
) {
}
Original file line number Diff line number Diff line change
@@ -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
) {
}
Original file line number Diff line number Diff line change
@@ -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
) {
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package reviewme.review.service.dto.response.detail;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;

@Schema(name = "리뷰 섹션 정보")
public record SectionAnswerResponse(

@Schema(description = "섹션 ID")
long sectionId,

@Schema(description = "말머리")
String header,

@Schema(description = "질문 목록")
List<QuestionAnswerResponse> questions
) {
}
Original file line number Diff line number Diff line change
@@ -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<SectionAnswerResponse> sections
) {
}
Original file line number Diff line number Diff line change
@@ -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<TemplateResponse> getReviewForm(
@Parameter(description = "리뷰 요청 코드", required = true)
@RequestParam String reviewRequestCode
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

@RestController
@RequiredArgsConstructor
public class TemplateController {
public class TemplateController implements TemplateApi {

private final TemplateService templateService;

Expand Down
Original file line number Diff line number Diff line change
@@ -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<OptionItemResponse> options
) {
}
Loading