service backend
This commit is contained in:
13
api/pkg/db/tseries/factory.go
Normal file
13
api/pkg/db/tseries/factory.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package tseries
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/tech/sendico/pkg/db/internal/mongo/tseriesimp"
|
||||
tsoptions "github.com/tech/sendico/pkg/db/tseries/options"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
func CreateMongoTimeSeries(ctx context.Context, db *mongo.Database, tsOpts *tsoptions.Options) (TimeSeries, error) {
|
||||
return tseriesimp.NewMongoTimeSeriesCollection(ctx, db, tsOpts)
|
||||
}
|
||||
23
api/pkg/db/tseries/options/options.go
Normal file
23
api/pkg/db/tseries/options/options.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package tsoptions
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Granularity string
|
||||
|
||||
const (
|
||||
TSGSeconds Granularity = "seconds"
|
||||
TSGMinutes Granularity = "minutes"
|
||||
TSGHours Granularity = "hours"
|
||||
)
|
||||
|
||||
func (t Granularity) String() string { return string(t) }
|
||||
|
||||
type Options struct {
|
||||
Collection string
|
||||
TimeField string
|
||||
Granularity Granularity
|
||||
MetaField string // optional, can be empty
|
||||
ExpireAfter time.Duration // optional, zero means no TTL
|
||||
}
|
||||
14
api/pkg/db/tseries/point/interface.go
Normal file
14
api/pkg/db/tseries/point/interface.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package tspoint
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type TimePoint interface {
|
||||
GetTimeStamp() time.Time
|
||||
}
|
||||
|
||||
type TimePointWithMeta[T any] interface {
|
||||
GetTimeStamp() time.Time
|
||||
GetMeta() T
|
||||
}
|
||||
1
api/pkg/db/tseries/template.go
Normal file
1
api/pkg/db/tseries/template.go
Normal file
@@ -0,0 +1 @@
|
||||
package tseries
|
||||
29
api/pkg/db/tseries/tseries.go
Normal file
29
api/pkg/db/tseries/tseries.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package tseries
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/tech/sendico/pkg/db/repository/builder"
|
||||
rdecoder "github.com/tech/sendico/pkg/db/repository/decoder"
|
||||
tspoint "github.com/tech/sendico/pkg/db/tseries/point"
|
||||
)
|
||||
|
||||
// TimeSeries[T] abstracts a Mongo time-series “bucket” of documents of type T.
|
||||
type TimeSeries interface {
|
||||
// Aggregate runs an aggregation pipeline on the time-series
|
||||
Aggregate(ctx context.Context, builder builder.Pipeline, decoder rdecoder.DecodingFunc) error
|
||||
// Insert adds a single point into the series.
|
||||
Insert(ctx context.Context, point tspoint.TimePoint) error
|
||||
// InsertMany adds multiple points in one bulk operation.
|
||||
InsertMany(ctx context.Context, points []tspoint.TimePoint) error
|
||||
|
||||
// Query fetches all points whose timeField lies in [from, to).
|
||||
// The 'filter' param is an optional Mongo-style query on meta or other fields.
|
||||
Query(
|
||||
ctx context.Context,
|
||||
decoder rdecoder.DecodingFunc,
|
||||
filter builder.Query,
|
||||
from, to *time.Time,
|
||||
) error
|
||||
}
|
||||
Reference in New Issue
Block a user