wormhole-explorer/api/handlers/heartbeats/repository.go

50 lines
1.5 KiB
Go

package heartbeats
import (
"context"
"fmt"
"github.com/pkg/errors"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.uber.org/zap"
)
// Repository definition.
type Repository struct {
db *mongo.Database
logger *zap.Logger
collections struct {
heartbeats *mongo.Collection
}
}
// NewRepository create a new Repository.
func NewRepository(db *mongo.Database, logger *zap.Logger) *Repository {
return &Repository{db: db,
logger: logger.With(zap.String("module", "HeartbeatsRepository")),
collections: struct{ heartbeats *mongo.Collection }{heartbeats: db.Collection("heartbeats")},
}
}
// FindByIDS get a list of HeartbeatDoc pointer.
func (r *Repository) FindByIDs(ctx context.Context, ids []string) ([]*HeartbeatDoc, error) {
in := bson.M{"_id": bson.M{"$in": ids}}
cur, err := r.collections.heartbeats.Find(ctx, in)
if err != nil {
requestID := fmt.Sprintf("%v", ctx.Value("requestid"))
r.logger.Error("failed execute Find command to get heartbeats",
zap.Error(err), zap.Strings("ids", ids), zap.String("requestID", requestID))
return nil, errors.WithStack(err)
}
var heartbeats []*HeartbeatDoc
err = cur.All(ctx, &heartbeats)
if err != nil {
requestID := fmt.Sprintf("%v", ctx.Value("requestid"))
r.logger.Error("failed decoding cursor to []*HeartbeatDoc", zap.Error(err),
zap.Strings("ids", ids), zap.String("requestID", requestID))
return nil, errors.WithStack(err)
}
return heartbeats, err
}