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