Skip to content

Commit 348d5ef

Browse files
committed
feat: add api for wip/commit
1 parent 8e8b6e0 commit 348d5ef

File tree

21 files changed

+2739
-127
lines changed

21 files changed

+2739
-127
lines changed

api/api_impl/impl.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ type APIController struct {
1414
controller.VersionController
1515
controller.ObjectController
1616
controller.UserController
17+
controller.WipController
18+
controller.CommitController
1719
}

api/custom_response.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,53 @@ type JiaozifsResponse struct {
99
http.ResponseWriter
1010
}
1111

12-
func (response *JiaozifsResponse) JSON(v interface{}) {
12+
// JSON convert object to json format and write to response,
13+
// if not specific code, default code is 200. given code will
14+
// overwrite default code, if more than one code, the first one will be used.
15+
func (response *JiaozifsResponse) JSON(v any, code ...int) {
16+
if len(code) == 0 {
17+
response.WriteHeader(http.StatusOK)
18+
} else {
19+
response.WriteHeader(code[0])
20+
}
1321
response.Header().Set("Content-Type", "application/json")
14-
response.WriteHeader(http.StatusOK)
15-
err := json.NewEncoder(response).Encode(v)
22+
err := json.NewEncoder(response.ResponseWriter).Encode(v)
1623
if err != nil {
1724
response.Error(err)
1825
return
1926
}
2027
}
2128

29+
// OK response with 200
2230
func (response *JiaozifsResponse) OK() {
2331
response.WriteHeader(http.StatusOK)
2432
}
2533

34+
// NotFound response with 404
35+
func (response *JiaozifsResponse) NotFound() {
36+
response.WriteHeader(http.StatusNotFound)
37+
}
38+
39+
// Error response with 500 and error message
2640
func (response *JiaozifsResponse) Error(err error) {
2741
response.WriteHeader(http.StatusInternalServerError)
2842
_, _ = response.Write([]byte(err.Error()))
2943
}
3044

31-
func (response *JiaozifsResponse) String(msg string) {
45+
// String response and string
46+
// if not specific code, default code is 200. given code will
47+
// overwrite default code, if more than one code, the first one will be used.
48+
func (response *JiaozifsResponse) String(msg string, code ...int) {
49+
if len(code) == 0 {
50+
response.WriteHeader(http.StatusOK)
51+
} else {
52+
response.WriteHeader(code[0])
53+
}
3254
response.Header().Set("Content-Type", "text/plain;charset=UTF-8")
33-
response.WriteHeader(http.StatusOK)
3455
_, _ = response.Write([]byte(msg))
3556
}
3657

37-
func (response *JiaozifsResponse) CodeMsg(code int, msg string) {
38-
response.WriteHeader(code)
39-
_, _ = response.Write([]byte(msg))
40-
}
58+
// Code response with uncommon code
4159
func (response *JiaozifsResponse) Code(code int) {
4260
response.WriteHeader(code)
4361
}

api/custom_response_test.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package api
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
"testing"
7+
8+
"go.uber.org/mock/gomock"
9+
)
10+
11+
func TestJiaozifsResponse(t *testing.T) {
12+
t.Run("not found", func(t *testing.T) {
13+
ctrl := gomock.NewController(t)
14+
resp := NewMockResponseWriter(ctrl)
15+
jzResp := JiaozifsResponse{resp}
16+
17+
resp.EXPECT().WriteHeader(http.StatusNotFound)
18+
jzResp.NotFound()
19+
})
20+
21+
t.Run("ok", func(t *testing.T) {
22+
ctrl := gomock.NewController(t)
23+
resp := NewMockResponseWriter(ctrl)
24+
jzResp := JiaozifsResponse{resp}
25+
26+
resp.EXPECT().WriteHeader(http.StatusOK)
27+
jzResp.OK()
28+
})
29+
t.Run("code", func(t *testing.T) {
30+
ctrl := gomock.NewController(t)
31+
resp := NewMockResponseWriter(ctrl)
32+
jzResp := JiaozifsResponse{resp}
33+
34+
resp.EXPECT().WriteHeader(http.StatusCreated)
35+
jzResp.Code(http.StatusCreated)
36+
})
37+
t.Run("error", func(t *testing.T) {
38+
ctrl := gomock.NewController(t)
39+
resp := NewMockResponseWriter(ctrl)
40+
jzResp := JiaozifsResponse{resp}
41+
42+
resp.EXPECT().WriteHeader(http.StatusInternalServerError)
43+
resp.EXPECT().Write([]byte("mock"))
44+
jzResp.Error(fmt.Errorf("mock"))
45+
})
46+
47+
t.Run("string", func(t *testing.T) {
48+
ctrl := gomock.NewController(t)
49+
resp := NewMockResponseWriter(ctrl)
50+
jzResp := JiaozifsResponse{resp}
51+
52+
resp.EXPECT().WriteHeader(http.StatusOK)
53+
resp.EXPECT().Header().DoAndReturn(func() http.Header {
54+
return make(http.Header)
55+
})
56+
resp.EXPECT().Write([]byte("test"))
57+
jzResp.String("test")
58+
})
59+
60+
t.Run("string with code", func(t *testing.T) {
61+
ctrl := gomock.NewController(t)
62+
resp := NewMockResponseWriter(ctrl)
63+
jzResp := JiaozifsResponse{resp}
64+
65+
resp.EXPECT().WriteHeader(http.StatusCreated)
66+
resp.EXPECT().Header().DoAndReturn(func() http.Header {
67+
return make(http.Header)
68+
})
69+
resp.EXPECT().Write([]byte("test"))
70+
jzResp.String("test", http.StatusCreated)
71+
})
72+
73+
t.Run("json", func(t *testing.T) {
74+
ctrl := gomock.NewController(t)
75+
resp := NewMockResponseWriter(ctrl)
76+
jzResp := JiaozifsResponse{resp}
77+
78+
resp.EXPECT().WriteHeader(http.StatusOK)
79+
resp.EXPECT().Header().DoAndReturn(func() http.Header {
80+
return make(http.Header)
81+
})
82+
83+
resp.EXPECT().Write([]byte("{\"Name\":\"aa\"}\n"))
84+
jzResp.JSON(struct {
85+
Name string
86+
}{Name: "aa"})
87+
})
88+
t.Run("json with code", func(t *testing.T) {
89+
ctrl := gomock.NewController(t)
90+
resp := NewMockResponseWriter(ctrl)
91+
jzResp := JiaozifsResponse{resp}
92+
93+
resp.EXPECT().WriteHeader(http.StatusCreated)
94+
resp.EXPECT().Header().DoAndReturn(func() http.Header {
95+
return make(http.Header)
96+
})
97+
98+
resp.EXPECT().Write([]byte("{\"Name\":\"aa\"}\n"))
99+
jzResp.JSON(struct {
100+
Name string
101+
}{Name: "aa"}, http.StatusCreated)
102+
})
103+
104+
}

api/docs.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
package api
33

44
//go:generate go run github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen -package api -templates ./tmpls -generate "types,client,chi-server,spec" -o jiaozifs.gen.go ./swagger.yml
5+
//go:generate go run go.uber.org/mock/mockgen@latest --package=api --destination=resp.gen.go net/http ResponseWriter

0 commit comments

Comments
 (0)