aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-08-08 20:00:06 +0900
committernsfisis <nsfisis@gmail.com>2024-08-08 20:00:06 +0900
commitef1577a212d1b5c6f908a59b943a512d33d312fe (patch)
tree7c91a689aaea376985ec579d71c1169fdc2ee47a /backend
parent205cb5e21b960852a06fa28baaa03dbbd6aa835f (diff)
downloadiosdc-japan-2024-albatross-ef1577a212d1b5c6f908a59b943a512d33d312fe.tar.gz
iosdc-japan-2024-albatross-ef1577a212d1b5c6f908a59b943a512d33d312fe.tar.zst
iosdc-japan-2024-albatross-ef1577a212d1b5c6f908a59b943a512d33d312fe.zip
feat(backend/worker): enable `revive` in `golangci-lint`
Diffstat (limited to 'backend')
-rw-r--r--backend/.golangci.yml1
-rw-r--r--backend/admin/handler.go (renamed from backend/admin/handlers.go)29
-rw-r--r--backend/admin/renderer.go2
-rw-r--r--backend/api/handler.go (renamed from backend/api/handlers.go)13
-rw-r--r--backend/api/handler_wrapper.go4
-rw-r--r--backend/auth/jwt.go2
-rw-r--r--backend/game/http.go12
-rw-r--r--backend/game/hub.go24
-rw-r--r--backend/game/ws.go1
-rw-r--r--backend/gen/api/handler_wrapper_gen.go14
-rw-r--r--backend/main.go2
11 files changed, 51 insertions, 53 deletions
diff --git a/backend/.golangci.yml b/backend/.golangci.yml
index a6494c0..d203223 100644
--- a/backend/.golangci.yml
+++ b/backend/.golangci.yml
@@ -2,4 +2,5 @@ linters:
enable:
- gofmt
- goimports
+ - revive
- stylecheck
diff --git a/backend/admin/handlers.go b/backend/admin/handler.go
index 2a678d3..111476b 100644
--- a/backend/admin/handlers.go
+++ b/backend/admin/handler.go
@@ -16,7 +16,7 @@ import (
var jst = time.FixedZone("Asia/Tokyo", 9*60*60)
-type AdminHandler struct {
+type Handler struct {
q *db.Queries
hubs GameHubsInterface
}
@@ -25,8 +25,8 @@ type GameHubsInterface interface {
StartGame(gameID int) error
}
-func NewAdminHandler(q *db.Queries, hubs GameHubsInterface) *AdminHandler {
- return &AdminHandler{
+func NewHandler(q *db.Queries, hubs GameHubsInterface) *Handler {
+ return &Handler{
q: q,
hubs: hubs,
}
@@ -51,7 +51,7 @@ func newAdminMiddleware() echo.MiddlewareFunc {
}
}
-func (h *AdminHandler) RegisterHandlers(g *echo.Group) {
+func (h *Handler) RegisterHandlers(g *echo.Group) {
g.Use(newAssetsMiddleware())
g.Use(newAdminMiddleware())
@@ -63,13 +63,13 @@ func (h *AdminHandler) RegisterHandlers(g *echo.Group) {
g.POST("/games/:gameID", h.postGameEdit)
}
-func (h *AdminHandler) getDashboard(c echo.Context) error {
+func (h *Handler) getDashboard(c echo.Context) error {
return c.Render(http.StatusOK, "dashboard", echo.Map{
"Title": "Dashboard",
})
}
-func (h *AdminHandler) getUsers(c echo.Context) error {
+func (h *Handler) getUsers(c echo.Context) error {
rows, err := h.q.ListUsers(c.Request().Context())
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
@@ -91,7 +91,7 @@ func (h *AdminHandler) getUsers(c echo.Context) error {
})
}
-func (h *AdminHandler) getUserEdit(c echo.Context) error {
+func (h *Handler) getUserEdit(c echo.Context) error {
userID, err := strconv.Atoi(c.Param("userID"))
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid user id")
@@ -100,9 +100,8 @@ func (h *AdminHandler) getUserEdit(c echo.Context) error {
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
return echo.NewHTTPError(http.StatusNotFound)
- } else {
- return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
+ return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
return c.Render(http.StatusOK, "user_edit", echo.Map{
@@ -117,7 +116,7 @@ func (h *AdminHandler) getUserEdit(c echo.Context) error {
})
}
-func (h *AdminHandler) getGames(c echo.Context) error {
+func (h *Handler) getGames(c echo.Context) error {
rows, err := h.q.ListGames(c.Request().Context())
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
@@ -145,7 +144,7 @@ func (h *AdminHandler) getGames(c echo.Context) error {
})
}
-func (h *AdminHandler) getGameEdit(c echo.Context) error {
+func (h *Handler) getGameEdit(c echo.Context) error {
gameID, err := strconv.Atoi(c.Param("gameID"))
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid game id")
@@ -154,9 +153,8 @@ func (h *AdminHandler) getGameEdit(c echo.Context) error {
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
return echo.NewHTTPError(http.StatusNotFound)
- } else {
- return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
+ return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
var startedAt string
@@ -178,7 +176,7 @@ func (h *AdminHandler) getGameEdit(c echo.Context) error {
})
}
-func (h *AdminHandler) postGameEdit(c echo.Context) error {
+func (h *Handler) postGameEdit(c echo.Context) error {
gameID, err := strconv.Atoi(c.Param("gameID"))
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid game id")
@@ -187,9 +185,8 @@ func (h *AdminHandler) postGameEdit(c echo.Context) error {
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
return echo.NewHTTPError(http.StatusNotFound)
- } else {
- return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
+ return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
gameType := c.FormValue("game_type")
diff --git a/backend/admin/renderer.go b/backend/admin/renderer.go
index 468677f..d38c701 100644
--- a/backend/admin/renderer.go
+++ b/backend/admin/renderer.go
@@ -27,7 +27,7 @@ func NewRenderer() *Renderer {
}
}
-func (r *Renderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
+func (r *Renderer) Render(w io.Writer, name string, data interface{}, _ echo.Context) error {
tmpl, ok := r.templates[name]
if !ok {
t, err := template.ParseFS(templatesFS, "templates/base.html", "templates/"+name+".html")
diff --git a/backend/api/handlers.go b/backend/api/handler.go
index 229246f..57d7464 100644
--- a/backend/api/handlers.go
+++ b/backend/api/handler.go
@@ -12,7 +12,7 @@ import (
"github.com/nsfisis/iosdc-japan-2024-albatross/backend/db"
)
-type APIHandler struct {
+type Handler struct {
q *db.Queries
hubs GameHubsInterface
}
@@ -21,7 +21,7 @@ type GameHubsInterface interface {
StartGame(gameID int) error
}
-func (h *APIHandler) PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error) {
+func (h *Handler) PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error) {
username := request.Body.Username
password := request.Body.Password
userID, err := auth.Login(ctx, h.q, username, password)
@@ -52,7 +52,7 @@ func (h *APIHandler) PostLogin(ctx context.Context, request PostLoginRequestObje
}, nil
}
-func (h *APIHandler) GetToken(ctx context.Context, request GetTokenRequestObject, user *auth.JWTClaims) (GetTokenResponseObject, error) {
+func (h *Handler) GetToken(_ context.Context, _ GetTokenRequestObject, user *auth.JWTClaims) (GetTokenResponseObject, error) {
newToken, err := auth.NewShortLivedJWT(user)
if err != nil {
return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
@@ -62,7 +62,7 @@ func (h *APIHandler) GetToken(ctx context.Context, request GetTokenRequestObject
}, nil
}
-func (h *APIHandler) GetGames(ctx context.Context, request GetGamesRequestObject, user *auth.JWTClaims) (GetGamesResponseObject, error) {
+func (h *Handler) GetGames(ctx context.Context, _ GetGamesRequestObject, user *auth.JWTClaims) (GetGamesResponseObject, error) {
gameRows, err := h.q.ListGamesForPlayer(ctx, int32(user.UserID))
if err != nil {
return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
@@ -100,7 +100,7 @@ func (h *APIHandler) GetGames(ctx context.Context, request GetGamesRequestObject
}, nil
}
-func (h *APIHandler) GetGame(ctx context.Context, request GetGameRequestObject, user *auth.JWTClaims) (GetGameResponseObject, error) {
+func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, user *auth.JWTClaims) (GetGameResponseObject, error) {
// TODO: check user permission
gameID := request.GameID
row, err := h.q.GetGameByID(ctx, int32(gameID))
@@ -111,9 +111,8 @@ func (h *APIHandler) GetGame(ctx context.Context, request GetGameRequestObject,
Message: "Game not found",
},
}, nil
- } else {
- return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
var startedAt *int
if row.StartedAt.Valid {
diff --git a/backend/api/handler_wrapper.go b/backend/api/handler_wrapper.go
index 748af66..69b9baa 100644
--- a/backend/api/handler_wrapper.go
+++ b/backend/api/handler_wrapper.go
@@ -14,12 +14,12 @@ import (
var _ StrictServerInterface = (*ApiHandlerWrapper)(nil)
type ApiHandlerWrapper struct {
- innerHandler APIHandler
+ innerHandler Handler
}
func NewHandler(queries *db.Queries, hubs GameHubsInterface) *ApiHandlerWrapper {
return &ApiHandlerWrapper{
- innerHandler: APIHandler{
+ innerHandler: Handler{
q: queries,
hubs: hubs,
},
diff --git a/backend/auth/jwt.go b/backend/auth/jwt.go
index 966cc5f..e1852da 100644
--- a/backend/auth/jwt.go
+++ b/backend/auth/jwt.go
@@ -50,7 +50,7 @@ func NewShortLivedJWT(claims *JWTClaims) (string, error) {
func ParseJWT(token string) (*JWTClaims, error) {
claims := new(JWTClaims)
- t, err := jwt.ParseWithClaims(token, claims, func(t *jwt.Token) (interface{}, error) {
+ t, err := jwt.ParseWithClaims(token, claims, func(*jwt.Token) (interface{}, error) {
return []byte("TODO"), nil
})
if err != nil {
diff --git a/backend/game/http.go b/backend/game/http.go
index 865c724..d513593 100644
--- a/backend/game/http.go
+++ b/backend/game/http.go
@@ -9,17 +9,17 @@ import (
"github.com/nsfisis/iosdc-japan-2024-albatross/backend/auth"
)
-type sockHandler struct {
- hubs *GameHubs
+type SockHandler struct {
+ hubs *Hubs
}
-func newSockHandler(hubs *GameHubs) *sockHandler {
- return &sockHandler{
+func newSockHandler(hubs *Hubs) *SockHandler {
+ return &SockHandler{
hubs: hubs,
}
}
-func (h *sockHandler) HandleSockGolfPlay(c echo.Context) error {
+func (h *SockHandler) HandleSockGolfPlay(c echo.Context) error {
jwt := c.QueryParam("token")
claims, err := auth.ParseJWT(jwt)
if err != nil {
@@ -38,7 +38,7 @@ func (h *sockHandler) HandleSockGolfPlay(c echo.Context) error {
return servePlayerWs(hub, c.Response(), c.Request(), claims.UserID)
}
-func (h *sockHandler) HandleSockGolfWatch(c echo.Context) error {
+func (h *SockHandler) HandleSockGolfWatch(c echo.Context) error {
jwt := c.QueryParam("token")
claims, err := auth.ParseJWT(jwt)
if err != nil {
diff --git a/backend/game/hub.go b/backend/game/hub.go
index 11a466b..dc56f03 100644
--- a/backend/game/hub.go
+++ b/backend/game/hub.go
@@ -544,15 +544,15 @@ func (hub *gameHub) closeWatcherClient(watcher *watcherClient) {
close(watcher.s2cMessages)
}
-type GameHubs struct {
+type Hubs struct {
hubs map[int]*gameHub
q *db.Queries
taskQueue *taskqueue.Queue
taskResults chan taskqueue.TaskResult
}
-func NewGameHubs(q *db.Queries, taskQueue *taskqueue.Queue, taskResults chan taskqueue.TaskResult) *GameHubs {
- return &GameHubs{
+func NewGameHubs(q *db.Queries, taskQueue *taskqueue.Queue, taskResults chan taskqueue.TaskResult) *Hubs {
+ return &Hubs{
hubs: make(map[int]*gameHub),
q: q,
taskQueue: taskQueue,
@@ -560,18 +560,18 @@ func NewGameHubs(q *db.Queries, taskQueue *taskqueue.Queue, taskResults chan tas
}
}
-func (hubs *GameHubs) Close() {
+func (hubs *Hubs) Close() {
log.Println("closing all game hubs")
for _, hub := range hubs.hubs {
hub.close()
}
}
-func (hubs *GameHubs) getHub(gameID int) *gameHub {
+func (hubs *Hubs) getHub(gameID int) *gameHub {
return hubs.hubs[gameID]
}
-func (hubs *GameHubs) RestoreFromDB(ctx context.Context) error {
+func (hubs *Hubs) RestoreFromDB(ctx context.Context) error {
games, err := hubs.q.ListGames(ctx)
if err != nil {
return err
@@ -581,12 +581,12 @@ func (hubs *GameHubs) RestoreFromDB(ctx context.Context) error {
if row.StartedAt.Valid {
startedAt = &row.StartedAt.Time
}
- var problem_ *problem
+ var pr *problem
if row.ProblemID != nil {
if row.Title == nil || row.Description == nil {
panic("inconsistent data")
}
- problem_ = &problem{
+ pr = &problem{
problemID: int(*row.ProblemID),
title: *row.Title,
description: *row.Description,
@@ -603,14 +603,14 @@ func (hubs *GameHubs) RestoreFromDB(ctx context.Context) error {
state: gameState(row.State),
displayName: row.DisplayName,
startedAt: startedAt,
- problem: problem_,
+ problem: pr,
playerCount: len(playerRows),
}, hubs.q, hubs.taskQueue)
}
return nil
}
-func (hubs *GameHubs) Run() {
+func (hubs *Hubs) Run() {
for _, hub := range hubs.hubs {
go hub.run()
go hub.processTaskResults()
@@ -626,11 +626,11 @@ func (hubs *GameHubs) Run() {
}
}
-func (hubs *GameHubs) SockHandler() *sockHandler {
+func (hubs *Hubs) SockHandler() *SockHandler {
return newSockHandler(hubs)
}
-func (hubs *GameHubs) StartGame(gameID int) error {
+func (hubs *Hubs) StartGame(gameID int) error {
hub := hubs.getHub(gameID)
if hub == nil {
return errors.New("no such game")
diff --git a/backend/game/ws.go b/backend/game/ws.go
index 8e219d6..0dbd0ab 100644
--- a/backend/game/ws.go
+++ b/backend/game/ws.go
@@ -20,6 +20,7 @@ var upgrader = websocket.Upgrader{
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
// TODO: insecure!
+ _ = r
return true
},
}
diff --git a/backend/gen/api/handler_wrapper_gen.go b/backend/gen/api/handler_wrapper_gen.go
index 42fc5e8..1cd9770 100644
--- a/backend/gen/api/handler_wrapper_gen.go
+++ b/backend/gen/api/handler_wrapper_gen.go
@@ -111,15 +111,15 @@ import (
"github.com/nsfisis/iosdc-japan-2024-albatross/backend/db"
)
-var _ StrictServerInterface = (*APIHandlerWrapper)(nil)
+var _ StrictServerInterface = (*HandlerWrapper)(nil)
-type APIHandlerWrapper struct {
- impl APIHandler
+type HandlerWrapper struct {
+ impl Handler
}
-func NewHandler(queries *db.Queries, hubs GameHubsInterface) *APIHandlerWrapper {
- return &APIHandlerWrapper{
- impl: APIHandler{
+func NewHandler(queries *db.Queries, hubs GameHubsInterface) *HandlerWrapper {
+ return &HandlerWrapper{
+ impl: Handler{
q: queries,
hubs: hubs,
},
@@ -140,7 +140,7 @@ func parseJWTClaimsFromAuthorizationHeader(authorization string) (*auth.JWTClaim
}
{{ range . }}
- func (h *APIHandlerWrapper) {{ .Name }}(ctx context.Context, request {{ .Name }}RequestObject) ({{ .Name }}ResponseObject, error) {
+ func (h *HandlerWrapper) {{ .Name }}(ctx context.Context, request {{ .Name }}RequestObject) ({{ .Name }}ResponseObject, error) {
{{ if .RequiresLogin -}}
user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
if err != nil {
diff --git a/backend/main.go b/backend/main.go
index c8a5832..575c3f8 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -83,7 +83,7 @@ func main() {
apiHandler := api.NewHandler(queries, gameHubs)
api.RegisterHandlers(apiGroup, api.NewStrictHandler(apiHandler, nil))
- adminHandler := admin.NewAdminHandler(queries, gameHubs)
+ adminHandler := admin.NewHandler(queries, gameHubs)
adminGroup := e.Group("/admin")
adminHandler.RegisterHandlers(adminGroup)