#75 Added transaction logic

This commit is contained in:
Marvin Scham
2023-06-28 00:38:02 +02:00
parent 19c796b457
commit a2337ed3ad
10 changed files with 439 additions and 33 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}