@@ -22,7 +22,14 @@ package sdk
22
22
import (
23
23
"context"
24
24
"encoding/json"
25
+ "errors"
25
26
"fmt"
27
+ "net/http"
28
+ )
29
+
30
+ var (
31
+ ErrNotFound = errors .New ("not found" )
32
+ ErrAlreadyExists = errors .New ("already exists" )
26
33
)
27
34
28
35
// GetAllDatasources gets all datasources.
@@ -56,10 +63,14 @@ func (r *Client) GetDatasource(ctx context.Context, id uint) (Datasource, error)
56
63
if raw , code , err = r .get (ctx , fmt .Sprintf ("api/datasources/%d" , id ), nil ); err != nil {
57
64
return ds , err
58
65
}
59
- if code != 200 {
60
- return ds , fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
66
+ switch code {
67
+ case http .StatusOK :
68
+ err = json .Unmarshal (raw , & ds )
69
+ case http .StatusNotFound :
70
+ err = fmt .Errorf ("data source with id %q %w" , id , ErrNotFound )
71
+ default :
72
+ err = fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
61
73
}
62
- err = json .Unmarshal (raw , & ds )
63
74
return ds , err
64
75
}
65
76
@@ -89,17 +100,23 @@ func (r *Client) CreateDatasource(ctx context.Context, ds Datasource) (StatusMes
89
100
raw []byte
90
101
resp StatusMessage
91
102
err error
103
+ code int
92
104
)
93
105
if raw , err = json .Marshal (ds ); err != nil {
94
106
return StatusMessage {}, err
95
107
}
96
- if raw , _ , err = r .post (ctx , "api/datasources" , nil , raw ); err != nil {
108
+ if raw , code , err = r .post (ctx , "api/datasources" , nil , raw ); err != nil {
97
109
return StatusMessage {}, err
98
110
}
99
- if err = json .Unmarshal (raw , & resp ); err != nil {
100
- return StatusMessage {}, err
111
+ switch code {
112
+ case http .StatusOK :
113
+ err = json .Unmarshal (raw , & resp )
114
+ case http .StatusConflict :
115
+ err = fmt .Errorf ("data source with name %q %w" , ds .Name , ErrAlreadyExists )
116
+ default :
117
+ err = fmt .Errorf ("HTTP status code %d: returns %s" , code , raw )
101
118
}
102
- return resp , nil
119
+ return resp , err
103
120
}
104
121
105
122
// UpdateDatasource updates a datasource from data passed in argument.
@@ -109,17 +126,23 @@ func (r *Client) UpdateDatasource(ctx context.Context, ds Datasource) (StatusMes
109
126
raw []byte
110
127
resp StatusMessage
111
128
err error
129
+ code int
112
130
)
113
131
if raw , err = json .Marshal (ds ); err != nil {
114
- return StatusMessage {} , err
132
+ return resp , err
115
133
}
116
- if raw , _ , err = r .put (ctx , fmt .Sprintf ("api/datasources/%d" , ds .ID ), nil , raw ); err != nil {
117
- return StatusMessage {} , err
134
+ if raw , code , err = r .put (ctx , fmt .Sprintf ("api/datasources/%d" , ds .ID ), nil , raw ); err != nil {
135
+ return resp , err
118
136
}
119
- if err = json .Unmarshal (raw , & resp ); err != nil {
120
- return StatusMessage {}, err
137
+ switch code {
138
+ case http .StatusOK :
139
+ err = json .Unmarshal (raw , & resp )
140
+ case http .StatusNotFound :
141
+ err = fmt .Errorf ("data source with name %q %w" , ds .Name , ErrNotFound )
142
+ default :
143
+ err = fmt .Errorf ("HTTP status code %d: returns %s" , code , raw )
121
144
}
122
- return resp , nil
145
+ return resp , err
123
146
}
124
147
125
148
// DeleteDatasource deletes an existing datasource by ID.
0 commit comments