62 lines
2.1 KiB
Java
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);
|
|
}
|
|
|
|
}
|