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
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@ public class ScrapController {
@ResponseStatus(HttpStatus.OK)
public ApiResponseDto createAndDeleteScrap(@UserId Long userId, @RequestBody @Valid final CreateAndDeleteScrapRequestDto request) {

scrapService.createAndDeleteScrap(userId, request);

if (request.getScrapTF() == true) {
return ApiResponseDto.success(SuccessStatus.CREATE_SCRAP_SUCCESS);
return ApiResponseDto.success(SuccessStatus.CREATE_SCRAP_SUCCESS, scrapService.createAndDeleteScrap(userId, request));
}
return ApiResponseDto.success(SuccessStatus.DELETE_SCRAP_SUCCESS);
return ApiResponseDto.success(SuccessStatus.DELETE_SCRAP_SUCCESS, scrapService.createAndDeleteScrap(userId, request));
}

@GetMapping("scrap/user")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.runnect.server.scrap.dto.response;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class CreateAndDeleteScrapResponseDto {
private Long scrapCount;

public static CreateAndDeleteScrapResponseDto of (Long scrapCount) {
return new CreateAndDeleteScrapResponseDto(scrapCount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
import org.runnect.server.publicCourse.entity.PublicCourse;
import org.runnect.server.publicCourse.repository.PublicCourseRepository;
import org.runnect.server.scrap.dto.request.CreateAndDeleteScrapRequestDto;
import org.runnect.server.scrap.dto.response.DepartureResponse;
import org.runnect.server.scrap.dto.response.GetScrapCourseResponseDto;
import org.runnect.server.scrap.dto.response.ScrapResponse;
import org.runnect.server.scrap.dto.response.UserResponse;
import org.runnect.server.scrap.dto.response.*;
import org.runnect.server.scrap.entity.Scrap;
import org.runnect.server.scrap.repository.ScrapRepository;
import org.runnect.server.user.entity.RunnectUser;
Expand All @@ -32,15 +29,15 @@ public class ScrapService {
private final UserStampService userStampService;

@Transactional
public void createAndDeleteScrap(Long userId, CreateAndDeleteScrapRequestDto request) {
public CreateAndDeleteScrapResponseDto createAndDeleteScrap(Long userId, CreateAndDeleteScrapRequestDto request) {
Scrap scrap = scrapRepository.findByUserIdAndPublicCourseId(userId, request.getPublicCourseId()).orElse(null);
RunnectUser user = userRepository.findById(userId).orElseThrow(() -> new NotFoundUserException(ErrorStatus.NOT_FOUND_USER_EXCEPTION, ErrorStatus.NOT_FOUND_USER_EXCEPTION.getMessage()));
PublicCourse publicCourse = publicCourseRepository.findById(request.getPublicCourseId())
.orElseThrow(() -> new NotFoundException(ErrorStatus.NOT_FOUND_PUBLICCOURSE_EXCEPTION, ErrorStatus.NOT_FOUND_PUBLICCOURSE_EXCEPTION.getMessage()));
// 스크랩 생성
if (request.getScrapTF() == true) {
if (scrap == null) {
// 기존 스크랩한 내역이 없을 때
PublicCourse publicCourse = publicCourseRepository.findById(request.getPublicCourseId())
.orElseThrow(() -> new NotFoundException(ErrorStatus.NOT_FOUND_PUBLICCOURSE_EXCEPTION, ErrorStatus.NOT_FOUND_PUBLICCOURSE_EXCEPTION.getMessage()));
Scrap newScrap = Scrap.builder()
.scrapTF(true)
.publicCourse(publicCourse)
Expand All @@ -60,6 +57,11 @@ public void createAndDeleteScrap(Long userId, CreateAndDeleteScrapRequestDto req
else {
scrap.updateScrapTF(false);
}

// 해당 public course의 전체 스크랩 개수
Long scrapCount = scrapRepository.countByPublicCourseAndScrapTFIsTrue(publicCourse);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pulicCourse entity에 아래와같은 칼럼이 있어서 위에서 publicCourse 가져올때 이미 스크랩카운트 가지고 있어요. 그거 쓰는게 더 편할듯해요

@Formula("(select count(*) from Scrap where Scrap.public_course_id=id and Scrap.scraptf=true)")
  private Integer scrapCount;

Copy link
Copy Markdown
Contributor Author

@RinRinPARK RinRinPARK Dec 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오옷 몰랐씀다!!
근데 방금 말씀하신 getScrapCount로 가져오는 방식으로 바꿔서 테스트를 해봤는데 publicCourse객체를 스크랩 하기 전에 findById로 찾아오고 -> 스크랩 생성/취소-> 그 객체에 getScrapCount를 했을 때, 이미 생성해둔 객체에 getScrapCount를 하는 로직이라 스크랩생성/취소한게 반영이 안되네요 ㅠㅜ 그래서 말씀해주신 방식을 사용하려면 publicCourse객체를 스크랩 생성/취소 후 새로 findById하는 방식을 사용하거나 아니면 생성/취소에 따라 getScrapCount에 +-1을 해주는 방식을 써야할 것 같습니다!! 지금 코드 그대로 가는 방법도 있구~.~
근데 개인적으로 +-1 해주는게 디비 접근을 제일 적게 해서 괜찮을 것 같기도 한데..? 어떤게 좋을까유

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 그렇네 이미 publicCourse 가져오고 나서 scrap update 구나!! 기존로직 그대로 가도 좋을것같아요!


return CreateAndDeleteScrapResponseDto.of(scrapCount);
}

public GetScrapCourseResponseDto getScrapCourseByUser(Long userId) {
Expand Down