diff --git a/src/main/java/org/airpenthouse/GoTel/controllers/SponsorsController.java b/src/main/java/org/airpenthouse/GoTel/controllers/SponsorsController.java index 0a77e4c..f36adb3 100644 --- a/src/main/java/org/airpenthouse/GoTel/controllers/SponsorsController.java +++ b/src/main/java/org/airpenthouse/GoTel/controllers/SponsorsController.java @@ -1,11 +1,14 @@ package org.airpenthouse.GoTel.controllers; +import com.stripe.exception.StripeException; +import com.stripe.model.Customer; import org.airpenthouse.GoTel.dtos.sponsors.SponsorsDonateRequest; import org.airpenthouse.GoTel.dtos.sponsors.SponsorsRequest; import org.airpenthouse.GoTel.services.sponsors.SponsorsService; import org.airpenthouse.GoTel.util.PropertiesUtilManager; import org.airpenthouse.GoTel.util.executors.SponsorsExecutors; import org.airpenthouse.GoTel.util.mappers.SponsorsMapper; +import org.airpenthouse.GoTel.util.payments.SponsorsDonateUsingStripe; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -15,19 +18,28 @@ @RequestMapping("/api/sponsors") @RestController -@CrossOrigin(origins="http://localhost:4200") +@CrossOrigin(origins = "http://localhost:4200") public class SponsorsController { @Autowired public SponsorsMapper mapper; @Autowired public SponsorsService service; + @Autowired + public SponsorsDonateUsingStripe stripeApi; - @PostMapping("/sponsorDonote") + @PostMapping("/sponsorDonate") public ResponseEntity> sponsorsDonate(@RequestBody SponsorsDonateRequest request, UriComponentsBuilder builder) { var entity = mapper.toEntity(request); SponsorsExecutors.setMapper(mapper); SponsorsService.serviceHandle = "DONATE"; + Customer customerObj; + try { + customerObj = stripeApi.setCustomer(entity.getSponsorName(), entity.getSponsorSurname(), entity.getSponsorEmailAddress(), entity.getSponsorCellphoneNumber()); + entity.setId(customerObj.getId()); + } catch (StripeException e) { + throw new RuntimeException(e); + } var entity2 = service.initializeSponsorsService(false, entity); if (entity2 == null) { @@ -35,8 +47,20 @@ public ResponseEntity> sponsorsDonate(@RequestBody Sponsor } else if (entity2.isEmpty()) { return ResponseEntity.notFound().build(); } else { - var uri = builder.path("/api/sponsors/getSponsorByName/{sponsorName}").buildAndExpand(entity.getSponsorName()).toUri(); - return ResponseEntity.created(uri).body(entity2); + try { + stripeApi.setPaymentMethod(customerObj, entity.getCardNumber(), entity.getCvv(), Long.parseLong(entity.getCardDate()), Long.parseLong(entity.getCvv())); + var payment = stripeApi.sponsorDonate(customerObj, entity.getDononationAmount(), "used"); + + if (payment) { + var uri = builder.path("/api/sponsors/getSponsorByName/{sponsorName}").buildAndExpand(entity.getSponsorName()).toUri(); + return ResponseEntity.created(uri).body(entity2); + }else { + throw new RuntimeException(); + } + } catch (StripeException | RuntimeException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/org/airpenthouse/GoTel/entities/sponsors/SponsorEntity.java b/src/main/java/org/airpenthouse/GoTel/entities/sponsors/SponsorEntity.java index 6bd2aae..8eebeab 100644 --- a/src/main/java/org/airpenthouse/GoTel/entities/sponsors/SponsorEntity.java +++ b/src/main/java/org/airpenthouse/GoTel/entities/sponsors/SponsorEntity.java @@ -3,6 +3,8 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.Setter; +import lombok.ToString; import org.airpenthouse.GoTel.util.PropertiesUtilManager; import org.airpenthouse.GoTel.util.executors.SponsorsExecutors; @@ -13,17 +15,19 @@ import java.util.List; import java.util.concurrent.*; +@ToString @AllArgsConstructor public class SponsorEntity extends SponsorsExecutors implements Callable> { @Getter private String sponsorName, SponsorSurname, sponsorEmailAddress, sponsorCellphoneNumber, sponsorReasonToDonate; - + @Setter + private String id; @Getter private String cardNumber, cvv, cardDate; @Getter - private Double dononationAmount; + private Long dononationAmount; @Getter private LocalDateTime paymentDate; @@ -49,7 +53,7 @@ private SponsorEntity(String sponsorName , String cardNumber , String cvv , String cardDate - , Double dononationAmount + , Long dononationAmount , LocalDateTime paymentDate) { this.sponsorName = sponsorName; SponsorSurname = sponsorSurname; @@ -132,7 +136,7 @@ private List resultSetData(ResultSet set) throws SQLException { , set.getString(6) , set.getString(7) , set.getString(8) - , set.getDouble(9) + , set.getLong(9) , LocalDateTime.parse(set.getString(10)))); } return entities; diff --git a/src/main/java/org/airpenthouse/GoTel/util/payments/SponsorsDonateUsingStripe.java b/src/main/java/org/airpenthouse/GoTel/util/payments/SponsorsDonateUsingStripe.java new file mode 100644 index 0000000..838a93d --- /dev/null +++ b/src/main/java/org/airpenthouse/GoTel/util/payments/SponsorsDonateUsingStripe.java @@ -0,0 +1,80 @@ +package org.airpenthouse.GoTel.util.payments; + +import com.stripe.exception.StripeException; +import com.stripe.model.Charge; +import com.stripe.model.Customer; +import com.stripe.model.PaymentMethod; +import com.stripe.net.RequestOptions; +import com.stripe.param.ChargeCreateParams; +import com.stripe.param.CustomerCreateParams; +import com.stripe.param.PaymentMethodCreateParams; +import org.springframework.stereotype.Component; + +@Component +public class SponsorsDonateUsingStripe { + + RequestOptions requestOptions; + public SponsorsDonateUsingStripe() { + requestOptions = RequestOptions.builder() + .setApiKey("key") + .build(); + } + + public Customer setCustomer(String sponsorName + , String sponsorSurname + , String sponsorEmailAddress + , String sponsorCellphoneNumber) + throws StripeException { + CustomerCreateParams params = + CustomerCreateParams.builder() + .setName(sponsorName + " " + sponsorSurname) + .setEmail(sponsorEmailAddress) + .setPhone(sponsorCellphoneNumber) + .build(); + return Customer.create(params,requestOptions); + } + + public PaymentMethod setPaymentMethod(Customer customer + , String sponsorCardNumber + , String sponsorCvc + , Long expMonth + , Long expYear) + throws StripeException { + + PaymentMethodCreateParams params = + PaymentMethodCreateParams.builder() + .setType(PaymentMethodCreateParams.Type.CARD) + .setCustomer(customer.getId()) + .setCard(PaymentMethodCreateParams + .CardDetails + .builder() + .setNumber(sponsorCardNumber) + .setCvc(sponsorCvc) + .setExpMonth(expMonth) + .setExpYear(expYear) + .build()) + .setBillingDetails( + PaymentMethodCreateParams.BillingDetails.builder().setName("John Doe").build() + ) + .build(); + + return PaymentMethod.create(params,requestOptions); + } + + public boolean sponsorDonate(Customer customer + , Long amount + , String currency) + throws StripeException { + ChargeCreateParams params = + ChargeCreateParams.builder() + .setCustomer(customer.getId()) + .setAmount(amount) + .setCurrency(currency) + .setSource("tok_visa") + .build(); + Charge charge = Charge.create(params,requestOptions); + return charge.getPaid(); + } + + +}