OSDN Git Service

update master (#487)
[bytom/bytom-spv.git] / api / txfeeds.go
1 package api
2
3 import (
4         "context"
5         "encoding/json"
6
7         log "github.com/sirupsen/logrus"
8
9         "github.com/bytom/blockchain/txfeed"
10 )
11
12 // POST /create-txfeed
13 func (a *API) createTxFeed(ctx context.Context, in struct {
14         Alias  string `json:"alias"`
15         Filter string `json:"filter"`
16 }) Response {
17         if err := a.bcr.TxFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
18                 log.WithField("error", err).Error("Add TxFeed Failed")
19                 return NewErrorResponse(err)
20         }
21         return NewSuccessResponse(nil)
22 }
23
24 // POST /get-transaction-feed
25 func (a *API) getTxFeed(ctx context.Context, in struct {
26         Alias string `json:"alias,omitempty"`
27 }) Response {
28         var tmpTxFeed interface{}
29         rawTxfeed, err := a.bcr.GetTxFeedByAlias(ctx, in.Alias)
30         if err != nil {
31                 return NewErrorResponse(err)
32         }
33         err = json.Unmarshal(rawTxfeed, &tmpTxFeed)
34         if err != nil {
35                 return NewErrorResponse(err)
36         }
37         data := map[string]interface{}{"txfeed": tmpTxFeed}
38         return NewSuccessResponse(data)
39 }
40
41 // POST /delete-transaction-feed
42 func (a *API) deleteTxFeed(ctx context.Context, in struct {
43         Alias string `json:"alias,omitempty"`
44 }) Response {
45         if err := a.bcr.TxFeedTracker.Delete(ctx, in.Alias); err != nil {
46                 return NewErrorResponse(err)
47         }
48         return NewSuccessResponse(nil)
49 }
50
51 // POST /update-transaction-feed
52 func (a *API) updateTxFeed(ctx context.Context, in struct {
53         Alias  string `json:"alias"`
54         Filter string `json:"filter"`
55 }) Response {
56         if err := a.bcr.TxFeedTracker.Delete(ctx, in.Alias); err != nil {
57                 return NewErrorResponse(err)
58         }
59         if err := a.bcr.TxFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil {
60                 log.WithField("error", err).Error("Update TxFeed Failed")
61                 return NewErrorResponse(err)
62         }
63         return NewSuccessResponse(nil)
64 }
65
66 func (a *API) getTxFeeds() ([]txfeed.TxFeed, error) {
67         txFeed := txfeed.TxFeed{}
68         txFeeds := make([]txfeed.TxFeed, 0)
69
70         iter := a.bcr.TxFeedTracker.DB.Iterator()
71         defer iter.Release()
72
73         for iter.Next() {
74                 if err := json.Unmarshal(iter.Value(), &txFeed); err != nil {
75                         return nil, err
76                 }
77                 txFeeds = append(txFeeds, txFeed)
78         }
79
80         return txFeeds, nil
81 }
82
83 // listTxFeeds is an http handler for listing txfeeds. It does not take a filter.
84 // POST /list-transaction-feeds
85 func (a *API) listTxFeeds(ctx context.Context) Response {
86         txFeeds, err := a.getTxFeeds()
87         if err != nil {
88                 return NewErrorResponse(err)
89         }
90
91         return NewSuccessResponse(txFeeds)
92 }