78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
//go:generate mockgen -source=repository.go -destination=mocks/repository.go -package=mocks
|
|
package pipeline
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/wormhole-foundation/wormhole/sdk/vaa"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Interface
|
|
type IRepository interface {
|
|
GetVaaIdTxHash(ctx context.Context, id string) (*VaaIdTxHash, error)
|
|
UpdateVaaDocTxHash(ctx context.Context, id string, txhash string) error
|
|
}
|
|
|
|
// Repository is the repository data access layer.
|
|
type Repository struct {
|
|
db *mongo.Database
|
|
log *zap.Logger
|
|
collections struct {
|
|
vaas *mongo.Collection
|
|
vaaIdTxHash *mongo.Collection
|
|
}
|
|
}
|
|
|
|
// NewRepository creates a new repository.
|
|
func NewRepository(db *mongo.Database, log *zap.Logger) *Repository {
|
|
return &Repository{db, log, struct {
|
|
vaas *mongo.Collection
|
|
vaaIdTxHash *mongo.Collection
|
|
}{
|
|
vaas: db.Collection("vaas"),
|
|
vaaIdTxHash: db.Collection("vaaIdTxHash"),
|
|
}}
|
|
}
|
|
|
|
// VaaIdTxHash represents a vaaIdTxHash document.
|
|
type VaaIdTxHash struct {
|
|
ChainID vaa.ChainID `bson:"emitterChain"`
|
|
Emitter string `bson:"emitterAddr"`
|
|
Sequence string `bson:"sequence"`
|
|
TxHash string `bson:"txHash"`
|
|
UpdatedAt *time.Time `bson:"updatedAt"`
|
|
}
|
|
|
|
// GetVaaIdTxHash returns a vaaIdTxHash document.
|
|
func (r *Repository) GetVaaIdTxHash(ctx context.Context, id string) (*VaaIdTxHash, error) {
|
|
var v VaaIdTxHash
|
|
err := r.collections.vaaIdTxHash.FindOne(ctx, bson.M{"_id": id}).Decode(&v)
|
|
return &v, err
|
|
}
|
|
|
|
// VaaUpdate represents a vaa document.
|
|
type VaaUpdate struct {
|
|
TxHash string `bson:"txHash,omitempty"`
|
|
UpdatedAt *time.Time `bson:"updatedAt"`
|
|
}
|
|
|
|
// UpdateVaaTxHash update a txhash in a vaa document.
|
|
func (r *Repository) UpdateVaaDocTxHash(ctx context.Context, id string, txhash string) error {
|
|
vaaDoc := &VaaUpdate{
|
|
TxHash: txhash,
|
|
UpdatedAt: &time.Time{},
|
|
}
|
|
|
|
update := bson.M{
|
|
"$set": vaaDoc,
|
|
"$inc": bson.D{{Key: "revision", Value: 1}},
|
|
}
|
|
|
|
_, err := r.collections.vaas.UpdateByID(ctx, id, update, nil)
|
|
return err
|
|
}
|