Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 4 additions & 28 deletions src/main/java/umc/th/juinjang/controller/ScrapController.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
}
}
4 changes: 4 additions & 0 deletions src/main/java/umc/th/juinjang/model/entity/Scrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -30,7 +28,7 @@ public interface LimjangRepository extends JpaRepository<Limjang, Long>, 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<Limjang> findLimjangByLimjangIdAndMemberId(Long limjangId, Member member);
Optional<Limjang> findLimjangByLimjangIdAndMemberIdAndDeletedIsFalse(Long limjangId, Member member);

@Modifying
@Transactional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Scrap, Long> {
@Query("select s from Scrap s where s.limjangId = :limjang")
Optional<Scrap> serachByLimjang(@Param("limjang")Limjang limjang);

@Modifying
@Query("delete from Scrap s where s.scrapId = :id")
void deleteByScrapId(@Param("id")long id);
Optional<Scrap> findByLimjangId(Limjang limjang);

@Transactional
@Modifying
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,58 +3,57 @@
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
@RequiredArgsConstructor
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<Scrap> 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<Scrap> 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<Scrap> findByLimjang(final Limjang limjang) {
return scrapRepository.findByLimjangId(limjang);
}

private Scrap checkScrapAlreadyUnScraped(final Optional<Scrap> scrap) {
return scrap.orElseThrow(() -> new ScrapHandler(ErrorStatus._SCRAP_ALREADY_UNSCRAPED));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -127,7 +127,7 @@ public String deleteRecord(Member member, Long recordId) {
}

public List<RecordResponseDTO.RecordDTO> 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<Record> records = recordRepository.findAllByLimjangIdOrderByRecordIdDesc(limjang);
Expand All @@ -137,7 +137,7 @@ public List<RecordResponseDTO.RecordDTO> 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<Record> records = recordRepository.findTop3ByLimjangIdOrderByRecordIdDesc(limjang);

Expand All @@ -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);
Expand Down