casino/backend/src/main/java/de/szut/casino/deposit/TransactionService.java
Phan Huy Tran d25b894f38
Some checks failed
CI / Get Changed Files (pull_request) Successful in 9s
CI / eslint (pull_request) Successful in 39s
CI / prettier (pull_request) Successful in 37s
CI / test-build (pull_request) Successful in 42s
CI / Checkstyle Main (pull_request) Failing after 1m22s
feat: Save balance after successful payment
2025-03-13 15:02:32 +01:00

62 lines
2.1 KiB
Java

package de.szut.casino.deposit;
import com.stripe.exception.StripeException;
import com.stripe.model.checkout.Session;
import com.stripe.param.checkout.SessionRetrieveParams;
import de.szut.casino.user.UserEntity;
import de.szut.casino.user.UserRepository;
import org.springframework.stereotype.Service;
import java.util.Objects;
import java.util.Optional;
@Service
public class TransactionService {
private final TransactionRepository transactionRepository;
private final UserRepository userRepository;
public TransactionService(TransactionRepository transactionRepository, UserRepository userRepository) {
this.transactionRepository = transactionRepository;
this.userRepository = userRepository;
}
public void createTransaction(
UserEntity user,
String sessionID,
Double amount
) {
TransactionEntity transaction = new TransactionEntity();
transaction.setUser(user);
transaction.setSessionId(sessionID);
transaction.setAmount(amount);
transactionRepository.save(transaction);
}
public void fulfillCheckout(String sessionID) throws StripeException {
SessionRetrieveParams params = SessionRetrieveParams.builder()
.addExpand("line_items")
.build();
Session checkoutSession = Session.retrieve(sessionID, params, null);
if (!Objects.equals(checkoutSession.getPaymentStatus(), "paid")) {
return;
}
Optional<TransactionEntity> optionalTransaction = transactionRepository.findOneBySessionID(sessionID);
if (optionalTransaction.isEmpty()) {
throw new RuntimeException("Transaction not found");
}
TransactionEntity transaction = optionalTransaction.get();
transaction.setStatus(TransactionStatus.SUCCEEDED);
UserEntity user = transaction.getUser();
user.addBalance(checkoutSession.getAmountTotal());
userRepository.save(user);
transactionRepository.save(transaction);
}
}