diff options
author | Øyvind Grønnesby <oyving@yahooinc.com> | 2023-03-03 13:46:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-03 13:46:39 +0100 |
commit | c727f65d4f693de786b6b546eb58335b891f18bb (patch) | |
tree | 384fc590c5b1df28b3d42ee3df404c173400d30c | |
parent | c2c07b3902ea6d894c6072d53c767028651c6cca (diff) | |
parent | 3609ab0c0574a8c6d05bef156e6ee28e92e826a9 (diff) |
Merge pull request #26289 from vespa-engine/ogronnesby/add-line-item
Make it possible to specify billId when adding line item
4 files changed, 21 insertions, 13 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java index 8b0f58c79d2..8b2f4187f65 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java @@ -92,7 +92,7 @@ public interface BillingController { void updateBillStatus(Bill.Id billId, String agent, String status); /** Add a line item to the given bill */ - void addLineItem(TenantName tenant, String description, BigDecimal amount, String agent); + void addLineItem(TenantName tenant, String description, BigDecimal amount, Optional<Bill.Id> billId, String agent); /** Delete a line item - only available for unused line items */ void deleteLineItem(String lineItemId); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java index 6ea4c7442d8..aa06e282e1c 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java @@ -14,7 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; /** * @author olaa @@ -122,16 +121,19 @@ public class MockBillingController implements BillingController { } @Override - public void addLineItem(TenantName tenant, String description, BigDecimal amount, String agent) { - unusedLineItems.computeIfAbsent(tenant, l -> new ArrayList<>()) - .add(new Bill.LineItem( - "line-item-id", - description, - amount, - "some-plan", - agent, - ZonedDateTime.now() - )); + public void addLineItem(TenantName tenant, String description, BigDecimal amount, Optional<Bill.Id> billId, String agent) { + if (billId.isPresent()) { + throw new UnsupportedOperationException(); + } else { + unusedLineItems.computeIfAbsent(tenant, l -> new ArrayList<>()) + .add(new Bill.LineItem( + "line-item-id", + description, + amount, + "some-plan", + agent, + ZonedDateTime.now())); + } } @Override diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java index 307880682d9..6e012ba619d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java @@ -225,11 +225,16 @@ public class BillingApiHandler extends ThreadedHttpRequestHandler { private HttpResponse addLineItem(HttpRequest request, String tenant, String userId) { Inspector inspector = inspectorOrThrow(request); + + Optional<Bill.Id> billId = SlimeUtils.optionalString(inspector.field("billId")).map(Bill.Id::of); + billingController.addLineItem( TenantName.from(tenant), getInspectorFieldOrThrow(inspector, "description"), new BigDecimal(getInspectorFieldOrThrow(inspector, "amount")), + billId, userId); + return new MessageResponse("Added line item for tenant " + tenant); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java index 79007a4439a..f247b0ed3b6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java @@ -22,6 +22,7 @@ import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.TreeMap; @@ -170,7 +171,7 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { billingController.setPlan(tenant, PlanId.from("some-plan"), true, false); billingController.setPlan(tenant2, PlanId.from("some-plan"), true, false); billingController.addBill(tenant, bill, false); - billingController.addLineItem(tenant, "support", new BigDecimal("42"), "Smith"); + billingController.addLineItem(tenant, "support", new BigDecimal("42"), Optional.empty(), "Smith"); billingController.addBill(tenant2, bill, false); var request = request("/billing/v1/billing?until=2020-05-28").roles(financeAdmin); |