Skip to content

Commit

Permalink
✨ [Feat] 유저가 즐겨 찾기한 음료 해제 기능을 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
soochangoforit authored Jul 7, 2023
1 parent d13fdfc commit a299459
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -108,5 +108,21 @@ public ResponseEntity<DataResponse<FranchiseBookMarkedResponseDto>> unMarkFranch
return ResponseEntity.ok(DataResponse.of(OK, "프랜차이즈 즐겨 찾기 해제 성공", response));
}

/**
* 유저가 특정 음료를 즐겨 찾기 해제 할 수 있다.
* TODO : 추후 로그인 기능 구현 후, 로그인한 유저의 ID를 받아와야 함 (ex. @AuthenticationPrincipal User user)
*/
@Operation(summary = "음료 즐겨 찾기 해제", description = "유저가 특정 음료를 즐겨 찾기 해제 할 수 있다.")
@ApiResponses({
@ApiResponse(
responseCode = "200", description = "음료 즐겨 찾기 해제 성공")
})
@DeleteMapping("/drinks/{drinkId}")
public ResponseEntity<DataResponse<DrinkBookMarkedResponseDto>> unMarkDrinkAsBookMark(@PathVariable @Parameter(description = "음료 고유 Id") Long drinkId) {
DrinkBookMarkedResponseDto response = drinkBookMarkRegisterService.unregister(100L, drinkId);
return ResponseEntity.ok(DataResponse.of(OK, "음료 즐겨 찾기 해제 성공", response));
}



}
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package com.depromeet.oversweet.bookmark.service;

import com.depromeet.oversweet.bookmark.dto.response.DrinkBookMarkedResponseDto;
import com.depromeet.oversweet.domain.bookmark.entity.DrinkBookmarkEntity;
import com.depromeet.oversweet.domain.bookmark.repository.FindDrinkBookMarkRepository;
import com.depromeet.oversweet.domain.drink.entity.DrinkEntity;
import com.depromeet.oversweet.domain.drink.repository.FindDrinkRepository;
import com.depromeet.oversweet.domain.drink.repository.RegisterDrinkBookMarkRepository;
import com.depromeet.oversweet.domain.drink.repository.UpdateDrinkBookMarkRepository;
import com.depromeet.oversweet.domain.member.entity.MemberEntity;
import com.depromeet.oversweet.domain.member.repository.FindMemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* 음료 북마크 등록 서비스
*/
Expand All @@ -19,10 +23,16 @@ public class DrinkBookMarkRegisterService {
private final FindMemberRepository findMemberRepository;
private final FindDrinkRepository findDrinkRepository;
private final FindDrinkBookMarkRepository findDrinkBookMarkRepository;
private final RegisterDrinkBookMarkRepository registerDrinkBookMarkRepository;
private final UpdateDrinkBookMarkRepository updateDrinkBookMarkRepository;

/**
* 음료 즐겨 찾기 등록
*
* @param memberId Member Entity ID
* @param drinkId 즐겨찾기로 등록할 Drink Entity ID
*/
public void register(final Long memberId, final Long drinkId) {
// 즐겨 찾기 위한 유저 조회
// 유저 조회
final MemberEntity member = findMemberRepository.findById(memberId);

// 음료가 존재하는지 확인한다.
Expand All @@ -31,7 +41,30 @@ public void register(final Long memberId, final Long drinkId) {
// 이미 해당 음료가 즐겨찾기에 이미 등록되어 있는지 확인한다.
findDrinkBookMarkRepository.validateAlreadyDrinkBookMarked(member, drink);

// 해당 프랜차이즈를 즐겨찾기에 등록한다.
registerDrinkBookMarkRepository.saveDrinkBookmark(member, drink);
// 해당 음료를 즐겨찾기에 등록한다.
updateDrinkBookMarkRepository.saveDrinkBookmark(member, drink);
}

/**
* 음료 즐겨 찾기 해제
*
* @param memberId Member Entity ID
* @param drinkId 즐겨찾기 해제할 Drink Entity ID
* @return 새롭게 갱신된 즐겨찾기 음료 목록
*/
public DrinkBookMarkedResponseDto unregister(Long memberId, Long drinkId) {
// 유저 조회
final MemberEntity member = findMemberRepository.findById(memberId);

// 음료가 존재하는지 확인한다.
final DrinkEntity drink = findDrinkRepository.findDrinkById(drinkId);

// 해당 음료를 즐겨찾기에서 해제한다.
updateDrinkBookMarkRepository.deleteDrinkBookmark(member, drink);

// 새롭게 갱신된 즐겨찾기 음료 목록을 반환한다.
List<DrinkBookmarkEntity> bookMarks = findDrinkBookMarkRepository.findDrinkBookMarkByMemberId(memberId);

return new DrinkBookMarkedResponseDto(bookMarks);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ public interface DrinkBookMarkJpaRepository extends JpaRepository<DrinkBookmarkE
List<DrinkBookmarkEntity> findByMemberId(@Param("id") Long id);

boolean existsByMemberAndDrink(MemberEntity member, DrinkEntity drink);

void deleteByMemberAndDrink(MemberEntity member, DrinkEntity drink);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import com.depromeet.oversweet.domain.drink.entity.DrinkEntity;
import com.depromeet.oversweet.domain.member.entity.MemberEntity;

public interface RegisterDrinkBookMarkRepository {
public interface UpdateDrinkBookMarkRepository {

void saveDrinkBookmark(final MemberEntity member, final DrinkEntity drink);

void deleteDrinkBookmark(final MemberEntity member, final DrinkEntity drink);

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,20 @@
import org.springframework.transaction.annotation.Transactional;

/**
* 음료 즐겨찾기 등록 레포지토리
* 음료 즐겨찾기 업데이트(등록, 삭제) 레포지토리
*/
@Repository
@RequiredArgsConstructor
public class RegisterDrinkBookMarkRepositoryImpl implements RegisterDrinkBookMarkRepository {
public class UpdateDrinkBookMarkRepositoryImpl implements UpdateDrinkBookMarkRepository {

private final DrinkBookMarkJpaRepository drinkBookMarkJpaRepository;

/**
* 음료 즐겨찾기 등록
*
* @param member API 접근자 Member Entity
* @param drink 즐겨찾기 등록할 Drink Entity
*/
@Override
@Transactional
public void saveDrinkBookmark(final MemberEntity member, final DrinkEntity drink) {
Expand All @@ -27,4 +33,16 @@ public void saveDrinkBookmark(final MemberEntity member, final DrinkEntity drink
drinkBookMarkJpaRepository.save(bookMark);
}

/**
* 음료 즐겨찾기 해제
*
* @param member API 접근자 Member Entity
* @param drink 즐겨찾기 해제할 Drink Entity
*/
@Override
@Transactional
public void deleteDrinkBookmark(MemberEntity member, DrinkEntity drink) {
drinkBookMarkJpaRepository.deleteByMemberAndDrink(member, drink);
}

}

0 comments on commit a299459

Please sign in to comment.