@Transactional
public PostBasketRes addBasket(int userIdx, int storeIdx, PostBasketReq postBasketReq) throws BaseException {
try {
//이전 장바구니 storeIdx 확인
GetBasketRes getBasketRes = basketProvider.getRecentBasket(userIdx);
//다른 가게에서 메뉴 추가?
if(getBasketRes.getStoreIdx()!=storeIdx){
//이전 장바구니 모두 삭제한다.
int result = basketDao.deleteAllBasket(userIdx);
if(result==0){
throw new BaseException(DELETE_FAIL_ERROR);
}
}
//장바구니 생성
int basketIdx = basketDao.addBasket(userIdx,storeIdx,postBasketReq);
return new PostBasketRes(basketIdx);
} catch (Exception e) {
System.out.println("StoreService.createStore");
throw new BaseException(DATABASE_ERROR);
}
}
장바구니 추가의 로직
이 때 Dao단에서 delete와 addBasket는 하나의 처리로 생각을 해야한다. → Transaction 사용
@Transactional
public PostLikeStoreRes addLikeStore(int userIdx, PostLikeStoreReq postLikeStoreReq) throws BaseException {
try {
//찜 추가
int lsIdx = likeStoreDao.addLikeStore(userIdx,postLikeStoreReq);
//store의 찜 개수 증가시키기
storeService.addLikeStoreCount(postLikeStoreReq);
return new PostLikeStoreRes(lsIdx);
} catch (Exception e) {
System.out.println("StoreService.createStore");
throw new BaseException(DATABASE_ERROR);
}
}
찜한 가게 추가의 로직
두 개 모두 데이터의 변경이 생기는 로직이기 때문에 Transaction을 걸어주었다.