/** * @param tier The sale tier for which to get the subsequent tier. * @return the sale tier that has tier number equals to the tier number of the given tier * plus one. */ public Optional<SaleTier> getSubsequentTier(SaleTier tier) { return saleTierRepository.findByTierNo(tier.getTierNo() + 1); }
/** * @param tier The sale tier for which to get all subsequent tiers. * @return all tiers that have a tier number greater than the given sale tier. Ordered by * ascending tier number. */ public List<SaleTier> getAllSubsequentTiers(SaleTier tier) { return saleTierRepository.findTierByTierNoGreaterThanOrderByTierNoAsc(tier.getTierNo()); }
if (isOverflowingTotalMax(remainingTomicsOnTier)) { LOG.debug("Distributing {} USD to tier {} lead to overflow over the total " + "available amount of tokens.", usd, tier.getTierNo()); return handleTotalMaxOverflow(tier, remainingTomicsOnTier).addToOverflow(overflowInUsd); } else { if (tier.hasDynamicDuration()) shiftDates(tier, blockTime); LOG.debug("Distributing {} USD to tier {}. Distributing Overflow of {} USD to " + "next tier.", usd, tier.getTierNo(), overflowInUsd); return distributeToNextTier(overflowInUsd, saleTierService.getSubsequentTier(tier), blockTime) .addToAllocatedTomics(remainingTomicsOnTier); if (isOverflowingTotalMax(tomicsInteger)) { LOG.debug("Distributing {} USD to tier {} lead to overflow over the total " + "available amount of tokens.", usd, tier.getTierNo()); return handleTotalMaxOverflow(tier, tomicsInteger); } else { saleTierService.getSubsequentTier(tier).ifPresent(this::handleDynamicMax); LOG.debug("{} tomics distributed to tier {}", tomicsInteger, tier.getTierNo()); saleTierRepository.save(tier); return new TokenAllocationResult(tomicsInteger, BigDecimal.ZERO);
@Test public void testFindActiveTier() { tierRepository.save(createTier(1, "2018-01-01", "2018-01-10", new BigDecimal("0.5"), 1000L)); tierRepository.save(createTier(2, "2018-01-11", "2018-01-20", new BigDecimal("0.2"), 2000L)); final Date date = java.sql.Date.valueOf("2018-01-02"); Optional<SaleTier> oTier = tierRepository.findTierAtDate(date); assertTrue(oTier.isPresent()); assertEquals(oTier.get().getTierNo(), 1); }
@Test public void testFindlastTier() { tierRepository.save(createTier(1, "2018-01-01", "2018-01-10", new BigDecimal("0.5"), 1000L)); tierRepository.save(createTier(2, "2018-01-11", "2018-01-20", new BigDecimal("0.2"), 2000L)); tierRepository.save(createTier(3, "2018-01-21", "2018-01-30", new BigDecimal("0.1"), 3000L)); Optional<SaleTier> oTier = tierRepository.findFirstByOrderByEndDateDesc(); if (oTier.isPresent()) { assertEquals(3, oTier.get().getTierNo()); } else { fail("Retrieved last tier was null but should be"); } }
protected SaleTierResponse fromEntityToResponse(SaleTier tier) { SaleTierResponse response = new SaleTierResponse(); response.setAmount(tier.getTomicsSold()); response.setDiscount(tier.getDiscount()); response.setEndDate(tier.getEndDate()); response.setStartDate(tier.getStartDate()); response.setMaxAmount(tier.getTomicsMax()); response.setName(tier.getDescription()); response.setTierNo(tier.getTierNo()); response.setType(tier.getStatusAtDate(Date.from(Instant.now()))); return response; } }