11package com .back .domain .mybar .service ;
22
3+ import com .back .domain .cocktail .repository .CocktailRepository ;
34import com .back .domain .mybar .dto .MyBarItemResponseDto ;
45import com .back .domain .mybar .dto .MyBarListResponseDto ;
56import com .back .domain .mybar .entity .MyBar ;
67import com .back .domain .mybar .enums .KeepStatus ;
78import com .back .domain .mybar .repository .MyBarRepository ;
9+ import com .back .domain .user .repository .UserRepository ;
810import lombok .RequiredArgsConstructor ;
911import org .springframework .data .domain .Page ;
1012import org .springframework .data .domain .PageRequest ;
1113import org .springframework .stereotype .Service ;
1214import org .springframework .transaction .annotation .Transactional ;
1315
16+ import java .time .LocalDateTime ;
1417import java .util .ArrayList ;
1518import java .util .List ;
19+ import java .util .Optional ;
1620
1721@ Service
1822@ RequiredArgsConstructor
1923public 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