From 9c7c4bd95e4603bb2e1693059f491f8f5840a321 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:11:35 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=ED=9B=84=EA=B8=B0=20=EC=9A=94=EC=B2=AD/=EC=9D=91=EB=8B=B5=20DT?= =?UTF-8?q?O=EC=97=90=20cardinal=20=ED=95=84=EB=93=9C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../website/domain/review/dto/request/ReviewRequest.java | 3 +++ .../domain/review/dto/response/ReviewDetailResponse.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java b/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java index 42ca54b..68919f2 100644 --- a/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java +++ b/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java @@ -14,6 +14,9 @@ public class ReviewRequest { @Schema(description = "이름", example = "김큐시") private String name; + @Schema(description = "기수", example = "33") + private Integer cardinal; + @Schema(description = "소속팀", example = "PLANNER, DESIGNER, DEVELOPER") private Team team; diff --git a/src/main/java/com/kusitms/website/domain/review/dto/response/ReviewDetailResponse.java b/src/main/java/com/kusitms/website/domain/review/dto/response/ReviewDetailResponse.java index f6717f2..3e87bc0 100644 --- a/src/main/java/com/kusitms/website/domain/review/dto/response/ReviewDetailResponse.java +++ b/src/main/java/com/kusitms/website/domain/review/dto/response/ReviewDetailResponse.java @@ -15,7 +15,7 @@ public class ReviewDetailResponse { @Schema(description = "이름") private String name; - @Schema(description = "기수") + @Schema(description = "기수", example = "33") private Integer cardinal; @Schema(description = "소속팀") From f95f08a34344b39fd35d9f11da1c73c6e9162f04 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:21:22 +0900 Subject: [PATCH 2/9] =?UTF-8?q?refactor:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=ED=9B=84=EA=B8=B0=20=EC=9A=94=EC=B2=AD/=EC=9D=91=EB=8B=B5=20DT?= =?UTF-8?q?O=EC=97=90=20cardinal=20=ED=95=84=EB=93=9C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kusitms/website/domain/admin/AdminService.java | 3 +-- .../com/kusitms/website/domain/admin/entity/TMPReview.java | 5 ++++- .../website/domain/review/dto/request/ReviewRequest.java | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index 6e34562..403e2e9 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -19,7 +19,6 @@ import com.kusitms.website.domain.review.dto.request.ReviewRequest; import com.kusitms.website.domain.review.dto.response.ReviewDetailResponse; import com.kusitms.website.domain.review.dto.response.ReviewResponse; -import com.kusitms.website.domain.review.entity.Review; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,7 +43,7 @@ public ReviewResponse getReviews() { List findReviews = reviewRepository.findAll(); List reviewDetailResponses = findReviews.stream() - .map(r -> new ReviewDetailResponse(r.getReviewId(), r.getName(), r.getTeam(), r.getReview())) + .map(r -> new ReviewDetailResponse(r.getReviewId(), r.getName(), r.getCardinal(), r.getTeam(), r.getReview())) .collect(Collectors.toList()); return ReviewResponse.builder() diff --git a/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java b/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java index d3e17bb..be5ed30 100644 --- a/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java +++ b/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java @@ -20,6 +20,8 @@ public class TMPReview { @Column(nullable = false) private String name; + private Integer cardinal; + @Enumerated(EnumType.STRING) private Team team; @@ -27,8 +29,9 @@ public class TMPReview { private String review; @Builder - public TMPReview(String name, Team team, String review) { + public TMPReview(String name, Integer cardinal, Team team, String review) { this.name = name; + this.cardinal = cardinal; this.team = team; this.review = review; } diff --git a/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java b/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java index 68919f2..4b45548 100644 --- a/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java +++ b/src/main/java/com/kusitms/website/domain/review/dto/request/ReviewRequest.java @@ -26,6 +26,7 @@ public class ReviewRequest { public static TMPReview from(ReviewRequest request) { return TMPReview.builder() .name(request.getName()) + .cardinal(request.getCardinal()) .team(request.getTeam()) .review(request.getReview()) .build(); From c5b9bce63ee6cef99b569f2ad8b8bf61e2bc09f3 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:23:29 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=ED=9B=84=EA=B8=B0=20=EC=88=98=EC=A0=95=20API=20cardinal=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kusitms/website/domain/admin/AdminService.java | 1 + .../com/kusitms/website/domain/admin/entity/TMPReview.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index 403e2e9..ffb3c3e 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -272,6 +272,7 @@ public void saveReview(ReviewRequest request) { public void updateReview(ReviewRequest request) { TMPReview review = reviewRepository.findById(request.getReviewId()).orElseThrow(); review.update(request.getName(), + request.getCardinal(), request.getTeam(), request.getReview()); } diff --git a/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java b/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java index be5ed30..ede09d0 100644 --- a/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java +++ b/src/main/java/com/kusitms/website/domain/admin/entity/TMPReview.java @@ -36,8 +36,9 @@ public TMPReview(String name, Integer cardinal, Team team, String review) { this.review = review; } - public void update(String name, Team team, String review) { + public void update(String name, Integer cardinal, Team team, String review) { this.name = name; + this.cardinal = cardinal; this.team = team; this.review = review; } From 25b1ee73728137bb85743d9885c41710a8610bb4 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:25:09 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EA=B8=B0=EC=97=85=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kusitms/website/domain/admin/AdminController.java | 10 ++++++++++ .../com/kusitms/website/domain/admin/AdminService.java | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminController.java b/src/main/java/com/kusitms/website/domain/admin/AdminController.java index 17e1a35..f4aea33 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminController.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminController.java @@ -187,4 +187,14 @@ public ResponseEntity getMeetupProject(@PathVariable(name = "meetu public ResponseEntity getCorporateProjects() { return ResponseEntity.ok(new BaseResponse(adminService.getCorporateProjects())); } + + @GetMapping("/admin/corporate/{id}") + @Operation(summary = "기업 프로젝트 상세 조회(test db)", description = "기업 프로젝트의 상세 정보를 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "500", description = "INTER SERVER ERROR", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + public ResponseEntity getCorporateProject(@PathVariable("id") Long corporateId) { + return ResponseEntity.ok(new BaseResponse(adminService.getCorporateProject(corporateId))); + } } diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index ffb3c3e..eca7850 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -214,6 +214,12 @@ public CorporateResponse getCorporateProjects() { .build(); } + @Transactional(readOnly = true) + public CorporateDetailResponse getCorporateProject(Long corporateId) { + TMPCorporateProject findProject = corporateRepository.findById(corporateId).orElseThrow(); + return new CorporateDetailResponse(findProject); + } + @Transactional public void saveCorporate(CorporateRequest request) { String logoUrl = s3Service.uploadFile(request.getLogoFile(), "corporate"); From 12552ae0d7aff28545b56aedace87c5b468cd485 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:32:38 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=ED=9B=84=EA=B8=B0=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EB=B0=8F=20=EB=A0=88=ED=8F=AC=EC=A7=80?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/entity/BlogReviewActivity.java | 7 +++ .../domain/admin/entity/TMPBlogReview.java | 56 +++++++++++++++++++ .../repository/TMPBlogReviewRepository.java | 10 ++++ 3 files changed, 73 insertions(+) create mode 100644 src/main/java/com/kusitms/website/domain/admin/entity/BlogReviewActivity.java create mode 100644 src/main/java/com/kusitms/website/domain/admin/entity/TMPBlogReview.java create mode 100644 src/main/java/com/kusitms/website/domain/admin/repository/TMPBlogReviewRepository.java diff --git a/src/main/java/com/kusitms/website/domain/admin/entity/BlogReviewActivity.java b/src/main/java/com/kusitms/website/domain/admin/entity/BlogReviewActivity.java new file mode 100644 index 0000000..ae6e648 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/admin/entity/BlogReviewActivity.java @@ -0,0 +1,7 @@ +package com.kusitms.website.domain.admin.entity; + +public enum BlogReviewActivity { + DOCUMENT_REVIEW, + INTERVIEW_REVIEW, + COMPANY_PROJECT +} diff --git a/src/main/java/com/kusitms/website/domain/admin/entity/TMPBlogReview.java b/src/main/java/com/kusitms/website/domain/admin/entity/TMPBlogReview.java new file mode 100644 index 0000000..386a181 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/admin/entity/TMPBlogReview.java @@ -0,0 +1,56 @@ +package com.kusitms.website.domain.admin.entity; + +import com.kusitms.website.domain.project.entity.Team; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class TMPBlogReview { + @Id + @Column(name = "blog_review_id", nullable = false) + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long blogReviewId; + + private Integer cardinal; + + @Enumerated(EnumType.STRING) + private Team part; + + @Enumerated(EnumType.STRING) + private BlogReviewActivity activity; + + @Column(name = "thumbnail_url") + private String thumbnailUrl; + + private String title; + + @Column(length = 500) + private String previewText; + + @Builder + public TMPBlogReview(Integer cardinal, Team part, BlogReviewActivity activity, + String thumbnailUrl, String title, String previewText) { + this.cardinal = cardinal; + this.part = part; + this.activity = activity; + this.thumbnailUrl = thumbnailUrl; + this.title = title; + this.previewText = previewText; + } + + public void update(Integer cardinal, Team part, BlogReviewActivity activity, + String thumbnailUrl, String title, String previewText) { + this.cardinal = cardinal; + this.part = part; + this.activity = activity; + this.thumbnailUrl = thumbnailUrl; + this.title = title; + this.previewText = previewText; + } +} diff --git a/src/main/java/com/kusitms/website/domain/admin/repository/TMPBlogReviewRepository.java b/src/main/java/com/kusitms/website/domain/admin/repository/TMPBlogReviewRepository.java new file mode 100644 index 0000000..d01a997 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/admin/repository/TMPBlogReviewRepository.java @@ -0,0 +1,10 @@ +package com.kusitms.website.domain.admin.repository; + +import com.kusitms.website.domain.admin.entity.TMPBlogReview; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface TMPBlogReviewRepository extends JpaRepository { + List findAllByOrderByBlogReviewIdDesc(); +} From 6c407117972768f52c5114844b66028a4f59747a Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:34:42 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=ED=9B=84=EA=B8=B0=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../website/domain/admin/AdminController.java | 10 +++++ .../website/domain/admin/AdminService.java | 19 ++++++++ .../response/BlogReviewDetailResponse.java | 44 +++++++++++++++++++ .../blog/dto/response/BlogReviewResponse.java | 21 +++++++++ 4 files changed, 94 insertions(+) create mode 100644 src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewDetailResponse.java create mode 100644 src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewResponse.java diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminController.java b/src/main/java/com/kusitms/website/domain/admin/AdminController.java index f4aea33..68d5378 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminController.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminController.java @@ -197,4 +197,14 @@ public ResponseEntity getCorporateProjects() { public ResponseEntity getCorporateProject(@PathVariable("id") Long corporateId) { return ResponseEntity.ok(new BaseResponse(adminService.getCorporateProject(corporateId))); } + + @GetMapping("/admin/blog-review") + @Operation(summary = "블로그 후기 리스트(test db)", description = "블로그 후기의 모든 리스트를 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "500", description = "INTER SERVER ERROR", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + public ResponseEntity getBlogReviews() { + return ResponseEntity.ok(new BaseResponse(adminService.getBlogReviews())); + } } diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index eca7850..606519b 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -1,13 +1,17 @@ package com.kusitms.website.domain.admin; import com.kusitms.website.domain.admin.entity.TMPCorporateProject; +import com.kusitms.website.domain.admin.entity.TMPBlogReview; import com.kusitms.website.domain.admin.entity.TMPMeetupProject; import com.kusitms.website.domain.admin.entity.TMPMeetupTeam; import com.kusitms.website.domain.admin.entity.TMPReview; +import com.kusitms.website.domain.admin.repository.TMPBlogReviewRepository; import com.kusitms.website.domain.admin.repository.TMPCorporateRepository; import com.kusitms.website.domain.admin.repository.TMPMeetupRepository; import com.kusitms.website.domain.admin.repository.TMPMeetupTeamRepository; import com.kusitms.website.domain.admin.repository.TMPReviewRepository; +import com.kusitms.website.domain.blog.dto.response.BlogReviewDetailResponse; +import com.kusitms.website.domain.blog.dto.response.BlogReviewResponse; import com.kusitms.website.domain.file.S3Service; import com.kusitms.website.domain.project.dto.request.CorporateRequest; import com.kusitms.website.domain.project.dto.request.MeetupRequest; @@ -37,6 +41,21 @@ public class AdminService { private final TMPMeetupRepository meetupRepository; private final TMPMeetupTeamRepository meetupTeamRepository; private final TMPReviewRepository reviewRepository; + private final TMPBlogReviewRepository blogReviewRepository; + + @Transactional(readOnly = true) + public BlogReviewResponse getBlogReviews() { + List findBlogReviews = blogReviewRepository.findAllByOrderByBlogReviewIdDesc(); + + List blogReviewDetails = findBlogReviews.stream() + .map(BlogReviewDetailResponse::new) + .collect(Collectors.toList()); + + return BlogReviewResponse.builder() + .blogReviewCount(blogReviewDetails.size()) + .blogReviewList(blogReviewDetails) + .build(); + } @Transactional(readOnly = true) public ReviewResponse getReviews() { diff --git a/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewDetailResponse.java b/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewDetailResponse.java new file mode 100644 index 0000000..d863a63 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewDetailResponse.java @@ -0,0 +1,44 @@ +package com.kusitms.website.domain.blog.dto.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.kusitms.website.domain.admin.entity.TMPBlogReview; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +import static com.kusitms.website.global.util.S3Util.s3Url; + +@Getter +@Schema +public class BlogReviewDetailResponse { + @JsonProperty("blog_review_id") + @Schema(description = "블로그 후기 아이디") + private Long blogReviewId; + + @Schema(description = "기수") + private Integer cardinal; + + @Schema(description = "파트") + private String part; + + @Schema(description = "활동") + private String activity; + + @Schema(description = "썸네일 URL") + private String thumbnailUrl; + + @Schema(description = "제목") + private String title; + + @Schema(description = "미리보기 텍스트") + private String previewText; + + public BlogReviewDetailResponse(TMPBlogReview blogReview) { + this.blogReviewId = blogReview.getBlogReviewId(); + this.cardinal = blogReview.getCardinal(); + this.part = blogReview.getPart() == null ? null : blogReview.getPart().name(); + this.activity = blogReview.getActivity() == null ? null : blogReview.getActivity().name(); + this.thumbnailUrl = blogReview.getThumbnailUrl() == null ? null : s3Url + blogReview.getThumbnailUrl(); + this.title = blogReview.getTitle(); + this.previewText = blogReview.getPreviewText(); + } +} diff --git a/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewResponse.java b/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewResponse.java new file mode 100644 index 0000000..77ef106 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/blog/dto/response/BlogReviewResponse.java @@ -0,0 +1,21 @@ +package com.kusitms.website.domain.blog.dto.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; + +import java.util.List; + +@Getter +@Builder +@Schema +public class BlogReviewResponse { + @JsonProperty("blog_review_count") + @Schema(description = "블로그 후기 개수") + private int blogReviewCount; + + @JsonProperty("blog_review_list") + @Schema(description = "블로그 후기 리스트") + private List blogReviewList; +} From 0c5bfd95aba00426cc76215303b8d3e22e986a0b Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:42:49 +0900 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=ED=9B=84=EA=B8=B0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../website/domain/admin/AdminController.java | 12 +++++ .../website/domain/admin/AdminService.java | 12 +++++ .../blog/dto/request/BlogReviewRequest.java | 46 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/main/java/com/kusitms/website/domain/blog/dto/request/BlogReviewRequest.java diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminController.java b/src/main/java/com/kusitms/website/domain/admin/AdminController.java index 68d5378..0546022 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminController.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminController.java @@ -2,6 +2,7 @@ import com.kusitms.website.domain.introduction.IntroService; import com.kusitms.website.domain.introduction.dto.request.IntroRequest; +import com.kusitms.website.domain.blog.dto.request.BlogReviewRequest; import com.kusitms.website.domain.project.dto.request.CorporateRequest; import com.kusitms.website.domain.project.dto.request.MeetupRequest; import com.kusitms.website.domain.review.dto.request.ReviewRequest; @@ -207,4 +208,15 @@ public ResponseEntity getCorporateProject(@PathVariable("id") Long public ResponseEntity getBlogReviews() { return ResponseEntity.ok(new BaseResponse(adminService.getBlogReviews())); } + + @PostMapping(value = "/admin/blog-review", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "블로그 후기 등록(test db)", description = "블로그 후기를 등록합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "등록 성공"), + @ApiResponse(responseCode = "500", description = "INTER SERVER ERROR", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + public ResponseEntity addBlogReview(@ModelAttribute BlogReviewRequest request) { + adminService.saveBlogReview(request); + return ResponseEntity.ok(new BaseResponse()); + } } diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index 606519b..9627b8d 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -12,6 +12,7 @@ import com.kusitms.website.domain.admin.repository.TMPReviewRepository; import com.kusitms.website.domain.blog.dto.response.BlogReviewDetailResponse; import com.kusitms.website.domain.blog.dto.response.BlogReviewResponse; +import com.kusitms.website.domain.blog.dto.request.BlogReviewRequest; import com.kusitms.website.domain.file.S3Service; import com.kusitms.website.domain.project.dto.request.CorporateRequest; import com.kusitms.website.domain.project.dto.request.MeetupRequest; @@ -57,6 +58,17 @@ public BlogReviewResponse getBlogReviews() { .build(); } + @Transactional + public void saveBlogReview(BlogReviewRequest request) { + String thumbnailUrl = null; + if (request.getThumbnailFile() != null && !request.getThumbnailFile().isEmpty()) { + thumbnailUrl = s3Service.uploadFile(request.getThumbnailFile(), "blog-review"); + } + + TMPBlogReview blogReview = BlogReviewRequest.from(request, thumbnailUrl); + blogReviewRepository.save(blogReview); + } + @Transactional(readOnly = true) public ReviewResponse getReviews() { List findReviews = reviewRepository.findAll(); diff --git a/src/main/java/com/kusitms/website/domain/blog/dto/request/BlogReviewRequest.java b/src/main/java/com/kusitms/website/domain/blog/dto/request/BlogReviewRequest.java new file mode 100644 index 0000000..aabdc57 --- /dev/null +++ b/src/main/java/com/kusitms/website/domain/blog/dto/request/BlogReviewRequest.java @@ -0,0 +1,46 @@ +package com.kusitms.website.domain.blog.dto.request; + +import com.kusitms.website.domain.admin.entity.BlogReviewActivity; +import com.kusitms.website.domain.admin.entity.TMPBlogReview; +import com.kusitms.website.domain.project.entity.Team; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.multipart.MultipartFile; + +@Getter +@Setter +@Schema +public class BlogReviewRequest { + @Schema(description = "블로그 후기 ID (PUT API에서 사용)", example = "1") + private Long blogReviewId; + + @Schema(description = "기수", example = "33") + private Integer cardinal; + + @Schema(description = "파트", example = "PLANNER, DESIGNER, DEVELOPER") + private Team part; + + @Schema(description = "활동", example = "DOCUMENT_REVIEW, INTERVIEW_REVIEW, COMPANY_PROJECT") + private BlogReviewActivity activity; + + @Schema(description = "썸네일 이미지 파일") + private MultipartFile thumbnailFile; + + @Schema(description = "제목", example = "면접에서 이런 질문이 나왔어요") + private String title; + + @Schema(description = "미리보기 텍스트", example = "합격에 도움이 됐던 준비 과정을 공유합니다.") + private String previewText; + + public static TMPBlogReview from(BlogReviewRequest request, String thumbnailUrl) { + return TMPBlogReview.builder() + .cardinal(request.getCardinal()) + .part(request.getPart()) + .activity(request.getActivity()) + .thumbnailUrl(thumbnailUrl) + .title(request.getTitle()) + .previewText(request.getPreviewText()) + .build(); + } +} From 7fce9e20aa127150038f43a1aa59489d19deb81d Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:44:22 +0900 Subject: [PATCH 8/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=ED=9B=84=EA=B8=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../website/domain/admin/AdminController.java | 11 +++++++++++ .../website/domain/admin/AdminService.java | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminController.java b/src/main/java/com/kusitms/website/domain/admin/AdminController.java index 0546022..4081293 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminController.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminController.java @@ -219,4 +219,15 @@ public ResponseEntity addBlogReview(@ModelAttribute BlogReviewRequ adminService.saveBlogReview(request); return ResponseEntity.ok(new BaseResponse()); } + + @PutMapping(value = "/admin/blog-review", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @Operation(summary = "블로그 후기 수정(test db)", description = "블로그 후기를 수정합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "수정 성공"), + @ApiResponse(responseCode = "500", description = "INTER SERVER ERROR", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + public ResponseEntity updateBlogReview(@ModelAttribute BlogReviewRequest request) { + adminService.updateBlogReview(request); + return ResponseEntity.ok(new BaseResponse()); + } } diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index 9627b8d..2404820 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -69,6 +69,25 @@ public void saveBlogReview(BlogReviewRequest request) { blogReviewRepository.save(blogReview); } + @Transactional + public void updateBlogReview(BlogReviewRequest request) { + TMPBlogReview blogReview = blogReviewRepository.findById(request.getBlogReviewId()).orElseThrow(); + + String thumbnailUrl = blogReview.getThumbnailUrl(); + if (request.getThumbnailFile() != null && !request.getThumbnailFile().isEmpty()) { + thumbnailUrl = s3Service.uploadFile(request.getThumbnailFile(), "blog-review"); + } + + blogReview.update( + request.getCardinal(), + request.getPart(), + request.getActivity(), + thumbnailUrl, + request.getTitle(), + request.getPreviewText() + ); + } + @Transactional(readOnly = true) public ReviewResponse getReviews() { List findReviews = reviewRepository.findAll(); From 0a6af610077159242e322a086a5cca778065b497 Mon Sep 17 00:00:00 2001 From: JoonKyoLee Date: Tue, 12 May 2026 01:45:04 +0900 Subject: [PATCH 9/9] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9C=EA=B7=B8=ED=9B=84=EA=B8=B0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kusitms/website/domain/admin/AdminController.java | 11 +++++++++++ .../kusitms/website/domain/admin/AdminService.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminController.java b/src/main/java/com/kusitms/website/domain/admin/AdminController.java index 4081293..0c40706 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminController.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminController.java @@ -230,4 +230,15 @@ public ResponseEntity updateBlogReview(@ModelAttribute BlogReviewR adminService.updateBlogReview(request); return ResponseEntity.ok(new BaseResponse()); } + + @DeleteMapping("/admin/blog-review/{id}") + @Operation(summary = "블로그 후기 삭제(test db)", description = "블로그 후기를 삭제합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "삭제 성공"), + @ApiResponse(responseCode = "500", description = "INTER SERVER ERROR", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + public ResponseEntity deleteBlogReview(@PathVariable("id") Long blogReviewId) { + adminService.deleteBlogReview(blogReviewId); + return ResponseEntity.ok(new BaseResponse()); + } } diff --git a/src/main/java/com/kusitms/website/domain/admin/AdminService.java b/src/main/java/com/kusitms/website/domain/admin/AdminService.java index 2404820..716196c 100644 --- a/src/main/java/com/kusitms/website/domain/admin/AdminService.java +++ b/src/main/java/com/kusitms/website/domain/admin/AdminService.java @@ -88,6 +88,11 @@ public void updateBlogReview(BlogReviewRequest request) { ); } + @Transactional + public void deleteBlogReview(Long blogReviewId) { + blogReviewRepository.deleteById(blogReviewId); + } + @Transactional(readOnly = true) public ReviewResponse getReviews() { List findReviews = reviewRepository.findAll();