#75 Added transaction logic
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package de.rwu.easydrop.service.processing;
|
||||
|
||||
import de.rwu.easydrop.api.dto.TransactionDTO;
|
||||
import de.rwu.easydrop.data.connector.TransactionPersistenceInterface;
|
||||
import de.rwu.easydrop.model.Offer;
|
||||
import de.rwu.easydrop.model.Transaction;
|
||||
import de.rwu.easydrop.service.mapping.TransactionMapper;
|
||||
import de.rwu.easydrop.util.Timestamp;
|
||||
|
||||
/**
|
||||
* Handles transactions.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
public class TransactionHandler {
|
||||
/**
|
||||
* Transaction persistence.
|
||||
*/
|
||||
private TransactionPersistenceInterface txPersistence;
|
||||
|
||||
/**
|
||||
* Creates new transaction handler.
|
||||
*
|
||||
* @param txdb transaction persistence
|
||||
*/
|
||||
public TransactionHandler(final TransactionPersistenceInterface txdb) {
|
||||
this.txPersistence = txdb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates transaction from offer.
|
||||
*
|
||||
* @param offer Offer
|
||||
*/
|
||||
public void turnOfferToTransaction(final Offer offer) {
|
||||
Transaction tx = new Transaction();
|
||||
tx.setOfferId(offer.getOfferId());
|
||||
tx.setVolume(offer.getTargetProduct().getCurrentPrice());
|
||||
tx.setEarnings(offer.getTargetProduct().getCurrentPrice()
|
||||
- offer.getSourceProduct().getCurrentPrice());
|
||||
tx.setTransactionTime(Timestamp.now());
|
||||
|
||||
// Write transaction to persistence
|
||||
TransactionDTO txDTO = TransactionMapper.mapTXToDTO(tx);
|
||||
txPersistence.writeTX(txDTO);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package de.rwu.easydrop.service.validation;
|
||||
|
||||
import de.rwu.easydrop.exception.InvalidTransactionException;
|
||||
import de.rwu.easydrop.model.Transaction;
|
||||
|
||||
/**
|
||||
* Validates transactions.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
public final class TransactionValidator {
|
||||
/**
|
||||
* Private constructor to prevent unwanted instantiation.
|
||||
*
|
||||
* @throws UnsupportedOperationException always
|
||||
*/
|
||||
private TransactionValidator() throws UnsupportedOperationException {
|
||||
throw new UnsupportedOperationException("This is a validator class, don't instantiate it.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure a transaction does not contain invalid information.
|
||||
*
|
||||
* @param tx the Transaction
|
||||
*/
|
||||
public static void validate(final Transaction tx) {
|
||||
try {
|
||||
if (tx.getOfferId().equals("")) {
|
||||
throw new InvalidTransactionException("Offer ID cannot be empty");
|
||||
}
|
||||
if (tx.getEarnings() == 0) {
|
||||
throw new InvalidTransactionException("Earnings can't be zero");
|
||||
}
|
||||
if (tx.getVolume() == 0) {
|
||||
throw new InvalidTransactionException("Volume can't be zero");
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
throw new InvalidTransactionException(
|
||||
"Required information is missing in the transaction", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package de.rwu.easydrop.service.writer;
|
||||
|
||||
import de.rwu.easydrop.api.dto.TransactionDTO;
|
||||
import de.rwu.easydrop.data.connector.TransactionPersistenceInterface;
|
||||
import de.rwu.easydrop.model.Transaction;
|
||||
import de.rwu.easydrop.service.mapping.TransactionMapper;
|
||||
import de.rwu.easydrop.service.validation.TransactionValidator;
|
||||
|
||||
public class TransactionWriter {
|
||||
/**
|
||||
* Persistence.
|
||||
*/
|
||||
private TransactionPersistenceInterface persistence;
|
||||
|
||||
/**
|
||||
* @param newPersistence the persistence to set
|
||||
*/
|
||||
public TransactionWriter(final TransactionPersistenceInterface newPersistence) {
|
||||
this.persistence = newPersistence;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates and saves a transaction to persistence.
|
||||
*
|
||||
* @param tx Transaction
|
||||
*/
|
||||
public void writeTXToPersistence(final Transaction tx) {
|
||||
TransactionDTO dto = TransactionMapper.mapTXToDTO(tx);
|
||||
TransactionValidator.validate(tx);
|
||||
|
||||
persistence.writeTX(dto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user