Setup transaction api base

This commit is contained in:
GME 2019-04-02 20:25:03 +02:00
parent 16c97a6608
commit 5be8d03dd3
9 changed files with 196 additions and 35 deletions

View file

@ -22,39 +22,32 @@ public class QueryWrapper {
UserContext user = Util.readUserContext(Config.ORG1, "admin");
String response = null;
//try {
FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(user);
ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper);
FabricClientWrapper fabricClientWrapper = new FabricClientWrapper(user);
ChannelClientWrapper channelClientWrapper = ChannelClientWrapper.setupChannel(fabricClientWrapper);
ChaincodeID chaincodeID = ChaincodeID.newBuilder().setName(Config.CHAINCODE_NAME).build();
QueryByChaincodeRequest queryByChaincodeRequest = fabricClientWrapper.getClient().newQueryProposalRequest();
queryByChaincodeRequest.setArgs(args);
queryByChaincodeRequest.setFcn(functionName);
queryByChaincodeRequest.setChaincodeID(chaincodeID);
ChaincodeID chaincodeID = ChaincodeID.newBuilder().setName(Config.CHAINCODE_NAME).build();
QueryByChaincodeRequest queryByChaincodeRequest = fabricClientWrapper.getClient().newQueryProposalRequest();
queryByChaincodeRequest.setArgs(args);
queryByChaincodeRequest.setFcn(functionName);
queryByChaincodeRequest.setChaincodeID(chaincodeID);
Collection<ProposalResponse> queryProposals;
Collection<ProposalResponse> queryProposals;
try {
queryProposals = channelClientWrapper.queryByChainCode(queryByChaincodeRequest);
} catch (Exception e) {
throw new Exception(e);
}
for (ProposalResponse proposalResponse : queryProposals) {
if (!proposalResponse.isVerified() || proposalResponse.getStatus() != ChaincodeResponse.Status.SUCCESS) {
logger.error("Failed query proposal from peer " + proposalResponse.getPeer().getName() + " status : " + proposalResponse.getStatus() +
". Message : " + proposalResponse.getMessage() + ". Was verified : " + proposalResponse.isVerified());
} else {
response = new String(proposalResponse.getChaincodeActionResponsePayload());
logger.info("Query payload : " + response + " from peer : " + proposalResponse.getPeer().getName());
}
}
/*
try {
queryProposals = channelClientWrapper.queryByChainCode(queryByChaincodeRequest);
} catch (Exception e) {
e.printStackTrace();
return null;
throw new Exception(e);
}
for (ProposalResponse proposalResponse : queryProposals) {
if (!proposalResponse.isVerified() || proposalResponse.getStatus() != ChaincodeResponse.Status.SUCCESS) {
logger.error("Failed query proposal from peer " + proposalResponse.getPeer().getName() + " status : " + proposalResponse.getStatus() +
". Message : " + proposalResponse.getMessage() + ". Was verified : " + proposalResponse.isVerified());
} else {
response = new String(proposalResponse.getChaincodeActionResponsePayload());
logger.info("Query payload : " + response + " from peer : " + proposalResponse.getPeer().getName());
}
}
*/
return response;
}
}

View file

