File size: 1,346 Bytes
1c4c66b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package subscriptionsync
import (
"context"
"errors"
"time"
"github.com/openmeterio/openmeter/pkg/framework/entutils"
"github.com/openmeterio/openmeter/pkg/models"
)
type Adapter interface {
SyncStateAdapter
entutils.TxCreator
}
type SyncStateAdapter interface {
InvalidateSyncState(ctx context.Context, input InvalidateSyncStateInput) error
GetSyncStates(ctx context.Context, input GetSyncStatesInput) ([]SyncState, error)
UpsertSyncState(ctx context.Context, input UpsertSyncStateInput) error
}
type InvalidateSyncStateInput = models.NamespacedID
type GetSyncStatesInput = []models.NamespacedID
type UpsertSyncStateInput = SyncState
type SyncState struct {
SubscriptionID models.NamespacedID
HasBillables bool
SyncedAt time.Time
NextSyncAfter *time.Time
}
func (i UpsertSyncStateInput) Validate() error {
var errs []error
if err := i.SubscriptionID.Validate(); err != nil {
errs = append(errs, err)
}
if i.SyncedAt.IsZero() {
errs = append(errs, errors.New("synced at is required"))
}
if i.HasBillables && i.NextSyncAfter == nil {
errs = append(errs, errors.New("next sync after is required when the subscription has billables"))
}
if i.NextSyncAfter != nil && i.NextSyncAfter.IsZero() {
errs = append(errs, errors.New("next sync after must not be zero"))
}
return errors.Join(errs...)
}
|