Skip to content

Commit ec72f12

Browse files
committed
router をリファクタリング
1 parent f6feff0 commit ec72f12

File tree

4 files changed

+49
-38
lines changed

4 files changed

+49
-38
lines changed

router/common.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package router
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/labstack/echo/v4"
7+
)
8+
9+
func invalidRequest(c echo.Context, err error) error {
10+
c.Logger().Infof("invalid request on %s: %w", c.Path(), err.Error())
11+
return c.String(http.StatusBadRequest, "リクエストデータの処理に失敗しました")
12+
}
13+
14+
func internalServerError(c echo.Context, err error) error {
15+
c.Logger().Infof("internal server error on %s: %w", c.Path(), err.Error())
16+
return c.String(http.StatusInternalServerError, "予期せぬエラーが発生しました")
17+
}

router/items.go

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,43 +10,41 @@ import (
1010

1111
// GetItems GET /items
1212
func GetItems(c echo.Context) error {
13-
getItemsBody, err := getItemsParams(c)
13+
getItemsBody, err := parseGetItemsParams(c)
1414
if err != nil {
15-
c.Logger().Info(err.Error())
16-
return c.JSON(http.StatusBadRequest, "リクエストデータの処理に失敗しました")
15+
return invalidRequest(c, err)
1716
}
1817

1918
res, err := model.GetItems(getItemsBody)
2019
if err != nil {
21-
c.Logger().Info(err.Error())
22-
return c.JSON(http.StatusInternalServerError, "DBの操作に失敗しました")
20+
return internalServerError(c, err)
2321
}
2422

2523
return c.JSON(http.StatusOK, res)
2624
}
2725

28-
func getItemsParams(c echo.Context) (model.GetItemsBody, error) {
29-
params := c.QueryParams()
26+
func parseGetItemsParams(c echo.Context) (model.GetItemsBody, error) {
27+
query := c.QueryParams()
3028

3129
getItemsBody := model.GetItemsBody{
32-
UserID: params.Get("userId"),
33-
Search: params.Get("search"),
34-
Rental: params.Get("rental"),
35-
Tags: params["tag"],
36-
TagsExclude: params["tag-exclude"],
37-
SortBy: params.Get("sortby"),
30+
UserID: query.Get("userId"),
31+
Search: query.Get("search"),
32+
Rental: query.Get("rental"),
33+
Tags: query["tag"],
34+
TagsExclude: query["tag-exclude"],
35+
SortBy: query.Get("sortby"),
3836
}
3937

40-
if params.Get("limit") != "" {
41-
limit, err := strconv.Atoi(params.Get("limit"))
38+
if query.Get("limit") != "" {
39+
limit, err := strconv.Atoi(query.Get("limit"))
4240
if err != nil {
4341
return model.GetItemsBody{}, err
4442
}
4543
getItemsBody.Limit = limit
4644
}
4745

48-
if params.Get("offset") != "" {
49-
offset, err := strconv.Atoi(params.Get("offset"))
46+
if query.Get("offset") != "" {
47+
offset, err := strconv.Atoi(query.Get("offset"))
5048
if err != nil {
5149
return model.GetItemsBody{}, err
5250
}
@@ -60,18 +58,16 @@ func getItemsParams(c echo.Context) (model.GetItemsBody, error) {
6058

6159
// PostItems POST /items
6260
func PostItems(c echo.Context) error {
63-
me := c.Get("user").(string)
61+
me := getAuthorizedUser(c)
6462
items := []model.RequestPostItemsBody{}
6563
err := c.Bind(&items)
6664
if err != nil {
67-
c.Logger().Info(err.Error())
68-
return c.JSON(http.StatusBadRequest, "リクエストデータの処理に失敗しました")
65+
return invalidRequest(c, err)
6966
}
7067

7168
res, err := model.CreateItems(items, me)
7269
if err != nil {
73-
c.Logger().Info(err.Error())
74-
return c.JSON(http.StatusBadRequest, "DBの操作に失敗しました")
70+
return internalServerError(c, err)
7571
}
7672

7773
return c.JSON(http.StatusOK, res)
@@ -83,14 +79,12 @@ func GetItem(c echo.Context) error {
8379

8480
itemID, err := strconv.Atoi(itemIDRaw)
8581
if err != nil {
86-
c.Logger().Info(err.Error())
87-
return c.JSON(http.StatusBadRequest, "物品のIDが不正です")
82+
return invalidRequest(c, err)
8883
}
8984

9085
res, err := model.GetItem(itemID)
9186
if err != nil {
92-
c.Logger().Info(err.Error())
93-
return c.JSON(http.StatusInternalServerError, "DBの操作に失敗しました")
87+
return internalServerError(c, err)
9488
}
9589

9690
return c.JSON(http.StatusOK, res)
@@ -101,21 +95,18 @@ func PatchItem(c echo.Context) error {
10195
itemBody := model.RequestPostItemsBody{}
10296
err := c.Bind(&itemBody)
10397
if err != nil {
104-
c.Logger().Info(err.Error())
105-
return c.JSON(http.StatusBadRequest, "リクエストデータの処理に失敗しました")
98+
return invalidRequest(c, err)
10699
}
107100

108101
itemIDRaw := c.Param("id")
109102
itemID, err := strconv.Atoi(itemIDRaw)
110103
if err != nil {
111-
c.Logger().Info(err.Error())
112-
return c.JSON(http.StatusBadRequest, "物品のIDが不正です")
104+
return invalidRequest(c, err)
113105
}
114106

115107
res, err := model.PatchItem(itemID, itemBody)
116108
if err != nil {
117-
c.Logger().Info(err.Error())
118-
return c.JSON(http.StatusInternalServerError, "DBの操作に失敗しました")
109+
return internalServerError(c, err)
119110
}
120111

121112
return c.JSON(http.StatusOK, res)
@@ -126,14 +117,12 @@ func DeleteItem(c echo.Context) error {
126117
itemIDRaw := c.Param("id")
127118
itemID, err := strconv.Atoi(itemIDRaw)
128119
if err != nil {
129-
c.Logger().Info(err.Error())
130-
return c.JSON(http.StatusBadRequest, "物品のIDが不正です")
120+
return invalidRequest(c, err)
131121
}
132122

133123
err = model.DeleteItem(itemID)
134124
if err != nil {
135-
c.Logger().Info(err.Error())
136-
return c.JSON(http.StatusInternalServerError, "DBの操作に失敗しました")
125+
return internalServerError(c, err)
137126
}
138127

139128
return c.NoContent(http.StatusOK)

router/middleware.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/labstack/echo/v4"
99
)
1010

11+
var userProviderKey = "user"
12+
1113
// UserProvider traQに接続する用のclient
1214
type UserProvider struct {
1315
AuthUser func(c echo.Context) (echo.Context, error)
@@ -34,7 +36,11 @@ func CreateUserProvider(debugUserName string) *UserProvider {
3436
return c, errors.New("認証に失敗しました(Headerに必要な情報が存在しません)")
3537
}
3638
}
37-
c.Set("user", res)
39+
c.Set(userProviderKey, res)
3840
return c, nil
3941
}}
4042
}
43+
44+
func getAuthorizedUser(c echo.Context) string {
45+
return c.Get(userProviderKey).(string)
46+
}

router/router.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,5 @@ func SetupRouting(e *echo.Echo, client *UserProvider) {
5151
apiFiles.POST("", PostFile, middleware.BodyLimit("3MB"))
5252
apiFiles.GET("/:id", GetFile)
5353
}
54-
5554
}
5655
}

0 commit comments

Comments
 (0)