Skip to content

Commit

Permalink
Merge pull request #517 from woowacourse-teams/docs/495-find-all
Browse files Browse the repository at this point in the history
전체 템플릿 조회 명세 변경 및 카테고리 길이 제약조건 실패 문서 추가
  • Loading branch information
zeus6768 authored Aug 21, 2024
2 parents 26ca6b9 + 8672cac commit fa109a1
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public interface SpringDocCategoryController {
@Header(name = "생성된 카테고리의 API 경로", example = "/categories/1")})
@ApiErrorResponse(status = HttpStatus.BAD_REQUEST, instance = "/categories", errorCases = {
@ErrorCase(description = "모든 필드 중 null인 값이 있는 경우", exampleMessage = "카테고리 이름이 null 입니다."),
@ErrorCase(description = "카테고리 이름이 255자를 초과한 경우", exampleMessage = "카테고리 이름은 최대 255자까지 입력 가능합니다."),
@ErrorCase(description = "카테고리 이름이 15자를 초과한 경우", exampleMessage = "카테고리 이름은 최대 15자까지 입력 가능합니다."),
@ErrorCase(description = "동일한 이름의 카테고리가 존재하는 경우", exampleMessage = "이름이 Spring 인 카테고리가 이미 존재합니다."),
})
ResponseEntity<CreateCategoryResponse> createCategory(
Expand All @@ -48,14 +48,12 @@ ResponseEntity<CreateCategoryResponse> createCategory(
@Operation(summary = "카테고리 수정", description = "해당하는 식별자의 카테고리를 수정합니다.")
@ApiResponse(responseCode = "200", description = "카테고리 수정 성공")
@ApiErrorResponse(status = HttpStatus.BAD_REQUEST, instance = "/categories/1", errorCases = {
@ErrorCase(description = "해당하는 id 값인 카테고리가 없는 경우",
exampleMessage = "식별자 1에 해당하는 카테고리가 존재하지 않습니다."),
@ErrorCase(description = "동일한 이름의 카테고리가 존재하는 경우",
exampleMessage = "이름이 Spring 인 카테고리가 이미 존재합니다."),
@ErrorCase(description = "카테고리 이름이 15자를 초과한 경우", exampleMessage = "카테고리 이름은 최대 15자까지 입력 가능합니다."),
@ErrorCase(description = "해당하는 id 값인 카테고리가 없는 경우", exampleMessage = "식별자 1에 해당하는 카테고리가 존재하지 않습니다."),
@ErrorCase(description = "동일한 이름의 카테고리가 존재하는 경우", exampleMessage = "이름이 Spring 인 카테고리가 이미 존재합니다."),
})
@ApiErrorResponse(status = HttpStatus.FORBIDDEN, instance = "/categories/1", errorCases = {
@ErrorCase(description = "카테고리를 수정할 권한이 없는 경우",
exampleMessage = "해당 카테고리를 수정 또는 삭제할 권한이 없는 유저입니다.")
@ErrorCase(description = "카테고리를 수정할 권한이 없는 경우", exampleMessage = "해당 카테고리를 수정 또는 삭제할 권한이 없는 유저입니다.")
})
ResponseEntity<Void> updateCategory(MemberDto memberDto, Long id, UpdateCategoryRequest updateCategoryRequest);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public interface SpringDocTemplateController {
@ApiErrorResponse(status = HttpStatus.BAD_REQUEST, instance = "/templates", errorCases = {
@ErrorCase(description = "모든 필드 중 null인 값이 있는 경우", exampleMessage = "템플릿 설명이 null 입니다."),
@ErrorCase(description = "템플릿명, 파일명, 소스 코드가 공백일 경우", exampleMessage = "템플릿명이 비어 있거나 공백입니다."),
@ErrorCase(description = "템플릿명, 파일명, 태그명이 255자를 초과한 경우", exampleMessage = "템플릿명은 최대 255자까지 입력 가능합니다."),
@ErrorCase(description = "템플릿명, 파일명이 255자를 초과한 경우", exampleMessage = "템플릿명은 최대 255자까지 입력 가능합니다."),
@ErrorCase(description = "태그명이 30자를 초과한 경우", exampleMessage = "태그명은 최대 30자까지 입력 가능합니다."),
@ErrorCase(description = "소스 코드가 65,535 byte를 초과한 경우",
exampleMessage = "소스 코드는 최대 65,535 Byte까지 입력 가능합니다."),
@ErrorCase(description = "소스 코드 순서가 잘못된 경우", exampleMessage = "소스 코드 순서가 잘못되었습니다."),
Expand Down Expand Up @@ -81,14 +82,9 @@ public interface SpringDocTemplateController {
@ErrorCase(description = "태그 ID가 0개인 경우", exampleMessage = "태그 ID가 0개입니다. 필터링 하지 않을 경우 null로 전달해주세요."),
@ErrorCase(description = "페이지 번호가 1보다 작을 경우", exampleMessage = "페이지 번호는 1 이상이어야 합니다."),
})
@ApiErrorResponse(status = HttpStatus.UNAUTHORIZED,
instance = "/templates?memberId=1&keyword=\"java\"", errorCases = {
@ErrorCase(description = "인증 정보가 없거나 잘못된 경우", exampleMessage = "인증에 실패했습니다."),
@ErrorCase(description = "인증 정보와 멤버 ID가 다른 경우", exampleMessage = "인증 정보에 포함된 멤버 ID와 파라미터로 받은 멤버 ID가 다릅니다."),
})
@ApiErrorResponse(status = HttpStatus.NOT_FOUND,
instance = "/templates?memberId=1&keyword=\"java\"&categoryId=1&tagIds=1,2", errorCases = {
@ErrorCase(description = "인증 정보에 포함된 멤버가 없는 경우", exampleMessage = "식별자 1에 해당하는 멤버가 존재하지 않습니다."),
@ErrorCase(description = "멤버가 없는 경우", exampleMessage = "식별자 1에 해당하는 멤버가 존재하지 않습니다."),
@ErrorCase(description = "카테고리가 없는 경우", exampleMessage = "식별자 1에 해당하는 카테고리가 존재하지 않습니다."),
@ErrorCase(description = "태그가 없는 경우", exampleMessage = "식별자 1에 해당하는 태그가 존재하지 않습니다."),
})
Expand Down Expand Up @@ -133,6 +129,7 @@ ResponseEntity<FindAllTemplatesResponse> getTemplates(
@ErrorCase(description = "모든 필드 중 null인 값이 있는 경우", exampleMessage = "템플릿 설명이 null 입니다."),
@ErrorCase(description = "템플릿명, 파일명, 소스 코드가 공백일 경우", exampleMessage = "템플릿명이 비어 있거나 공백입니다."),
@ErrorCase(description = "템플릿명, 파일명, 태그명이 255자를 초과한 경우", exampleMessage = "템플릿명은 최대 255자까지 입력 가능합니다."),
@ErrorCase(description = "태그명이 30자를 초과한 경우", exampleMessage = "태그명은 최대 30자까지 입력 가능합니다."),
@ErrorCase(description = "소스 코드가 65,535 byte를 초과한 경우",
exampleMessage = "소스 코드는 최대 65,535 Byte까지 입력 가능합니다."),
@ErrorCase(description = "소스 코드 순서가 잘못된 경우", exampleMessage = "소스 코드 순서가 잘못되었습니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,32 @@ public record FindAllTemplatesResponse(
public record ItemResponse(
@Schema(description = "템플릿 ID", example = "0")
Long id,

@Schema(description = "회원 설명")
FindMemberResponse member,

@Schema(description = "템플릿명", example = "스프링 로그인 구현")
String title,

@Schema(description = "템플릿 설명", example = "Jwt 토큰을 이용하여 로그인 기능을 구현합니다.")
String description,

@Schema(description = "태그 목록")
List<FindTagResponse> tags,

@Schema(description = "썸네일")
FindThumbnailResponse thumbnail,

@Schema(description = "템플릿 생성 시간", example = "2024-11-10 12:00:00", type = "string")
LocalDateTime createdAt,

@Schema(description = "템플릿 수정 시간", example = "2024-11-11 12:00:00", type = "string")
LocalDateTime modifiedAt
) {
public static ItemResponse of(Template template, List<Tag> templateTags, SourceCode thumbnailSourceCode) {
return new ItemResponse(
template.getId(),
null,
template.getTitle(),
template.getDescription(),
templateTags.stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package codezap.template.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;

public record FindMemberResponse(
@Schema(description = "회원 식별자", example = "0")
Long id,

@Schema(description = "회원 아이디", example = "code")
String name
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ public record FindTemplateResponse(
@Schema(description = "템플릿 식별자", example = "0")
Long id,

@Schema(description = "회원 설명")
FindMemberResponse member,

@Schema(description = "템플릿 이름", example = "스프링 로그인 구현")
String title,

Expand All @@ -30,12 +33,14 @@ public record FindTemplateResponse(

@Schema(description = "템플릿 생성 시간", example = "2024-11-10 12:00:00", type = "string")
LocalDateTime createdAt,

@Schema(description = "템플릿 수정 시간", example = "2024-11-11 12:00:00", type = "string")
LocalDateTime modifiedAt
) {
public static FindTemplateResponse of(Template template, List<SourceCode> sourceCodes, List<Tag> tags) {
return new FindTemplateResponse(
template.getId(),
null,
template.getTitle(),
template.getDescription(),
mapToFindAllSourceCodeByTemplateResponse(sourceCodes),
Expand Down

0 comments on commit fa109a1

Please sign in to comment.