Skip to content

Commit

Permalink
Merge pull request #131 from GEON-PPANG/refactor/#125
Browse files Browse the repository at this point in the history
[FIX] 북마크하는 api 를 리팩토링하라
  • Loading branch information
seunghaLim authored Aug 10, 2023
2 parents 4b0227e + 8f05aa5 commit a2a2353
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,12 @@ public class BookMarkController {
@PostMapping("/{bakeryId}")
@BakeryIdApiLog
public ApiResponse<BookMarkResponseDTO> doBookMark(
@PathVariable("bakeryId") Long bakeryId,
@RequestBody @Valid final BookMarkRequestDTO request) {
@PathVariable final Long bakeryId, @RequestBody @Valid final BookMarkRequestDTO request) {
Long memberId = SecurityUtil.getLoginMemberId();
BookMarkResponseDTO response =
bookMarkService.doBookMark(request.getIsAddingBookMark(), bakeryId, memberId);

if (request.getIsAddingBookMark()) {
if (response.getIsBookMarked()) {
return ApiResponse.success(SuccessType.CREATE_BOOKMARK_SUCCESS, response);
}
return ApiResponse.success(SuccessType.CANCEL_BOOKMARK_SUCCESS, response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class SearchController {

@GetMapping("/bakeries")
@SearchApiLog
public ApiResponse<BakerySearchResponseDTO> searchBakery(@RequestParam String bakeryName) {
public ApiResponse<BakerySearchResponseDTO> searchBakery(@RequestParam final String bakeryName) {
Long memberId = SecurityUtil.getLoginMemberId();
return ApiResponse.success(
SuccessType.SEARCH_BAKERIES_SUCCESS,
Expand All @@ -31,7 +31,8 @@ public ApiResponse<BakerySearchResponseDTO> searchBakery(@RequestParam String ba

@GetMapping("/v2/bakeries")
@SearchApiLog
public ApiResponse<BakerySearchResponseDTOV2> searchBakeryV2(@RequestParam String bakeryName) {
public ApiResponse<BakerySearchResponseDTOV2> searchBakeryV2(
@RequestParam final String bakeryName) {
Long memberId = SecurityUtil.getLoginMemberId();
return ApiResponse.success(
SuccessType.SEARCH_BAKERIES_SUCCESS,
Expand Down
44 changes: 29 additions & 15 deletions api/src/main/java/com/org/gunbbang/service/BookMarkService.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,36 +34,50 @@ public BookMarkResponseDTO doBookMark(boolean isAddingBookMark, Long bakeryId, L
.orElseThrow(() -> new NotFoundException(ErrorType.NOT_FOUND_USER_EXCEPTION));

Optional<BookMark> foundBookMark =
bookMarkRepository.findByMemberAndBakery(foundMember, foundBakery);
bookMarkRepository.findByMemberIdAndBakeryId(memberId, bakeryId);

if (isAddingBookMark) {
if (foundBookMark.isPresent()) { // 북마크 했는데 또 한경우
// 북마크 했는데 또 한경우
if (foundBookMark.isPresent()) {
throw new DoubleBookMarkRequestException(ErrorType.ALREADY_BOOKMARKED_EXCEPTION);
}
bookMarkRepository.saveAndFlush(
BookMark.builder().bakery(foundBakery).member(foundMember).build());

foundBakery.updateBookMarkCount(isAddingBookMark);
bakeryRepository.saveAndFlush(foundBakery);
// flush 안되는 문제 해결
return BookMarkResponseDTO.builder()
.bookMarkCount(foundBakery.getBookMarkCount())
.isBookMarked(true)
.build();
return addBookMark(isAddingBookMark, foundBakery, foundMember);
}

// 북마크 취소 요청으로 왔는데 사실 북마크 안되어있는 경우
// 북마크 했는데 또 한경우
if (foundBookMark.isEmpty()) {
throw new DoubleBookMarkRequestException(ErrorType.ALREADY_CANCELED_BOOKMARK_EXCEPTION);
}
return cancelBookMark(isAddingBookMark, foundBakery, foundMember);
}

private BookMarkResponseDTO cancelBookMark(
boolean isAddingBookMark, Bakery foundBakery, Member foundMember) {

updateBookMarkCount(isAddingBookMark, foundBakery);
bookMarkRepository.deleteByMemberAndBakery(foundMember, foundBakery);

foundBakery.updateBookMarkCount(isAddingBookMark);
bakeryRepository.saveAndFlush(foundBakery);
return BookMarkResponseDTO.builder()
.bookMarkCount(foundBakery.getBookMarkCount())
.isBookMarked(false)
.build();
}

private BookMarkResponseDTO addBookMark(
boolean isAddingBookMark, Bakery foundBakery, Member foundMember) {

updateBookMarkCount(isAddingBookMark, foundBakery);
bookMarkRepository.saveAndFlush(
BookMark.builder().bakery(foundBakery).member(foundMember).build());

return BookMarkResponseDTO.builder()
.bookMarkCount(foundBakery.getBookMarkCount())
.isBookMarked(true)
.build();
}

private void updateBookMarkCount(boolean isAddingBookMark, Bakery foundBakery) {
foundBakery.updateBookMarkCount(isAddingBookMark);
bakeryRepository.saveAndFlush(foundBakery);
}
}
10 changes: 10 additions & 0 deletions api/src/main/java/com/org/gunbbang/util/mapper/BookMarkMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.org.gunbbang.util.mapper;

import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
public interface BookMarkMapper {
BookMarkMapper INSTANCE = Mappers.getMapper(BookMarkMapper.class);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
import org.springframework.data.jpa.repository.Query;

public interface BookMarkRepository extends JpaRepository<BookMark, Long> {
Optional<BookMark> findByMemberAndBakery(Member member, Bakery bakery);

@Query(
value =
"SELECT bm FROM BookMark bm WHERE bm.member.memberId = :memberId AND bm.bakery.bakeryId ="
Expand Down

0 comments on commit a2a2353

Please sign in to comment.