From 33d6128be50bf7321752d0694e89c422f3d4ad30 Mon Sep 17 00:00:00 2001 From: Alex Goth Date: Mon, 13 Jan 2025 15:21:17 +0100 Subject: [PATCH 1/5] feat(api): define subscription discounts --- api/api.gen.go | 1316 ++++++++--------- api/client/go/client.gen.go | 1334 +++++++++--------- api/openapi.cloud.yaml | 25 +- api/openapi.yaml | 73 +- api/spec/src/productcatalog/subscription.tsp | 47 +- 5 files changed, 1474 insertions(+), 1321 deletions(-) diff --git a/api/api.gen.go b/api/api.gen.go index 7b80d476f..2613659c0 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -1017,6 +1017,19 @@ type BillingWorkflowSettings struct { Payment *BillingWorkflowPaymentSettings `json:"payment,omitempty"` } +// CadencedDiscount Discount with information about when it applies. +type CadencedDiscount struct { + // ActiveFrom The cadence start of the resource. + ActiveFrom time.Time `json:"activeFrom"` + + // ActiveTo The cadence end of the resource. + ActiveTo *time.Time `json:"activeTo,omitempty"` + + // Discount A discount on a price. + // One of: percentage, amount, or usage. + Discount Discount `json:"discount"` +} + // CheckoutSessionCustomTextAfterSubmitParams Stripe CheckoutSession.custom_text type CheckoutSessionCustomTextAfterSubmitParams struct { AfterSubmit *struct { @@ -4196,8 +4209,8 @@ type SubscriptionPhaseExpanded struct { // Description Optional description of the resource. Maximum 1024 characters. Description *string `json:"description,omitempty"` - // Discounts The discounts on the plan. - Discounts *[]Discount `json:"discounts,omitempty"` + // Discounts The discounts on the phase. + Discounts []CadencedDiscount `json:"discounts"` // Id A unique identifier for the resource. Id string `json:"id"` @@ -12489,655 +12502,656 @@ var swaggerSpec = []string{ "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", - "awsWBwA=", + "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", + "FwcA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index 9c0bcf57d..aac761fd0 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -1019,6 +1019,19 @@ type BillingWorkflowSettings struct { Payment *BillingWorkflowPaymentSettings `json:"payment,omitempty"` } +// CadencedDiscount Discount with information about when it applies. +type CadencedDiscount struct { + // ActiveFrom The cadence start of the resource. + ActiveFrom time.Time `json:"activeFrom"` + + // ActiveTo The cadence end of the resource. + ActiveTo *time.Time `json:"activeTo,omitempty"` + + // Discount A discount on a price. + // One of: percentage, amount, or usage. + Discount Discount `json:"discount"` +} + // CheckoutSessionCustomTextAfterSubmitParams Stripe CheckoutSession.custom_text type CheckoutSessionCustomTextAfterSubmitParams struct { AfterSubmit *struct { @@ -4218,8 +4231,8 @@ type SubscriptionPhaseExpanded struct { // Description Optional description of the resource. Maximum 1024 characters. Description *string `json:"description,omitempty"` - // Discounts The discounts on the plan. - Discounts *[]Discount `json:"discounts,omitempty"` + // Discounts The discounts on the phase. + Discounts []CadencedDiscount `json:"discounts"` // Id A unique identifier for the resource. Id *string `json:"id,omitempty"` @@ -28736,664 +28749,665 @@ var swaggerSpec = []string{ "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", - "qk6qWAcA", + "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", + "jVoHAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index 195a91494..204a0fe59 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -8781,6 +8781,25 @@ components: - $ref: '#/components/schemas/BillingWorkflowPaymentSettings' description: The payment settings for this workflow description: BillingWorkflowSettings represents the settings for a billing workflow. + CadencedDiscount: + type: object + required: + - activeFrom + - discount + properties: + activeFrom: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The cadence start of the resource. + activeTo: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The cadence end of the resource. + discount: + $ref: '#/components/schemas/Discount' + description: Discount with information about when it applies. CheckoutSessionCustomTextAfterSubmitParams: type: object properties: @@ -15100,6 +15119,7 @@ components: - createdAt - updatedAt - key + - discounts - activeFrom - items properties: @@ -15158,9 +15178,8 @@ components: discounts: type: array items: - $ref: '#/components/schemas/Discount' - description: The discounts on the plan. - title: Discounts + $ref: '#/components/schemas/CadencedDiscount' + description: The discounts on the phase. activeFrom: type: string format: date-time diff --git a/api/openapi.yaml b/api/openapi.yaml index 4e2afc891..cd29cde66 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -8475,6 +8475,25 @@ components: - $ref: '#/components/schemas/BillingWorkflowPaymentSettings' description: The payment settings for this workflow description: BillingWorkflowSettings represents the settings for a billing workflow. + CadencedDiscount: + type: object + required: + - activeFrom + - discount + properties: + activeFrom: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The cadence start of the resource. + activeTo: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The cadence end of the resource. + discount: + $ref: '#/components/schemas/Discount' + description: Discount with information about when it applies. CheckoutSessionCustomTextAfterSubmitParams: type: object properties: @@ -9090,6 +9109,32 @@ components: - add_phase - remove_phase - stretch_phase + - add_discount + - remove_discount + EditSubscriptionAddDiscount: + type: object + required: + - op + - phaseKey + - insertAt + - discount + properties: + op: + type: string + enum: + - add_discount + phaseKey: + type: string + insertAt: + type: integer + description: |- + The index at which to insert the discount. + The new discount will become the discount at the specified index. + If there is already a discount at the specified index, that and all later indexes will be shifted. + If the index is greater than the number of discounts, the new discount will be appended to the end. + discount: + $ref: '#/components/schemas/Discount' + description: Add a new discount to a phase. EditSubscriptionAddItem: type: object required: @@ -9119,6 +9164,22 @@ components: phase: $ref: '#/components/schemas/SubscriptionPhaseCreate' description: Add a new phase + EditSubscriptionRemoveDiscount: + type: object + required: + - op + - phaseKey + - discountIndex + properties: + op: + type: string + enum: + - remove_discount + phaseKey: + type: string + discountIndex: + type: integer + description: Remove a discount from a phase. EditSubscriptionRemoveItem: type: object required: @@ -14888,6 +14949,7 @@ components: - createdAt - updatedAt - key + - discounts - activeFrom properties: id: @@ -14945,9 +15007,8 @@ components: discounts: type: array items: - $ref: '#/components/schemas/Discount' - description: The discounts on the plan. - title: Discounts + $ref: '#/components/schemas/CadencedDiscount' + description: The discounts on the phase. activeFrom: type: string format: date-time @@ -15010,6 +15071,7 @@ components: - createdAt - updatedAt - key + - discounts - activeFrom - items properties: @@ -15068,9 +15130,8 @@ components: discounts: type: array items: - $ref: '#/components/schemas/Discount' - description: The discounts on the plan. - title: Discounts + $ref: '#/components/schemas/CadencedDiscount' + description: The discounts on the phase. activeFrom: type: string format: date-time diff --git a/api/spec/src/productcatalog/subscription.tsp b/api/spec/src/productcatalog/subscription.tsp index 68588ef44..557e1e3b7 100644 --- a/api/spec/src/productcatalog/subscription.tsp +++ b/api/spec/src/productcatalog/subscription.tsp @@ -89,9 +89,14 @@ model SubscriptionPhase { // TODO: lets try this with visibility ...OmitProperties< SubscriptionPhaseCreate, - "startAfter" | "duration" | "key" | "name" | "description" + "startAfter" | "duration" | "key" | "name" | "description" | "discounts" >; + /** + * The discounts on the phase. + */ + discounts: CadencedDiscount[]; + /** * The time from which the phase is active. */ @@ -103,6 +108,15 @@ model SubscriptionPhase { activeTo?: DateTime; } +/** + * Discount with information about when it applies. + */ +@friendlyName("CadencedDiscount") +model CadencedDiscount { + ...CadencedResource; + discount: Discount; +} + /** * Subscription phase create input. */ @@ -337,6 +351,8 @@ enum EditOp { AddPhase: "add_phase", RemovePhase: "remove_phase", StretchPhase: "stretch_phase", + AddDiscount: "add_discount", + RemoveDiscount: "remove_discount", } /** @@ -359,6 +375,35 @@ model EditSubscriptionRemoveItem { itemKey: string; } +/** + * Add a new discount to a phase. + */ +@friendlyName("EditSubscriptionAddDiscount") +model EditSubscriptionAddDiscount { + `op`: EditOp.AddDiscount; + phaseKey: string; + + /** + * The index at which to insert the discount. + * The new discount will become the discount at the specified index. + * If there is already a discount at the specified index, that and all later indexes will be shifted. + * If the index is greater than the number of discounts, the new discount will be appended to the end. + */ + insertAt: integer; + + discount: Discount; +} + +/** + * Remove a discount from a phase. + */ +@friendlyName("EditSubscriptionRemoveDiscount") +model EditSubscriptionRemoveDiscount { + `op`: EditOp.RemoveDiscount; + phaseKey: string; + discountIndex: integer; +} + /** * Add a new phase */ From fb0969b03b993333c5598c953fc217832743baf4 Mon Sep 17 00:00:00 2001 From: Alex Goth Date: Tue, 14 Jan 2025 13:39:57 +0100 Subject: [PATCH 2/5] feat(subs): add discounts to spec and view --- openmeter/subscription/discount.go | 23 +++++++++ openmeter/subscription/item.go | 17 +++---- openmeter/subscription/patch/additem.go | 16 +++---- openmeter/subscription/patch/additem_test.go | 10 ++-- openmeter/subscription/patch/patch_test.go | 12 ++--- openmeter/subscription/patch/removeitem.go | 2 +- .../subscription/patch/removeitem_test.go | 2 +- openmeter/subscription/phase.go | 6 +++ openmeter/subscription/repo/mapping.go | 18 +++---- openmeter/subscription/repository.go | 21 ++++++++ openmeter/subscription/subscriptionspec.go | 47 ++++++++++++++---- openmeter/subscription/subscriptionview.go | 48 ++++++++++++++++--- 12 files changed, 170 insertions(+), 52 deletions(-) create mode 100644 openmeter/subscription/discount.go diff --git a/openmeter/subscription/discount.go b/openmeter/subscription/discount.go new file mode 100644 index 000000000..5645c2b7f --- /dev/null +++ b/openmeter/subscription/discount.go @@ -0,0 +1,23 @@ +package subscription + +import ( + "github.com/openmeterio/openmeter/openmeter/productcatalog" + "github.com/openmeterio/openmeter/pkg/models" +) + +type Discount struct { + models.NamespacedID + models.CadencedModel + productcatalog.Discount + + PhaseID string `json:"phaseId"` + SubscriptionID string `json:"subscriptionId"` +} + +func (d Discount) Validate() error { + if err := d.Discount.Validate(); err != nil { + return err + } + + return nil +} diff --git a/openmeter/subscription/item.go b/openmeter/subscription/item.go index c10e1e766..75ec7aee6 100644 --- a/openmeter/subscription/item.go +++ b/openmeter/subscription/item.go @@ -1,7 +1,6 @@ package subscription import ( - "github.com/openmeterio/openmeter/pkg/datex" "github.com/openmeterio/openmeter/pkg/models" ) @@ -11,9 +10,7 @@ type SubscriptionItem struct { models.AnnotatedModel `json:",inline"` // SubscriptionItem doesn't have a separate Cadence, only one relative to the phase, denoting if it's intentionally different from the phase's cadence. - // The durations are relative to phase start. - ActiveFromOverrideRelativeToPhaseStart *datex.Period `json:"activeFromOverrideRelativeToPhaseStart,omitempty"` - ActiveToOverrideRelativeToPhaseStart *datex.Period `json:"activeToOverrideRelativeToPhaseStart,omitempty"` + CadenceOverrideRelativeToPhaseStart // The defacto cadence of the item is calculated and persisted after each change. models.CadencedModel `json:",inline"` @@ -38,14 +35,14 @@ type SubscriptionItem struct { func (i SubscriptionItem) GetCadence(phaseCadence models.CadencedModel) models.CadencedModel { start := phaseCadence.ActiveFrom - if i.ActiveFromOverrideRelativeToPhaseStart != nil { - start, _ = i.ActiveFromOverrideRelativeToPhaseStart.AddTo(start) + if i.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { + start, _ = i.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(start) } end := phaseCadence.ActiveTo - if i.ActiveToOverrideRelativeToPhaseStart != nil { - iEnd, _ := i.ActiveToOverrideRelativeToPhaseStart.AddTo(start) + if i.CadenceOverrideRelativeToPhaseStart.ActiveToOverride != nil { + iEnd, _ := i.CadenceOverrideRelativeToPhaseStart.ActiveToOverride.AddTo(start) if end == nil || iEnd.Before(*end) { end = &iEnd @@ -65,8 +62,8 @@ func (i SubscriptionItem) AsEntityInput() CreateSubscriptionItemEntityInput { }, AnnotatedModel: i.AnnotatedModel, CadencedModel: i.CadencedModel, - ActiveFromOverrideRelativeToPhaseStart: i.ActiveFromOverrideRelativeToPhaseStart, - ActiveToOverrideRelativeToPhaseStart: i.ActiveToOverrideRelativeToPhaseStart, + ActiveFromOverrideRelativeToPhaseStart: i.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride, + ActiveToOverrideRelativeToPhaseStart: i.CadenceOverrideRelativeToPhaseStart.ActiveToOverride, PhaseID: i.PhaseId, Key: i.Key, RateCard: i.RateCard, diff --git a/openmeter/subscription/patch/additem.go b/openmeter/subscription/patch/additem.go index fbf0e5f41..4201c5063 100644 --- a/openmeter/subscription/patch/additem.go +++ b/openmeter/subscription/patch/additem.go @@ -84,15 +84,15 @@ func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscrip } // 2. If it's added to the current phase, the specified start time cannot point to the past - if a.CreateInput.ActiveFromOverrideRelativeToPhaseStart != nil { - iST, _ := a.CreateInput.ActiveFromOverrideRelativeToPhaseStart.AddTo(phaseStartTime) + if a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { + iST, _ := a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phaseStartTime) if iST.Before(actx.CurrentTime) { return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which would become active in the past at %s", a.PhaseKey, iST)} } } else { // 3. If it's added to the current phase, and start time is not specified, it will be set for the current time, as you cannot change the past diff := datex.Between(phaseStartTime, actx.CurrentTime) - a.CreateInput.ActiveFromOverrideRelativeToPhaseStart = &diff + a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride = &diff } } else if phaseStartTime.After(currentPhaseStartTime) { // 4. If you're adding it to a future phase, the matching key for the phase has to be empty @@ -129,15 +129,15 @@ func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscrip // If it already has a scheduled end time, which is later than the time this new item should start, we should error. // The user can circumvent this, by first issuing a delete for the item, and then adding a new one. - if itemToClose.ActiveToOverrideRelativeToPhaseStart != nil { - itemToCloseEndTime, _ := itemToClose.ActiveToOverrideRelativeToPhaseStart.AddTo(phaseStartTime) + if itemToClose.CadenceOverrideRelativeToPhaseStart.ActiveToOverride != nil { + itemToCloseEndTime, _ := itemToClose.CadenceOverrideRelativeToPhaseStart.ActiveToOverride.AddTo(phaseStartTime) // Sanity check - if a.CreateInput.ActiveFromOverrideRelativeToPhaseStart == nil { + if a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride == nil { return fmt.Errorf("ActiveFromOverrideRelativeToPhaseStart should already be set when adding after an already existing item for the current phase") } - itemToAddStartTime, _ := a.CreateInput.ActiveFromOverrideRelativeToPhaseStart.AddTo(phaseStartTime) + itemToAddStartTime, _ := a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phaseStartTime) if itemToCloseEndTime.After(itemToAddStartTime) { return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which would overlap with a current item, you should delete first", a.PhaseKey)} @@ -145,7 +145,7 @@ func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscrip } // Let's update the current item to close to actually close as the new item starts - itemToClose.ActiveToOverrideRelativeToPhaseStart = a.CreateInput.ActiveFromOverrideRelativeToPhaseStart + itemToClose.CadenceOverrideRelativeToPhaseStart.ActiveToOverride = a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride } // Finally, we simply add it as the last Spec for its key in the phase diff --git a/openmeter/subscription/patch/additem_test.go b/openmeter/subscription/patch/additem_test.go index 9b2ac6086..372bb1bf7 100644 --- a/openmeter/subscription/patch/additem_test.go +++ b/openmeter/subscription/patch/additem_test.go @@ -95,7 +95,9 @@ func TestAddItem(t *testing.T) { CreateInput: subscription.SubscriptionItemSpec{ CreateSubscriptionItemInput: subscription.CreateSubscriptionItemInput{ CreateSubscriptionItemCustomerInput: subscription.CreateSubscriptionItemCustomerInput{ - ActiveFromOverrideRelativeToPhaseStart: lo.ToPtr(testutils.GetISODuration(t, "P1D")), + CadenceOverrideRelativeToPhaseStart: subscription.CadenceOverrideRelativeToPhaseStart{ + ActiveFromOverride: lo.ToPtr(testutils.GetISODuration(t, "P1D")), + }, }, }, }, @@ -241,7 +243,7 @@ func TestAddItem(t *testing.T) { updatedRc := s.Phases["test_phase_2"].ItemsByKey["rate-card-2"][0] // We have to use seconds here as diff resolution will be in seconds - updatedRc.ActiveToOverrideRelativeToPhaseStart = lo.ToPtr(testutils.GetISODuration(t, "PT86400S")) + updatedRc.CadenceOverrideRelativeToPhaseStart.ActiveToOverride = lo.ToPtr(testutils.GetISODuration(t, "PT86400S")) s.Phases["test_phase_2"].ItemsByKey["rate-card-2"] = []*subscription.SubscriptionItemSpec{ updatedRc, @@ -259,7 +261,9 @@ func TestAddItem(t *testing.T) { }, }, CreateSubscriptionItemCustomerInput: subscription.CreateSubscriptionItemCustomerInput{ - ActiveFromOverrideRelativeToPhaseStart: lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), + CadenceOverrideRelativeToPhaseStart: subscription.CadenceOverrideRelativeToPhaseStart{ + ActiveFromOverride: lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), + }, }, }, }, diff --git a/openmeter/subscription/patch/patch_test.go b/openmeter/subscription/patch/patch_test.go index dfebc0db7..ba26e91ab 100644 --- a/openmeter/subscription/patch/patch_test.go +++ b/openmeter/subscription/patch/patch_test.go @@ -123,8 +123,8 @@ func TestRemoveAdd(t *testing.T) { found := s.Phases["test_phase_2"].ItemsByKey[subscriptiontestutils.ExampleFeatureKey] assert.Len(t, found, 2) - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[0].ActiveToOverrideRelativeToPhaseStart) - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[1].ActiveFromOverrideRelativeToPhaseStart) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[0].CadenceOverrideRelativeToPhaseStart.ActiveToOverride) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[1].CadenceOverrideRelativeToPhaseStart.ActiveFromOverride) // Now lets simulate some time passing now = now.Add(time.Hour * 1) @@ -140,11 +140,11 @@ func TestRemoveAdd(t *testing.T) { found = s.Phases["test_phase_2"].ItemsByKey[subscriptiontestutils.ExampleFeatureKey] assert.Len(t, found, 3) - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[0].ActiveToOverrideRelativeToPhaseStart) - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[1].ActiveFromOverrideRelativeToPhaseStart) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[0].CadenceOverrideRelativeToPhaseStart.ActiveToOverride) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT86400S")), found[1].CadenceOverrideRelativeToPhaseStart.ActiveFromOverride) // 90000s = 25h = 1d + 1h - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT90000S")), found[1].ActiveToOverrideRelativeToPhaseStart) - assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT90000S")), found[2].ActiveFromOverrideRelativeToPhaseStart) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT90000S")), found[1].CadenceOverrideRelativeToPhaseStart.ActiveToOverride) + assert.Equal(t, lo.ToPtr(testutils.GetISODuration(t, "PT90000S")), found[2].CadenceOverrideRelativeToPhaseStart.ActiveFromOverride) }) } diff --git a/openmeter/subscription/patch/removeitem.go b/openmeter/subscription/patch/removeitem.go index 465825ba4..f2196c7c6 100644 --- a/openmeter/subscription/patch/removeitem.go +++ b/openmeter/subscription/patch/removeitem.go @@ -70,7 +70,7 @@ func (r PatchRemoveItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subsc diff := datex.Between(phaseStartTime, actx.CurrentTime) - phase.ItemsByKey[r.ItemKey][len(phase.ItemsByKey[r.ItemKey])-1].ActiveToOverrideRelativeToPhaseStart = &diff + phase.ItemsByKey[r.ItemKey][len(phase.ItemsByKey[r.ItemKey])-1].CadenceOverrideRelativeToPhaseStart.ActiveToOverride = &diff } else { // Otherwise (if its a future phase), we can just remove it phase.ItemsByKey[r.ItemKey] = phase.ItemsByKey[r.ItemKey][:len(phase.ItemsByKey[r.ItemKey])-1] diff --git a/openmeter/subscription/patch/removeitem_test.go b/openmeter/subscription/patch/removeitem_test.go index 797d434b8..ea5de6c8c 100644 --- a/openmeter/subscription/patch/removeitem_test.go +++ b/openmeter/subscription/patch/removeitem_test.go @@ -222,7 +222,7 @@ func TestRemoveItem(t *testing.T) { // When removing an item from the current phase it should close that item with the current timestamp // We have to use seconds due to how duration is managed - s.Phases["test_phase_2"].ItemsByKey[subscriptiontestutils.ExampleFeatureKey][0].ActiveToOverrideRelativeToPhaseStart = lo.ToPtr(testutils.GetISODuration(t, "PT86400S")) + s.Phases["test_phase_2"].ItemsByKey[subscriptiontestutils.ExampleFeatureKey][0].CadenceOverrideRelativeToPhaseStart.ActiveToOverride = lo.ToPtr(testutils.GetISODuration(t, "PT86400S")) return *s }, diff --git a/openmeter/subscription/phase.go b/openmeter/subscription/phase.go index 7a63c2570..813942d62 100644 --- a/openmeter/subscription/phase.go +++ b/openmeter/subscription/phase.go @@ -3,6 +3,7 @@ package subscription import ( "time" + "github.com/openmeterio/openmeter/pkg/datex" "github.com/openmeterio/openmeter/pkg/models" ) @@ -25,3 +26,8 @@ type SubscriptionPhase struct { // Description Description *string `json:"description,omitempty"` } + +type CadenceOverrideRelativeToPhaseStart struct { + ActiveFromOverride *datex.Period `json:"activeFromOverrideRelativeToPhaseStart"` + ActiveToOverride *datex.Period `json:"activeToOverrideRelativeToPhaseStart,omitempty"` +} diff --git a/openmeter/subscription/repo/mapping.go b/openmeter/subscription/repo/mapping.go index b60e7f614..eb0ebf511 100644 --- a/openmeter/subscription/repo/mapping.go +++ b/openmeter/subscription/repo/mapping.go @@ -122,14 +122,16 @@ func MapDBSubscriptionItem(item *db.SubscriptionItem) (subscription.Subscription AnnotatedModel: models.AnnotatedModel{ Metadata: item.Metadata, }, - Name: item.Name, - Description: item.Description, - ActiveFromOverrideRelativeToPhaseStart: sa, - ActiveToOverrideRelativeToPhaseStart: ea, - SubscriptionId: phase.SubscriptionID, - PhaseId: item.PhaseID, - Key: item.Key, - EntitlementID: item.EntitlementID, + Name: item.Name, + Description: item.Description, + CadenceOverrideRelativeToPhaseStart: subscription.CadenceOverrideRelativeToPhaseStart{ + ActiveFromOverride: sa, + ActiveToOverride: ea, + }, + SubscriptionId: phase.SubscriptionID, + PhaseId: item.PhaseID, + Key: item.Key, + EntitlementID: item.EntitlementID, RateCard: subscription.RateCard{ Name: item.Name, Description: item.Description, diff --git a/openmeter/subscription/repository.go b/openmeter/subscription/repository.go index 9275becf4..b74cfe93b 100644 --- a/openmeter/subscription/repository.go +++ b/openmeter/subscription/repository.go @@ -6,6 +6,7 @@ import ( "reflect" "time" + "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/pkg/currencyx" "github.com/openmeterio/openmeter/pkg/datex" "github.com/openmeterio/openmeter/pkg/framework/entutils" @@ -121,3 +122,23 @@ type SubscriptionItemRepository interface { Delete(ctx context.Context, id models.NamespacedID) error GetByID(ctx context.Context, id models.NamespacedID) (SubscriptionItem, error) } + +type CreateDiscountEntityInput struct { + models.NamespacedModel + models.CadencedModel + + productcatalog.Discount + + PhaseID string `json:"phaseId"` + SubscriptionID string `json:"subscriptionId"` +} + +type DiscountRepository interface { + entutils.TxCreator + + GetForSubscriptionAt(ctx context.Context, subscriptionID models.NamespacedID, at time.Time) ([]Discount, error) + + Create(ctx context.Context, input CreateDiscountEntityInput) (Discount, error) + Delete(ctx context.Context, id models.NamespacedID) error + GetByID(ctx context.Context, id models.NamespacedID) (Discount, error) +} diff --git a/openmeter/subscription/subscriptionspec.go b/openmeter/subscription/subscriptionspec.go index 267452567..0411e932f 100644 --- a/openmeter/subscription/subscriptionspec.go +++ b/openmeter/subscription/subscriptionspec.go @@ -10,6 +10,7 @@ import ( customerentity "github.com/openmeterio/openmeter/openmeter/customer/entity" "github.com/openmeterio/openmeter/openmeter/entitlement" + "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/pkg/convert" "github.com/openmeterio/openmeter/pkg/currencyx" "github.com/openmeterio/openmeter/pkg/datex" @@ -221,6 +222,8 @@ type SubscriptionPhaseSpec struct { // In each key, for each phase, we have a list of item specs to account for mid-phase changes ItemsByKey map[string][]*SubscriptionItemSpec `json:"itemsByKey"` + + Discounts []DiscountSpec `json:"discounts"` } func (s SubscriptionPhaseSpec) ToCreateSubscriptionPhaseEntityInput( @@ -361,9 +364,38 @@ func (s *SubscriptionPhaseSpec) Validate() error { } } + for idx, discount := range s.Discounts { + if err := discount.Validate(); err != nil { + errs = append(errs, fmt.Errorf("discount %d validation failed: %w", idx, err)) + } + + // TODO(discounts): Validate discount-item linking check + // We need to check that + // 1. the item with the provided key is present + for _, key := range discount.Discount.RateCardKeys() { + if _, ok := s.ItemsByKey[key]; !ok { + errs = append(errs, &AllowedDuringApplyingPatchesError{Inner: fmt.Errorf("discount %d references non-existing item key %s", idx, key)}) + } + } + } + return errors.Join(errs...) } +type DiscountSpec struct { + PhaseKey string `json:"phaseKey"` + Discount productcatalog.Discount + CadenceOverrideRelativeToPhaseStart +} + +func (d DiscountSpec) Validate() error { + if err := d.Discount.Validate(); err != nil { + return fmt.Errorf("discount validation failed: %w", err) + } + + return nil +} + type CreateSubscriptionItemPlanInput struct { PhaseKey string `json:"phaseKey"` ItemKey string `json:"itemKey"` @@ -371,8 +403,7 @@ type CreateSubscriptionItemPlanInput struct { } type CreateSubscriptionItemCustomerInput struct { - ActiveFromOverrideRelativeToPhaseStart *datex.Period `json:"activeFromOverrideRelativeToPhaseStart"` - ActiveToOverrideRelativeToPhaseStart *datex.Period `json:"activeToOverrideRelativeToPhaseStart,omitempty"` + CadenceOverrideRelativeToPhaseStart } type CreateSubscriptionItemInput struct { @@ -386,8 +417,8 @@ type SubscriptionItemSpec struct { func (s SubscriptionItemSpec) GetCadence(phaseCadence models.CadencedModel) (models.CadencedModel, error) { start := phaseCadence.ActiveFrom - if s.ActiveFromOverrideRelativeToPhaseStart != nil { - start, _ = s.ActiveFromOverrideRelativeToPhaseStart.AddTo(phaseCadence.ActiveFrom) + if s.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { + start, _ = s.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phaseCadence.ActiveFrom) } if phaseCadence.ActiveTo != nil { @@ -403,8 +434,8 @@ func (s SubscriptionItemSpec) GetCadence(phaseCadence models.CadencedModel) (mod end := phaseCadence.ActiveTo - if s.ActiveToOverrideRelativeToPhaseStart != nil { - endTime, _ := s.ActiveToOverrideRelativeToPhaseStart.AddTo(phaseCadence.ActiveFrom) + if s.CadenceOverrideRelativeToPhaseStart.ActiveToOverride != nil { + endTime, _ := s.CadenceOverrideRelativeToPhaseStart.ActiveToOverride.AddTo(phaseCadence.ActiveFrom) if phaseCadence.ActiveTo != nil && phaseCadence.ActiveTo.Before(endTime) { // Phase Cadence overrides item cadence in all cases @@ -435,8 +466,8 @@ func (s SubscriptionItemSpec) ToCreateSubscriptionItemEntityInput( Namespace: phaseID.Namespace, }, CadencedModel: itemCadence, - ActiveFromOverrideRelativeToPhaseStart: s.CreateSubscriptionItemCustomerInput.ActiveFromOverrideRelativeToPhaseStart, - ActiveToOverrideRelativeToPhaseStart: s.CreateSubscriptionItemCustomerInput.ActiveToOverrideRelativeToPhaseStart, + ActiveFromOverrideRelativeToPhaseStart: s.CreateSubscriptionItemCustomerInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride, + ActiveToOverrideRelativeToPhaseStart: s.CreateSubscriptionItemCustomerInput.CadenceOverrideRelativeToPhaseStart.ActiveToOverride, PhaseID: phaseID.ID, Key: s.ItemKey, RateCard: s.CreateSubscriptionItemPlanInput.RateCard, diff --git a/openmeter/subscription/subscriptionview.go b/openmeter/subscription/subscriptionview.go index 0abf91fbf..f7328ea44 100644 --- a/openmeter/subscription/subscriptionview.go +++ b/openmeter/subscription/subscriptionview.go @@ -1,6 +1,7 @@ package subscription import ( + "errors" "fmt" "reflect" "slices" @@ -77,6 +78,7 @@ type SubscriptionPhaseView struct { SubscriptionPhase SubscriptionPhase `json:"subscriptionPhase"` Spec SubscriptionPhaseSpec `json:"spec"` ItemsByKey map[string][]SubscriptionItemView `json:"itemsByKey"` + Discounts []DiscountView `json:"discounts"` } func (s *SubscriptionPhaseView) ActiveFrom(subscriptionCadence models.CadencedModel) time.Time { @@ -93,11 +95,41 @@ func (s *SubscriptionPhaseView) Validate(includeItems bool) error { for _, items := range s.ItemsByKey { for _, item := range items { if err := item.Validate(); err != nil { - return fmt.Errorf("item %s in phase %s starting after %s is invalid: %w", item.Spec.ItemKey, item.Spec.ActiveFromOverrideRelativeToPhaseStart.ISOStringPtrOrNil(), s.Spec.PhaseKey, err) + return fmt.Errorf("item %s in phase %s starting after %s is invalid: %w", item.Spec.ItemKey, item.Spec.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.ISOStringPtrOrNil(), s.Spec.PhaseKey, err) } } } + + for _, discount := range s.Discounts { + if err := discount.Validate(); err != nil { + return fmt.Errorf("discount %s in phase %s is invalid: %w", discount.Discount.ID, s.Spec.PhaseKey, err) + } + } + } + + return nil +} + +type DiscountView struct { + Discount Discount `json:"discount"` + Spec DiscountSpec +} + +func (d *DiscountView) Validate() error { + var errs []error + + if err := d.Discount.Validate(); err != nil { + errs = append(errs, fmt.Errorf("discount %s is invalid: %w", d.Discount.ID, err)) + } + + if err := d.Spec.Validate(); err != nil { + errs = append(errs, fmt.Errorf("discount %s spec is invalid: %w", d.Discount.ID, err)) + } + + if len(errs) > 0 { + return errors.Join(errs...) } + return nil } @@ -315,11 +347,11 @@ func NewSubscriptionView( // Any arbitrary time works as long as its consistent for the comparisons slices.SortStableFunc(phaseItemsByKey[key], func(i, j SubscriptionItem) int { iT, jT := phase.ActiveFrom, phase.ActiveFrom - if i.ActiveFromOverrideRelativeToPhaseStart != nil { - iT, _ = i.ActiveFromOverrideRelativeToPhaseStart.AddTo(phase.ActiveFrom) + if i.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { + iT, _ = i.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phase.ActiveFrom) } - if j.ActiveFromOverrideRelativeToPhaseStart != nil { - jT, _ = j.ActiveFromOverrideRelativeToPhaseStart.AddTo(phase.ActiveFrom) + if j.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { + jT, _ = j.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phase.ActiveFrom) } return int(iT.Sub(jT)) }) @@ -347,8 +379,10 @@ func NewSubscriptionView( RateCard: item.RateCard, }, CreateSubscriptionItemCustomerInput: CreateSubscriptionItemCustomerInput{ - ActiveFromOverrideRelativeToPhaseStart: item.ActiveFromOverrideRelativeToPhaseStart, - ActiveToOverrideRelativeToPhaseStart: item.ActiveToOverrideRelativeToPhaseStart, + CadenceOverrideRelativeToPhaseStart: CadenceOverrideRelativeToPhaseStart{ + ActiveFromOverride: item.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride, + ActiveToOverride: item.CadenceOverrideRelativeToPhaseStart.ActiveToOverride, + }, }, }, } From a4f7ca2d02b3bff637cef189ae8d705a076b69a4 Mon Sep 17 00:00:00 2001 From: Alex Goth Date: Tue, 14 Jan 2025 15:13:01 +0100 Subject: [PATCH 3/5] refactor: remove unused patch serialization --- openmeter/subscription/patch.go | 46 +++--- openmeter/subscription/patch/additem.go | 4 - openmeter/subscription/patch/addphase.go | 4 - openmeter/subscription/patch/removephase.go | 4 - openmeter/subscription/patch/serialization.go | 148 ------------------ .../subscription/patch/serialization_test.go | 123 --------------- openmeter/subscription/patch/stretchphase.go | 4 - 7 files changed, 20 insertions(+), 313 deletions(-) delete mode 100644 openmeter/subscription/patch/serialization.go delete mode 100644 openmeter/subscription/patch/serialization_test.go diff --git a/openmeter/subscription/patch.go b/openmeter/subscription/patch.go index efeeff6c6..f087979e7 100644 --- a/openmeter/subscription/patch.go +++ b/openmeter/subscription/patch.go @@ -1,8 +1,8 @@ package subscription import ( - "encoding/json" "fmt" + "slices" "strings" "github.com/samber/lo" @@ -52,15 +52,17 @@ func (o PatchOperation) Validate() error { type PatchPath string const ( - phasePathPrefix = "phases" - itemPathPrefix = "items" + phasePathPrefix = "phases" + itemPathPrefix = "items" + discountPathPrefix = "discounts" ) type PatchPathType string const ( - PatchPathTypePhase PatchPathType = "phase" - PatchPathTypeItem PatchPathType = "item" + PatchPathTypePhase PatchPathType = "phase" + PatchPathTypeItem PatchPathType = "item" + PatchPathTypeDiscount PatchPathType = "discount" ) // Lets implement JSON Unmarshaler for Path @@ -122,8 +124,8 @@ func (p PatchPath) Validate() error { return &PatchValidationError{Msg: fmt.Sprintf("invalid path: %s, first segment should be %s", strVal, phasePathPrefix)} } - if len(segments) == 4 && segments[2] != itemPathPrefix { - return &PatchValidationError{Msg: fmt.Sprintf("invalid path: %s, third segment should be %s", strVal, itemPathPrefix)} + if len(segments) == 4 && slices.Contains([]string{itemPathPrefix, discountPathPrefix}, segments[2]) { + return &PatchValidationError{Msg: fmt.Sprintf("invalid path: %s, third segment should be one of %v", strVal, []string{itemPathPrefix, discountPathPrefix})} } if lo.SomeBy(segments, func(s string) bool { return s == "" }) { @@ -134,25 +136,18 @@ func (p PatchPath) Validate() error { } func (p PatchPath) Type() PatchPathType { - if len(p.seg()) == 4 { + segs := p.seg() + if len(segs) == 4 { + if segs[2] == discountPathPrefix { + return PatchPathTypeDiscount + } + return PatchPathTypeItem } return PatchPathTypePhase } -func (p PatchPath) PhaseKey() string { - return p.seg()[1] -} - -func (p PatchPath) ItemKey() string { - if p.Type() != PatchPathTypeItem { - return "" - } - - return p.seg()[3] -} - func NewPhasePath(phaseKey string) PatchPath { return PatchPath(fmt.Sprintf("/%s/%s", phasePathPrefix, phaseKey)) } @@ -161,22 +156,21 @@ func NewItemPath(phaseKey, itemKey string) PatchPath { return PatchPath(fmt.Sprintf("/%s/%s/%s/%s", phasePathPrefix, phaseKey, itemPathPrefix, itemKey)) } +func NewDiscountPath(phaseKey, discountKey string) PatchPath { + return PatchPath(fmt.Sprintf("/%s/%s/%s/%s", phasePathPrefix, phaseKey, discountPathPrefix, discountKey)) +} + type Patch interface { - json.Marshaler + // json.Marshaler Applies Validate() error Op() PatchOperation Path() PatchPath } -type AnyValuePatch interface { - ValueAsAny() any -} - type ValuePatch[T any] interface { Patch Value() T - AnyValuePatch } func ToApplies(p Patch, _ int) Applies { diff --git a/openmeter/subscription/patch/additem.go b/openmeter/subscription/patch/additem.go index 4201c5063..55f084db3 100644 --- a/openmeter/subscription/patch/additem.go +++ b/openmeter/subscription/patch/additem.go @@ -41,10 +41,6 @@ func (a PatchAddItem) Validate() error { return nil } -func (a PatchAddItem) ValueAsAny() any { - return a.CreateInput -} - var _ subscription.ValuePatch[subscription.SubscriptionItemSpec] = PatchAddItem{} func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscription.ApplyContext) error { diff --git a/openmeter/subscription/patch/addphase.go b/openmeter/subscription/patch/addphase.go index 7b7b18d71..3a029adac 100644 --- a/openmeter/subscription/patch/addphase.go +++ b/openmeter/subscription/patch/addphase.go @@ -24,10 +24,6 @@ func (a PatchAddPhase) Value() subscription.CreateSubscriptionPhaseInput { return a.CreateInput } -func (a PatchAddPhase) ValueAsAny() any { - return a.CreateInput -} - func (a PatchAddPhase) Validate() error { if err := a.Path().Validate(); err != nil { return err diff --git a/openmeter/subscription/patch/removephase.go b/openmeter/subscription/patch/removephase.go index 0930659ac..b1cb9be28 100644 --- a/openmeter/subscription/patch/removephase.go +++ b/openmeter/subscription/patch/removephase.go @@ -24,10 +24,6 @@ func (r PatchRemovePhase) Value() subscription.RemoveSubscriptionPhaseInput { return r.RemoveInput } -func (r PatchRemovePhase) ValueAsAny() any { - return r.RemoveInput -} - func (r PatchRemovePhase) Validate() error { if err := r.Path().Validate(); err != nil { return err diff --git a/openmeter/subscription/patch/serialization.go b/openmeter/subscription/patch/serialization.go deleted file mode 100644 index 6463c8591..000000000 --- a/openmeter/subscription/patch/serialization.go +++ /dev/null @@ -1,148 +0,0 @@ -package patch - -import ( - "encoding/json" - "fmt" - - "github.com/openmeterio/openmeter/openmeter/subscription" - "github.com/openmeterio/openmeter/pkg/datex" -) - -// wPatch is used to serialize patches -type wPatch struct { - Op string `json:"op"` - Path string `json:"path"` - Value any `json:"value,omitempty"` -} - -// Serialization of patches - -func asWPatch(val subscription.Patch) *wPatch { - p := &wPatch{ - Op: string(val.Op()), - Path: string(val.Path()), - } - - if v, ok := val.(subscription.AnyValuePatch); ok { - p.Value = v.ValueAsAny() - } - - return p -} - -func (p PatchAddItem) MarshalJSON() ([]byte, error) { - return json.Marshal(asWPatch(p)) -} - -func (p PatchRemoveItem) MarshalJSON() ([]byte, error) { - return json.Marshal(asWPatch(p)) -} - -func (p PatchAddPhase) MarshalJSON() ([]byte, error) { - return json.Marshal(asWPatch(p)) -} - -func (p PatchRemovePhase) MarshalJSON() ([]byte, error) { - return json.Marshal(asWPatch(p)) -} - -func (p PatchStretchPhase) MarshalJSON() ([]byte, error) { - return json.Marshal(asWPatch(p)) -} - -type rPatch struct { - Op string `json:"op"` - Path string `json:"path"` - Value json.RawMessage `json:"value,omitempty"` -} - -// TODO: patch serialization currently is only ever needed for parsing API requests -// The internal patch types (these) don't properly match up with the API types so they're explicitly mapped in the httpdriver package -// In conclusion, this serialization is redundant - -// Deserialization of patches -func Deserialize(b []byte) (any, error) { - p := &rPatch{} - if err := json.Unmarshal(b, p); err != nil { - return nil, err - } - - pPath := subscription.PatchPath(p.Path) - if err := pPath.Validate(); err != nil { - return nil, fmt.Errorf("invalid patch path: %w", err) - } - - pOp := subscription.PatchOperation(p.Op) - if err := pOp.Validate(); err != nil { - return nil, fmt.Errorf("invalid patch operation: %w", err) - } - - if pPath.Type() == subscription.PatchPathTypePhase && pOp == subscription.PatchOperationAdd { - var val *subscription.CreateSubscriptionPhaseInput - - if err := json.Unmarshal(p.Value, &val); err != nil { - return nil, fmt.Errorf("failed to unmarshal patch value: %w", err) - } - - if val == nil { - return nil, fmt.Errorf("patch value is nil") - } - - return &PatchAddPhase{ - PhaseKey: pPath.PhaseKey(), - CreateInput: *val, - }, nil - } else if pPath.Type() == subscription.PatchPathTypePhase && pOp == subscription.PatchOperationRemove { - var val *subscription.RemoveSubscriptionPhaseInput - - if err := json.Unmarshal(p.Value, &val); err != nil { - return nil, fmt.Errorf("failed to unmarshal patch value: %w", err) - } - - if val == nil { - return nil, fmt.Errorf("patch value is nil") - } - return &PatchRemovePhase{ - PhaseKey: pPath.PhaseKey(), - RemoveInput: *val, - }, nil - } else if pPath.Type() == subscription.PatchPathTypePhase && pOp == subscription.PatchOperationStretch { - var val *datex.Period - - if err := json.Unmarshal(p.Value, &val); err != nil { - return nil, fmt.Errorf("failed to unmarshal patch value: %w", err) - } - - if val == nil { - return nil, fmt.Errorf("patch value is nil") - } - - return &PatchStretchPhase{ - PhaseKey: pPath.PhaseKey(), - Duration: *val, - }, nil - } else if pPath.Type() == subscription.PatchPathTypeItem && pOp == subscription.PatchOperationAdd { - var val *subscription.SubscriptionItemSpec - - if err := json.Unmarshal(p.Value, &val); err != nil { - return nil, fmt.Errorf("failed to unmarshal patch value: %w", err) - } - - if val == nil { - return nil, fmt.Errorf("patch value is nil") - } - - return &PatchAddItem{ - PhaseKey: pPath.PhaseKey(), - ItemKey: pPath.ItemKey(), - CreateInput: *val, - }, nil - } else if pPath.Type() == subscription.PatchPathTypeItem && pOp == subscription.PatchOperationRemove { - return &PatchRemoveItem{ - PhaseKey: pPath.PhaseKey(), - ItemKey: pPath.ItemKey(), - }, nil - } - - return nil, fmt.Errorf("unsupported patch operation: %s %s", pPath.Type(), pOp) -} diff --git a/openmeter/subscription/patch/serialization_test.go b/openmeter/subscription/patch/serialization_test.go deleted file mode 100644 index 7003288e7..000000000 --- a/openmeter/subscription/patch/serialization_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package patch_test - -import ( - "encoding/json" - "testing" - "time" - - "github.com/alpacahq/alpacadecimal" - "github.com/samber/lo" - "github.com/stretchr/testify/assert" - - "github.com/openmeterio/openmeter/openmeter/productcatalog" - "github.com/openmeterio/openmeter/openmeter/subscription" - "github.com/openmeterio/openmeter/openmeter/subscription/patch" - "github.com/openmeterio/openmeter/openmeter/testutils" - "github.com/openmeterio/openmeter/pkg/datex" -) - -func assertSame(t *testing.T, in json.Marshaler) { - out, err := in.MarshalJSON() - if err != nil { - t.Fatalf("failed to marshal: %v", err) - } - - parsed, err := patch.Deserialize(out) - if err != nil { - t.Fatalf("failed to deserialize: %v", err) - } - - assert.Equal(t, in, parsed) -} - -func TestShouldSerializeAndDeserialize(t *testing.T) { - t.Run("Should be the same for PatchAddPhase", func(t *testing.T) { - p := &patch.PatchAddPhase{ - PhaseKey: "asd", - CreateInput: subscription.CreateSubscriptionPhaseInput{ - CreateSubscriptionPhasePlanInput: subscription.CreateSubscriptionPhasePlanInput{ - PhaseKey: "asd", - StartAfter: datex.FromDuration(0), - }, - CreateSubscriptionPhaseCustomerInput: subscription.CreateSubscriptionPhaseCustomerInput{}, - }, - } - - assertSame(t, p) - - p2 := &patch.PatchAddPhase{ - PhaseKey: "asd", - CreateInput: subscription.CreateSubscriptionPhaseInput{ - CreateSubscriptionPhasePlanInput: subscription.CreateSubscriptionPhasePlanInput{ - PhaseKey: "asd", - StartAfter: datex.FromDuration(0), - }, - }, - } - - assertSame(t, p2) - }) - t.Run("Should be the same for PatchRemovePhase", func(t *testing.T) { - p := &patch.PatchRemovePhase{ - PhaseKey: "asd", - RemoveInput: subscription.RemoveSubscriptionPhaseInput{ - Shift: subscription.RemoveSubscriptionPhaseShiftPrev, - }, - } - - assertSame(t, p) - }) - t.Run("Should be the same for PatchStretchPhase", func(t *testing.T) { - p := &patch.PatchStretchPhase{ - PhaseKey: "asd", - Duration: datex.FromDuration(time.Hour), - } - - assertSame(t, p) - }) - t.Run("Should be the same for PatchAddItem", func(t *testing.T) { - fp := productcatalog.FlatPrice{ - Amount: alpacadecimal.NewFromInt(int64(100)), - PaymentTerm: productcatalog.InAdvancePaymentTerm, - } - - pp := productcatalog.Price{} - pp.FromFlat(fp) - - p := &patch.PatchAddItem{ - PhaseKey: "asd", - ItemKey: "asd2", - CreateInput: subscription.SubscriptionItemSpec{ - CreateSubscriptionItemInput: subscription.CreateSubscriptionItemInput{ - CreateSubscriptionItemPlanInput: subscription.CreateSubscriptionItemPlanInput{ - PhaseKey: "asd", - ItemKey: "asd2", - RateCard: subscription.RateCard{ - Name: "asdname", - Description: lo.ToPtr("asddesc"), - TaxConfig: &productcatalog.TaxConfig{ - Stripe: &productcatalog.StripeTaxConfig{ - Code: "stripecode", - }, - }, - EntitlementTemplate: nil, - Price: &pp, - BillingCadence: lo.ToPtr(testutils.GetISODuration(t, "P1M")), - }, - }, - }, - }, - } - - assertSame(t, p) - }) - - t.Run("Should be the same for PatchRemoveItem", func(t *testing.T) { - p := &patch.PatchRemoveItem{ - PhaseKey: "asd", - ItemKey: "asd2", - } - - assertSame(t, p) - }) -} diff --git a/openmeter/subscription/patch/stretchphase.go b/openmeter/subscription/patch/stretchphase.go index 7bd022bb2..cf8889f6f 100644 --- a/openmeter/subscription/patch/stretchphase.go +++ b/openmeter/subscription/patch/stretchphase.go @@ -25,10 +25,6 @@ func (p PatchStretchPhase) Value() datex.Period { return p.Duration } -func (p PatchStretchPhase) ValueAsAny() any { - return p.Duration -} - func (p PatchStretchPhase) Validate() error { if err := p.Path().Validate(); err != nil { return err From bb3665bbdfa516ab3a59c57cb67a9505d3388244 Mon Sep 17 00:00:00 2001 From: Alex Goth Date: Fri, 17 Jan 2025 14:11:12 +0100 Subject: [PATCH 4/5] refactor(subs): restructure patches --- api/spec/src/productcatalog/subscription.tsp | 6 ++ openmeter/subscription/patch/additem.go | 68 ++++----------- openmeter/subscription/patch/additem_test.go | 6 +- openmeter/subscription/patch/removeitem.go | 26 +----- .../subscription/patch/removeitem_test.go | 6 +- openmeter/subscription/patch/utils.go | 83 +++++++++++++++++++ openmeter/subscription/phase.go | 39 +++++++++ openmeter/subscription/subscriptionspec.go | 34 +------- 8 files changed, 157 insertions(+), 111 deletions(-) create mode 100644 openmeter/subscription/patch/utils.go diff --git a/api/spec/src/productcatalog/subscription.tsp b/api/spec/src/productcatalog/subscription.tsp index 557e1e3b7..5ce03b62d 100644 --- a/api/spec/src/productcatalog/subscription.tsp +++ b/api/spec/src/productcatalog/subscription.tsp @@ -333,6 +333,9 @@ model PlanSubscriptionChange { description?: string; } +/** + * Edit operations for a subscription. + */ @friendlyName("SubscriptionEditOperation") @oneOf @discriminator("op") @@ -344,6 +347,9 @@ union SubscriptionEditOperation { EditSubscriptionStretchPhase, } +/** + * Edit operation enum. + */ @friendlyName("EditOp") enum EditOp { AddItem: "add_item", diff --git a/openmeter/subscription/patch/additem.go b/openmeter/subscription/patch/additem.go index 55f084db3..0fc388c0a 100644 --- a/openmeter/subscription/patch/additem.go +++ b/openmeter/subscription/patch/additem.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/openmeterio/openmeter/openmeter/subscription" - "github.com/openmeterio/openmeter/pkg/datex" ) type PatchAddItem struct { @@ -44,59 +43,28 @@ func (a PatchAddItem) Validate() error { var _ subscription.ValuePatch[subscription.SubscriptionItemSpec] = PatchAddItem{} func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscription.ApplyContext) error { - phase, ok := spec.Phases[a.PhaseKey] - if !ok { - return &subscription.PatchValidationError{Msg: fmt.Sprintf("phase %s not found", a.PhaseKey)} + phase, rel, err := phaseContentHelper{spec: *spec, actx: actx}.GetPhaseForEdit(a.PhaseKey) + if err != nil { + return err } phaseStartTime, _ := phase.StartAfter.AddTo(spec.ActiveFrom) - // Checks we need: - - // 1. You cannot add items to previous phases - currentPhase, exists := spec.GetCurrentPhaseAt(actx.CurrentTime) - if !exists { - // If the current phase doesn't exist then either all phases are in the past or in the future - // If all phases are in the past then no addition is possible - // If all phases are in the past then the selected one is also in the past - if st, _ := phase.StartAfter.AddTo(spec.ActiveFrom); st.Before(actx.CurrentTime) { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which starts before current phase", a.PhaseKey)} - } else { - // If it's added to a future phase, the matching key for the phase has to be empty - if len(phase.ItemsByKey) > 0 { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to future phase %s which already has items", a.PhaseKey)} - } - } - } else { - currentPhaseStartTime, _ := currentPhase.StartAfter.AddTo(spec.ActiveFrom) - - // If the selected phase is before the current phase, it's forbidden - if phaseStartTime.Before(currentPhaseStartTime) { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which starts before current phase", a.PhaseKey)} - } else if phase.PhaseKey == currentPhase.PhaseKey { - // Sanity check - if actx.CurrentTime.Before(phaseStartTime) { - return fmt.Errorf("Current time is before the current phase start which is impossible") - } + cadenceHelper := relativeCadenceHelper{ + contentType: "item", + phaseStartTime: phaseStartTime, + phaseKey: a.PhaseKey, + rel: rel, + actx: actx, + } + if err := cadenceHelper.ValidateRelativeCadence(&a.CreateInput.CadenceOverrideRelativeToPhaseStart); err != nil { + return err + } - // 2. If it's added to the current phase, the specified start time cannot point to the past - if a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { - iST, _ := a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phaseStartTime) - if iST.Before(actx.CurrentTime) { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which would become active in the past at %s", a.PhaseKey, iST)} - } - } else { - // 3. If it's added to the current phase, and start time is not specified, it will be set for the current time, as you cannot change the past - diff := datex.Between(phaseStartTime, actx.CurrentTime) - a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride = &diff - } - } else if phaseStartTime.After(currentPhaseStartTime) { - // 4. If you're adding it to a future phase, the matching key for the phase has to be empty - if len(phase.ItemsByKey[a.ItemKey]) > 0 { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to future phase %s which already has items", a.PhaseKey)} - } - } else { - return fmt.Errorf("didn't enter any logical branch") + // If you're adding it to a future phase, the matching key for the phase has to be empty + if rel == isFuturePhase { + if len(phase.ItemsByKey[a.ItemKey]) > 0 { + return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to future phase %s which already has items", a.PhaseKey)} } } @@ -109,7 +77,7 @@ func (a PatchAddItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscrip // If it's added to the current phase, we need to close the activity of any current item if present hasCurrentItemAndShouldCloseCurrentItemForKey := false - if exists && currentPhase.PhaseKey == phase.PhaseKey { + if rel == isCurrentPhase { if len(phase.ItemsByKey[a.ItemKey]) > 0 { hasCurrentItemAndShouldCloseCurrentItemForKey = true } diff --git a/openmeter/subscription/patch/additem_test.go b/openmeter/subscription/patch/additem_test.go index 372bb1bf7..ed66b436b 100644 --- a/openmeter/subscription/patch/additem_test.go +++ b/openmeter/subscription/patch/additem_test.go @@ -39,7 +39,7 @@ func TestAddItem(t *testing.T) { Ctx: subscription.ApplyContext{ CurrentTime: now, }, - ExpectedError: &subscription.PatchValidationError{Msg: "phase invalid_phase not found"}, + ExpectedError: &subscription.PatchConflictError{Msg: "phase invalid_phase not found"}, }, { Name: "Cannot add item to previous phase", @@ -66,7 +66,7 @@ func TestAddItem(t *testing.T) { // We're doing this edit during the 2nd phase CurrentTime: now.AddDate(0, 1, 2), }, - ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which starts before current phase", p.Phases[0].Key)}, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, }, { Name: "Cannot add item to old subscription (where everything is in the past)", @@ -85,7 +85,7 @@ func TestAddItem(t *testing.T) { Ctx: subscription.ApplyContext{ CurrentTime: now.AddDate(1, 0, 0), }, - ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add item to phase %s which starts before current phase", p.Phases[0].Key)}, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, }, { Name: "Cannot add item to current phase which would become active in the past", diff --git a/openmeter/subscription/patch/removeitem.go b/openmeter/subscription/patch/removeitem.go index f2196c7c6..8144b93a2 100644 --- a/openmeter/subscription/patch/removeitem.go +++ b/openmeter/subscription/patch/removeitem.go @@ -35,9 +35,9 @@ func (r PatchRemoveItem) Validate() error { var _ subscription.Patch = PatchRemoveItem{} func (r PatchRemoveItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subscription.ApplyContext) error { - phase, ok := spec.Phases[r.PhaseKey] - if !ok { - return &subscription.PatchValidationError{Msg: fmt.Sprintf("phase %s not found", r.PhaseKey)} + phase, rel, err := phaseContentHelper{spec: *spec, actx: actx}.GetPhaseForEdit(r.PhaseKey) + if err != nil { + return err } phaseStartTime, _ := phase.StartAfter.AddTo(spec.ActiveFrom) @@ -46,26 +46,8 @@ func (r PatchRemoveItem) ApplyTo(spec *subscription.SubscriptionSpec, actx subsc return &subscription.PatchValidationError{Msg: fmt.Sprintf("items for key %s doesn't exists in phase %s", r.ItemKey, r.PhaseKey)} } - // Checks we need: - // 1. You cannot remove items from previous phases - currentPhase, exists := spec.GetCurrentPhaseAt(actx.CurrentTime) - if !exists { - // either all phases are in the past or in the future - // if all phases are in the past then no removal is possible - // - // If all phases are in the past then the selected one is also in the past - if st, _ := phase.StartAfter.AddTo(spec.ActiveFrom); st.Before(actx.CurrentTime) { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot remove item from phase %s which starts before current phase", r.PhaseKey)} - } - } else { - currentPhaseStartTime, _ := currentPhase.StartAfter.AddTo(spec.ActiveFrom) - if phaseStartTime.Before(currentPhaseStartTime) { - return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot remove item from phase %s which starts before current phase", r.PhaseKey)} - } - } - // Finally, lets try to remove the item - if exists && currentPhase.PhaseKey == r.PhaseKey { + if rel == isCurrentPhase { // If it's removed from the current phase, we should set its end time to the current time, instead of deleting it (as we cannot falsify history) diff := datex.Between(phaseStartTime, actx.CurrentTime) diff --git a/openmeter/subscription/patch/removeitem_test.go b/openmeter/subscription/patch/removeitem_test.go index ea5de6c8c..e58cf69b8 100644 --- a/openmeter/subscription/patch/removeitem_test.go +++ b/openmeter/subscription/patch/removeitem_test.go @@ -33,7 +33,7 @@ func TestRemoveItem(t *testing.T) { }, GetSpec: getSpec, Ctx: subscription.ApplyContext{CurrentTime: now}, - ExpectedError: &subscription.PatchValidationError{ + ExpectedError: &subscription.PatchConflictError{ Msg: "phase notfound not found", }, }, @@ -102,7 +102,7 @@ func TestRemoveItem(t *testing.T) { CurrentTime: now.AddDate(0, 1, 1), // same as ts above }, ExpectedError: &subscription.PatchForbiddenError{ - Msg: "cannot remove item from phase test_phase_1 which starts before current phase", + Msg: "cannot change contents of phase test_phase_1 which starts before current phase", }, }, { @@ -122,7 +122,7 @@ func TestRemoveItem(t *testing.T) { CurrentTime: now.AddDate(1, 0, 0), // We're far in the future }, ExpectedError: &subscription.PatchForbiddenError{ - Msg: "cannot remove item from phase test_phase_1 which starts before current phase", + Msg: "cannot change contents of phase test_phase_1 which starts before current phase", }, }, { diff --git a/openmeter/subscription/patch/utils.go b/openmeter/subscription/patch/utils.go new file mode 100644 index 000000000..23342f160 --- /dev/null +++ b/openmeter/subscription/patch/utils.go @@ -0,0 +1,83 @@ +package patch + +import ( + "fmt" + "time" + + "github.com/openmeterio/openmeter/openmeter/subscription" + "github.com/openmeterio/openmeter/pkg/datex" +) + +type timeRelation int + +const ( + isCurrentPhase timeRelation = iota + isFuturePhase +) + +// Helper utility to get a given phase and determine its relation to the current phase +type phaseContentHelper struct { + spec subscription.SubscriptionSpec + actx subscription.ApplyContext +} + +func (p phaseContentHelper) GetPhaseForEdit(phaseKey string) (*subscription.SubscriptionPhaseSpec, timeRelation, error) { + phase, ok := p.spec.Phases[phaseKey] + if !ok { + return nil, 0, &subscription.PatchConflictError{Msg: fmt.Sprintf("phase %s not found", phaseKey)} + } + + phaseStartTime, _ := phase.StartAfter.AddTo(p.spec.ActiveFrom) + + // 1. You cannot add items to previous phases + currentPhase, exists := p.spec.GetCurrentPhaseAt(p.actx.CurrentTime) + if !exists { + // If the current phase doesn't exist then either all phases are in the past or in the future + // If all phases are in the past then no addition is possible + // If all phases are in the past then the selected one is also in the past + if st, _ := phase.StartAfter.AddTo(p.spec.ActiveFrom); st.Before(p.actx.CurrentTime) { + return nil, 0, &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", phaseKey)} + } else { + return phase, isFuturePhase, nil + } + } else { + currentPhaseStartTime, _ := currentPhase.StartAfter.AddTo(p.spec.ActiveFrom) + + // If the selected phase is before the current phase, it's forbidden + if phaseStartTime.Before(currentPhaseStartTime) { + return nil, 0, &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", phaseKey)} + } else if phase.PhaseKey == currentPhase.PhaseKey { + return phase, isCurrentPhase, nil + } else if phaseStartTime.After(currentPhaseStartTime) { + return phase, isFuturePhase, nil + } else { + return nil, 0, fmt.Errorf("didn't enter any logical branch") + } + } +} + +type relativeCadenceHelper struct { + contentType string + phaseStartTime time.Time + phaseKey string + rel timeRelation + actx subscription.ApplyContext +} + +func (r relativeCadenceHelper) ValidateRelativeCadence(c *subscription.CadenceOverrideRelativeToPhaseStart) error { + if r.rel == isCurrentPhase { + // 2. If it's added to the current phase, the specified start time cannot point to the past + if c.ActiveFromOverride != nil { + iST, _ := c.ActiveFromOverride.AddTo(r.phaseStartTime) + if iST.Before(r.actx.CurrentTime) { + return &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add %s to phase %s which would become active in the past at %s", r.contentType, r.phaseKey, iST)} + } + } else { + // 3. If it's added to the current phase, and start time is not specified, it will be set for the current time, as you cannot change the past + diff := datex.Between(r.phaseStartTime, r.actx.CurrentTime) + c.ActiveFromOverride = &diff + } + } + + return nil +} diff --git a/openmeter/subscription/phase.go b/openmeter/subscription/phase.go index 813942d62..cdc6f7431 100644 --- a/openmeter/subscription/phase.go +++ b/openmeter/subscription/phase.go @@ -25,9 +25,48 @@ type SubscriptionPhase struct { // Description Description *string `json:"description,omitempty"` + + // OrderedDiscountIDs is the list of discount IDs that are applied in order. + OrderedDiscountIDs []string `json:"orderedDiscountIds"` } type CadenceOverrideRelativeToPhaseStart struct { ActiveFromOverride *datex.Period `json:"activeFromOverrideRelativeToPhaseStart"` ActiveToOverride *datex.Period `json:"activeToOverrideRelativeToPhaseStart,omitempty"` } + +func (c CadenceOverrideRelativeToPhaseStart) GetCadence(base models.CadencedModel) models.CadencedModel { + start := base.ActiveFrom + if c.ActiveFromOverride != nil { + start, _ = c.ActiveFromOverride.AddTo(base.ActiveFrom) + } + + if base.ActiveTo != nil { + if base.ActiveTo.Before(start) { + // If the intended start time is after the intended end time of the phase, the item will have 0 lifetime at the end of the phase + // This scenario is possible when Subscriptions are canceled (before the phase ends) + return models.CadencedModel{ + ActiveFrom: *base.ActiveTo, + ActiveTo: base.ActiveTo, + } + } + } + + end := base.ActiveTo + + if c.ActiveToOverride != nil { + endTime, _ := c.ActiveToOverride.AddTo(base.ActiveFrom) + + if base.ActiveTo != nil && base.ActiveTo.Before(endTime) { + // Phase Cadence overrides item cadence in all cases + endTime = *base.ActiveTo + } + + end = &endTime + } + + return models.CadencedModel{ + ActiveFrom: start, + ActiveTo: end, + } +} diff --git a/openmeter/subscription/subscriptionspec.go b/openmeter/subscription/subscriptionspec.go index 0411e932f..4b092943c 100644 --- a/openmeter/subscription/subscriptionspec.go +++ b/openmeter/subscription/subscriptionspec.go @@ -416,39 +416,7 @@ type SubscriptionItemSpec struct { } func (s SubscriptionItemSpec) GetCadence(phaseCadence models.CadencedModel) (models.CadencedModel, error) { - start := phaseCadence.ActiveFrom - if s.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil { - start, _ = s.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride.AddTo(phaseCadence.ActiveFrom) - } - - if phaseCadence.ActiveTo != nil { - if phaseCadence.ActiveTo.Before(start) { - // If the intended start time is after the intended end time of the phase, the item will have 0 lifetime at the end of the phase - // This scenario is possible when Subscriptions are canceled (before the phase ends) - return models.CadencedModel{ - ActiveFrom: *phaseCadence.ActiveTo, - ActiveTo: phaseCadence.ActiveTo, - }, nil - } - } - - end := phaseCadence.ActiveTo - - if s.CadenceOverrideRelativeToPhaseStart.ActiveToOverride != nil { - endTime, _ := s.CadenceOverrideRelativeToPhaseStart.ActiveToOverride.AddTo(phaseCadence.ActiveFrom) - - if phaseCadence.ActiveTo != nil && phaseCadence.ActiveTo.Before(endTime) { - // Phase Cadence overrides item cadence in all cases - endTime = *phaseCadence.ActiveTo - } - - end = &endTime - } - - return models.CadencedModel{ - ActiveFrom: start, - ActiveTo: end, - }, nil + return s.CreateSubscriptionItemCustomerInput.CadenceOverrideRelativeToPhaseStart.GetCadence(phaseCadence), nil } func (s SubscriptionItemSpec) ToCreateSubscriptionItemEntityInput( From 18c1814e9b5e09ed5c84fc37bdcc51b5271bc2b3 Mon Sep 17 00:00:00 2001 From: Alex Goth Date: Fri, 17 Jan 2025 14:11:46 +0100 Subject: [PATCH 5/5] feat(subs): write patches for discounts --- openmeter/subscription/patch.go | 2 +- openmeter/subscription/patch/adddiscount.go | 136 ++++++ .../subscription/patch/adddiscount_test.go | 460 ++++++++++++++++++ .../subscription/patch/removediscount.go | 103 ++++ .../subscription/patch/removediscount_test.go | 305 ++++++++++++ 5 files changed, 1005 insertions(+), 1 deletion(-) create mode 100644 openmeter/subscription/patch/adddiscount.go create mode 100644 openmeter/subscription/patch/adddiscount_test.go create mode 100644 openmeter/subscription/patch/removediscount.go create mode 100644 openmeter/subscription/patch/removediscount_test.go diff --git a/openmeter/subscription/patch.go b/openmeter/subscription/patch.go index f087979e7..b56c55608 100644 --- a/openmeter/subscription/patch.go +++ b/openmeter/subscription/patch.go @@ -124,7 +124,7 @@ func (p PatchPath) Validate() error { return &PatchValidationError{Msg: fmt.Sprintf("invalid path: %s, first segment should be %s", strVal, phasePathPrefix)} } - if len(segments) == 4 && slices.Contains([]string{itemPathPrefix, discountPathPrefix}, segments[2]) { + if len(segments) == 4 && !slices.Contains([]string{itemPathPrefix, discountPathPrefix}, segments[2]) { return &PatchValidationError{Msg: fmt.Sprintf("invalid path: %s, third segment should be one of %v", strVal, []string{itemPathPrefix, discountPathPrefix})} } diff --git a/openmeter/subscription/patch/adddiscount.go b/openmeter/subscription/patch/adddiscount.go new file mode 100644 index 000000000..a5ce6ac53 --- /dev/null +++ b/openmeter/subscription/patch/adddiscount.go @@ -0,0 +1,136 @@ +package patch + +import ( + "fmt" + + "github.com/openmeterio/openmeter/openmeter/subscription" +) + +type PatchAddDiscount struct { + PhaseKey string + InsertAt int + CreateInput subscription.DiscountSpec +} + +func (a PatchAddDiscount) Op() subscription.PatchOperation { + return subscription.PatchOperationAdd +} + +func (a PatchAddDiscount) Path() subscription.PatchPath { + return subscription.NewItemPath(a.PhaseKey, fmt.Sprintf("%d", a.InsertAt)) +} + +func (a PatchAddDiscount) Value() subscription.DiscountSpec { + return a.CreateInput +} + +func (a PatchAddDiscount) Validate() error { + if err := a.Path().Validate(); err != nil { + return err + } + + if err := a.Op().Validate(); err != nil { + return err + } + + if err := a.CreateInput.Validate(); err != nil { + return err + } + + if a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveFromOverride != nil || + a.CreateInput.CadenceOverrideRelativeToPhaseStart.ActiveToOverride != nil { + return &subscription.PatchValidationError{Msg: "cannot set active times for discount"} + } + + if a.InsertAt < 0 { + return &subscription.PatchValidationError{Msg: "insertAt must be a non-negative integer"} + } + + return nil +} + +func (a PatchAddDiscount) ApplyTo(spec *subscription.SubscriptionSpec, actx subscription.ApplyContext) error { + phase, rel, err := phaseContentHelper{spec: *spec, actx: actx}.GetPhaseForEdit(a.PhaseKey) + if err != nil { + return err + } + + phaseCadence, err := spec.GetPhaseCadence(a.PhaseKey) + if err != nil { + return err + } + + // Let's check that all items do exist + for _, k := range a.CreateInput.Discount.RateCardKeys() { + if _, ok := phase.ItemsByKey[k]; !ok { + return &subscription.PatchConflictError{Msg: fmt.Sprintf("item %s not found", k)} + } + } + + // Let's check the relative cadence + cadenceHelper := relativeCadenceHelper{ + contentType: "discount", + phaseStartTime: phaseCadence.ActiveFrom, + phaseKey: a.PhaseKey, + rel: rel, + actx: actx, + } + if err := cadenceHelper.ValidateRelativeCadence(&a.CreateInput.CadenceOverrideRelativeToPhaseStart); err != nil { + return err + } + + // Let's get when the discount activates + discountCadence := a.CreateInput.CadenceOverrideRelativeToPhaseStart.GetCadence(phaseCadence) + + // Now let's find the list of active discounts at that time + // This is because the index is relative to that slice, explanation: + // The Discount becomes active at T1 (deterministic from discount and spec) + // You want the discount to be the indexAt-th active discount at T1 + var activeDiscounts []struct { + originalIdx int + spec subscription.DiscountSpec + } + + for i, d := range phase.Discounts { + cadence := d.CadenceOverrideRelativeToPhaseStart.GetCadence(phaseCadence) + if cadence.IsActiveAt(discountCadence.ActiveFrom) { + activeDiscounts = append(activeDiscounts, struct { + originalIdx int + spec subscription.DiscountSpec + }{originalIdx: i, spec: d}) + } + } + + // Now let's find which index the discount should be inserted at and insert it + // If there is an element at that index in the filtered list, it should be inserted right before that + // If there isn't, it should be inserted at the end + + var insertIndex int + + // If it's later than all active discounts, we just append it + if len(activeDiscounts) == 0 { + insertIndex = 0 + } else if a.InsertAt >= len(activeDiscounts) { + insertIndex = activeDiscounts[len(activeDiscounts)-1].originalIdx + 1 + } else { + insertIndex = activeDiscounts[a.InsertAt].originalIdx + } + + // Now let's insert the discount. + // The discount at the provided index (and all later ones) will be shifted to the right + discounts := make([]subscription.DiscountSpec, len(phase.Discounts)+1) + for i := 0; i < len(phase.Discounts); i++ { + if i < insertIndex { + discounts[i] = phase.Discounts[i] + } else { + discounts[i+1] = phase.Discounts[i] + } + } + discounts[insertIndex] = a.CreateInput + + phase.Discounts = discounts + + return nil +} + +var _ subscription.ValuePatch[subscription.DiscountSpec] = PatchAddDiscount{} diff --git a/openmeter/subscription/patch/adddiscount_test.go b/openmeter/subscription/patch/adddiscount_test.go new file mode 100644 index 000000000..10a37f2ee --- /dev/null +++ b/openmeter/subscription/patch/adddiscount_test.go @@ -0,0 +1,460 @@ +package patch_test + +import ( + "fmt" + "testing" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" + "github.com/stretchr/testify/require" + + "github.com/openmeterio/openmeter/openmeter/productcatalog" + "github.com/openmeterio/openmeter/openmeter/subscription" + "github.com/openmeterio/openmeter/openmeter/subscription/patch" + subscriptiontestutils "github.com/openmeterio/openmeter/openmeter/subscription/testutils" + "github.com/openmeterio/openmeter/openmeter/testutils" + "github.com/openmeterio/openmeter/pkg/clock" +) + +func TestAddDiscount(t *testing.T) { + now := testutils.GetRFC3339Time(t, "2021-01-01T00:00:01Z") + clock.SetTime(now) + + s, p := getDefaultSpec(t, now) + + getSpec := func(_ *testing.T) *subscription.SubscriptionSpec { + return s + } + + tests := testsuite[patch.PatchAddDiscount]{ + SystemTime: now, + TT: []testcase[patch.PatchAddDiscount]{ + { + Name: "Invalid phase", + Patch: patch.PatchAddDiscount{ + PhaseKey: "invalid_phase", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{}, + }, + GetSpec: getSpec, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + ExpectedError: &subscription.PatchConflictError{Msg: "phase invalid_phase not found"}, + }, + { + Name: "Cannot add discount to previous phase", + Patch: patch.PatchAddDiscount{ + PhaseKey: p.Phases[0].Key, + InsertAt: 0, + CreateInput: subscription.DiscountSpec{}, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.Equal(t, "test_phase_1", p.Phases[0].Key) + require.GreaterOrEqual(t, len(s.Phases), 2) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + pstrt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(pstrt)) + + return s + }, + Ctx: subscription.ApplyContext{ + // We're doing this edit during the 2nd phase + CurrentTime: now.AddDate(0, 1, 2), + }, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, + }, + { + Name: "Cannot add discount to old subscription (where everything is in the past)", + Patch: patch.PatchAddDiscount{ + PhaseKey: p.Phases[0].Key, + InsertAt: 0, + CreateInput: subscription.DiscountSpec{}, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + s.ActiveTo = lo.ToPtr(s.ActiveFrom.AddDate(0, 6, 0)) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(1, 0, 0), + }, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, + }, + { + Name: "Cannot add discount to current phase which would become active in the past", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{ + CadenceOverrideRelativeToPhaseStart: subscription.CadenceOverrideRelativeToPhaseStart{ + ActiveFromOverride: lo.ToPtr(testutils.GetISODuration(t, "P1D")), + }, + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 3) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p3, ok := s.Phases["test_phase_3"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(p2strt)) + + p3strt, _ := p3.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 2, 2).Before(p3strt)) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(0, 2, 2), + }, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot add discount to phase %s which would become active in the past at %v", p.Phases[1].Key, now.AddDate(0, 1, 1))}, + }, + { + Name: "Cannot add discount which references non-existent item", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{"non_existent_item"}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 2) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + // Let's make sure p2 doesn't have the item we're referencing + require.NotContains(t, p2.ItemsByKey, "non_existent_item") + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + ExpectedError: &subscription.PatchConflictError{Msg: "item non_existent_item not found"}, + }, + { + Name: "Cannot add discount which references non-existent item (among existing items)", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey, "non_existent_item"}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 2) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + // Let's make sure p2 doesn't have the item we're referencing + require.NotContains(t, p2.ItemsByKey, "non_existent_item") + require.Contains(t, p2.ItemsByKey, subscriptiontestutils.ExampleFeatureKey) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + ExpectedError: &subscription.PatchConflictError{Msg: "item non_existent_item not found"}, + }, + { + Name: "Should add discount to a phase without discounts", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + } + + return *s + }, + }, + { + Name: "Should add discount to a phase with discounts - as first discount", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 0, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return *s + }, + }, + { + Name: "Should add discount to a phase with discounts - as last discount", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 1, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + } + + return *s + }, + }, + { + Name: "Should add discount to a phase with discounts - as last discount with index too large", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 100, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + } + + return *s + }, + }, + { + Name: "Should add discount to a phase with discounts - as an intermediate discount", + Patch: patch.PatchAddDiscount{ + PhaseKey: "test_phase_2", + InsertAt: 1, + CreateInput: subscription.DiscountSpec{ + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(2), + RateCards: []string{}, + }), + }, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(5), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(2), + RateCards: []string{}, + }), + }, + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(5), + RateCards: []string{subscriptiontestutils.ExampleFeatureKey}, + }), + }, + } + + return *s + }, + }, + }, + } + + tests.Run(t) +} diff --git a/openmeter/subscription/patch/removediscount.go b/openmeter/subscription/patch/removediscount.go new file mode 100644 index 000000000..92c9bd8eb --- /dev/null +++ b/openmeter/subscription/patch/removediscount.go @@ -0,0 +1,103 @@ +package patch + +import ( + "fmt" + "time" + + "github.com/openmeterio/openmeter/openmeter/subscription" + "github.com/openmeterio/openmeter/pkg/datex" + "github.com/openmeterio/openmeter/pkg/defaultx" +) + +type PatchRemoveDiscount struct { + PhaseKey string + + // Which item should be removed (defined by its index) + RemoveAtIdx int + + // At what time the Discounts are queried (determines indexing). Defaults to now. + // Explanation: + // A and B Discounts are already active, C is set to activate in the future and would be ordered A C B. + // If we want to remove the discount at idx 1, we have to disambiguate between C and B, and for that we use this timestamp. + IndexTime *time.Time +} + +func (a PatchRemoveDiscount) Op() subscription.PatchOperation { + return subscription.PatchOperationRemove +} + +func (a PatchRemoveDiscount) Path() subscription.PatchPath { + return subscription.NewItemPath(a.PhaseKey, fmt.Sprintf("%d", a.RemoveAtIdx)) +} + +func (a PatchRemoveDiscount) Validate() error { + if err := a.Path().Validate(); err != nil { + return err + } + + if err := a.Op().Validate(); err != nil { + return err + } + + if a.RemoveAtIdx < 0 { + return &subscription.PatchValidationError{Msg: "removeAt must be a non-negative integer"} + } + + return nil +} + +func (a PatchRemoveDiscount) ApplyTo(spec *subscription.SubscriptionSpec, actx subscription.ApplyContext) error { + phase, rel, err := phaseContentHelper{spec: *spec, actx: actx}.GetPhaseForEdit(a.PhaseKey) + if err != nil { + return err + } + + phaseCadence, err := spec.GetPhaseCadence(a.PhaseKey) + if err != nil { + return err + } + + // Now let's find which index should be removed + filterTime := defaultx.WithDefault(a.IndexTime, actx.CurrentTime) + if rel == isFuturePhase { + filterTime = phaseCadence.ActiveFrom + } + + // Now let's find the active items at that time + var activeDiscounts []struct { + originalIdx int + spec subscription.DiscountSpec + } + + for i, d := range phase.Discounts { + cadence := d.CadenceOverrideRelativeToPhaseStart.GetCadence(phaseCadence) + if cadence.IsActiveAt(filterTime) { + activeDiscounts = append(activeDiscounts, struct { + originalIdx int + spec subscription.DiscountSpec + }{originalIdx: i, spec: d}) + } + } + + // Now let's find the index of the discount to remove + if a.RemoveAtIdx >= len(activeDiscounts) { + return &subscription.PatchValidationError{Msg: fmt.Sprintf("index %d out of bounds for %d items", a.RemoveAtIdx, len(activeDiscounts))} + } + + indexToRemove := activeDiscounts[a.RemoveAtIdx].originalIdx + + // Now let's remove the discount + // If the discount to remove is already active we mark it as inactive starting now + if rel == isCurrentPhase { + diff := datex.Between(phaseCadence.ActiveFrom, actx.CurrentTime) + + phase.Discounts[indexToRemove].ActiveToOverride = &diff + } else { + // Otherwise (if its a future phase), we can just remove it + phase.Discounts = append(phase.Discounts[:indexToRemove], phase.Discounts[indexToRemove+1:]...) + } + + return nil +} + +var _ subscription.Patch = PatchRemoveDiscount{} diff --git a/openmeter/subscription/patch/removediscount_test.go b/openmeter/subscription/patch/removediscount_test.go new file mode 100644 index 000000000..f70ff3e50 --- /dev/null +++ b/openmeter/subscription/patch/removediscount_test.go @@ -0,0 +1,305 @@ +package patch_test + +import ( + "fmt" + "testing" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" + "github.com/stretchr/testify/require" + + "github.com/openmeterio/openmeter/openmeter/productcatalog" + "github.com/openmeterio/openmeter/openmeter/subscription" + "github.com/openmeterio/openmeter/openmeter/subscription/patch" + "github.com/openmeterio/openmeter/openmeter/testutils" + "github.com/openmeterio/openmeter/pkg/clock" +) + +func TestRemoveDiscount(t *testing.T) { + now := testutils.GetRFC3339Time(t, "2021-01-01T00:00:01Z") + clock.SetTime(now) + + s, p := getDefaultSpec(t, now) + + getSpec := func(_ *testing.T) *subscription.SubscriptionSpec { + return s + } + + tests := testsuite[patch.PatchRemoveDiscount]{ + SystemTime: now, + TT: []testcase[patch.PatchRemoveDiscount]{ + { + Name: "Invalid phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "invalid_phase", + RemoveAtIdx: 0, + }, + GetSpec: getSpec, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + ExpectedError: &subscription.PatchConflictError{Msg: "phase invalid_phase not found"}, + }, + { + Name: "Cannot remove discount from previous phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: p.Phases[0].Key, + RemoveAtIdx: 0, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.Equal(t, "test_phase_1", p.Phases[0].Key) + require.GreaterOrEqual(t, len(s.Phases), 2) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + pstrt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(pstrt)) + + pKey := p.Phases[0].Key + s.Phases[pKey].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: pKey, + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + // We're doing this edit during the 2nd phase + CurrentTime: now.AddDate(0, 1, 2), + }, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, + }, + { + Name: "Cannot remove discount from old subscription (where everything is in the past)", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: p.Phases[0].Key, + RemoveAtIdx: 0, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + pKey := p.Phases[0].Key + s.Phases[pKey].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: pKey, + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + s.ActiveTo = lo.ToPtr(s.ActiveFrom.AddDate(0, 6, 0)) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(1, 0, 0), + }, + ExpectedError: &subscription.PatchForbiddenError{Msg: fmt.Sprintf("cannot change contents of phase %s which starts before current phase", p.Phases[0].Key)}, + }, + { + Name: "Cannot remove discount from current phase that doesnt have discounts", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "test_phase_2", + RemoveAtIdx: 0, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 3) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p3, ok := s.Phases["test_phase_3"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(p2strt)) + + p3strt, _ := p3.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 2, 2).Before(p3strt)) + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(0, 2, 2), + }, + ExpectedError: &subscription.PatchValidationError{Msg: "index 0 out of bounds for 0 items"}, + }, + { + Name: "Cannot remove non-existent discount from current phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "test_phase_2", + RemoveAtIdx: 2, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 3) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p3, ok := s.Phases["test_phase_3"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(p2strt)) + + p3strt, _ := p3.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 2, 2).Before(p3strt)) + + // Let's add a discount to the phase + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(0, 2, 2), + }, + ExpectedError: &subscription.PatchValidationError{Msg: "index 2 out of bounds for 1 items"}, + }, + { + Name: "Cannot remove non-existent discount from current phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "test_phase_2", + RemoveAtIdx: 2, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + require.GreaterOrEqual(t, len(s.Phases), 3) + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p3, ok := s.Phases["test_phase_3"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 1, 1).After(p2strt)) + + p3strt, _ := p3.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.AddDate(0, 2, 2).Before(p3strt)) + + // Let's add a discount to the phase + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(0, 2, 2), + }, + ExpectedError: &subscription.PatchValidationError{Msg: "index 2 out of bounds for 1 items"}, + }, + { + Name: "Should remove discount from future phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "test_phase_2", + RemoveAtIdx: 0, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.Before(p2strt)) + + // Let's add a discount to the phase + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now, + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + // Note we're not adding anything = we expect it to be removed + + return *s + }, + }, + { + Name: "Should remove discount from current phase", + Patch: patch.PatchRemoveDiscount{ + PhaseKey: "test_phase_2", + RemoveAtIdx: 0, + }, + GetSpec: func(t *testing.T) *subscription.SubscriptionSpec { + s := getSpec(t) + + // Let's make sure the spec looks as we expect + p2, ok := s.Phases["test_phase_2"] + require.True(t, ok) + + p2strt, _ := p2.StartAfter.AddTo(s.ActiveFrom) + require.True(t, now.Before(p2strt)) + + // Let's add a discount to the phase + s.Phases["test_phase_2"].Discounts = []subscription.DiscountSpec{ + { + PhaseKey: "test_phase_2", + Discount: productcatalog.NewDiscountFrom(productcatalog.PercentageDiscount{ + Percentage: alpacadecimal.NewFromInt(10), + RateCards: []string{}, + }), + }, + } + + return s + }, + Ctx: subscription.ApplyContext{ + CurrentTime: now.AddDate(0, 2, 2), + }, + GetExpectedSpec: func(t *testing.T) subscription.SubscriptionSpec { + s := getSpec(t) + + // Note we're not adding anything = we expect it to be removed + + return *s + }, + }, + }, + } + + tests.Run(t) +}