|
| 1 | +package com.itbulls.learnit.onlinestore.core.facades.impl; |
| 2 | + |
| 3 | +import java.util.ArrayList; |
| 4 | +import java.util.Arrays; |
| 5 | +import java.util.List; |
| 6 | + |
| 7 | +import com.itbulls.learnit.onlinestore.core.CoreConfigurations; |
| 8 | +import com.itbulls.learnit.onlinestore.core.facades.PurchaseFacade; |
| 9 | +import com.itbulls.learnit.onlinestore.core.facades.UserFacade; |
| 10 | +import com.itbulls.learnit.onlinestore.persistence.dao.PurchaseDao; |
| 11 | +import com.itbulls.learnit.onlinestore.persistence.dao.impl.MySqlJdbcPurchaseDao; |
| 12 | +import com.itbulls.learnit.onlinestore.persistence.dto.PurchaseDto; |
| 13 | +import com.itbulls.learnit.onlinestore.persistence.dto.converters.PurchaseDtoToPurchaseConverter; |
| 14 | +import com.itbulls.learnit.onlinestore.persistence.enteties.Product; |
| 15 | +import com.itbulls.learnit.onlinestore.persistence.enteties.Purchase; |
| 16 | +import com.itbulls.learnit.onlinestore.persistence.enteties.PurchaseStatus; |
| 17 | +import com.itbulls.learnit.onlinestore.persistence.enteties.User; |
| 18 | +import com.itbulls.learnit.onlinestore.persistence.enteties.impl.DefaultPurchase; |
| 19 | +import com.itbulls.learnit.onlinestore.persistence.enteties.impl.DefaultPurchaseStatus; |
| 20 | + |
| 21 | +public class DefaultPurchaseFacade implements PurchaseFacade { |
| 22 | + |
| 23 | + private static DefaultPurchaseFacade instance; |
| 24 | + private PurchaseDao purchaseDao = new MySqlJdbcPurchaseDao(); |
| 25 | + private PurchaseDtoToPurchaseConverter purchaseConverter = new PurchaseDtoToPurchaseConverter(); |
| 26 | + private UserFacade userFacade = DefaultUserFacade.getInstance(); |
| 27 | + |
| 28 | + public static synchronized DefaultPurchaseFacade getInstance() { |
| 29 | + if (instance == null) { |
| 30 | + instance = new DefaultPurchaseFacade(); |
| 31 | + } |
| 32 | + |
| 33 | + return instance; |
| 34 | + } |
| 35 | + |
| 36 | + @Override |
| 37 | + public void createPurchase(User user, Product product) { |
| 38 | + Purchase purchase = new DefaultPurchase(); |
| 39 | + purchase.setCustomer(user); |
| 40 | + purchase.setProducts(new ArrayList<>(Arrays.asList(product))); |
| 41 | + |
| 42 | + var purchaseStatus = new DefaultPurchaseStatus(); |
| 43 | + purchaseStatus.setId(1); // the initial, the first purchase status |
| 44 | + purchase.setPurchaseStatus(purchaseStatus); |
| 45 | + |
| 46 | + purchaseDao.savePurchase(purchaseConverter.convertPurchaseToPurchaseDto(purchase)); |
| 47 | + } |
| 48 | + |
| 49 | + @Override |
| 50 | + public List<Purchase> getNotCompletedPurchases() { |
| 51 | + return purchaseConverter.convertPurchaseDtosToPurchases(purchaseDao.getNotCompletedPurchases(LAST_STATUS_OF_ORDER_FULFILMENT_ID)); |
| 52 | + } |
| 53 | + |
| 54 | + @Override |
| 55 | + public void markFulfilmentStageForPurchaseIdAsCompleted(Integer purchaseId) { |
| 56 | + Purchase purchase = purchaseConverter.convertPurchaseDtoToPurchase(purchaseDao.getPurchaseById(purchaseId)); |
| 57 | + PurchaseStatus purchaseStatus = purchase.getPurchaseStatus(); |
| 58 | + int newPurchaseStatusId = purchaseStatus.getId() + 1; |
| 59 | + purchaseStatus.setId(newPurchaseStatusId); |
| 60 | + purchase.setPurchaseStatus(purchaseStatus); |
| 61 | + |
| 62 | + purchaseDao.updatePurchase(purchaseConverter.convertPurchaseToPurchaseDto(purchase)); |
| 63 | + |
| 64 | + if (LAST_STATUS_OF_ORDER_FULFILMENT_ID.equals(newPurchaseStatusId) |
| 65 | + && purchase.getCustomer().getReferrerUser() != null) { |
| 66 | + User referrerUser = purchase.getCustomer().getReferrerUser(); |
| 67 | + double shareFromPurchase = purchase.getTotalPurchaseCost() * CoreConfigurations.REFFERER_REWARD_RATE; |
| 68 | + referrerUser.setMoney(referrerUser.getMoney() + shareFromPurchase); |
| 69 | + userFacade.updateUser(referrerUser); |
| 70 | + } |
| 71 | + } |
| 72 | + |
| 73 | +} |
0 commit comments