Open bjwswang opened 1 year ago
Sample for Contract call generator
package main
import (
"github.com/bestchains/bc-explorer/pkg/network"
"github.com/bestchains/bestchains-contracts/library"
gwclient "github.com/hyperledger/fabric-gateway/pkg/client"
"github.com/pkg/errors"
)
// Code Generator
type Basic struct {
contract *gwclient.Contract
}
func NewBasic(client *network.FabricClient, contract string) (*Basic, error) {
if client == nil || contract == "" {
return nil, errors.New("invalid arguments")
}
basic := &Basic{
contract: client.Channel("").GetContract(contract),
}
return basic, nil
}
func (basic *Basic) Total() (uint64, error) {
result, err := basic.contract.EvaluateTransaction("Total")
if err != nil {
return 0, err
}
return library.BytesToUint64(result)
}
func (basic *Basic) PutValue(val string) (string, error) {
kid, err := basic.contract.SubmitTransaction("PutValue", val)
if err != nil {
return "", err
}
return string(kid), nil
}
func (basic *Basic) GetValueByIndex(index string) (string, error) {
result, err := basic.contract.EvaluateTransaction("GetValueByIndex", index)
if err != nil {
return "", err
}
return string(result), nil
}
func (basic *Basic) GetValueByKID(kid string) (string, error) {
result, err := basic.contract.EvaluateTransaction("GetValueByKID", kid)
if err != nil {
return "", err
}
return string(result), nil
}
Sample for Fiber handler
package main
import (
"github.com/gofiber/fiber/v2"
)
type KeyValue struct {
Index string `json:"index,omitempty"`
KID string `json:"kid,omitempty"`
Value string `json:"value,omitempty"`
}
type handler struct {
basic *Basic
}
func NewBasicHandler(basic *Basic) handler {
return handler{
basic: basic,
}
}
func (h *handler) Total(ctx *fiber.Ctx) error {
total, err := h.basic.Total()
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
return ctx.JSON(map[string]interface{}{
"total": total,
})
}
func (h *handler) PutValue(ctx *fiber.Ctx) error {
var err error
kv := new(KeyValue)
err = ctx.BodyParser(kv)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
kid, err := h.basic.PutValue(kv.Value)
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
return ctx.JSON(&KeyValue{
KID: kid,
})
}
func (h *handler) GetValueByIndex(ctx *fiber.Ctx) error {
index := ctx.Params("index")
value, err := h.basic.GetValueByIndex(index)
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
return ctx.JSON(&KeyValue{
Index: index,
Value: value,
})
}
func (h *handler) GetValueByKID(ctx *fiber.Ctx) error {
kid := ctx.Params("kid")
value, err := h.basic.GetValueByKID(kid)
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
return ctx.JSON(&KeyValue{
KID: kid,
Value: value,
})
}
any possible to integrate AI with this auto generator ?
Contract call code generator with this FabricClient
Restful API handlers with Fiber