Skip to content

Commit 52279b1

Browse files
easyCZroboquat
authored andcommitted
[billing] Implement ReconcileInvoices
1 parent b663b56 commit 52279b1

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

components/usage/pkg/apiv1/billing.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,37 @@ func (s *BillingService) UpdateInvoices(ctx context.Context, in *v1.UpdateInvoic
6767
return &v1.UpdateInvoicesResponse{}, nil
6868
}
6969

70+
func (s *BillingService) ReconcileInvoices(ctx context.Context, in *v1.ReconcileInvoicesRequest) (*v1.ReconcileInvoicesResponse, error) {
71+
balances, err := db.ListBalance(ctx, s.conn)
72+
if err != nil {
73+
log.WithError(err).Errorf("Failed to reconcile invoices.")
74+
return nil, status.Errorf(codes.Internal, "Failed to reconcile invoices.")
75+
}
76+
77+
creditSummaryForTeams := map[string]stripe.CreditSummary{}
78+
for _, balance := range balances {
79+
entity, id := balance.AttributionID.Values()
80+
81+
// TODO: Support updating of user attribution IDs
82+
if entity != db.AttributionEntity_Team {
83+
continue
84+
}
85+
86+
creditSummaryForTeams[id] = stripe.CreditSummary{
87+
Credits: int64(math.Ceil(balance.CreditCents.ToCredits())),
88+
ReportID: "no-report",
89+
}
90+
}
91+
92+
err = s.stripeClient.UpdateUsage(ctx, creditSummaryForTeams)
93+
if err != nil {
94+
log.WithError(err).Errorf("Failed to udpate usage in stripe.")
95+
return nil, status.Errorf(codes.Internal, "Failed to update usage in stripe")
96+
}
97+
98+
return &v1.ReconcileInvoicesResponse{}, nil
99+
}
100+
70101
func (s *BillingService) FinalizeInvoice(ctx context.Context, in *v1.FinalizeInvoiceRequest) (*v1.FinalizeInvoiceResponse, error) {
71102
logger := log.WithField("invoice_id", in.GetInvoiceId())
72103

components/usage/pkg/stripe/stripe.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -152,18 +152,6 @@ func (c *Client) updateUsageForCustomer(ctx context.Context, customer *stripe.Cu
152152
return nil, fmt.Errorf("failed to register usage for customer %q on subscription item %s", customer.Name, subscriptionItemId)
153153
}
154154

155-
invoice, err := c.GetUpcomingInvoice(ctx, customer.ID)
156-
if err != nil {
157-
return nil, fmt.Errorf("failed to find upcoming invoice for customer %s: %w", customer.ID, err)
158-
}
159-
160-
_, err = c.UpdateInvoiceMetadata(ctx, invoice.ID, map[string]string{
161-
ReportIDMetadataKey: summary.ReportID,
162-
})
163-
if err != nil {
164-
return nil, fmt.Errorf("failed to udpate invoice %s metadata with report ID: %w", invoice.ID, err)
165-
}
166-
167155
return &UsageRecord{
168156
SubscriptionItemID: subscriptionItemId,
169157
Quantity: summary.Credits,

0 commit comments

Comments
 (0)