diff options
author | gjoranv <gjoranv@gmail.com> | 2023-10-19 22:45:55 +0200 |
---|---|---|
committer | gjoranv <gjoranv@gmail.com> | 2023-10-20 18:06:33 +0200 |
commit | 80435008645f414db6de79a55bb8a05cb49add48 (patch) | |
tree | 7c6c37472407f711bde8c44cb3d5d3b75c4506a0 /controller-api/src/main | |
parent | 3276cd1048ea93002eb4e2411fa5802553bed4a9 (diff) |
Introduce new BillStatus enum
Diffstat (limited to 'controller-api/src/main')
7 files changed, 45 insertions, 12 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java index c775c59c521..e7959d2057a 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java @@ -64,7 +64,7 @@ public class Bill { return tenant; } - public String status() { + public BillStatus status() { return statusHistory.current(); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillStatus.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillStatus.java new file mode 100644 index 00000000000..eefe86da801 --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillStatus.java @@ -0,0 +1,33 @@ +package com.yahoo.vespa.hosted.controller.api.integration.billing; + +/** + * @author gjoranv + */ +public enum BillStatus { + OPEN(), // All bills start in this state, the only state where changes can be made + READY(), // No more changes can be made + SENT(), // Sent to the customer + CLOSED, // End state + VOID, // End state + LEGACY_ISSUED("ISSUED"), // Legacy state, should be removed when unused by any current bills + LEGACY_EXPORTED("EXPORTED"); // Legacy state, should be removed when unused by any current bills + + private final String value; + + BillStatus() { + this.value = name(); + } + + BillStatus(String value) { + this.value = value; + } + + public String value() { + if (this == LEGACY_ISSUED || this == LEGACY_EXPORTED) return OPEN.value; + return value; + } + + public static BillStatus from(String status) { + return Enum.valueOf(BillStatus.class, status.toUpperCase()); + } +} 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 45c22c0db28..0aae466feb2 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 @@ -90,7 +90,7 @@ public interface BillingController { boolean deleteInstrument(TenantName tenant, String userId, String instrumentId); /** Change the status of the given bill */ - void updateBillStatus(Bill.Id billId, String agent, String status); + void updateBillStatus(Bill.Id billId, String agent, BillStatus status); /** Add a line item to the given bill */ void addLineItem(TenantName tenant, String description, BigDecimal amount, Optional<Bill.Id> billId, String agent); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClient.java index 3e24314ba5c..c5859cd7d2f 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClient.java @@ -69,7 +69,7 @@ public interface BillingDatabaseClient { * @param agent The agent that added the status * @param status The new status of the bill */ - void setStatus(Bill.Id billId, String agent, String status); + void setStatus(Bill.Id billId, String agent, BillStatus status); List<Bill.LineItem> getUnusedLineItems(TenantName tenantName); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java index e31eb395474..a6bcc9bf0ed 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingDatabaseClientMock.java @@ -54,7 +54,7 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { .findFirst(); } - public String getStatus(Bill.Id invoiceId) { + public BillStatus getStatus(Bill.Id invoiceId) { return statuses.get(invoiceId).current(); } @@ -90,7 +90,7 @@ public class BillingDatabaseClientMock implements BillingDatabaseClient { } @Override - public void setStatus(Bill.Id invoiceId, String agent, String status) { + public void setStatus(Bill.Id invoiceId, String agent, BillStatus status) { statuses.computeIfAbsent(invoiceId, k -> StatusHistory.open(clock)) .getHistory() .put(ZonedDateTime.now(), status); 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 fda6d49d741..f8e83b44510 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 @@ -119,7 +119,7 @@ public class MockBillingController implements BillingController { } @Override - public void updateBillStatus(Bill.Id billId, String agent, String status) { + public void updateBillStatus(Bill.Id billId, String agent, BillStatus status) { var now = clock.instant().atZone(ZoneOffset.UTC); committedBills.values().stream() .flatMap(List::stream) diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/StatusHistory.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/StatusHistory.java index 3de2d0859ef..6335ada1396 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/StatusHistory.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/StatusHistory.java @@ -8,27 +8,27 @@ import java.util.SortedMap; import java.util.TreeMap; /** - * @author gjoranv + * @author ogronnesby */ public class StatusHistory { - SortedMap<ZonedDateTime, String> history; + SortedMap<ZonedDateTime, BillStatus> history; - public StatusHistory(SortedMap<ZonedDateTime, String> history) { + public StatusHistory(SortedMap<ZonedDateTime, BillStatus> history) { this.history = history; } public static StatusHistory open(Clock clock) { var now = clock.instant().atZone(ZoneOffset.UTC); return new StatusHistory( - new TreeMap<>(Map.of(now, "OPEN")) + new TreeMap<>(Map.of(now, BillStatus.OPEN)) ); } - public String current() { + public BillStatus current() { return history.get(history.lastKey()); } - public SortedMap<ZonedDateTime, String> getHistory() { + public SortedMap<ZonedDateTime, BillStatus> getHistory() { return history; } |