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

Reply via email to