--- /dev/null
+package api
+
+import (
+ "context"
+ "encoding/json"
+
+ log "github.com/sirupsen/logrus"
+
+ "github.com/vapor/blockchain/txfeed"
+ "github.com/vapor/errors"
+)
+
+// POST /create-txfeed
+func (a *API) createTxFeed(ctx context.Context, in struct {
+ Alias string `json:"alias"`
+ Filter string `json:"filter"`
+}) Response {
+ if err := a.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Error("Add TxFeed Failed")
+ return NewErrorResponse(err)
+ }
+ return NewSuccessResponse(nil)
+}
+
+// POST /get-transaction-feed
+func (a *API) getTxFeed(ctx context.Context, in struct {
+ Alias string `json:"alias,omitempty"`
+}) Response {
+ var tmpTxFeed interface{}
+ rawTxfeed, err := a.GetTxFeedByAlias(ctx, in.Alias)
+ if err != nil {
+ return NewErrorResponse(err)
+ }
+ err = json.Unmarshal(rawTxfeed, &tmpTxFeed)
+ if err != nil {
+ return NewErrorResponse(err)
+ }
+ data := map[string]interface{}{"txfeed": tmpTxFeed}
+ return NewSuccessResponse(data)
+}
+
+// POST /delete-transaction-feed
+func (a *API) deleteTxFeed(ctx context.Context, in struct {
+ Alias string `json:"alias,omitempty"`
+}) Response {
+ if err := a.txFeedTracker.Delete(ctx, in.Alias); err != nil {
+ return NewErrorResponse(err)
+ }
+ return NewSuccessResponse(nil)
+}
+
+// POST /update-transaction-feed
+func (a *API) updateTxFeed(ctx context.Context, in struct {
+ Alias string `json:"alias"`
+ Filter string `json:"filter"`
+}) Response {
+ if err := a.txFeedTracker.Delete(ctx, in.Alias); err != nil {
+ return NewErrorResponse(err)
+ }
+ if err := a.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
+ log.WithFields(log.Fields{"module": logModule, "error": err}).Error("Update TxFeed Failed")
+ return NewErrorResponse(err)
+ }
+ return NewSuccessResponse(nil)
+}
+
+func (a *API) getTxFeeds() ([]txfeed.TxFeed, error) {
+ txFeed := txfeed.TxFeed{}
+ txFeeds := make([]txfeed.TxFeed, 0)
+
+ iter := a.txFeedTracker.DB.Iterator()
+ defer iter.Release()
+
+ for iter.Next() {
+ if err := json.Unmarshal(iter.Value(), &txFeed); err != nil {
+ return nil, err
+ }
+ txFeeds = append(txFeeds, txFeed)
+ }
+
+ return txFeeds, nil
+}
+
+// listTxFeeds is an http handler for listing txfeeds. It does not take a filter.
+// POST /list-transaction-feeds
+func (a *API) listTxFeeds(ctx context.Context) Response {
+ txFeeds, err := a.getTxFeeds()
+ if err != nil {
+ return NewErrorResponse(err)
+ }
+
+ return NewSuccessResponse(txFeeds)
+}
+
+func (a *API) GetTxFeedByAlias(ctx context.Context, filter string) ([]byte, error) {
+ jf, err := json.Marshal(filter)
+ if err != nil {
+ return nil, err
+ }
+
+ value := a.txFeedTracker.DB.Get(jf)
+ if value == nil {
+ return nil, errors.New("No transaction feed")
+ }
+
+ return value, nil
+}