wormhole-explorer/api/routes/wormscan/protocols/controller.go

46 lines
1.2 KiB
Go

package protocols
import (
"context"
"github.com/gofiber/fiber/v2"
"github.com/wormhole-foundation/wormhole-explorer/api/handlers/protocols"
"go.uber.org/zap"
)
type Controller struct {
srv service
logger *zap.Logger
}
type service interface {
GetProtocolsTotalValues(ctx context.Context) []protocols.ProtocolTotalValuesDTO
}
func NewController(logger *zap.Logger, service service) *Controller {
return &Controller{
logger: logger.With(zap.String("module", "ContributorsController")),
srv: service,
}
}
// GetProtocolsTotalValues godoc
// @Description Returns the representative stats for the top protocols
// @Tags wormholescan
// @ID get-top-protocols-stats
// @Success 200 {object} []protocols.ProtocolTotalValuesDTO
// @Failure 500 {object} []protocols.ProtocolTotalValuesDTO
// @Router /api/v1/protocols/stats [get]
func (c *Controller) GetProtocolsTotalValues(ctx *fiber.Ctx) error {
values := c.srv.GetProtocolsTotalValues(ctx.Context())
allFailed := true
for i := range values {
allFailed = allFailed && len(values[i].Error) > 0
}
err := ctx.JSON(values)
if allFailed && len(values) > 0 {
return ctx.SendStatus(fiber.StatusInternalServerError)
}
return err
}