50 lines
1.5 KiB
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
|
|
}
|