Skip to content

Commit df6038a

Browse files
committed
feat: 마이바(MyBar) '킵' 기능 추가 및 목록 조회 로직 개선
- `keep` 메서드를 추가하여 칵테일을 킵하거나 재킵하는 로직 구현 - 기존 목록 조회 메서드(`getMyBar`)의 쿼리 정렬 기준을 `KeptAt`으로 변경 - `UserRepository`와 `CocktailRepository`를 추가하여 엔티티 참조에 활용
1 parent c30be27 commit df6038a

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/main/java/com/back/domain/mybar/service/MyBarService.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
package com.back.domain.mybar.service;
22

3+
import com.back.domain.cocktail.repository.CocktailRepository;
34
import com.back.domain.mybar.dto.MyBarItemResponseDto;
45
import com.back.domain.mybar.dto.MyBarListResponseDto;
56
import com.back.domain.mybar.entity.MyBar;
67
import com.back.domain.mybar.enums.KeepStatus;
78
import com.back.domain.mybar.repository.MyBarRepository;
9+
import com.back.domain.user.repository.UserRepository;
810
import lombok.RequiredArgsConstructor;
911
import org.springframework.data.domain.Page;
1012
import org.springframework.data.domain.PageRequest;
1113
import org.springframework.stereotype.Service;
1214
import org.springframework.transaction.annotation.Transactional;
1315

16+
import java.time.LocalDateTime;
1417
import java.util.ArrayList;
1518
import java.util.List;
19+
import java.util.Optional;
1620

1721
@Service
1822
@RequiredArgsConstructor
1923
public class MyBarService {
2024

2125
private final MyBarRepository myBarRepository;
26+
private final UserRepository userRepository;
27+
private final CocktailRepository cocktailRepository;
2228

2329
@Transactional(readOnly = true)
2430
public MyBarListResponseDto getMyBar(Long userId, int page, int pageSize) {
25-
Page<MyBar> myBarPage = myBarRepository.findByUserIdAndStatusOrderByIdDesc(userId, KeepStatus.ACTIVE, PageRequest.of(page, pageSize));
31+
Page<MyBar> myBarPage = myBarRepository.findByUser_IdAndStatusOrderByKeptAtDescIdDesc(userId, KeepStatus.ACTIVE, PageRequest.of(page, pageSize));
2632

2733
List<MyBar> myBars = myBarPage.getContent();
2834
List<MyBarItemResponseDto> items = new ArrayList<>();
@@ -33,4 +39,33 @@ public MyBarListResponseDto getMyBar(Long userId, int page, int pageSize) {
3339

3440
return new MyBarListResponseDto(items, hasNext, nextPage);
3541
}
42+
43+
@Transactional
44+
public void keep(Long userId, Long cocktailId) {
45+
Optional<MyBar> existingMyBar =
46+
myBarRepository.findByUser_IdAndCocktail_Id(userId, cocktailId);
47+
48+
LocalDateTime now = LocalDateTime.now();
49+
50+
if (existingMyBar.isPresent()) {
51+
// 이미 행이 있으면: 최근에 다시 킵했다고 보고 keptAt만 갱신
52+
MyBar myBar = existingMyBar.get();
53+
myBar.setKeptAt(now);
54+
if (myBar.getStatus() == KeepStatus.DELETED) {
55+
// 해제돼 있던 건 복원
56+
myBar.setStatus(KeepStatus.ACTIVE);
57+
myBar.setDeletedAt(null);
58+
}
59+
return; // 이미 ACTIVE여도 keptAt 갱신으로 충분
60+
}
61+
62+
// 없으면 새로 생성
63+
MyBar myBar = new MyBar();
64+
myBar.setUser(userRepository.getReferenceById(userId));
65+
myBar.setCocktail(cocktailRepository.getReferenceById(cocktailId));
66+
myBar.setStatus(KeepStatus.ACTIVE);
67+
myBar.setKeptAt(now);
68+
69+
myBarRepository.save(myBar);
70+
}
3671
}

0 commit comments

Comments
 (0)