Skip to content

Commit 3adc0a5

Browse files
committed
🩹 Fix HTTPErrorHandlerInner
1 parent 124cb10 commit 3adc0a5

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

internal/router/error.go

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,33 @@ func HTTPErrorHandlerInner(err error) *echo.HTTPError {
1414
if err == nil {
1515
return nil
1616
}
17+
// FIXME(error-handling): type switchで最上位のエラーに対してhandlingする
1718
if he := new(echo.HTTPError); errors.As(err, &he) {
1819
return he
1920
}
21+
var herr error
2022
if e := new(service.BadInputError); errors.As(err, &e) {
21-
return echo.NewHTTPError(http.StatusBadRequest, e.Message).Wrap(e).(*echo.HTTPError)
22-
}
23-
if e := new(service.NotFoundError); errors.As(err, &e) {
24-
return echo.NewHTTPError(http.StatusNotFound, e.Message).Wrap(e).(*echo.HTTPError)
25-
}
26-
if e := new(service.ForbiddenError); errors.As(err, &e) {
27-
return echo.NewHTTPError(http.StatusForbidden, e.Message).Wrap(e).(*echo.HTTPError)
28-
}
29-
if e := new(service.UnauthenticatedError); errors.As(err, &e) {
30-
return echo.NewHTTPError(http.StatusUnauthorized, e.Message).Wrap(e).(*echo.HTTPError)
31-
}
32-
if e := new(service.UnexpectedError); errors.As(err, &e) {
33-
return echo.ErrInternalServerError.Wrap(e).(*echo.HTTPError)
34-
}
35-
if e := new(wrapsession.GetSessionError); errors.As(err, &e) {
36-
return echo.ErrInternalServerError.Wrap(e).(*echo.HTTPError)
37-
}
38-
if e := new(wrapsession.SaveSessionError); errors.As(err, &e) {
39-
return echo.ErrInternalServerError.Wrap(e).(*echo.HTTPError)
40-
}
41-
return echo.ErrInternalServerError.Wrap(err).(*echo.HTTPError)
23+
herr = echo.NewHTTPError(http.StatusBadRequest, e.Message).Wrap(e)
24+
} else if e := new(service.NotFoundError); errors.As(err, &e) {
25+
herr = echo.NewHTTPError(http.StatusNotFound, e.Message).Wrap(e)
26+
} else if e := new(service.ForbiddenError); errors.As(err, &e) {
27+
herr = echo.NewHTTPError(http.StatusForbidden, e.Message).Wrap(e)
28+
} else if e := new(service.UnauthenticatedError); errors.As(err, &e) {
29+
herr = echo.NewHTTPError(http.StatusUnauthorized, e.Message).Wrap(e)
30+
} else if e := new(service.UnexpectedError); errors.As(err, &e) {
31+
herr = echo.ErrInternalServerError.Wrap(e)
32+
} else if e := new(wrapsession.GetSessionError); errors.As(err, &e) {
33+
herr = echo.ErrInternalServerError.Wrap(e)
34+
} else if e := new(wrapsession.SaveSessionError); errors.As(err, &e) {
35+
herr = echo.ErrInternalServerError.Wrap(e)
36+
} else {
37+
herr = echo.ErrInternalServerError.Wrap(err)
38+
}
39+
he := new(echo.HTTPError)
40+
if !errors.As(herr, &he) {
41+
// ここには来ないはず
42+
code := http.StatusInternalServerError
43+
return echo.NewHTTPError(code, http.StatusText(code))
44+
}
45+
return he
4246
}

0 commit comments

Comments
 (0)