155 lines
5.8 KiB
Java
155 lines
5.8 KiB
Java
package restImplementation;
|
|
|
|
import blockchain.query.QueryWrapper;
|
|
import blockchain.query.TransactionWrapper;
|
|
import database.Wallet.Wallet;
|
|
import database.Wallet.WalletDao;
|
|
import database.user.User;
|
|
import database.user.UserDao;
|
|
import org.apache.commons.lang.RandomStringUtils;
|
|
import org.springframework.security.crypto.bcrypt.BCrypt;
|
|
|
|
import javax.json.Json;
|
|
import javax.json.JsonArray;
|
|
import javax.json.JsonObject;
|
|
import javax.json.JsonReader;
|
|
import java.io.StringReader;
|
|
import java.time.Instant;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class WalletImplementation {
|
|
|
|
public Map<String,String> createWallet(Wallet wallet) throws Exception {
|
|
Map<String,String> response = new HashMap<>();
|
|
TransactionWrapper transactionWrapper = new TransactionWrapper();
|
|
WalletDao walletDao = new WalletDao();
|
|
UserDao userDao = new UserDao();
|
|
|
|
User user = userDao.getUserWithHash(wallet.getUser_hash());
|
|
wallet.setWallet_hash(generateWalletHash(user.getName()+wallet.getType()+user.getFirstname()+ RandomStringUtils.randomAlphabetic(10)));
|
|
|
|
transactionWrapper.sendTransaction("initWallet",new String[]{wallet.getWallet_hash(),wallet.getType(),wallet.getUser_hash()}); //Create Wallet in Blockchain
|
|
|
|
wallet.setBalance(0.0);
|
|
wallet.setIs_active(true);
|
|
long now = Instant.now().toEpochMilli();
|
|
wallet.setCreation_date(now);
|
|
wallet.setModification_date(now);
|
|
|
|
|
|
walletDao.addWallet(wallet); // add wallet to replica DB
|
|
|
|
response.put("walletHash",wallet.getWallet_hash());
|
|
response.put("walletType",wallet.getType());
|
|
response.put("walletSold",wallet.getBalance().toString());
|
|
response.put("ownerHash",wallet.getUser_hash());
|
|
response.put("response","true");
|
|
|
|
return response;
|
|
}
|
|
|
|
//getAllUserWallets
|
|
public JsonArray getAllUserWallets(String userHash) throws Exception {
|
|
QueryWrapper queryWrapper = new QueryWrapper();
|
|
JsonArray walletList = null;
|
|
String response = queryWrapper.sendQuery("queryWalletsByOwner",new String[]{userHash});
|
|
|
|
if(response != null) {
|
|
JsonReader reader = Json.createReader(new StringReader(response));
|
|
walletList = reader.readArray();
|
|
}
|
|
return walletList;
|
|
}
|
|
|
|
//getWallet
|
|
public Wallet getWallet(String walletHash) throws Exception {
|
|
QueryWrapper queryWrapper = new QueryWrapper();
|
|
String response = queryWrapper.sendQuery("readWallet",new String[]{walletHash});
|
|
Wallet wallet = new Wallet();
|
|
|
|
if(response != null) {
|
|
JsonReader reader = Json.createReader(new StringReader(response));
|
|
JsonObject walletJson = reader.readObject();
|
|
wallet.setWallet_hash(walletJson.getString("id"));
|
|
wallet.setUser_hash(walletJson.getString("owner"));
|
|
wallet.setType(walletJson.getString("walletType"));
|
|
wallet.setBalance(walletJson.getJsonNumber("sold").doubleValue());
|
|
}
|
|
return wallet;
|
|
}
|
|
|
|
//setBalance
|
|
public void setBalanceToWallet(String walletHash, double amount) throws Exception {
|
|
double newBalance = 0.0;
|
|
TransactionWrapper transactionWrapper = new TransactionWrapper();
|
|
System.out.println("String.valueOf(amount) : "+String.valueOf(amount));
|
|
System.out.println("walletHash : "+walletHash);
|
|
transactionWrapper.sendTransaction("setSoldOnWallet",new String[]{walletHash,String.valueOf(amount)});
|
|
|
|
|
|
Wallet wallet = getWallet(walletHash);
|
|
if(wallet!=null){
|
|
newBalance=wallet.getBalance();
|
|
WalletDao walletDao = new WalletDao();
|
|
walletDao.updateWalletBalance(walletHash,newBalance);
|
|
} else {
|
|
throw new Exception("ERROR QUERY WALLET");
|
|
}
|
|
|
|
}
|
|
|
|
//update DB balance after transaction
|
|
public void updateWalletBalance(String sourceWalletHash, String destinationWalletHash, double amount) throws Exception {
|
|
WalletDao walletDao = new WalletDao();
|
|
double balanceWalletSource = walletDao.getWallet(sourceWalletHash).getBalance();
|
|
double balanceWalletDestination = walletDao.getWallet(destinationWalletHash).getBalance();
|
|
|
|
double newBalanceWalletSource = balanceWalletSource-amount;
|
|
double newBalanceWalletDestination = balanceWalletDestination+amount;
|
|
|
|
walletDao.updateWalletBalance(sourceWalletHash,newBalanceWalletSource);
|
|
walletDao.updateWalletBalance(destinationWalletHash,newBalanceWalletDestination);
|
|
}
|
|
|
|
//transfer
|
|
public void transferWallet(String walletHash, String newUserHash) throws Exception {
|
|
TransactionWrapper transactionWrapper = new TransactionWrapper();
|
|
transactionWrapper.sendTransaction("transferWallet",new String[]{walletHash,newUserHash});
|
|
|
|
WalletDao walletDao = new WalletDao();
|
|
walletDao.transferWallet(walletHash,newUserHash);
|
|
}
|
|
|
|
|
|
//delete
|
|
public void deleteWallet(String walletHash, String userHash) throws Exception {
|
|
TransactionWrapper transactionWrapper = new TransactionWrapper();
|
|
transactionWrapper.sendTransaction("deleteWallet",new String[]{walletHash});
|
|
|
|
WalletDao walletDao = new WalletDao();
|
|
walletDao.deleteWallet(walletHash,userHash);
|
|
}
|
|
|
|
//getAll
|
|
public JsonArray getAllWallets() throws Exception {
|
|
QueryWrapper queryWrapper = new QueryWrapper();
|
|
JsonArray walletList = null;
|
|
String response = queryWrapper.sendQuery("query_all_wallets",new String[]{});
|
|
|
|
if(response != null) {
|
|
JsonReader reader = Json.createReader(new StringReader(response));
|
|
walletList = reader.readArray();
|
|
}
|
|
return walletList;
|
|
}
|
|
|
|
|
|
private String generateWalletHash(String walletBuilderString){
|
|
return BCrypt.hashpw(walletBuilderString,BCrypt.gensalt());
|
|
}
|
|
|
|
|
|
}
|