Skip to content

Commit

Permalink
refactor: 누적 잔고가 정상 반영되도록 한다.
Browse files Browse the repository at this point in the history
  • Loading branch information
rlarltj committed Apr 10, 2024
1 parent cb1d270 commit 13c8924
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@

import com.moneymong.utils.AmountCalculatorByFundType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Slf4j
@RequiredArgsConstructor
public class LedgerDetailService {
private final LedgerAssembler ledgerAssembler;
Expand Down Expand Up @@ -65,6 +67,8 @@ public LedgerDetail createLedgerDetail(
paymentDate
);

int newAmount = AmountCalculatorByFundType.calculate(fundType, amount);

/**
* 가장 오래된 장부 내역인 경우 잔고를 amount 값으로 설정한다.
* 이전 내역이 있는 경우, 가장 가까운 시일에 생성된 장부 내역을 기준으로 잔고를 저장한다.
Expand All @@ -74,16 +78,18 @@ public LedgerDetail createLedgerDetail(
if (mostRecentLedgerDetail.isPresent()) {
LedgerDetail recentDetail = mostRecentLedgerDetail.get();

int newAmount = recentDetail.getBalance() + AmountCalculatorByFundType.calculate(fundType, amount);
ledgerDetail.updateBalance(newAmount);
int newBalance = recentDetail.getBalance() + newAmount;
ledgerDetail.updateBalance(newBalance);
}else {
ledgerDetail.updateBalance(AmountCalculatorByFundType.calculate(fundType, amount));
ledgerDetail.updateBalance(newAmount);
}

ledger.updateTotalBalance(ledger.getTotalBalance() + newAmount);

ledgerDetailRepository.bulkUpdateLedgerDetailBalance(
ledger,
paymentDate,
AmountCalculatorByFundType.calculate(fundType, amount)
newAmount
);

return ledgerDetailRepository.save(ledgerDetail);
Expand All @@ -98,43 +104,43 @@ public LedgerDetailInfoView updateLedgerDetail(
Integer newAmount
) {
// 1. 장부 상세 내역 업데이트
ledgerDetail.update(
user,
updateLedgerRequest.getStoreInfo(),
ledgerDetail.getFundType(),
updateLedgerRequest.getAmount(),
ledgerDetail.getBalance() + newAmount,
updateLedgerRequest.getDescription(),
updateLedgerRequest.getPaymentDate()
);

removeLedgerDetail(user.getId(), ledgerDetail.getId());

LedgerDetail newLedgerDetail = LedgerDetail.of(
ledger,
user,
ledgerDetail.getStoreInfo(),
ledgerDetail.getFundType(),
ledgerDetail.getAmount(),
ledgerDetail.getBalance(),
ledgerDetail.getDescription(),
ledgerDetail.getPaymentDate()
);

createLedgerDetail(ledger, user, ledgerDetail.getStoreInfo(),
ledgerDetail.getFundType(),
ledgerDetail.getAmount(),
ledgerDetail.getBalance(),
ledgerDetail.getDescription(),
ledgerDetail.getPaymentDate());
// ledgerDetail.update(
// user,
// updateLedgerRequest.getStoreInfo(),
// ledgerDetail.getFundType(),
// updateLedgerRequest.getAmount(),
// ledgerDetail.getBalance() + newAmount,
// updateLedgerRequest.getDescription(),
// updateLedgerRequest.getPaymentDate()
// );

// removeLedgerDetail(user.getId(), ledgerDetail.getId());

// LedgerDetail newLedgerDetail = LedgerDetail.of(
// ledger,
// user,
// ledgerDetail.getStoreInfo(),
// ledgerDetail.getFundType(),
// ledgerDetail.getAmount(),
// ledgerDetail.getBalance(),
// ledgerDetail.getDescription(),
// ledgerDetail.getPaymentDate()
// );
//
// createLedgerDetail(ledger, user, ledgerDetail.getStoreInfo(),
// ledgerDetail.getFundType(),
// ledgerDetail.getAmount(),
// ledgerDetail.getBalance(),
// ledgerDetail.getDescription(),
// ledgerDetail.getPaymentDate());

// 2. 장부 상세 내역 조회
final Long ledgerDetailId = ledgerDetail.getId();
List<LedgerReceipt> ledgerReceipts = ledgerReceiptReader.getLedgerReceipts(ledgerDetailId);
List<LedgerDocument> ledgerDocuments = ledgerDocumentReader.getLedgerDocuments(ledgerDetailId);

return LedgerDetailInfoView.of(
newLedgerDetail,
ledgerDetail,
ledgerReceipts,
ledgerDocuments,
user
Expand Down Expand Up @@ -165,6 +171,8 @@ public void removeLedgerDetail(

int newAmount = AmountCalculatorByFundType.calculate(ledgerDetail.getFundType(), ledgerDetail.getAmount());

log.info("[LedgerDetailService.remove] newAmount = {}", newAmount);

ledgerDetailRepository.bulkUpdateLedgerDetailBalance(
ledger,
ledgerDetail.getPaymentDate(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,13 @@ public LedgerDetailInfoView updateLedger(
updateLedgerRequest.getAmount()
);

ledger.updateTotalBalance(newAmount);

// newAmount
ledgerDetailRepository.bulkUpdateLedgerDetailBalance(ledger, updateLedgerRequest.getPaymentDate(), newAmount);
// ledger.updateTotalBalance(newAmount);
// ledgerDetailRepository.bulkUpdateLedgerDetailBalance(ledger, updateLedgerRequest.getPaymentDate(), newAmount);

//생성 먼저 진행한다.
// 영수증, 증빙자료를 전부 마이그레이션 한 뒤에 detail을 삭제한다.
ledgerDetailService.removeLedgerDetail(userId, ledgerDetailId);
ledgerDetailService.createLedgerDetail(
LedgerDetail createdLedgerDetail = ledgerDetailService.createLedgerDetail(
ledger,
user,
updateLedgerRequest.getStoreInfo(),
Expand All @@ -148,10 +148,11 @@ public LedgerDetailInfoView updateLedger(
);

// 장부 상세 내역 정보 업데이트
// LedgerDetailInfoView.of(createdLedgerDetail, ledgerRec)
return ledgerDetailService.updateLedgerDetail(
user,
ledger,
ledgerDetail,
createdLedgerDetail,
updateLedgerRequest,
newAmount
);
Expand Down

0 comments on commit 13c8924

Please sign in to comment.