@ -0,0 +1,94 @@
package restImplementation;
import blockchain.query.QueryWrapper;
import blockchain.query.TransactionWrapper;
import database.transaction.Transaction;
import database.transaction.TransactionDao;
import org.hyperledger.fabric.sdk.BlockEvent;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
public class TransactionImplementation {
public HashMap sendTransaction(String sourceWalletHash, String destinationWalletHash, double amount, String transactionUnit) throws Exception {
TransactionWrapper transactionWrapper = new TransactionWrapper();
HashMap returnResponse = new HashMap();
QueryWrapper queryWrapper = new QueryWrapper();
String response = queryWrapper.sendQuery("readWallet", new String[]{sourceWalletHash});
if (response != null){
JsonReader reader = Json.createReader(new StringReader(response));
JsonObject walletInfo = reader.readObject();
double balance = walletInfo.getJsonNumber("sold").doubleValue();
if(balance-amount<0){ //CHECK WALLET BALANCE
returnResponse.put("success",false);
returnResponse.put("message","Not enough money");
} else {
//CHECK DEST WALLET
String responseDestWallet = queryWrapper.sendQuery("readWallet", new String[]{destinationWalletHash});
if(responseDestWallet!=null){
BlockEvent.TransactionEvent eventResponse = transactionWrapper.sendTransaction("transaction",new String[]{sourceWalletHash,destinationWalletHash,String.valueOf(amount)});
String txID = eventResponse.getTransactionID();
Transaction transaction = new Transaction();
long now = Instant.now().toEpochMilli();
transaction.setTransactionDate(now);
transaction.setTransactionFrom(sourceWalletHash);
transaction.setTransactionTo(destinationWalletHash);
transaction.setTransactionAmount(amount);
transaction.setTransactionHash(txID);
transaction.setTransactionUnit(transactionUnit);
TransactionDao transactionDao = new TransactionDao();
transactionDao.addTransaction(transaction);
returnResponse.put("success",true);
returnResponse.put("message",txID);
} else {
returnResponse.put("success",false);
returnResponse.put("message","Destination wallet doesn't exist");
}
}
} else {
returnResponse.put("success",false);
returnResponse.put("message","Error in user wallet");
}
return returnResponse;
}
public List<Transaction> getSentTransaction(String userHash) throws Exception {
TransactionDao transactionDao = new TransactionDao();
return transactionDao.getUserSentTransaction(userHash);
}
public List<Transaction> getReceivedTransaction(String userHash) throws Exception {
TransactionDao transactionDao = new TransactionDao();
return transactionDao.getUserReceivedTransaction(userHash);
}
public Transaction getTransaction(String userHash, String transactionHash) throws Exception {
TransactionDao transactionDao = new TransactionDao();
return transactionDao.getTransaction(userHash,transactionHash);
}
public List<Transaction> getLatestTransactions(String userHash) throws Exception {
TransactionDao transactionDao = new TransactionDao();
return transactionDao.getTenLastUserTransactions(userHash);
}
public List<Transaction> getUserTransactions(String userHash) throws Exception {
TransactionDao transactionDao = new TransactionDao();
return transactionDao.getUserTransactions(userHash);
}
}

View file

@ -1,10 +1,37 @@
package restService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import database.transaction.Transaction;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import restImplementation.TransactionImplementation;
import javax.validation.Valid;
import java.util.HashMap;
@RestController
@RequestMapping(value = "/api/rest/transaction")
public class TransactionResource {
@RequestMapping(value = "/send", method = RequestMethod.POST, produces = "application/json")
@ResponseStatus(HttpStatus.CREATED)
public ResponseEntity saveTransaction(@Valid @RequestBody Transaction transaction){
TransactionImplementation transactionImplementation = new TransactionImplementation();
try{
HashMap mapResponse = transactionImplementation.sendTransaction(transaction.getTransactionFrom(),transaction.getTransactionTo(),transaction.getTransactionAmount(),transaction.getTransactionUnit());
if(Boolean.parseBoolean(mapResponse.get("success").toString())){
return ResponseEntity.status(HttpStatus.OK).body("{\"response\":\""+mapResponse.get("message")+"\"}");
}else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"response\":\""+mapResponse.get("message")+"\"}");
}
}catch (Exception e){
StringResponse responseS = new StringResponse(e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseS);
}
}
}

View file

@ -130,6 +130,6 @@ public class UserResource {
@PostMapping(value = "/update")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity updateUser(@RequestBody User user){
return new ResponseEntity(null, HttpStatus.OK);
return new ResponseEntity(null, HttpStatus.SERVICE_UNAVAILABLE);
}
}

View file

