diff --git a/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java b/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java index 3608e4af5..a14c0796e 100644 --- a/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java +++ b/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java @@ -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 createCategory( @@ -48,14 +48,12 @@ ResponseEntity 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 updateCategory(MemberDto memberDto, Long id, UpdateCategoryRequest updateCategoryRequest); diff --git a/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java b/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java index 245457d9a..a8c1f059c 100644 --- a/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java +++ b/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java @@ -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 = "소스 코드 순서가 잘못되었습니다."), @@ -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에 해당하는 태그가 존재하지 않습니다."), }) @@ -133,6 +129,7 @@ ResponseEntity 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 = "소스 코드 순서가 잘못되었습니다."), diff --git a/backend/src/main/java/codezap/template/dto/response/FindAllTemplatesResponse.java b/backend/src/main/java/codezap/template/dto/response/FindAllTemplatesResponse.java index a0de66f3a..6e7545984 100644 --- a/backend/src/main/java/codezap/template/dto/response/FindAllTemplatesResponse.java +++ b/backend/src/main/java/codezap/template/dto/response/FindAllTemplatesResponse.java @@ -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 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 templateTags, SourceCode thumbnailSourceCode) { return new ItemResponse( template.getId(), + null, template.getTitle(), template.getDescription(), templateTags.stream() diff --git a/backend/src/main/java/codezap/template/dto/response/FindMemberResponse.java b/backend/src/main/java/codezap/template/dto/response/FindMemberResponse.java new file mode 100644 index 000000000..9c8b7c3dd --- /dev/null +++ b/backend/src/main/java/codezap/template/dto/response/FindMemberResponse.java @@ -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 +) { +} diff --git a/backend/src/main/java/codezap/template/dto/response/FindTemplateResponse.java b/backend/src/main/java/codezap/template/dto/response/FindTemplateResponse.java index 897814911..ce49575eb 100644 --- a/backend/src/main/java/codezap/template/dto/response/FindTemplateResponse.java +++ b/backend/src/main/java/codezap/template/dto/response/FindTemplateResponse.java @@ -13,6 +13,9 @@ public record FindTemplateResponse( @Schema(description = "템플릿 식별자", example = "0") Long id, + @Schema(description = "회원 설명") + FindMemberResponse member, + @Schema(description = "템플릿 이름", example = "스프링 로그인 구현") String title, @@ -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 sourceCodes, List tags) { return new FindTemplateResponse( template.getId(), + null, template.getTitle(), template.getDescription(), mapToFindAllSourceCodeByTemplateResponse(sourceCodes),