aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com
diff options
context:
space:
mode:
authorgjoranv <gjoranv@gmail.com>2023-10-05 12:36:10 +0200
committergjoranv <gjoranv@gmail.com>2023-10-16 15:26:47 +0200
commit7003febae5464929d72d7fdf66925d8fd3777f8b (patch)
treef54fc835e9d90e40dcd17eae4a9406d69046a5c5 /controller-api/src/main/java/com
parenteda5cf16272e7aa8d15bba47a45914df2ff00884 (diff)
Allow maintaining and updating invoices.
Diffstat (limited to 'controller-api/src/main/java/com')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java3
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java45
2 files changed, 48 insertions, 0 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
index 7339555e578..fe19b1187f6 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
@@ -6,4 +6,7 @@ import com.yahoo.vespa.hosted.controller.tenant.CloudTenant;
public interface BillingReporter {
BillingReference maintainTenant(CloudTenant tenant);
+
+ default void maintainInvoices() { }
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java
new file mode 100644
index 00000000000..20d0dac02b6
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/InvoiceUpdate.java
@@ -0,0 +1,45 @@
+package com.yahoo.vespa.hosted.controller.api.integration.billing;
+
+/**
+ * Helper to track changes to an invoice.
+ *
+ * @author gjoranv
+ */
+public record InvoiceUpdate(int itemsAdded, int itemsRemoved, int itemsModified) {
+ public boolean isEmpty() {
+ return itemsAdded == 0 && itemsRemoved == 0 && itemsModified == 0;
+ }
+
+ public static InvoiceUpdate empty() {
+ return new InvoiceUpdate(0, 0, 0);
+ }
+
+ public InvoiceUpdate add(InvoiceUpdate other) {
+ return new InvoiceUpdate(itemsAdded + other.itemsAdded,
+ itemsRemoved + other.itemsRemoved,
+ itemsModified + other.itemsModified);
+ }
+
+ public static class Counter {
+ private int itemsAdded = 0;
+ private int itemsRemoved = 0;
+ private int itemsModified = 0;
+
+ public void addedItem() {
+ itemsAdded++;
+ }
+
+ public void removedItem() {
+ itemsRemoved++;
+ }
+
+ public void modifiedItem() {
+ itemsModified++;
+ }
+
+ public InvoiceUpdate finish() {
+ return new InvoiceUpdate(itemsAdded, itemsRemoved, itemsModified);
+ }
+ }
+
+}