Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -187,4 +188,57 @@ public ResponseEntity<BaseResponse> getMeetupProject(@PathVariable(name = "meetu
public ResponseEntity<BaseResponse> 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<BaseResponse> 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<BaseResponse> 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<BaseResponse> addBlogReview(@ModelAttribute BlogReviewRequest request) {
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<BaseResponse> updateBlogReview(@ModelAttribute BlogReviewRequest request) {
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<BaseResponse> deleteBlogReview(@PathVariable("id") Long blogReviewId) {
adminService.deleteBlogReview(blogReviewId);
return ResponseEntity.ok(new BaseResponse());
}
}
65 changes: 63 additions & 2 deletions src/main/java/com/kusitms/website/domain/admin/AdminService.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
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.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;
Expand All @@ -19,7 +24,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;
Expand All @@ -38,13 +42,63 @@ 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<TMPBlogReview> findBlogReviews = blogReviewRepository.findAllByOrderByBlogReviewIdDesc();

List<BlogReviewDetailResponse> blogReviewDetails = findBlogReviews.stream()
.map(BlogReviewDetailResponse::new)
.collect(Collectors.toList());

return BlogReviewResponse.builder()
.blogReviewCount(blogReviewDetails.size())
.blogReviewList(blogReviewDetails)
.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
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
public void deleteBlogReview(Long blogReviewId) {
blogReviewRepository.deleteById(blogReviewId);
}

@Transactional(readOnly = true)
public ReviewResponse getReviews() {
List<TMPReview> findReviews = reviewRepository.findAll();

List<ReviewDetailResponse> 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()
Expand Down Expand Up @@ -215,6 +269,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");
Expand Down Expand Up @@ -273,6 +333,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());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.kusitms.website.domain.admin.entity;

public enum BlogReviewActivity {
DOCUMENT_REVIEW,
INTERVIEW_REVIEW,
COMPANY_PROJECT
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,25 @@ public class TMPReview {
@Column(nullable = false)
private String name;

private Integer cardinal;

@Enumerated(EnumType.STRING)
private Team team;

@Column(nullable = false, length = 300)
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;
}

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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<TMPBlogReview, Long> {
List<TMPBlogReview> findAllByOrderByBlogReviewIdDesc();
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<BlogReviewDetailResponse> blogReviewList;
}
Loading
Loading