DiamondTransactionCommandService.java
package com.newbit.purchase.command.application.service;
import com.newbit.purchase.command.domain.aggregate.DiamondHistory;
import com.newbit.purchase.command.domain.aggregate.DiamondTransactionType;
import com.newbit.purchase.command.domain.repository.DiamondHistoryRepository;
import com.newbit.user.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
public class DiamondTransactionCommandService {
private final DiamondHistoryRepository diamondHistoryRepository;
private final UserService userService;
public void saveDiamondHistory(
Long userId,
DiamondTransactionType type,
Integer increaseAmount,
Integer decreaseAmount,
Long serviceId,
Integer balance
) {
DiamondHistory history = DiamondHistory.builder()
.userId(userId)
.serviceType(type)
.serviceId(serviceId)
.increaseAmount(increaseAmount)
.decreaseAmount(decreaseAmount)
.balance(balance)
.build();
diamondHistoryRepository.save(history);
}
@Transactional
public void applyDiamondPayment(Long userId, Long paymentId, Integer amount) {
Integer balance = userService.addDiamond(userId, amount);
saveDiamondHistory(userId, DiamondTransactionType.CHARGE, amount, null, paymentId, balance);
}
@Transactional
public void applyDiamondRefund(Long userId, Long refundId, Integer amount) {
Integer balance = userService.useDiamond(userId, amount);
saveDiamondHistory(userId, DiamondTransactionType.REFUND, null, amount, refundId, balance);
}
}