@ -7,20 +7,61 @@ import org.apache.log4j.Logger;
import org.junit.Ignore;
import org.junit.Test;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
@Ignore
public class ReadWalletTest {
private static Logger logger = Logger.getLogger(ReadWalletTest.class);
/*
@Test
public void TestReadWalletTest() {
public void SuccessTestReadWalletTest() {
BasicConfigurator.configure();
try{
QueryWrapper queryWrapper = new QueryWrapper();
String functionName = "readWallet";
String[] args = new String[]{"qerh654d5f5h46q4fdh6h65fh00"};
String response = queryWrapper.sendQuery(functionName,args);
logger.info("response : "+response);
if(response!=null){
JsonReader reader = Json.createReader(new StringReader(response));
JsonObject walletInfo = reader.readObject();
double balance = walletInfo.getJsonNumber("sold").doubleValue();
logger.info("response : "+response);
logger.info("balance : "+balance);
}
}catch (Exception e){
e.printStackTrace();
}
}
*/
@Test
public void FailTestReadWalletTest() {
BasicConfigurator.configure();
try{
QueryWrapper queryWrapper = new QueryWrapper();
String functionName = "readWallet";
String[] args = new String[]{"tttt"};
String response = queryWrapper.sendQuery(functionName,args);
if(response!=null){
JsonReader reader = Json.createReader(new StringReader(response));
JsonObject walletInfo = reader.readObject();
double balance = walletInfo.getJsonNumber("sold").doubleValue();
logger.info("response : "+response);
logger.info("balance : "+balance);
} else {
logger.warn("ERROR");
}
}catch (Exception e){
e.printStackTrace();
}

View file

@ -11,10 +11,12 @@ import java.util.List;
public class GetUserAssociationTest {
private static Logger logger = Logger.getLogger(GetUserAssociationTest.class);
/*
@Test
public void GetUserAssociationTest() {
BlockchainQueryImplementation queryImplementation = new BlockchainQueryImplementation();
String association = queryImplementation.getUserAssociation("bitman");
logger.info("association : "+association);
}
*/
}

View file

@ -11,6 +11,7 @@ import java.util.List;
public class GetUserWalletsTest {
private static Logger logger = Logger.getLogger(GetWalletSoldTest.class);
/*
@Test
public void GetUserWalletsTest() {
BlockchainQueryImplementation queryImplementation = new BlockchainQueryImplementation();
@ -19,4 +20,5 @@ public class GetUserWalletsTest {
logger.info("walletHash : "+w.get("walletHash")+". walletType : "+w.get("walletType")+". sold : "+w.get("sold"));
}
}
*/
}

View file

@ -10,11 +10,13 @@ import org.junit.Test;
public class GetWalletSoldTest {
private static Logger logger = Logger.getLogger(GetWalletSoldTest.class);
/*
@Test
public void GetWalletSold() {
BlockchainQueryImplementation queryImplementation = new BlockchainQueryImplementation();
Double sold = queryImplementation.getWalletSold("qerh654d5f5h46q4fdh6h65fh00");
logger.info("result sold : "+sold);
}
*/
}

View file

@ -22,11 +22,11 @@ public class WalletImplementationTest {
Map<String,String> walletResponse = walletImplementation.createWallet(wallet);
Wallet returnWallet = new Wallet();
returnWallet.setWallet_hash(walletResponse.get("walletHash"));
returnWallet.setSold(Double.parseDouble(walletResponse.get("walletSold")));
returnWallet.setBalance(Double.parseDouble(walletResponse.get("walletSold")));
returnWallet.setType(walletResponse.get("walletType"));
logger.info("wallet hash: "+returnWallet.getWallet_hash());
logger.info("wallet sold: "+returnWallet.getSold());
logger.info("wallet sold: "+returnWallet.getBalance());
logger.info("wallet type: "+returnWallet.getType());
} catch (Exception e){
logger.warn("Error: "+e.getMessage());