diff --git a/src/main/java/umc/th/juinjang/controller/ScrapController.java b/src/main/java/umc/th/juinjang/controller/ScrapController.java index 2e2a8569..f4c3d832 100644 --- a/src/main/java/umc/th/juinjang/controller/ScrapController.java +++ b/src/main/java/umc/th/juinjang/controller/ScrapController.java @@ -1,10 +1,8 @@ package umc.th.juinjang.controller; import io.swagger.v3.oas.annotations.Operation; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -15,46 +13,24 @@ import umc.th.juinjang.model.entity.Member; import umc.th.juinjang.service.ScrapService.ScrapService; - -///api/limjangs/scraps/{limjangId} @RestController @RequestMapping("/api/limjangs/scraps") @RequiredArgsConstructor -@Validated public class ScrapController { private final ScrapService scrapService; -// @CrossOrigin -// @Operation(summary = "스크랩 등록/삭제 API") -// @PostMapping("/{limjangId}") -// public ApiResponse postLimjang( -// @PathVariable(name = "limjangId") @Valid Long limjangId){ -// -// ScrapActionType scrapActionType = scrapCommandService.actionScrap(limjangId); -// if(scrapActionType == ScrapActionType.SCRAP){ // 스크랩 동작이 이루어짐 -// return ApiResponse.onSuccess(SuccessStatus._SCRAP_ACTION_SCRAP); -// } -// return ApiResponse.onSuccess(SuccessStatus._SCRAP_ACTION_UNSCRAP); -// } - @Operation(summary = "스크랩 등록 API") @PostMapping("/{limjangId}") - public ApiResponse addScrap ( - @AuthenticationPrincipal Member member, - @PathVariable(name = "limjangId") @Valid long limjangId){ - - scrapService.createScrap(limjangId); + public ApiResponse addScrap (@AuthenticationPrincipal Member member, @PathVariable(name = "limjangId") long limjangId){ + scrapService.createScrap(member, limjangId); return ApiResponse.onSuccess(SuccessStatus._SCRAP_ACTION_SCRAP); } @Operation(summary = "스크랩 삭제 API") @DeleteMapping("/{limjangId}") - public ApiResponse removeScrap ( - @AuthenticationPrincipal Member member, - @PathVariable(name = "limjangId") @Valid long limjangId){ - - scrapService.deleteScrap(limjangId); + public ApiResponse removeScrap (@AuthenticationPrincipal Member member, @PathVariable(name = "limjangId") long limjangId){ + scrapService.deleteScrap(member, limjangId); return ApiResponse.onSuccess(SuccessStatus._SCRAP_ACTION_UNSCRAP); } } diff --git a/src/main/java/umc/th/juinjang/model/entity/Scrap.java b/src/main/java/umc/th/juinjang/model/entity/Scrap.java index 5aa4680d..d89d8eb3 100644 --- a/src/main/java/umc/th/juinjang/model/entity/Scrap.java +++ b/src/main/java/umc/th/juinjang/model/entity/Scrap.java @@ -31,4 +31,8 @@ public class Scrap extends BaseEntity { @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "limjang_id") private Limjang limjangId; + + public static Scrap create(Limjang limjang) { + return Scrap.builder().limjangId(limjang).build(); + } } diff --git a/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java b/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java index 81407386..2e213f4e 100644 --- a/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java +++ b/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java @@ -3,11 +3,9 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Optional; -import javax.swing.text.html.Option; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -30,7 +28,7 @@ public interface LimjangRepository extends JpaRepository, Limjang @Query(value = "DELETE FROM limjang l WHERE l.deleted = true AND l.updated_at < :dateTime", nativeQuery = true) void hardDelete(@Param("dateTime") LocalDateTime dateTime); - Optional findLimjangByLimjangIdAndMemberId(Long limjangId, Member member); + Optional findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(Long limjangId, Member member); @Modifying @Transactional diff --git a/src/main/java/umc/th/juinjang/repository/limjang/ScrapRepository.java b/src/main/java/umc/th/juinjang/repository/limjang/ScrapRepository.java index d4a4e6db..38e81b87 100644 --- a/src/main/java/umc/th/juinjang/repository/limjang/ScrapRepository.java +++ b/src/main/java/umc/th/juinjang/repository/limjang/ScrapRepository.java @@ -8,16 +8,11 @@ import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import umc.th.juinjang.model.entity.Limjang; -import umc.th.juinjang.model.entity.Member; import umc.th.juinjang.model.entity.Scrap; public interface ScrapRepository extends JpaRepository { - @Query("select s from Scrap s where s.limjangId = :limjang") - Optional serachByLimjang(@Param("limjang")Limjang limjang); - @Modifying - @Query("delete from Scrap s where s.scrapId = :id") - void deleteByScrapId(@Param("id")long id); + Optional findByLimjangId(Limjang limjang); @Transactional @Modifying diff --git a/src/main/java/umc/th/juinjang/service/LimjangService/LimjangRetriever.java b/src/main/java/umc/th/juinjang/service/LimjangService/LimjangRetriever.java deleted file mode 100644 index b18e48bf..00000000 --- a/src/main/java/umc/th/juinjang/service/LimjangService/LimjangRetriever.java +++ /dev/null @@ -1,26 +0,0 @@ -package umc.th.juinjang.service.LimjangService; - -import java.util.List; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; -import umc.th.juinjang.apiPayload.code.status.ErrorStatus; -import umc.th.juinjang.apiPayload.exception.handler.LimjangHandler; -import umc.th.juinjang.model.entity.Limjang; -import umc.th.juinjang.model.entity.Member; -import umc.th.juinjang.repository.limjang.LimjangRepository; - -@Component -@RequiredArgsConstructor -public class LimjangRetriever { - - private final LimjangRepository limjangRepository; - - public Limjang findById(long limjangId) { - return limjangRepository.findById(limjangId) - .orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); - } - - public List findAllByIdsInAndMemberAndDeletedIsFalse(List ids, Member member) { - return limjangRepository.findAllByLimjangIdInAndMemberIdAndDeletedIsFalse(ids, member); - } -} \ No newline at end of file diff --git a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapRetriever.java b/src/main/java/umc/th/juinjang/service/ScrapService/ScrapRetriever.java deleted file mode 100644 index facce92b..00000000 --- a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapRetriever.java +++ /dev/null @@ -1,19 +0,0 @@ -package umc.th.juinjang.service.ScrapService; - -import java.util.Optional; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; -import umc.th.juinjang.model.entity.Limjang; -import umc.th.juinjang.model.entity.Scrap; -import umc.th.juinjang.repository.limjang.ScrapRepository; - -@Component -@RequiredArgsConstructor -public class ScrapRetriever { - - private final ScrapRepository scrapRepository; - - public Optional findByLimjang(Limjang limjang) { - return scrapRepository.serachByLimjang(limjang); - } -} diff --git a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapService.java b/src/main/java/umc/th/juinjang/service/ScrapService/ScrapService.java index b5b16e34..02f3059d 100644 --- a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapService.java +++ b/src/main/java/umc/th/juinjang/service/ScrapService/ScrapService.java @@ -1,10 +1,10 @@ package umc.th.juinjang.service.ScrapService; -import umc.th.juinjang.model.entity.enums.ScrapActionType; +import umc.th.juinjang.model.entity.Member; public interface ScrapService { - void createScrap(long limjangId); + void createScrap(Member member, long limjangId); - void deleteScrap(long limjangId); + void deleteScrap(Member member, long limjangId); } diff --git a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapServiceImpl.java b/src/main/java/umc/th/juinjang/service/ScrapService/ScrapServiceImpl.java index 51e07c12..0d4589ef 100644 --- a/src/main/java/umc/th/juinjang/service/ScrapService/ScrapServiceImpl.java +++ b/src/main/java/umc/th/juinjang/service/ScrapService/ScrapServiceImpl.java @@ -3,19 +3,16 @@ import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import umc.th.juinjang.apiPayload.code.status.ErrorStatus; -import umc.th.juinjang.apiPayload.exception.GeneralException; import umc.th.juinjang.apiPayload.exception.handler.LimjangHandler; import umc.th.juinjang.apiPayload.exception.handler.ScrapHandler; import umc.th.juinjang.model.entity.Limjang; +import umc.th.juinjang.model.entity.Member; import umc.th.juinjang.model.entity.Scrap; -import umc.th.juinjang.model.entity.enums.ScrapActionType; import umc.th.juinjang.repository.limjang.LimjangRepository; import umc.th.juinjang.repository.limjang.ScrapRepository; -import umc.th.juinjang.service.LimjangService.LimjangRetriever; @Slf4j @Service @@ -23,38 +20,40 @@ public class ScrapServiceImpl implements ScrapService { private final ScrapRepository scrapRepository; - private final LimjangRetriever limjangRetriever; - private final ScrapRetriever scrapRetriever; + private final LimjangRepository limjangRepository; @Override @Transactional - public void createScrap(long limjangId) { - - Limjang findLimjang = limjangRetriever.findById(limjangId); // 임장 ID 찾기 - Optional findScrap = scrapRetriever.findByLimjang(findLimjang); - - if (findScrap.isPresent()) { - throw new ScrapHandler(ErrorStatus._SCRAP_ALREADY_SCRAPED); - } - - Scrap newScrap = Scrap.builder().limjangId(findLimjang).build(); - scrapRepository.save(newScrap); - System.out.println("--스크랩 완료 in service---"); + public void createScrap(final Member member, final long limjangId) { + Limjang limjang = getLimjangByMemberAndId(member, limjangId); + checkScrapAlreadyScraped(limjang); + scrapRepository.save(Scrap.create(limjang)); } @Override @Transactional - public void deleteScrap(long limjangId) { + public void deleteScrap(final Member member, final long limjangId) { + Limjang limjang = getLimjangByMemberAndId(member, limjangId); + Scrap scrap = checkScrapAlreadyUnScraped(findByLimjang(limjang)); + scrapRepository.deleteById(scrap.getScrapId()); + } - Limjang findLimjang = limjangRetriever.findById(limjangId); // 임장 ID 찾기 - Optional findScrap = scrapRetriever.findByLimjang(findLimjang); + private Limjang getLimjangByMemberAndId(final Member member, final long limjangId) { + return limjangRepository.findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(limjangId, member) + .orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); + } - if (findScrap.isEmpty()) { - throw new ScrapHandler(ErrorStatus._SCRAP_ALREADY_UNSCRAPED); - } else { - System.out.println("---------"+findLimjang.getLimjangId()+"------"); - scrapRepository.deleteByScrapId(findScrap.get().getScrapId()); - System.out.println("--스크랩 삭제 in service---"); + private void checkScrapAlreadyScraped(final Limjang limjang) { + if (findByLimjang(limjang).isPresent()) { + throw new ScrapHandler(ErrorStatus._SCRAP_ALREADY_SCRAPED); } } + + private Optional findByLimjang(final Limjang limjang) { + return scrapRepository.findByLimjangId(limjang); + } + + private Scrap checkScrapAlreadyUnScraped(final Optional scrap) { + return scrap.orElseThrow(() -> new ScrapHandler(ErrorStatus._SCRAP_ALREADY_UNSCRAPED)); + } } diff --git a/src/main/java/umc/th/juinjang/service/recordService/RecordService.java b/src/main/java/umc/th/juinjang/service/recordService/RecordService.java index f1fc66a3..2d3cb42a 100644 --- a/src/main/java/umc/th/juinjang/service/recordService/RecordService.java +++ b/src/main/java/umc/th/juinjang/service/recordService/RecordService.java @@ -51,7 +51,7 @@ public class RecordService { public RecordResponseDTO.RecordDTO uploadRecord(Member member, RecordRequestDTO.RecordDto recordRequestDTO, MultipartFile multipartFile) throws IOException { - if(limjangRepository.findLimjangByLimjangIdAndMemberId(recordRequestDTO.getLimjangId(), member).isEmpty()){ + if(limjangRepository.findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(recordRequestDTO.getLimjangId(), member).isEmpty()){ throw new ExceptionHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR); } Limjang limjang = limjangRepository.findById(recordRequestDTO.getLimjangId()).get(); @@ -127,7 +127,7 @@ public String deleteRecord(Member member, Long recordId) { } public List getAllRecord(Member member, Long limjangId) { - Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberId(limjangId, member) + Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(limjangId, member) .orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); List records = recordRepository.findAllByLimjangIdOrderByRecordIdDesc(limjang); @@ -137,7 +137,7 @@ public List getAllRecord(Member member, Long limjan } public RecordResponseDTO.RecordMemoDto getThreeRecord(Member member, Long limjangId) { - Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberId(limjangId, member) + Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(limjangId, member) .orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); List records = recordRepository.findTop3ByLimjangIdOrderByRecordIdDesc(limjang); @@ -148,7 +148,7 @@ public RecordResponseDTO.RecordMemoDto getThreeRecord(Member member, Long limjan public LimjangMemoResponseDTO.MemoDto createLimjangMemo(Member member, Long limjangId, String memo) { - Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberId(limjangId, member) + Limjang limjang = limjangRepository.findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(limjangId, member) .orElseThrow(() -> new ExceptionHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); limjang.updateMemo(memo);