From 5204cc171090626b788b1b77633baadd8e573e33 Mon Sep 17 00:00:00 2001 From: Leonie Eitze Date: Thu, 15 Jun 2023 18:52:06 +0200 Subject: [PATCH] Wrote OfferWriter and following classes to save offers to persistence --- .../de/rwu/easydrop/api/dto/OfferDTO.java | 51 +++++++++++++++++++ .../rwu/easydrop/core/OfferProvisioner.java | 30 ++++++++++- .../connector/AbstractOfferPersistence.java | 28 ++++++++++ .../java/de/rwu/easydrop/model/Offer.java | 5 ++ .../easydrop/service/mapping/OfferMapper.java | 50 ++++++++++++++++++ .../service/validation/OfferValidator.java | 32 ++++++++++++ .../easydrop/service/writer/OfferWriter.java | 33 ++++++++++++ 7 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/rwu/easydrop/api/dto/OfferDTO.java create mode 100644 src/main/java/de/rwu/easydrop/data/connector/AbstractOfferPersistence.java create mode 100644 src/main/java/de/rwu/easydrop/service/mapping/OfferMapper.java create mode 100644 src/main/java/de/rwu/easydrop/service/validation/OfferValidator.java create mode 100644 src/main/java/de/rwu/easydrop/service/writer/OfferWriter.java diff --git a/src/main/java/de/rwu/easydrop/api/dto/OfferDTO.java b/src/main/java/de/rwu/easydrop/api/dto/OfferDTO.java new file mode 100644 index 0000000..ee7d5f4 --- /dev/null +++ b/src/main/java/de/rwu/easydrop/api/dto/OfferDTO.java @@ -0,0 +1,51 @@ +package de.rwu.easydrop.api.dto; + +import lombok.Data; +import de.rwu.easydrop.model.Product; +import java.util.Date; + +/* + * Offer data transfer object + */ +@Data +public class OfferDTO { + /** + * Platform internal offer identifier. + */ + private String offerId; + + /* + * The product that our software buys + */ + Product sourceProduct; + + /* + * The product that our software sells + */ + Product saleProduct; + + /* + * Date of the creation of the offer + * NOTE: Use Timestamp? https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html + */ + Date creationDate; + + /* + * Date of last update of the offer on the destination website (API) + */ + Date upDate; + + /* + * Date of last check if offer is still valid + */ + Date checkDate; + + /** + * Creates OfferDTO instance. + * + * @param newOfferId Internal Offer identifier + */ + public OfferDTO(final String newOfferId) { + this.offerId = newOfferId; + } +} diff --git a/src/main/java/de/rwu/easydrop/core/OfferProvisioner.java b/src/main/java/de/rwu/easydrop/core/OfferProvisioner.java index 3b6f9bb..27aa676 100644 --- a/src/main/java/de/rwu/easydrop/core/OfferProvisioner.java +++ b/src/main/java/de/rwu/easydrop/core/OfferProvisioner.java @@ -1,13 +1,25 @@ package de.rwu.easydrop.core; -import de.rwu.easydrop.model.Offer; - import java.util.List; +import de.rwu.easydrop.data.connector.AbstractProductPersistence; +import de.rwu.easydrop.model.Offer; +import de.rwu.easydrop.service.retriever.ProductRetriever; +import de.rwu.easydrop.service.writer.OfferWriter; + public class OfferProvisioner { + ProductRetriever productRetriever; + // ProductWriter + AbstractProductPersistence db; + OfferWriter offerWriter; + public OfferProvisioner(/*OfferWriter for database? */) { + //in die Klasse hardcoden, "webshop" nicht verwenden + //oder eine Konstante anlegen die das halten würde (besser skalierbar) + //die Konstante in model anlegen (in Product, Konstante valid origins) + this.offerWriter = new OfferWriter(); } public void runProvisioner(List offersToProvision) { @@ -16,6 +28,20 @@ public class OfferProvisioner { * Stellt Angebote bei der Zielplattform ein * Schreibt eingestellte Angebote in die Datenbank */ + + for(Offer newOffer: offersToProvision){ + // if(newOffer.getSourceProduct().getDataOrigin().equals("ebay")){ + // //put newOffer on amazon + + // } + //else put newOffer on eBay + + // if successfully transmitted + // add to persistence + // "duplicate" the product with dataOrigin new platform and merchant = "me" + offerWriter.writeOfferToPersistence(newOffer); + } + diff --git a/src/main/java/de/rwu/easydrop/data/connector/AbstractOfferPersistence.java b/src/main/java/de/rwu/easydrop/data/connector/AbstractOfferPersistence.java new file mode 100644 index 0000000..4562a6d --- /dev/null +++ b/src/main/java/de/rwu/easydrop/data/connector/AbstractOfferPersistence.java @@ -0,0 +1,28 @@ +package de.rwu.easydrop.data.connector; + +import de.rwu.easydrop.api.dto.OfferDTO; + +public abstract class AbstractOfferPersistence { + /** + * Data origin. + */ + public static final String DATA_ORIGIN = "Persistence"; + + /** + * Writes a ProductDTO to persistence. + * + * @param dto + */ + public abstract void saveOffer(OfferDTO dto); + + /** + * Gets a OfferDTO from persistence. + */ + //@Override + public abstract OfferDTO getOfferDTOById(String OfferId); + + /** + * Deletes all data from persistence. + */ + public abstract void clearData(); +} diff --git a/src/main/java/de/rwu/easydrop/model/Offer.java b/src/main/java/de/rwu/easydrop/model/Offer.java index a030146..174e1d4 100644 --- a/src/main/java/de/rwu/easydrop/model/Offer.java +++ b/src/main/java/de/rwu/easydrop/model/Offer.java @@ -39,4 +39,9 @@ public class Offer { */ Date checkDate; + /* + * ID of the offer + */ + String offerId; + } diff --git a/src/main/java/de/rwu/easydrop/service/mapping/OfferMapper.java b/src/main/java/de/rwu/easydrop/service/mapping/OfferMapper.java new file mode 100644 index 0000000..f6aeb73 --- /dev/null +++ b/src/main/java/de/rwu/easydrop/service/mapping/OfferMapper.java @@ -0,0 +1,50 @@ +package de.rwu.easydrop.service.mapping; + +import de.rwu.easydrop.api.dto.OfferDTO; + +import de.rwu.easydrop.model.Offer; + +/** + * Maps between Offer, OfferDTO and OfferDTO. + * + * @since 0.2.0 + * + * @see Offer + * @see OfferDTO + * @see OfferDTO + */ +public final class OfferMapper { + + /** + * Private constructor to prevent unwanted instantiation. + * + * @throws UnsupportedOperationException always + */ + private OfferMapper() throws UnsupportedOperationException { + throw new UnsupportedOperationException("This is a mapping class, don't instantiate it."); + } + + /** + * Creates a Offer object from a corresponding DTO. + * + * @param dto Offer Data Transfer Object + * @return Offer + */ + public static Offer mapOfferFromDTO(final OfferDTO dto) { + Offer offer = new Offer(); + + return offer; + } + + /** + * Creates an OfferDTO object from a corresponding offer. + * + * @param Offer offer + * @return OfferDTO + */ + public static OfferDTO mapOfferToDTO(final Offer offer) { + OfferDTO dto = new OfferDTO(offer.getOfferId()); + + return dto; + } +} diff --git a/src/main/java/de/rwu/easydrop/service/validation/OfferValidator.java b/src/main/java/de/rwu/easydrop/service/validation/OfferValidator.java new file mode 100644 index 0000000..2f466f1 --- /dev/null +++ b/src/main/java/de/rwu/easydrop/service/validation/OfferValidator.java @@ -0,0 +1,32 @@ +package de.rwu.easydrop.service.validation; +import java.util.HashSet; +import java.util.Set; + +import de.rwu.easydrop.exception.InvalidProductException; +import de.rwu.easydrop.model.Product; +import de.rwu.easydrop.model.Offer; + +/** + * Confirms validity of Offer data. + * + * @since 0.2.0 + */ +public class OfferValidator { + /** + * Private constructor to prevent unwanted instantiation. + * + * @throws UnsupportedOperationException always + */ + private OfferValidator() throws UnsupportedOperationException { + throw new UnsupportedOperationException("This is a validator class, don't instantiate it."); + } + /** + * Makes sure an Offer does not contain invalid information. + * + * @param offer the Offer + */ + public static void validate(final Offer offer) {} +} + + + diff --git a/src/main/java/de/rwu/easydrop/service/writer/OfferWriter.java b/src/main/java/de/rwu/easydrop/service/writer/OfferWriter.java new file mode 100644 index 0000000..8933d55 --- /dev/null +++ b/src/main/java/de/rwu/easydrop/service/writer/OfferWriter.java @@ -0,0 +1,33 @@ +package de.rwu.easydrop.service.writer; + +import de.rwu.easydrop.api.dto.OfferDTO; +import de.rwu.easydrop.data.connector.AbstractOfferPersistence; +import de.rwu.easydrop.model.Offer; +import de.rwu.easydrop.service.mapping.OfferMapper; +import de.rwu.easydrop.service.validation.OfferValidator; + +public class OfferWriter { + /** + * Persistence. + */ + private AbstractOfferPersistence persistence; + + /** + * @param newPersistence the persistence to set + */ + public void setPersistence(final AbstractOfferPersistence newPersistence) { + this.persistence = newPersistence; + } + + /** + * Validates and saves product to persistence. + * + * @param product + */ + public void writeOfferToPersistence(final Offer offer) { + OfferValidator.validate(offer); + OfferDTO dto = OfferMapper.mapOfferToDTO(offer); + + persistence.saveOffer(dto); + } +}