openmeter / billing /charges /usagebased /adapter /realizationrun.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 2)
5a22efd verified
Raw
History Blame Contribute Delete
3.15 kB
package adapter
import (
"context"
"github.com/openmeterio/openmeter/openmeter/billing/charges/meta"
"github.com/openmeterio/openmeter/openmeter/billing/charges/usagebased"
"github.com/openmeterio/openmeter/openmeter/billing/models/totals"
dbchargeusagebasedruns "github.com/openmeterio/openmeter/openmeter/ent/db/chargeusagebasedruns"
"github.com/openmeterio/openmeter/pkg/framework/entutils"
)
var _ usagebased.RealizationRunAdapter = (*adapter)(nil)
func (a *adapter) CreateRealizationRun(ctx context.Context, chargeID meta.ChargeID, input usagebased.CreateRealizationRunInput) (usagebased.RealizationRunBase, error) {
if err := chargeID.Validate(); err != nil {
return usagebased.RealizationRunBase{}, err
}
if err := input.Validate(); err != nil {
return usagebased.RealizationRunBase{}, err
}
return entutils.TransactingRepo(ctx, a, func(ctx context.Context, tx *adapter) (usagebased.RealizationRunBase, error) {
create := tx.db.ChargeUsageBasedRuns.Create().
SetNamespace(chargeID.Namespace).
SetChargeID(chargeID.ID).
SetFeatureID(input.FeatureID).
SetType(input.Type).
SetInitialType(input.Type).
SetStoredAtLt(meta.NormalizeTimestamp(input.StoredAtLT)).
SetServicePeriodTo(meta.NormalizeTimestamp(input.ServicePeriodTo)).
SetDetailedLinesPresent(false).
SetNillableBillingInvoiceLineID(input.LineID).
SetNillableBillingInvoiceID(input.InvoiceID).
SetMeteredQuantity(input.MeteredQuantity).
SetNoFiatTransactionRequired(input.NoFiatTransactionRequired)
create = totals.Set(create, input.Totals)
dbRun, err := create.Save(ctx)
if err != nil {
return usagebased.RealizationRunBase{}, err
}
return MapRealizationRunBaseFromDB(dbRun), nil
})
}
func (a *adapter) UpdateRealizationRun(ctx context.Context, input usagebased.UpdateRealizationRunInput) (usagebased.RealizationRunBase, error) {
input = input.Normalized()
if err := input.Validate(); err != nil {
return usagebased.RealizationRunBase{}, err
}
return entutils.TransactingRepo(ctx, a, func(ctx context.Context, tx *adapter) (usagebased.RealizationRunBase, error) {
update := tx.db.ChargeUsageBasedRuns.UpdateOneID(input.ID.ID).
Where(dbchargeusagebasedruns.NamespaceEQ(input.ID.Namespace))
if input.Type.IsPresent() {
update = update.SetType(input.Type.OrEmpty())
}
if input.StoredAtLT.IsPresent() {
update = update.SetStoredAtLt(input.StoredAtLT.OrEmpty())
}
if input.DeletedAt.IsPresent() {
update = update.SetOrClearDeletedAt(input.DeletedAt.OrEmpty())
}
if input.LineID.IsPresent() {
update = update.SetOrClearLineID(input.LineID.OrEmpty())
}
if input.MeteredQuantity.IsPresent() {
update = update.SetMeteredQuantity(input.MeteredQuantity.OrEmpty())
}
if input.Totals.IsPresent() {
update = totals.Set(update, input.Totals.OrEmpty())
}
if input.NoFiatTransactionRequired.IsPresent() {
update = update.SetNoFiatTransactionRequired(input.NoFiatTransactionRequired.OrEmpty())
}
dbRun, err := update.Save(ctx)
if err != nil {
return usagebased.RealizationRunBase{}, err
}
return MapRealizationRunBaseFromDB(dbRun), nil
})
}