data_feed.go raw

   1  package rest
   2  
   3  import (
   4  	"fmt"
   5  	"net/http"
   6  
   7  	"gopkg.in/ns1/ns1-go.v2/rest/model/data"
   8  )
   9  
  10  // DataFeedsService handles 'data/feeds' endpoint.
  11  type DataFeedsService service
  12  
  13  // List returns all data feeds connected to a given data source.
  14  //
  15  // NS1 API docs: https://ns1.com/api/#feeds-get
  16  func (s *DataFeedsService) List(sourceID string) ([]*data.Feed, *http.Response, error) {
  17  	path := fmt.Sprintf("data/feeds/%s", sourceID)
  18  
  19  	req, err := s.client.NewRequest("GET", path, nil)
  20  	if err != nil {
  21  		return nil, nil, err
  22  	}
  23  
  24  	dfl := []*data.Feed{}
  25  	resp, err := s.client.Do(req, &dfl)
  26  	if err != nil {
  27  		return nil, resp, err
  28  	}
  29  
  30  	return dfl, resp, nil
  31  }
  32  
  33  // Get takes a data source ID and a data feed ID and returns the details of a single data feed
  34  //
  35  // NS1 API docs: https://ns1.com/api/#feeds-feed-get
  36  func (s *DataFeedsService) Get(sourceID string, feedID string) (*data.Feed, *http.Response, error) {
  37  	path := fmt.Sprintf("data/feeds/%s/%s", sourceID, feedID)
  38  
  39  	req, err := s.client.NewRequest("GET", path, nil)
  40  	if err != nil {
  41  		return nil, nil, err
  42  	}
  43  
  44  	var df data.Feed
  45  	resp, err := s.client.Do(req, &df)
  46  	if err != nil {
  47  		return nil, resp, err
  48  	}
  49  
  50  	return &df, resp, nil
  51  }
  52  
  53  // Create takes a *DataFeed and connects a new data feed to an existing data source.
  54  //
  55  // NS1 API docs: https://ns1.com/api/#feeds-put
  56  func (s *DataFeedsService) Create(sourceID string, df *data.Feed) (*http.Response, error) {
  57  	path := fmt.Sprintf("data/feeds/%s", sourceID)
  58  
  59  	req, err := s.client.NewRequest("PUT", path, &df)
  60  	if err != nil {
  61  		return nil, err
  62  	}
  63  
  64  	// Update datafeeds' fields with data from api(ensure consistent)
  65  	resp, err := s.client.Do(req, &df)
  66  	if err != nil {
  67  		return resp, err
  68  	}
  69  
  70  	return resp, nil
  71  }
  72  
  73  // Update takes a *Feed and modifies and existing data feed.
  74  // Note:
  75  //   - The 'data' portion of a feed does not actually
  76  //     get updated during a POST. In order to update a feeds'
  77  //     'data' attribute, one must use the Publish method.
  78  //   - Both the 'destinations' and 'networks' attributes are
  79  //     not updated during a POST.
  80  //
  81  // NS1 API docs: https://ns1.com/api/#feeds-post
  82  func (s *DataFeedsService) Update(sourceID string, df *data.Feed) (*http.Response, error) {
  83  	path := fmt.Sprintf("data/feeds/%s/%s", sourceID, df.ID)
  84  
  85  	req, err := s.client.NewRequest("POST", path, &df)
  86  	if err != nil {
  87  		return nil, err
  88  	}
  89  
  90  	// Update df instance fields with data from api(ensure consistent)
  91  	resp, err := s.client.Do(req, &df)
  92  	if err != nil {
  93  		return resp, err
  94  	}
  95  
  96  	return resp, nil
  97  }
  98  
  99  // Delete takes a data source ID and a data feed ID and disconnects the feed from the data source and all attached destination metadata tables.
 100  //
 101  // NS1 API docs: https://ns1.com/api/#feeds-delete
 102  func (s *DataFeedsService) Delete(sourceID string, feedID string) (*http.Response, error) {
 103  	path := fmt.Sprintf("data/feeds/%s/%s", sourceID, feedID)
 104  
 105  	req, err := s.client.NewRequest("DELETE", path, nil)
 106  	if err != nil {
 107  		return nil, err
 108  	}
 109  
 110  	resp, err := s.client.Do(req, nil)
 111  	if err != nil {
 112  		return resp, err
 113  	}
 114  
 115  	return resp, nil
 116  }
 117