46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package vaa
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/wormhole-foundation/wormhole-explorer/parser/processor"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Controller definition.
|
|
type Controller struct {
|
|
logger *zap.Logger
|
|
repository *Repository
|
|
processor processor.ProcessorFunc
|
|
}
|
|
|
|
// NewController creates a Controller instance.
|
|
func NewController(repository *Repository, processor processor.ProcessorFunc, logger *zap.Logger) *Controller {
|
|
return &Controller{repository: repository, processor: processor, logger: logger}
|
|
}
|
|
|
|
func (c *Controller) Parse(ctx *fiber.Ctx) error {
|
|
payload := struct {
|
|
ID string `json:"id"`
|
|
}{}
|
|
|
|
if err := ctx.BodyParser(&payload); err != nil {
|
|
return err
|
|
}
|
|
|
|
c.logger.Info("Parsing VAA from endpoint", zap.String("id", payload.ID))
|
|
|
|
vaa, err := c.repository.FindById(ctx.Context(), payload.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
vaaParsed, err := c.processor(ctx.Context(), vaa.Vaa)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return ctx.JSON(struct {
|
|
Result any `json:"result"`
|
|
}{Result: vaaParsed})
|
|
}
|