Skip to content

Commit 8e046ab

Browse files
committed
Updated example to provide a todo service
1 parent 07d0c7f commit 8e046ab

File tree

6 files changed

+786
-121
lines changed

6 files changed

+786
-121
lines changed

example/client.go

Lines changed: 255 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,130 @@
1-
package basket
1+
package todo
22

33
import (
44
"bytes"
55
"context"
66
"encoding/json"
77
"errors"
88
"net/http"
9+
"net/url"
910
"regexp"
11+
"strings"
1012
)
1113

12-
type basketServiceClient struct {
14+
type todoServiceClient struct {
1315
baseURL string
1416
hooks HooksClient
1517
ctx context.Context
1618
httpClient *httpClientWrapper
1719
xmlMatcher *regexp.Regexp
1820
}
1921

20-
func (client *basketServiceClient) PostItem(request *PostItemRequest) (PostItemResponse, error) {
22+
func (client *todoServiceClient) DeleteTodos(request *DeleteTodosRequest) (DeleteTodosResponse, error) {
2123
if request == nil {
2224
return nil, newRequestObjectIsNilError
2325
}
24-
path := "/item"
26+
path := "/todos"
27+
method := "DELETE"
28+
endpoint := client.baseURL + path
29+
httpContext := newHttpContextWrapper(client.ctx)
30+
httpRequest, reqErr := http.NewRequest(method, endpoint, nil)
31+
if reqErr != nil {
32+
return nil, reqErr
33+
}
34+
// set all headers from client context
35+
err := setRequestHeadersFromContext(httpContext, httpRequest.Header)
36+
if err != nil {
37+
return nil, err
38+
}
39+
if len(httpRequest.Header["accept"]) == 0 && len(httpRequest.Header["Accept"]) == 0 {
40+
httpRequest.Header["Accept"] = []string{"application/json"}
41+
}
42+
httpResponse, err := client.httpClient.Do(httpRequest)
43+
if err != nil {
44+
return nil, err
45+
}
46+
if httpResponse.StatusCode == 204 {
47+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
48+
if contentTypeOfResponse == "" {
49+
httpResponse.Body.Close()
50+
response := new(DeleteTodos204Response)
51+
return response, nil
52+
}
53+
httpResponse.Body.Close()
54+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
55+
}
56+
57+
if client.hooks.OnUnknownResponseCode != nil {
58+
message := client.hooks.OnUnknownResponseCode(httpResponse, httpRequest)
59+
httpResponse.Body.Close()
60+
return nil, errors.New(message)
61+
}
62+
httpResponse.Body.Close()
63+
return nil, newUnknownResponseError(httpResponse.StatusCode)
64+
}
65+
66+
func (client *todoServiceClient) ListTodos(request *ListTodosRequest) (ListTodosResponse, error) {
67+
if request == nil {
68+
return nil, newRequestObjectIsNilError
69+
}
70+
path := "/todos"
71+
method := "GET"
72+
endpoint := client.baseURL + path
73+
httpContext := newHttpContextWrapper(client.ctx)
74+
httpRequest, reqErr := http.NewRequest(method, endpoint, nil)
75+
if reqErr != nil {
76+
return nil, reqErr
77+
}
78+
// set all headers from client context
79+
err := setRequestHeadersFromContext(httpContext, httpRequest.Header)
80+
if err != nil {
81+
return nil, err
82+
}
83+
if len(httpRequest.Header["accept"]) == 0 && len(httpRequest.Header["Accept"]) == 0 {
84+
httpRequest.Header["Accept"] = []string{"application/json"}
85+
}
86+
httpResponse, err := client.httpClient.Do(httpRequest)
87+
if err != nil {
88+
return nil, err
89+
}
90+
if httpResponse.StatusCode == 200 {
91+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
92+
if contentTypeOfResponse == contentTypeApplicationJson || contentTypeOfResponse == contentTypeApplicationHalJson {
93+
response := new(ListTodos200Response)
94+
decodeErr := json.NewDecoder(httpResponse.Body).Decode(&response.Body)
95+
httpResponse.Body.Close()
96+
if decodeErr != nil {
97+
return nil, decodeErr
98+
}
99+
return response, nil
100+
} else if contentTypeOfResponse == "" {
101+
httpResponse.Body.Close()
102+
response := new(ListTodos200Response)
103+
return response, nil
104+
}
105+
httpResponse.Body.Close()
106+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
107+
}
108+
109+
if client.hooks.OnUnknownResponseCode != nil {
110+
message := client.hooks.OnUnknownResponseCode(httpResponse, httpRequest)
111+
httpResponse.Body.Close()
112+
return nil, errors.New(message)
113+
}
114+
httpResponse.Body.Close()
115+
return nil, newUnknownResponseError(httpResponse.StatusCode)
116+
}
117+
118+
func (client *todoServiceClient) PostTodo(request *PostTodoRequest) (PostTodoResponse, error) {
119+
if request == nil {
120+
return nil, newRequestObjectIsNilError
121+
}
122+
path := "/todos"
25123
method := "POST"
26124
endpoint := client.baseURL + path
27125
httpContext := newHttpContextWrapper(client.ctx)
28126
jsonData := new(bytes.Buffer)
29-
encodeErr := json.NewEncoder(jsonData).Encode(&request.Item)
127+
encodeErr := json.NewEncoder(jsonData).Encode(&request.TodoPost)
30128
if encodeErr != nil {
31129
return nil, encodeErr
32130
}
@@ -47,22 +145,75 @@ func (client *basketServiceClient) PostItem(request *PostItemRequest) (PostItemR
47145
if err != nil {
48146
return nil, err
49147
}
50-
if httpResponse.StatusCode == 200 {
148+
if httpResponse.StatusCode == 201 {
149+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
150+
if contentTypeOfResponse == contentTypeApplicationJson || contentTypeOfResponse == contentTypeApplicationHalJson {
151+
response := new(PostTodo201Response)
152+
decodeErr := json.NewDecoder(httpResponse.Body).Decode(&response.Body)
153+
httpResponse.Body.Close()
154+
if decodeErr != nil {
155+
return nil, decodeErr
156+
}
157+
return response, nil
158+
} else if contentTypeOfResponse == "" {
159+
httpResponse.Body.Close()
160+
response := new(PostTodo201Response)
161+
return response, nil
162+
}
163+
httpResponse.Body.Close()
164+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
165+
}
166+
167+
if client.hooks.OnUnknownResponseCode != nil {
168+
message := client.hooks.OnUnknownResponseCode(httpResponse, httpRequest)
169+
httpResponse.Body.Close()
170+
return nil, errors.New(message)
171+
}
172+
httpResponse.Body.Close()
173+
return nil, newUnknownResponseError(httpResponse.StatusCode)
174+
}
175+
176+
func (client *todoServiceClient) DeleteTodo(request *DeleteTodoRequest) (DeleteTodoResponse, error) {
177+
if request == nil {
178+
return nil, newRequestObjectIsNilError
179+
}
180+
path := "/todos/{todoId}"
181+
method := "DELETE"
182+
endpoint := client.baseURL + path
183+
httpContext := newHttpContextWrapper(client.ctx)
184+
endpoint = strings.Replace(endpoint, "{todoId}", url.QueryEscape(toString(request.TodoId)), 1)
185+
httpRequest, reqErr := http.NewRequest(method, endpoint, nil)
186+
if reqErr != nil {
187+
return nil, reqErr
188+
}
189+
// set all headers from client context
190+
err := setRequestHeadersFromContext(httpContext, httpRequest.Header)
191+
if err != nil {
192+
return nil, err
193+
}
194+
if len(httpRequest.Header["accept"]) == 0 && len(httpRequest.Header["Accept"]) == 0 {
195+
httpRequest.Header["Accept"] = []string{"application/json"}
196+
}
197+
httpResponse, err := client.httpClient.Do(httpRequest)
198+
if err != nil {
199+
return nil, err
200+
}
201+
if httpResponse.StatusCode == 204 {
51202
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
52203
if contentTypeOfResponse == "" {
53204
httpResponse.Body.Close()
54-
response := new(PostItem200Response)
205+
response := new(DeleteTodo204Response)
55206
return response, nil
56207
}
57208
httpResponse.Body.Close()
58209
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
59210
}
60211

61-
if httpResponse.StatusCode == 500 {
212+
if httpResponse.StatusCode == 404 {
62213
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
63214
if contentTypeOfResponse == "" {
64215
httpResponse.Body.Close()
65-
response := new(PostItem500Response)
216+
response := new(DeleteTodo404Response)
66217
return response, nil
67218
}
68219
httpResponse.Body.Close()
@@ -78,14 +229,15 @@ func (client *basketServiceClient) PostItem(request *PostItemRequest) (PostItemR
78229
return nil, newUnknownResponseError(httpResponse.StatusCode)
79230
}
80231

81-
func (client *basketServiceClient) GetItems(request *GetItemsRequest) (GetItemsResponse, error) {
232+
func (client *todoServiceClient) GetTodo(request *GetTodoRequest) (GetTodoResponse, error) {
82233
if request == nil {
83234
return nil, newRequestObjectIsNilError
84235
}
85-
path := "/items"
236+
path := "/todos/{todoId}"
86237
method := "GET"
87238
endpoint := client.baseURL + path
88239
httpContext := newHttpContextWrapper(client.ctx)
240+
endpoint = strings.Replace(endpoint, "{todoId}", url.QueryEscape(toString(request.TodoId)), 1)
89241
httpRequest, reqErr := http.NewRequest(method, endpoint, nil)
90242
if reqErr != nil {
91243
return nil, reqErr
@@ -105,7 +257,77 @@ func (client *basketServiceClient) GetItems(request *GetItemsRequest) (GetItemsR
105257
if httpResponse.StatusCode == 200 {
106258
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
107259
if contentTypeOfResponse == contentTypeApplicationJson || contentTypeOfResponse == contentTypeApplicationHalJson {
108-
response := new(GetItems200Response)
260+
response := new(GetTodo200Response)
261+
decodeErr := json.NewDecoder(httpResponse.Body).Decode(&response.Body)
262+
httpResponse.Body.Close()
263+
if decodeErr != nil {
264+
return nil, decodeErr
265+
}
266+
return response, nil
267+
} else if contentTypeOfResponse == "" {
268+
httpResponse.Body.Close()
269+
response := new(GetTodo200Response)
270+
return response, nil
271+
}
272+
httpResponse.Body.Close()
273+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
274+
}
275+
276+
if httpResponse.StatusCode == 404 {
277+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
278+
if contentTypeOfResponse == "" {
279+
httpResponse.Body.Close()
280+
response := new(GetTodo404Response)
281+
return response, nil
282+
}
283+
httpResponse.Body.Close()
284+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
285+
}
286+
287+
if client.hooks.OnUnknownResponseCode != nil {
288+
message := client.hooks.OnUnknownResponseCode(httpResponse, httpRequest)
289+
httpResponse.Body.Close()
290+
return nil, errors.New(message)
291+
}
292+
httpResponse.Body.Close()
293+
return nil, newUnknownResponseError(httpResponse.StatusCode)
294+
}
295+
296+
func (client *todoServiceClient) PatchTodo(request *PatchTodoRequest) (PatchTodoResponse, error) {
297+
if request == nil {
298+
return nil, newRequestObjectIsNilError
299+
}
300+
path := "/todos/{todoId}"
301+
method := "PATCH"
302+
endpoint := client.baseURL + path
303+
httpContext := newHttpContextWrapper(client.ctx)
304+
endpoint = strings.Replace(endpoint, "{todoId}", url.QueryEscape(toString(request.TodoId)), 1)
305+
jsonData := new(bytes.Buffer)
306+
encodeErr := json.NewEncoder(jsonData).Encode(&request.TodoPatch)
307+
if encodeErr != nil {
308+
return nil, encodeErr
309+
}
310+
httpRequest, reqErr := http.NewRequest(method, endpoint, jsonData)
311+
if reqErr != nil {
312+
return nil, reqErr
313+
}
314+
httpRequest.Header[contentTypeHeader] = []string{contentTypeApplicationJson}
315+
// set all headers from client context
316+
err := setRequestHeadersFromContext(httpContext, httpRequest.Header)
317+
if err != nil {
318+
return nil, err
319+
}
320+
if len(httpRequest.Header["accept"]) == 0 && len(httpRequest.Header["Accept"]) == 0 {
321+
httpRequest.Header["Accept"] = []string{"application/json"}
322+
}
323+
httpResponse, err := client.httpClient.Do(httpRequest)
324+
if err != nil {
325+
return nil, err
326+
}
327+
if httpResponse.StatusCode == 200 {
328+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
329+
if contentTypeOfResponse == contentTypeApplicationJson || contentTypeOfResponse == contentTypeApplicationHalJson {
330+
response := new(PatchTodo200Response)
109331
decodeErr := json.NewDecoder(httpResponse.Body).Decode(&response.Body)
110332
httpResponse.Body.Close()
111333
if decodeErr != nil {
@@ -114,7 +336,18 @@ func (client *basketServiceClient) GetItems(request *GetItemsRequest) (GetItemsR
114336
return response, nil
115337
} else if contentTypeOfResponse == "" {
116338
httpResponse.Body.Close()
117-
response := new(GetItems200Response)
339+
response := new(PatchTodo200Response)
340+
return response, nil
341+
}
342+
httpResponse.Body.Close()
343+
return nil, newNotSupportedContentType(415, contentTypeOfResponse)
344+
}
345+
346+
if httpResponse.StatusCode == 404 {
347+
contentTypeOfResponse := extractContentType(httpResponse.Header.Get(contentTypeHeader))
348+
if contentTypeOfResponse == "" {
349+
httpResponse.Body.Close()
350+
response := new(PatchTodo404Response)
118351
return response, nil
119352
}
120353
httpResponse.Body.Close()
@@ -130,11 +363,15 @@ func (client *basketServiceClient) GetItems(request *GetItemsRequest) (GetItemsR
130363
return nil, newUnknownResponseError(httpResponse.StatusCode)
131364
}
132365

133-
type BasketServiceClient interface {
134-
PostItem(request *PostItemRequest) (PostItemResponse, error)
135-
GetItems(request *GetItemsRequest) (GetItemsResponse, error)
366+
type TodoServiceClient interface {
367+
DeleteTodos(request *DeleteTodosRequest) (DeleteTodosResponse, error)
368+
ListTodos(request *ListTodosRequest) (ListTodosResponse, error)
369+
PostTodo(request *PostTodoRequest) (PostTodoResponse, error)
370+
DeleteTodo(request *DeleteTodoRequest) (DeleteTodoResponse, error)
371+
GetTodo(request *GetTodoRequest) (GetTodoResponse, error)
372+
PatchTodo(request *PatchTodoRequest) (PatchTodoResponse, error)
136373
}
137374

138-
func NewBasketServiceClient(httpClient *http.Client, baseUrl string, options Opts) BasketServiceClient {
139-
return &basketServiceClient{httpClient: newHttpClientWrapper(httpClient, baseUrl), baseURL: baseUrl, hooks: options.Hooks, ctx: options.Ctx, xmlMatcher: regexp.MustCompile("^application\\/(.+)xml$")}
375+
func NewTodoServiceClient(httpClient *http.Client, baseUrl string, options Opts) TodoServiceClient {
376+
return &todoServiceClient{httpClient: newHttpClientWrapper(httpClient, baseUrl), baseURL: baseUrl, hooks: options.Hooks, ctx: options.Ctx, xmlMatcher: regexp.MustCompile("^application\\/(.+)xml$")}
140377
}

0 commit comments

Comments
 (0)