diff --git a/src/main/java/com/example/prdoit/config/WebConfig.java b/src/main/java/com/example/prdoit/config/WebConfig.java new file mode 100644 index 0000000..bb808e3 --- /dev/null +++ b/src/main/java/com/example/prdoit/config/WebConfig.java @@ -0,0 +1,18 @@ +package com.example.prdoit.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.nio.file.Watchable; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("http://prdoit-s3-bucket.s3-website.ap-northeast-2.amazonaws.com") + .allowedMethods("GET", "POST", "PUT", "DELETE"); + } +} diff --git a/src/main/java/com/example/prdoit/controller/ContentController.java b/src/main/java/com/example/prdoit/controller/ContentController.java new file mode 100644 index 0000000..3b57f5f --- /dev/null +++ b/src/main/java/com/example/prdoit/controller/ContentController.java @@ -0,0 +1,81 @@ +package com.example.prdoit.controller; + +import com.example.prdoit.dto.content.ContentRequestDto; +import com.example.prdoit.dto.content.ContentUpdateDto; +import com.example.prdoit.exception.CustomException; +import com.example.prdoit.service.content.ContentService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@Slf4j +@CrossOrigin(origins = "*", allowedHeaders = "*") +@RequestMapping("/content") +@RequiredArgsConstructor +public class ContentController { + + private final ContentService contentService; + + @GetMapping() + public ResponseEntity getAllContent(@RequestParam(value = "query", required = false, defaultValue = "all") String query, + @RequestParam(value = "level", required = false, defaultValue = "-1") int level, + @RequestParam(value = "size", required = false, defaultValue = "5") int size, + @RequestParam(value = "page", required = false, defaultValue = "1") int page) { + try{ + if(level == -1){ + return ResponseEntity.ok(contentService.getContentQuery(query, size, page)); + } else { + return ResponseEntity.ok(contentService.getContentQueryWithLevel(query, level, size, page)); + } + } catch (CustomException e) { + log.error("[getAllContent] 컨텐츠 조회 실패", e); + return ResponseEntity.badRequest().body(e.getMessage()); + } catch (Exception e) { + log.error("[getAllContent] 컨텐츠 조회 실패", e); + return ResponseEntity.internalServerError().body("컨텐츠 조회에 실패했습니다."); + } + } + + @PostMapping() + public ResponseEntity postContent(@RequestBody ContentRequestDto contentRequestDto) { + try { + contentService.postContent(contentRequestDto); + return ResponseEntity.ok("컨텐츠 등록에 성공했습니다."); + } catch (CustomException e) { + log.error("[postContent] 컨텐츠 등록 실패", e); + return ResponseEntity.badRequest().body(e.getMessage()); + } catch (Exception e) { + log.error("[postContent] 컨텐츠 등록 실패", e); + return ResponseEntity.internalServerError().body("컨텐츠 등록에 실패했습니다."); + } + } + + @PatchMapping() + public ResponseEntity updateContent(@RequestBody ContentUpdateDto contentUpdateDto) { + try { + contentService.updateContent(contentUpdateDto); + return ResponseEntity.ok("컨텐츠 수정에 성공했습니다."); + } catch (CustomException e) { + log.error("[updateContent] 컨텐츠 수정 실패", e); + return ResponseEntity.badRequest().body(e.getMessage()); + } catch (Exception e) { + log.error("[updateContent] 컨텐츠 수정 실패", e); + return ResponseEntity.internalServerError().body("컨텐츠 수정에 실패했습니다."); + } + } + + @GetMapping("/{contentId}") + public ResponseEntity getContentDetail(@PathVariable String contentId) { + try { + return ResponseEntity.ok(contentService.getContentDetail(contentId)); + } catch (CustomException e) { + log.error("[getContentDetail] 컨텐츠 상세 조회 실패", e); + return ResponseEntity.badRequest().body(e.getMessage()); + } catch (Exception e) { + log.error("[getContentDetail] 컨텐츠 상세 조회 실패", e); + return ResponseEntity.internalServerError().body("컨텐츠 상세 조회에 실패했습니다."); + } + } +} diff --git a/src/main/java/com/example/prdoit/dto/content/ContentDetailDto.java b/src/main/java/com/example/prdoit/dto/content/ContentDetailDto.java new file mode 100644 index 0000000..04e6ecf --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/content/ContentDetailDto.java @@ -0,0 +1,21 @@ +package com.example.prdoit.dto.content; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ContentDetailDto { + + private String contentId; + private String contentTitle; + private String contentContent; + private int contentView; + private int contentLike; + private int contentLevel; + private int isVideo; + private String writer; + +} diff --git a/src/main/java/com/example/prdoit/dto/content/ContentRequestDto.java b/src/main/java/com/example/prdoit/dto/content/ContentRequestDto.java new file mode 100644 index 0000000..eb8ae0c --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/content/ContentRequestDto.java @@ -0,0 +1,18 @@ +package com.example.prdoit.dto.content; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ContentRequestDto { + + private String contentTitle; + private String contentContent; + private int contentLevel; + private int isVideo; + private String userId; + +} diff --git a/src/main/java/com/example/prdoit/dto/ContentResponseDto.java b/src/main/java/com/example/prdoit/dto/content/ContentResponseDto.java similarity index 74% rename from src/main/java/com/example/prdoit/dto/ContentResponseDto.java rename to src/main/java/com/example/prdoit/dto/content/ContentResponseDto.java index eef4397..7c41a15 100644 --- a/src/main/java/com/example/prdoit/dto/ContentResponseDto.java +++ b/src/main/java/com/example/prdoit/dto/content/ContentResponseDto.java @@ -9,9 +9,10 @@ @Builder public class ContentResponseDto { - private int contentId; + private String contentId; private String contentTitle; private int contentView; private int contentLike; - private String contentLevel; + private int contentLevel; + private String writer; } diff --git a/src/main/java/com/example/prdoit/dto/content/ContentUpdateDto.java b/src/main/java/com/example/prdoit/dto/content/ContentUpdateDto.java new file mode 100644 index 0000000..846c378 --- /dev/null +++ b/src/main/java/com/example/prdoit/dto/content/ContentUpdateDto.java @@ -0,0 +1,18 @@ +package com.example.prdoit.dto.content; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ContentUpdateDto { + + private String contentId; + private String contentTitle; + private String contentContent; + private int contentLevel; + private int isVideo; + +} diff --git a/src/main/java/com/example/prdoit/model/CommentCommentTable.java b/src/main/java/com/example/prdoit/model/CommentCommentTable.java index a100e2e..ffea9ba 100644 --- a/src/main/java/com/example/prdoit/model/CommentCommentTable.java +++ b/src/main/java/com/example/prdoit/model/CommentCommentTable.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Entity @Data @AllArgsConstructor @@ -18,6 +20,10 @@ public class CommentCommentTable { private String commentCommentContent; + private String userNickname; + + private LocalDateTime commentCommentDate; + @ManyToOne @JoinColumn(name = "commentId") private CommentTable commentId; diff --git a/src/main/java/com/example/prdoit/model/CommentTable.java b/src/main/java/com/example/prdoit/model/CommentTable.java index 5864724..ca0f6d0 100644 --- a/src/main/java/com/example/prdoit/model/CommentTable.java +++ b/src/main/java/com/example/prdoit/model/CommentTable.java @@ -1,11 +1,14 @@ package com.example.prdoit.model; +import jakarta.annotation.Nullable; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Entity @Data @AllArgsConstructor @@ -21,8 +24,14 @@ public class CommentTable { private String commentNickname; + private LocalDateTime commentDate; + + @ManyToOne + @JoinColumn(name = "contentId", nullable = true) + private ContentTable contentId; + @ManyToOne - @JoinColumn(name = "userId") - private IdTable id; + @JoinColumn(name = "communityId", nullable = true) + private CommunityTable communityId; } diff --git a/src/main/java/com/example/prdoit/model/CommunityTable.java b/src/main/java/com/example/prdoit/model/CommunityTable.java index 23493cd..0832e95 100644 --- a/src/main/java/com/example/prdoit/model/CommunityTable.java +++ b/src/main/java/com/example/prdoit/model/CommunityTable.java @@ -16,8 +16,7 @@ public class CommunityTable { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int communityId; + private String communityId; private String communityContent; diff --git a/src/main/java/com/example/prdoit/model/ContentCommentTable.java b/src/main/java/com/example/prdoit/model/ContentCommentTable.java deleted file mode 100644 index e25cdcd..0000000 --- a/src/main/java/com/example/prdoit/model/ContentCommentTable.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.prdoit.model; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Data -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class ContentCommentTable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int contentCommentId; - - private String contentCommentContent; - - @ManyToOne - @JoinColumn(name = "contentId") - private ContentTable contentId; -} diff --git a/src/main/java/com/example/prdoit/model/ContentReplyTable.java b/src/main/java/com/example/prdoit/model/ContentReplyTable.java deleted file mode 100644 index 4582a28..0000000 --- a/src/main/java/com/example/prdoit/model/ContentReplyTable.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.prdoit.model; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Data -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class ContentReplyTable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int contentReplyId; - - private String contentReplyContent; - - @ManyToOne - @JoinColumn(name = "contentCommentId") - private ContentCommentTable contentCommentId; -} diff --git a/src/main/java/com/example/prdoit/model/ContentTable.java b/src/main/java/com/example/prdoit/model/ContentTable.java index 3d365a5..e4cb944 100644 --- a/src/main/java/com/example/prdoit/model/ContentTable.java +++ b/src/main/java/com/example/prdoit/model/ContentTable.java @@ -11,17 +11,18 @@ public class ContentTable { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int contentId; + private String contentId; private String contentTitle; private String contentContent; - private String contentLevel; + private int contentLevel; private int contentView; + private int isVideo; + private int contentLike; @ManyToOne diff --git a/src/main/java/com/example/prdoit/model/GuideLineTable.java b/src/main/java/com/example/prdoit/model/GuideLineTable.java deleted file mode 100644 index 9f95485..0000000 --- a/src/main/java/com/example/prdoit/model/GuideLineTable.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.prdoit.model; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Data -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class GuideLineTable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int guideLineId; - - private String guideLinePainPoint; - private String guideLineTarget; - private String guideLineUseCase; - private String guideLineUserStory; - private String guideLineFunction; - private String guideLineTask; - private String guideLineProductBacklog; - private String guideLineBurnDownChart; -} diff --git a/src/main/java/com/example/prdoit/model/IdTable.java b/src/main/java/com/example/prdoit/model/IdTable.java index df48ef1..d3ab371 100644 --- a/src/main/java/com/example/prdoit/model/IdTable.java +++ b/src/main/java/com/example/prdoit/model/IdTable.java @@ -39,10 +39,6 @@ public class IdTable { @JsonIgnore private List readTable; - @OneToMany(mappedBy = "id", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.EAGER) - @JsonIgnore - private List reportTable; - @OneToMany(mappedBy = "id", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.EAGER) @JsonIgnore private List communityTable; diff --git a/src/main/java/com/example/prdoit/model/ReportTable.java b/src/main/java/com/example/prdoit/model/ReportTable.java deleted file mode 100644 index 5c02a0c..0000000 --- a/src/main/java/com/example/prdoit/model/ReportTable.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.prdoit.model; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Entity -@Data -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class ReportTable { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int reportId; - - private String reportReason; - - private int reportNumber; - - private String reportType; - - @ManyToOne - @JoinColumn(name = "id") - private IdTable id; -} diff --git a/src/main/java/com/example/prdoit/repository/ContentTableRepository.java b/src/main/java/com/example/prdoit/repository/ContentTableRepository.java index f510fda..2a059d9 100644 --- a/src/main/java/com/example/prdoit/repository/ContentTableRepository.java +++ b/src/main/java/com/example/prdoit/repository/ContentTableRepository.java @@ -4,19 +4,41 @@ import com.example.prdoit.model.ContentTable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; -import java.util.Optional; -public interface ContentTableRepository extends JpaRepository { +public interface ContentTableRepository extends JpaRepository { @Query("SELECT new com.example.prdoit.dto.content.ContentResponseDto" + - "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel) " + - "FROM ContentTable c WHERE c.contentTitle LIKE %:query% OR c.contentContent LIKE %:query%") - List findAllByQueryContaining(String query); + "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel, c.userId.nickname) " + + "FROM ContentTable c LEFT JOIN CommentTable cc ON c.contentId = cc.contentId.contentId " + + "WHERE c.contentTitle LIKE %:query% GROUP BY c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel " + + "ORDER BY (c.contentView * 0.33) + (c.contentLike * 0.33) + (COUNT(cc.commentId) * 0.33) DESC " + + "LIMIT :size OFFSET :offset") + List findAllByQueryContaining(@Param("query") String query, @Param("size") int size, @Param("offset") int offset); @Query("SELECT new com.example.prdoit.dto.content.ContentResponseDto" + - "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel) " + - "FROM ContentTable c") - List findAllList(); + "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel, c.userId.nickname) " + + "FROM ContentTable c LEFT JOIN CommentTable cc ON c.contentId = cc.contentId.contentId " + + "GROUP BY c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel " + + "ORDER BY (c.contentView * 0.33) + (c.contentLike * 0.33) + (COUNT(cc.commentId) * 0.33) DESC " + + "LIMIT :size OFFSET :offset") + List findAllList(@Param("size") int size, @Param("offset") int offset); + + @Query("SELECT new com.example.prdoit.dto.content.ContentResponseDto" + + "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel, c.userId.nickname) " + + "FROM ContentTable c LEFT JOIN CommentTable cc on c.contentId = cc.contentId.contentId WHERE c.contentTitle LIKE %:query% AND c.contentLevel = :level " + + "GROUP BY c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel " + + "ORDER BY (c.contentView * 0.33) + (c.contentLike * 0.33) + (COUNT(cc.commentId) * 0.33) DESC " + + "LIMIT :size OFFSET :offset") + List findAllQueryContainingAndContentLevel(@Param("query")String query, @Param("level")int level, @Param("size") int size, @Param("offset") int offset); + + @Query("SELECT new com.example.prdoit.dto.content.ContentResponseDto" + + "(c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel, c.userId.nickname) " + + "FROM ContentTable c LEFT JOIN CommentTable cc ON c.contentId = cc.contentId.contentId WHERE c.contentLevel = :level " + + "GROUP BY c.contentId, c.contentTitle, c.contentView, c.contentLike, c.contentLevel " + + "ORDER BY (c.contentView * 0.33) + (c.contentLike * 0.33) + (COUNT(cc.commentId) * 0.33) DESC " + + "LIMIT :size OFFSET :offset") + List findAllByContentLevel(@Param("level") int level, @Param("size") int size, @Param("offset") int offset); } diff --git a/src/main/java/com/example/prdoit/repository/GuideLineTableRepository.java b/src/main/java/com/example/prdoit/repository/GuideLineTableRepository.java deleted file mode 100644 index 92699fa..0000000 --- a/src/main/java/com/example/prdoit/repository/GuideLineTableRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.prdoit.repository; - -import com.example.prdoit.model.GuideLineTable; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface GuideLineTableRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/prdoit/service/content/ContentService.java b/src/main/java/com/example/prdoit/service/content/ContentService.java index 07596a4..08c194a 100644 --- a/src/main/java/com/example/prdoit/service/content/ContentService.java +++ b/src/main/java/com/example/prdoit/service/content/ContentService.java @@ -1,11 +1,22 @@ package com.example.prdoit.service.content; +import com.example.prdoit.dto.content.ContentDetailDto; +import com.example.prdoit.dto.content.ContentRequestDto; import com.example.prdoit.dto.content.ContentResponseDto; +import com.example.prdoit.dto.content.ContentUpdateDto; import java.util.List; // public interface ContentService { - List getContentQuery(String query); + List getContentQuery(String query, int size, int page); + + List getContentQueryWithLevel(String query, int level, int size, int page); + + void updateContent(ContentUpdateDto contentUpdateDto); + + void postContent(ContentRequestDto contentRequestDto); + + ContentDetailDto getContentDetail(String contentId); } diff --git a/src/main/java/com/example/prdoit/service/content/ContentServiceImpl.java b/src/main/java/com/example/prdoit/service/content/ContentServiceImpl.java index 1be6db9..d533304 100644 --- a/src/main/java/com/example/prdoit/service/content/ContentServiceImpl.java +++ b/src/main/java/com/example/prdoit/service/content/ContentServiceImpl.java @@ -1,13 +1,19 @@ package com.example.prdoit.service.content; +import com.example.prdoit.dto.content.ContentDetailDto; +import com.example.prdoit.dto.content.ContentRequestDto; import com.example.prdoit.dto.content.ContentResponseDto; +import com.example.prdoit.dto.content.ContentUpdateDto; import com.example.prdoit.model.ContentTable; +import com.example.prdoit.model.IdTable; import com.example.prdoit.repository.ContentTableRepository; +import com.example.prdoit.repository.IdTableRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; +import java.util.UUID; @Service @Slf4j @@ -15,24 +21,26 @@ public class ContentServiceImpl implements ContentService { private final ContentTableRepository contentRepository; + private final IdTableRepository IdTableRepository; @Override - public List getContentQuery(String query) { + public List getContentQuery(String query, int size, int page){ log.info("[getContentQuery] 쿼리 조회 로직 시작"); List contentTableList = contentRepository.findAll(); + int offset = (page - 1) * size; if(contentTableList.isEmpty()) { throw new RuntimeException("등록된 컨텐츠가 없습니다."); } try { - if(query.equals("ALL")) { - List contentResponseDtoList = contentRepository.findAllList(); + if(query.equals("all")) { + List contentResponseDtoList = contentRepository.findAllList(size, offset); if(contentResponseDtoList.isEmpty()){ throw new RuntimeException("등록된 컨텐츠가 없습니다."); } else { return contentResponseDtoList; } } else { - List contentResponseDtoList = contentRepository.findAllByQueryContaining(query); + List contentResponseDtoList = contentRepository.findAllByQueryContaining(query, size, offset); if(contentResponseDtoList.isEmpty()){ throw new RuntimeException("검색 결과가 없습니다."); } else { @@ -44,4 +52,93 @@ public List getContentQuery(String query) { throw new RuntimeException("쿼리 조회에 실패했습니다."); } } + + @Override + public List getContentQueryWithLevel(String query, int level, int size, int page){ + List contentTableList = contentRepository.findAll(); + if(contentTableList.isEmpty()) { + throw new RuntimeException("등록된 컨텐츠가 없습니다."); + } + int offset = (page - 1) * size; + try{ + if(query.equals("all")) { + List contentResponseDtoList = contentRepository.findAllByContentLevel(level, size, offset); + if(contentResponseDtoList.isEmpty()){ + throw new RuntimeException("등록된 컨텐츠가 없습니다."); + } else { + return contentResponseDtoList; + } + } else { + List contentResponseDtoList = contentRepository.findAllQueryContainingAndContentLevel(query, level, size, offset); + if(contentResponseDtoList.isEmpty()){ + throw new RuntimeException("검색 결과가 없습니다."); + } else { + return contentResponseDtoList; + } + } + } catch (Exception e) { + log.error("[getContentQueryWithLevel] 쿼리 조회 실패"); + throw new RuntimeException("쿼리 조회에 실패했습니다."); + } + } + + @Override + public void postContent(ContentRequestDto contentRequestDto){ + + IdTable idTable = IdTableRepository.findById(contentRequestDto.getUserId()).orElseThrow(() -> new RuntimeException("존재하지 않는 사용자입니다.")); + log.info("[postContent] 컨텐츠 등록 로직 시작"); + try { + ContentTable contentTable = ContentTable.builder() + .contentId(UUID.randomUUID().toString()) + .contentTitle(contentRequestDto.getContentTitle()) + .contentContent(contentRequestDto.getContentContent()) + .contentLevel(contentRequestDto.getContentLevel()) + .isVideo(contentRequestDto.getIsVideo()) + .userId(idTable) + .build(); + contentRepository.save(contentTable); + } catch (Exception e) { + log.error(e.getMessage()); + throw new RuntimeException(e.getMessage()); + } + } + + @Override + public void updateContent(ContentUpdateDto contentUpdateDto){ + log.info("[updateContent] 컨텐츠 수정 로직 시작"); + try { + ContentTable contentTable = contentRepository.findById(contentUpdateDto.getContentId()).orElseThrow(() -> new RuntimeException("존재하지 않는 컨텐츠입니다.")); + contentTable.setContentTitle(contentUpdateDto.getContentTitle()); + contentTable.setContentContent(contentUpdateDto.getContentContent()); + contentTable.setContentLevel(contentUpdateDto.getContentLevel()); + contentTable.setIsVideo(contentUpdateDto.getIsVideo()); + contentRepository.save(contentTable); + } catch (Exception e) { + log.error(e.getMessage()); + throw new RuntimeException(e.getMessage()); + } + } + + @Override + public ContentDetailDto getContentDetail(String contentId){ + log.info("[getContentDetail] 컨텐츠 상세 조회 로직 시작"); + try { + ContentTable contentTable = contentRepository.findById(contentId).orElseThrow(() -> new RuntimeException("존재하지 않는 컨텐츠입니다.")); + contentTable.setContentView(contentTable.getContentView() + 1); + contentRepository.save(contentTable); + return ContentDetailDto.builder() + .contentId(contentTable.getContentId()) + .contentTitle(contentTable.getContentTitle()) + .contentContent(contentTable.getContentContent()) + .contentLevel(contentTable.getContentLevel()) + .contentView(contentTable.getContentView()) + .isVideo(contentTable.getIsVideo()) + .contentLike(contentTable.getContentLike()) + .writer(contentTable.getUserId().getNickname()) + .build(); + } catch (Exception e) { + log.error(e.getMessage()); + throw new RuntimeException(e.getMessage()); + } + } } diff --git a/src/main/java/com/example/prdoit/service/survey/SurveyServiceImpl.java b/src/main/java/com/example/prdoit/service/survey/SurveyServiceImpl.java index 68b02ef..a5f6d3b 100644 --- a/src/main/java/com/example/prdoit/service/survey/SurveyServiceImpl.java +++ b/src/main/java/com/example/prdoit/service/survey/SurveyServiceImpl.java @@ -61,7 +61,7 @@ public SurveyDto getSurvey(String id) { log.info("[getSurvey] 설문조사 조회 로직 시작"); // SurveyTable 찾기 - SurveyTable survey = surveyTableRepository.findByIdId(id); + SurveyTable survey = surveyTableRepository.findByIdId(id); if(survey == null) { log.error("[getSurvey] 설문조사를 찾을 수 없음"); throw new CustomException("설문조사 정보를 찾을 수 없습니다."); @@ -101,6 +101,4 @@ public void updateSurvey(SurveyDto surveyDto) { throw new CustomException("데이터베이스 접근 중 오류가 발생했습니다."); } } - - } \ No newline at end of file