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

전체 템플릿 조회 명세 변경 및 카테고리 길이 제약조건 실패 문서 추가 #517

Merged
merged 3 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
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