public shared (msg) func apply(input : LoanApplication) : async LoanOffer {
counter += 1;
Debug.print("Loan Application for user " #Principal.toText(msg.caller));
let offer : LoanOffer = {
providerid = Principal.fromActor(this);
providername = "Loan Provider";
applicationid = counter;
apr = 3.14;
created = Time.now();
};
var userOffers : ?Offers<LoanOffer> = offers.get(msg.caller);
switch userOffers {
case (null) { var userOffer : Offers<LoanOffer> = Buffer.Buffer(0); userOffer.add(offer); offers.put(msg.caller, userOffer)};
case (?userOffer) { userOffer.add(offer); };
};
return offer;
};
public query (msg) func getOffers() : async [LoanOffer] {
var userOffers : ?Offers<LoanOffer> = offers.get(msg.caller);
switch userOffers {
case (null) { return [] };
case (?userOffer) { return userOffer.toArray() };
};
};
LoanProxy.java
public interface LoanProxy {
@UPDATE
@Name("apply")
@Waiter(timeout = 30)
@ResponseClass(LoanOffer.class)
public CompletableFuture<LoanOffer> apply(@Argument(Type.RECORD) LoanApplication loanApplication);
@QUERY
@Name("getOffers")
public LoanOffer[] getOffers();
}
LoanApplication.java
public class LoanApplication{
@Field(Type.NAT)
public BigInteger id;
public Double amount;
@Field(Type.NAT16)
public Short term;
@Name("firstname")
public String firstName;
@Name("lastname")
public String lastName;
public String ssn;
public String zipcode;
public BigInteger created;
}
LoanOffer.java
public class LoanOffer{
@Field(Type.PRINCIPAL)
@Name("providerid")
public String providerId;
@Name("providername")
public String providerName;
@Field(Type.PRINCIPAL)
@Name("userid")
public Principal userId;
@Field(Type.NAT)
@Name("applicationid")
public Integer applicationId;
public Double apr;
@Field(Type.INT)
public Long created;
}