From e0ddabd0d53ea80804d49fa1df23e0ffe09f10e6 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 19 Sep 2024 16:10:29 +0900 Subject: [PATCH 01/10] =?UTF-8?q?docs:=20=EB=AC=B8=EC=84=9C=ED=99=94?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/controller/LikeController.java | 22 +++++++++++ .../controller/SpringDocsLikeController.java | 38 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 backend/src/main/java/codezap/template/controller/LikeController.java create mode 100644 backend/src/main/java/codezap/template/controller/SpringDocsLikeController.java diff --git a/backend/src/main/java/codezap/template/controller/LikeController.java b/backend/src/main/java/codezap/template/controller/LikeController.java new file mode 100644 index 000000000..f1939933b --- /dev/null +++ b/backend/src/main/java/codezap/template/controller/LikeController.java @@ -0,0 +1,22 @@ +package codezap.template.controller; + +import org.apache.commons.lang3.NotImplementedException; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; + +import codezap.member.dto.MemberDto; + +@Controller +public class LikeController implements SpringDocsLikeController { + + @PostMapping("like/{templateId}") + public ResponseEntity like(MemberDto memberDto) { + throw new NotImplementedException(); + } + + @PostMapping("dislike/{templateId}") + public ResponseEntity dislike(MemberDto memberDto) { + throw new NotImplementedException(); + } +} diff --git a/backend/src/main/java/codezap/template/controller/SpringDocsLikeController.java b/backend/src/main/java/codezap/template/controller/SpringDocsLikeController.java new file mode 100644 index 000000000..eb84ae2c4 --- /dev/null +++ b/backend/src/main/java/codezap/template/controller/SpringDocsLikeController.java @@ -0,0 +1,38 @@ +package codezap.template.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import codezap.global.swagger.error.ApiErrorResponse; +import codezap.global.swagger.error.ErrorCase; +import codezap.member.dto.MemberDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Tag(name = "좋아요 API", description = "좋아요 기능 관련 API") +public interface SpringDocsLikeController { + + @SecurityRequirement(name = "쿠키 인증 토큰") + @Operation(summary = "좋아요", description = "템플릿을 좋아요 합니다.") + @ApiResponse(responseCode = "200", description = "좋아요 성공") + @ApiErrorResponse(status = HttpStatus.BAD_REQUEST, instance = "/like/1", errorCases = { + @ErrorCase(description = "템플릿 Id 에 해당하는 템플릿이 존재하지 않는 경우", exampleMessage = "식별자 1에 해당하는 템플릿이 존재하지 않습니다.") + }) + @ApiErrorResponse(status = HttpStatus.UNAUTHORIZED, instance = "/like/1", errorCases = { + @ErrorCase(description = "인증 정보에 해당하는 멤버가 없는 경우", exampleMessage = "인증 정보가 정확하지 않습니다.") + }) + ResponseEntity like(MemberDto memberDto); + + @SecurityRequirement(name = "쿠키 인증 토큰") + @Operation(summary = "좋아요 취소", description = "템플릿 좋아요를 취소합니다.") + @ApiResponse(responseCode = "200", description = "좋아요 취소 성공") + @ApiErrorResponse(status = HttpStatus.BAD_REQUEST, instance = "/dislike/1", errorCases = { + @ErrorCase(description = "템플릿 Id 에 해당하는 템플릿이 존재하지 않는 경우", exampleMessage = "식별자 1에 해당하는 템플릿이 존재하지 않습니다.") + }) + @ApiErrorResponse(status = HttpStatus.UNAUTHORIZED, instance = "/dislike/1", errorCases = { + @ErrorCase(description = "인증 정보에 해당하는 멤버가 없는 경우", exampleMessage = "인증 정보가 정확하지 않습니다.") + }) + ResponseEntity dislike(MemberDto memberDto); +} From 8246697d0f1778b2715def9a438465d405817490 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 19 Sep 2024 22:07:15 +0900 Subject: [PATCH 02/10] =?UTF-8?q?docs:=20=ED=85=9C=ED=94=8C=EB=A6=BF=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A0=95=EB=A0=AC=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/controller/SpringDocTemplateController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java b/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java index 2a020f3e6..1d2382aac 100644 --- a/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java +++ b/backend/src/main/java/codezap/template/controller/SpringDocTemplateController.java @@ -72,7 +72,8 @@ public interface SpringDocTemplateController { - 정렬 방식 \n - 최신순 (modifiedAt,asc) - - 오래된순 (modifiedAt,desc) \n + - 오래된순 (modifiedAt,desc) + - 좋아요 수가 많은 순 (like, desc) \n """) @ApiResponse(responseCode = "200", description = "템플릿 검색 성공") @ApiErrorResponse(status = HttpStatus.BAD_REQUEST, From 78fda0031d23a518b51667a2e351c37a3c5e6ab3 Mon Sep 17 00:00:00 2001 From: zangsu Date: Thu, 19 Sep 2024 22:14:19 +0900 Subject: [PATCH 03/10] =?UTF-8?q?docs:=20=EC=A0=84=EC=B2=B4=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=A1=B0=ED=9A=8C=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=88=98,=20=EC=A2=8B=EC=95=84?= =?UTF-8?q?=EC=9A=94=20=EC=97=AC=EB=B6=80=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/FindAllTemplateItemResponse.java | 10 +++++++++- .../service/facade/TemplateApplicationService.java | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/codezap/template/dto/response/FindAllTemplateItemResponse.java b/backend/src/main/java/codezap/template/dto/response/FindAllTemplateItemResponse.java index 6923bd5a1..4c29e592a 100644 --- a/backend/src/main/java/codezap/template/dto/response/FindAllTemplateItemResponse.java +++ b/backend/src/main/java/codezap/template/dto/response/FindAllTemplateItemResponse.java @@ -23,13 +23,17 @@ public record FindAllTemplateItemResponse( List tags, @Schema(description = "썸네일") FindThumbnailResponse thumbnail, + @Schema(description = "좋아요 수", example = "134") + Long likeCount, + @Schema(description = "조회 회원의 좋아요 여부", example = "true") + Boolean isLike, @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 FindAllTemplateItemResponse of( - Template template, List templateTags, SourceCode thumbnailSourceCode + Template template, List templateTags, SourceCode thumbnailSourceCode, Long likeCount, Boolean isLike ) { return new FindAllTemplateItemResponse( template.getId(), @@ -40,6 +44,8 @@ public static FindAllTemplateItemResponse of( .map(tag -> new FindTagResponse(tag.getId(), tag.getName())) .toList(), FindThumbnailResponse.from(thumbnailSourceCode), + likeCount, + isLike, template.getCreatedAt(), template.getModifiedAt() ); @@ -53,6 +59,8 @@ public FindAllTemplateItemResponse updateMember(Member member) { description, tags, thumbnail, + likeCount, + isLike, createdAt, modifiedAt ); diff --git a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java index 07a6a384a..f026efe4d 100644 --- a/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java +++ b/backend/src/main/java/codezap/template/service/facade/TemplateApplicationService.java @@ -71,7 +71,10 @@ private FindAllTemplatesResponse makeTemplatesResponse(Page