This is an automated email from the ASF dual-hosted git repository. ofuks pushed a commit to branch DLAB-1571 in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/DLAB-1571 by this push: new 95911ca Remote billing 95911ca is described below commit 95911ca7671933c5fdd363a60ee4b2bc1a9bc807 Author: Oleh Fuks <olegfuk...@gmail.com> AuthorDate: Mon Mar 30 18:22:04 2020 +0300 Remote billing --- .../epam/dlab/controller/BillingController.java | 7 ++++-- .../main/java/com/epam/dlab/dao/BillingDAO.java | 2 +- .../com/epam/dlab/dao/impl/BillingDAOImpl.java | 25 +++++++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/services/billing-aws/src/main/java/com/epam/dlab/controller/BillingController.java b/services/billing-aws/src/main/java/com/epam/dlab/controller/BillingController.java index 82d6d16..8f70083 100644 --- a/services/billing-aws/src/main/java/com/epam/dlab/controller/BillingController.java +++ b/services/billing-aws/src/main/java/com/epam/dlab/controller/BillingController.java @@ -44,7 +44,10 @@ public class BillingController { } @GetMapping("/report") - public ResponseEntity<List<BillingData>> getBilling() { - return new ResponseEntity<>(billingDAO.getBillingReport(), HttpStatus.OK); + public ResponseEntity<List<BillingData>> getBilling(@RequestParam("date-start") String dateStart, + @RequestParam("date-end") String dateEnd, + @RequestParam("dlab-id") String dlabId, + @RequestParam("product") List<String> products) { + return new ResponseEntity<>(billingDAO.getBillingReport(dateStart, dateEnd, dlabId, products), HttpStatus.OK); } } diff --git a/services/billing-aws/src/main/java/com/epam/dlab/dao/BillingDAO.java b/services/billing-aws/src/main/java/com/epam/dlab/dao/BillingDAO.java index 8ecaddf..f72fa99 100644 --- a/services/billing-aws/src/main/java/com/epam/dlab/dao/BillingDAO.java +++ b/services/billing-aws/src/main/java/com/epam/dlab/dao/BillingDAO.java @@ -25,7 +25,7 @@ import java.util.List; public interface BillingDAO { - List<BillingData> getBillingReport(); + List<BillingData> getBillingReport(String dateStart, String dateEnd, String dlabId, List<String> products); List<BillingData> getBillingReport(List<String> dlabIds); } diff --git a/services/billing-aws/src/main/java/com/epam/dlab/dao/impl/BillingDAOImpl.java b/services/billing-aws/src/main/java/com/epam/dlab/dao/impl/BillingDAOImpl.java index 4fe4606..b0ff9f1 100644 --- a/services/billing-aws/src/main/java/com/epam/dlab/dao/impl/BillingDAOImpl.java +++ b/services/billing-aws/src/main/java/com/epam/dlab/dao/impl/BillingDAOImpl.java @@ -23,9 +23,11 @@ import com.epam.dlab.dao.BillingDAO; import com.epam.dlab.dto.billing.BillingData; import com.epam.dlab.exceptions.DlabException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.bson.Document; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationOperation; import org.springframework.data.mongodb.core.aggregation.GroupOperation; import org.springframework.data.mongodb.core.aggregation.MatchOperation; import org.springframework.data.mongodb.core.query.Criteria; @@ -33,6 +35,7 @@ import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -56,10 +59,20 @@ public class BillingDAOImpl implements BillingDAO { } @Override - public List<BillingData> getBillingReport() { + public List<BillingData> getBillingReport(String dateStart, String dateEnd, String dlabId, List<String> products) { try { - GroupOperation groupOperation = getGroupOperation(); - Aggregation aggregation = newAggregation(groupOperation); + List<AggregationOperation> aggregationOperations = new ArrayList<>(); + aggregationOperations.add(Aggregation.match(Criteria.where(FIELD_DLAB_ID).regex(dlabId, "i"))); + if (!products.isEmpty()) { + aggregationOperations.add(Aggregation.match(Criteria.where(FIELD_PRODUCT).in(products))); + } + getMatchCriteria(dateStart, Criteria.where(FIELD_USAGE_DATE).gte(dateStart)) + .ifPresent(aggregationOperations::add); + getMatchCriteria(dateEnd, Criteria.where(FIELD_USAGE_DATE).lte(dateEnd)) + .ifPresent(aggregationOperations::add); + aggregationOperations.add(getGroupOperation()); + + Aggregation aggregation = newAggregation(aggregationOperations); return mongoTemplate.aggregate(aggregation, "billing", Document.class).getMappedResults() .stream() @@ -95,6 +108,12 @@ public class BillingDAOImpl implements BillingDAO { .sum(FIELD_COST).as(FIELD_COST); } + private Optional<MatchOperation> getMatchCriteria(String dateStart, Criteria criteria) { + return Optional.ofNullable(dateStart) + .filter(StringUtils::isNotEmpty) + .map(date -> Aggregation.match(criteria)); + } + private BillingData toBillingData(Document billingData) { return BillingData.builder() .tag(billingData.getString(FIELD_DLAB_ID)) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org