Skip to content

Commit 650f5f3

Browse files
committed
Merge branch 'staging' into 'master'
Staging See merge request AdvProg/reguler-2022/student/kelas-b/2006527481-Muhammad-Athallah/tutorial-7!1
2 parents c276517 + e4cf165 commit 650f5f3

File tree

2 files changed

+46
-18
lines changed

2 files changed

+46
-18
lines changed

src/main/java/id/ac/ui/cs/advprog/tutorial7/service/PaymentService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package id.ac.ui.cs.advprog.tutorial7.service;
22

3-
import id.ac.ui.cs.advprog.tutorial7.core.vaapi.VirtualAccount;
43
import id.ac.ui.cs.advprog.tutorial7.model.PaymentResponse;
54

5+
import java.util.concurrent.ExecutionException;
6+
67
public interface PaymentService {
78
String createNewVA(int vaAmount, String bank);
89
PaymentResponse pay(String va, int payAmount, String day, String time);
Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package id.ac.ui.cs.advprog.tutorial7.service;
22

3+
import java.util.List;
34
import java.util.NoSuchElementException;
5+
import java.util.concurrent.CompletableFuture;
6+
import java.util.concurrent.ExecutionException;
7+
import java.util.concurrent.atomic.AtomicInteger;
8+
import java.util.concurrent.atomic.AtomicReference;
9+
import java.util.stream.Stream;
410

511
import org.springframework.stereotype.Service;
612

713
import id.ac.ui.cs.advprog.tutorial7.core.bankapi.BankApi;
814
import id.ac.ui.cs.advprog.tutorial7.core.miscapi.HolidayApi;
915
import id.ac.ui.cs.advprog.tutorial7.core.vaapi.VAHelper;
10-
import id.ac.ui.cs.advprog.tutorial7.core.vaapi.VirtualAccount;
1116
import id.ac.ui.cs.advprog.tutorial7.model.PaymentResponse;
1217

1318
@Service
@@ -31,30 +36,52 @@ public String createNewVA(int vaAmount, String bank) {
3136

3237
@Override
3338
public PaymentResponse pay(String va, int payAmount, String day, String time) {
34-
35-
if(holidayApi.isHoliday(day)) return new PaymentResponse(0, "Cannot pay on holidays");
39+
CompletableFuture<Boolean> isHolidayFuture = CompletableFuture.supplyAsync(() -> holidayApi.isHoliday(day));
40+
CompletableFuture<Integer> vaAmountFuture = CompletableFuture.supplyAsync(() -> vaHelper.getVAAmount(va));
41+
CompletableFuture<BankApi> bankFuture = CompletableFuture.supplyAsync(() -> vaHelper.getBankByVA(va));
42+
CompletableFuture<String> paymentValidateFuture;
43+
CompletableFuture<Boolean> bankClosedFuture;
3644

3745
int vaAmount;
3846
BankApi bankApi;
47+
boolean paymentSuccessful = false;
48+
3949
try {
40-
vaAmount = vaHelper.getVAAmount(va);
41-
bankApi = vaHelper.getBankByVA(va);
42-
} catch(NoSuchElementException e) {
43-
return new PaymentResponse(0, "VA number not found");
44-
}
50+
bankApi = bankFuture.get();
51+
bankClosedFuture = CompletableFuture.supplyAsync(() -> bankApi.isBankClosed(time, payAmount));
52+
vaAmount = vaAmountFuture.get();
53+
paymentValidateFuture = CompletableFuture.supplyAsync(() -> vaHelper.validatePayment(va, vaAmount, payAmount));
4554

46-
if(bankApi.isBankClosed(time, vaAmount)) return new PaymentResponse(0, "Bank already closed, please try again tomorrow");
47-
48-
String errorMsg = vaHelper.validatePayment(va, vaAmount, payAmount);
49-
if(!errorMsg.equals("")) return new PaymentResponse(0, errorMsg);
55+
if (isHolidayFuture.get()) {
56+
return new PaymentResponse(0, "Cannot pay on holidays");
57+
}
5058

51-
boolean paymentSuccessfull = bankApi.pay(payAmount);
52-
vaHelper.logVAPayment(va, paymentSuccessfull);
53-
if(!paymentSuccessfull) return new PaymentResponse(0, "Payment unsuccessfull, please try again");
54-
else return new PaymentResponse(1, "Payment successfull");
59+
if ((bankClosedFuture.get())) {
60+
return new PaymentResponse(0, "Bank already closed, please try again tomorrow");
61+
}
5562

56-
63+
String errorMsg = paymentValidateFuture.get();
64+
65+
if (!errorMsg.equals("")) {
66+
return new PaymentResponse(0, errorMsg);
67+
}
5768

69+
CompletableFuture<Boolean> bankPaymentFuture = CompletableFuture.supplyAsync(() -> bankApi.pay(payAmount));
70+
paymentSuccessful = bankPaymentFuture.get();
71+
72+
} catch (NoSuchElementException e) {
73+
return new PaymentResponse(0, "VA number not found");
74+
} catch (InterruptedException | ExecutionException ignored){
75+
76+
}
77+
78+
boolean paymentSuccessfulFinal = paymentSuccessful;
79+
CompletableFuture.runAsync(() -> vaHelper.logVAPayment(va, paymentSuccessfulFinal));
80+
81+
if (paymentSuccessful) {
82+
return new PaymentResponse(1, "Payment successful");
83+
}
84+
return new PaymentResponse(0, "Payment unsuccessful, please try again");
5885
}
5986

6087
}

0 commit comments

Comments
 (0)