From 5120eef776f7cfac210cd2f581274d65f531e98e Mon Sep 17 00:00:00 2001 From: Ryan Hamamura <58859899+ryanhamamura@users.noreply.github.com> Date: Mon, 2 Mar 2026 13:19:03 -1000 Subject: [PATCH] refactor: streamline routes to RESTful naming conventions Remove /api/ prefix and consolidate route groups: - /api/lobby/* -> /games, /snake, /logout (top-level) - /game/{game_id} + /api/game/{game_id}/* -> /games/{id}/* - /snake/{game_id} + /api/snake/{game_id}/* -> /snake/{id}/* - /api/auth/* -> /auth/* - Standardize snake join page to use return_url= (was return=) --- features/auth/pages/login_templ.go | 8 ++++---- features/auth/pages/register_templ.go | 8 ++++---- features/auth/routes.go | 4 ++-- features/c4game/components/board_templ.go | 4 ++-- features/c4game/components/chat_templ.go | 8 ++++---- features/c4game/components/status_templ.go | 16 +++++++-------- features/c4game/handlers.go | 16 +++++++-------- features/c4game/pages/game_templ.go | 12 +++++------ features/c4game/routes.go | 7 +++---- features/lobby/components/gamelist_templ.go | 8 ++++---- features/lobby/handlers.go | 2 +- features/lobby/pages/lobby_templ.go | 20 +++++++++---------- features/lobby/routes.go | 10 ++++------ features/snakegame/components/chat_templ.go | 8 ++++---- features/snakegame/components/status_templ.go | 4 ++-- features/snakegame/handlers.go | 12 +++++------ features/snakegame/pages/game_templ.go | 14 ++++++------- features/snakegame/routes.go | 7 +++---- 18 files changed, 82 insertions(+), 86 deletions(-) diff --git a/features/auth/pages/login_templ.go b/features/auth/pages/login_templ.go index 115ea27..3640508 100644 --- a/features/auth/pages/login_templ.go +++ b/features/auth/pages/login_templ.go @@ -51,9 +51,9 @@ func LoginPage() templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/auth/login")) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/auth/login")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/login.templ`, Line: 34, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/login.templ`, Line: 34, Col: 65} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -64,9 +64,9 @@ func LoginPage() templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/auth/login")) + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/auth/login")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/login.templ`, Line: 40, Col: 56} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/login.templ`, Line: 40, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { diff --git a/features/auth/pages/register_templ.go b/features/auth/pages/register_templ.go index 89efec3..61c8f21 100644 --- a/features/auth/pages/register_templ.go +++ b/features/auth/pages/register_templ.go @@ -51,9 +51,9 @@ func RegisterPage() templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/auth/register")) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/auth/register")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/register.templ`, Line: 43, Col: 72} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/register.templ`, Line: 43, Col: 68} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -64,9 +64,9 @@ func RegisterPage() templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/auth/register")) + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/auth/register")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/register.templ`, Line: 49, Col: 59} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/auth/pages/register.templ`, Line: 49, Col: 55} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { diff --git a/features/auth/routes.go b/features/auth/routes.go index f028547..ac50938 100644 --- a/features/auth/routes.go +++ b/features/auth/routes.go @@ -11,8 +11,8 @@ import ( func SetupRoutes(router chi.Router, queries *repository.Queries, sessions *scs.SessionManager) error { router.Get("/login", HandleLoginPage()) router.Get("/register", HandleRegisterPage()) - router.Post("/api/auth/login", HandleLogin(queries, sessions)) - router.Post("/api/auth/register", HandleRegister(queries, sessions)) + router.Post("/auth/login", HandleLogin(queries, sessions)) + router.Post("/auth/register", HandleRegister(queries, sessions)) return nil } diff --git a/features/c4game/components/board_templ.go b/features/c4game/components/board_templ.go index 92f27b5..7c638be 100644 --- a/features/c4game/components/board_templ.go +++ b/features/c4game/components/board_templ.go @@ -81,9 +81,9 @@ func column(g *game.Game, colIdx int, myColor int) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/game/%s/drop?col=%d", g.ID, colIdx)) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games/%s/drop?col=%d", g.ID, colIdx)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/board.templ`, Line: 22, Col: 77} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/board.templ`, Line: 22, Col: 74} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/features/c4game/components/chat_templ.go b/features/c4game/components/chat_templ.go index c6fa087..b70da12 100644 --- a/features/c4game/components/chat_templ.go +++ b/features/c4game/components/chat_templ.go @@ -105,9 +105,9 @@ func Chat(messages []ChatMessage, gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/game/%s/chat", gameID)) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games/%s/chat", gameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/chat.templ`, Line: 40, Col: 73} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/chat.templ`, Line: 40, Col: 70} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -118,9 +118,9 @@ func Chat(messages []ChatMessage, gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/game/%s/chat", gameID)) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games/%s/chat", gameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/chat.templ`, Line: 44, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/chat.templ`, Line: 44, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { diff --git a/features/c4game/components/status_templ.go b/features/c4game/components/status_templ.go index ba58ad9..c87c799 100644 --- a/features/c4game/components/status_templ.go +++ b/features/c4game/components/status_templ.go @@ -77,9 +77,9 @@ func StatusBanner(g *game.Game, myColor int) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var5 templ.SafeURL - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/game/" + *g.RematchGameID)) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/games/" + *g.RematchGameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 16, Col: 54} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 16, Col: 55} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -95,9 +95,9 @@ func StatusBanner(g *game.Game, myColor int) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/game/%s/rematch", g.ID)) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games/%s/rematch", g.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 24, Col: 67} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 24, Col: 64} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -217,9 +217,9 @@ func InviteLink(gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var12 string - templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(config.Global.AppURL + "/game/" + gameID) + templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(config.Global.AppURL + "/games/" + gameID) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 48, Col: 45} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/components/status.templ`, Line: 48, Col: 46} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -229,7 +229,7 @@ func InviteLink(gameID string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, copyToClipboard(config.Global.AppURL+"/game/"+gameID)) + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, copyToClipboard(config.Global.AppURL+"/games/"+gameID)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -237,7 +237,7 @@ func InviteLink(gameID string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var13 templ.ComponentScript = copyToClipboard(config.Global.AppURL + "/game/" + gameID) + var templ_7745c5c3_Var13 templ.ComponentScript = copyToClipboard(config.Global.AppURL + "/games/" + gameID) _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var13.Call) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err diff --git a/features/c4game/handlers.go b/features/c4game/handlers.go index 2e90886..6d24ed2 100644 --- a/features/c4game/handlers.go +++ b/features/c4game/handlers.go @@ -22,7 +22,7 @@ import ( func HandleGamePage(store *game.GameStore, sessions *scs.SessionManager, queries *repository.Queries) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -87,7 +87,7 @@ func HandleGamePage(store *game.GameStore, sessions *scs.SessionManager, queries func HandleGameEvents(store *game.GameStore, nc *nats.Conn, sessions *scs.SessionManager, queries *repository.Queries) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -173,7 +173,7 @@ func HandleGameEvents(store *game.GameStore, nc *nats.Conn, sessions *scs.Sessio func HandleDropPiece(store *game.GameStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -210,7 +210,7 @@ func HandleDropPiece(store *game.GameStore, sessions *scs.SessionManager) http.H func HandleSendChat(store *game.GameStore, nc *nats.Conn, sessions *scs.SessionManager, queries *repository.Queries) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -276,7 +276,7 @@ func HandleSendChat(store *game.GameStore, nc *nats.Conn, sessions *scs.SessionM func HandleSetNickname(store *game.GameStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -319,13 +319,13 @@ func HandleSetNickname(store *game.GameStore, sessions *scs.SessionManager) http } sse := datastar.NewSSE(w, r) - sse.Redirect("/game/" + gameID) //nolint:errcheck + sse.Redirect("/games/" + gameID) //nolint:errcheck } } func HandleRematch(store *game.GameStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") gi, exists := store.Get(gameID) if !exists { @@ -337,7 +337,7 @@ func HandleRematch(store *game.GameStore, sessions *scs.SessionManager) http.Han newGI := gi.CreateRematch(store) sse := datastar.NewSSE(w, r) if newGI != nil { - sse.Redirectf("/game/%s", newGI.ID()) //nolint:errcheck + sse.Redirectf("/games/%s", newGI.ID()) //nolint:errcheck } } } diff --git a/features/c4game/pages/game_templ.go b/features/c4game/pages/game_templ.go index 3662c23..903e9a3 100644 --- a/features/c4game/pages/game_templ.go +++ b/features/c4game/pages/game_templ.go @@ -54,9 +54,9 @@ func GamePage(g *game.Game, myColor int, messages []components.ChatMessage) temp return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.GetSSE("/game/%s/events", g.ID)) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.GetSSE("/games/%s/events", g.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/pages/game.templ`, Line: 16, Col: 55} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/c4game/pages/game.templ`, Line: 16, Col: 56} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -152,9 +152,9 @@ func JoinPage(gameID string) templ.Component { } ctx = templ.InitializeContext(ctx) templ_7745c5c3_Err = sharedcomponents.GameJoinPrompt( - "/login?return_url=/game/"+gameID, - "/register?return_url=/game/"+gameID, - "/game/"+gameID, + "/login?return_url=/games/"+gameID, + "/register?return_url=/games/"+gameID, + "/games/"+gameID, ).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err @@ -202,7 +202,7 @@ func NicknamePage(gameID string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = sharedcomponents.NicknamePrompt("/api/game/"+gameID+"/join").Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sharedcomponents.NicknamePrompt("/games/"+gameID+"/join").Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/features/c4game/routes.go b/features/c4game/routes.go index 1bba4b2..4cc4641 100644 --- a/features/c4game/routes.go +++ b/features/c4game/routes.go @@ -17,10 +17,9 @@ func SetupRoutes( sessions *scs.SessionManager, queries *repository.Queries, ) error { - router.Get("/game/{game_id}", HandleGamePage(store, sessions, queries)) - router.Get("/game/{game_id}/events", HandleGameEvents(store, nc, sessions, queries)) - - router.Route("/api/game/{game_id}", func(r chi.Router) { + router.Route("/games/{id}", func(r chi.Router) { + r.Get("/", HandleGamePage(store, sessions, queries)) + r.Get("/events", HandleGameEvents(store, nc, sessions, queries)) r.Post("/drop", HandleDropPiece(store, sessions)) r.Post("/chat", HandleSendChat(store, nc, sessions, queries)) r.Post("/join", HandleSetNickname(store, sessions)) diff --git a/features/lobby/components/gamelist_templ.go b/features/lobby/components/gamelist_templ.go index c8539c8..4157630 100644 --- a/features/lobby/components/gamelist_templ.go +++ b/features/lobby/components/gamelist_templ.go @@ -83,9 +83,9 @@ func gameListEntry(g GameListItem) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 templ.SafeURL - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/game/" + g.ID)) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/games/" + g.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/components/gamelist.templ`, Line: 27, Col: 40} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/components/gamelist.templ`, Line: 27, Col: 41} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -157,9 +157,9 @@ func gameListEntry(g GameListItem) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.DeleteSSE("/api/lobby/game/%s", g.ID)) + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.DeleteSSE("/games/%s", g.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/components/gamelist.templ`, Line: 41, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/components/gamelist.templ`, Line: 41, Col: 56} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { diff --git a/features/lobby/handlers.go b/features/lobby/handlers.go index a200703..8144543 100644 --- a/features/lobby/handlers.go +++ b/features/lobby/handlers.go @@ -91,7 +91,7 @@ func HandleCreateGame(store *game.GameStore, sessions *scs.SessionManager) http. gi := store.Create() sse := datastar.NewSSE(w, r) - sse.ExecuteScript(fmt.Sprintf("window.location.href='/game/%s'", gi.ID())) //nolint:errcheck + sse.ExecuteScript(fmt.Sprintf("window.location.href='/games/%s'", gi.ID())) //nolint:errcheck } } diff --git a/features/lobby/pages/lobby_templ.go b/features/lobby/pages/lobby_templ.go index bc1aeb2..ffae496 100644 --- a/features/lobby/pages/lobby_templ.go +++ b/features/lobby/pages/lobby_templ.go @@ -74,9 +74,9 @@ func LobbyPage(data LobbyData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/lobby/logout")) + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/logout")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 26, Col: 59} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 26, Col: 49} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -113,9 +113,9 @@ func LobbyPage(data LobbyData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/lobby/create-game")) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 76, Col: 73} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 76, Col: 57} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -126,9 +126,9 @@ func LobbyPage(data LobbyData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/lobby/create-game")) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/games")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 82, Col: 64} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 82, Col: 48} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -201,9 +201,9 @@ func LobbyPage(data LobbyData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var10 string - templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/lobby/create-snake?mode=solo&preset=%d", i)) + templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/snake?mode=solo&preset=%d", i)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 129, Col: 90} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 129, Col: 73} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -237,9 +237,9 @@ func LobbyPage(data LobbyData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var12 string - templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/lobby/create-snake?mode=multi&preset=%d", i)) + templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/snake?mode=multi&preset=%d", i)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 144, Col: 91} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/lobby/pages/lobby.templ`, Line: 144, Col: 74} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { diff --git a/features/lobby/routes.go b/features/lobby/routes.go index 7f05748..5dde496 100644 --- a/features/lobby/routes.go +++ b/features/lobby/routes.go @@ -19,12 +19,10 @@ func SetupRoutes( ) error { router.Get("/", HandleLobbyPage(queries, sessions, snakeStore)) - router.Route("/api/lobby", func(r chi.Router) { - r.Post("/create-game", HandleCreateGame(store, sessions)) - r.Delete("/game/{id}", HandleDeleteGame(store, sessions)) - r.Post("/create-snake", HandleCreateSnakeGame(snakeStore, sessions)) - r.Post("/logout", HandleLogout(sessions)) - }) + router.Post("/games", HandleCreateGame(store, sessions)) + router.Delete("/games/{id}", HandleDeleteGame(store, sessions)) + router.Post("/snake", HandleCreateSnakeGame(snakeStore, sessions)) + router.Post("/logout", HandleLogout(sessions)) return nil } diff --git a/features/snakegame/components/chat_templ.go b/features/snakegame/components/chat_templ.go index 396e9a5..db1946e 100644 --- a/features/snakegame/components/chat_templ.go +++ b/features/snakegame/components/chat_templ.go @@ -97,9 +97,9 @@ func Chat(messages []ChatMessage, gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/snake/%s/chat", gameID)) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/snake/%s/chat", gameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/chat.templ`, Line: 36, Col: 78} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/chat.templ`, Line: 36, Col: 74} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -110,9 +110,9 @@ func Chat(messages []ChatMessage, gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/snake/%s/chat", gameID)) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/snake/%s/chat", gameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/chat.templ`, Line: 40, Col: 66} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/chat.templ`, Line: 40, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { diff --git a/features/snakegame/components/status_templ.go b/features/snakegame/components/status_templ.go index b1733c0..57416eb 100644 --- a/features/snakegame/components/status_templ.go +++ b/features/snakegame/components/status_templ.go @@ -266,9 +266,9 @@ func rematchOrJoin(sg *snake.SnakeGame, gameID string) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/api/snake/%s/rematch", gameID)) + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(datastar.PostSSE("/snake/%s/rematch", gameID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/status.templ`, Line: 82, Col: 68} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `features/snakegame/components/status.templ`, Line: 82, Col: 64} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { diff --git a/features/snakegame/handlers.go b/features/snakegame/handlers.go index d97453c..03292a6 100644 --- a/features/snakegame/handlers.go +++ b/features/snakegame/handlers.go @@ -32,7 +32,7 @@ func getPlayerID(sessions *scs.SessionManager, r *http.Request) snake.PlayerID { func HandleSnakePage(snakeStore *snake.SnakeStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Redirect(w, r, "/", http.StatusSeeOther) @@ -81,7 +81,7 @@ func HandleSnakePage(snakeStore *snake.SnakeStore, sessions *scs.SessionManager) func HandleSnakeEvents(snakeStore *snake.SnakeStore, nc *nats.Conn, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Error(w, "game not found", http.StatusNotFound) @@ -189,7 +189,7 @@ func HandleSnakeEvents(snakeStore *snake.SnakeStore, nc *nats.Conn, sessions *sc func HandleSetDirection(snakeStore *snake.SnakeStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Error(w, "game not found", http.StatusNotFound) @@ -221,7 +221,7 @@ type chatSignals struct { func HandleSendChat(snakeStore *snake.SnakeStore, nc *nats.Conn, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Error(w, "game not found", http.StatusNotFound) @@ -268,7 +268,7 @@ type nicknameSignals struct { func HandleSetNickname(snakeStore *snake.SnakeStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Error(w, "game not found", http.StatusNotFound) @@ -308,7 +308,7 @@ func HandleSetNickname(snakeStore *snake.SnakeStore, sessions *scs.SessionManage func HandleRematch(snakeStore *snake.SnakeStore, sessions *scs.SessionManager) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - gameID := chi.URLParam(r, "game_id") + gameID := chi.URLParam(r, "id") si, ok := snakeStore.Get(gameID) if !ok { http.Error(w, "game not found", http.StatusNotFound) diff --git a/features/snakegame/pages/game_templ.go b/features/snakegame/pages/game_templ.go index a7023cb..123aaab 100644 --- a/features/snakegame/pages/game_templ.go +++ b/features/snakegame/pages/game_templ.go @@ -27,10 +27,10 @@ func keydownScript(gameID string) string { "else if(k==='s'||k==='ArrowDown'){evt.preventDefault();%s}"+ "else if(k==='a'||k==='ArrowLeft'){evt.preventDefault();%s}"+ "else if(k==='d'||k==='ArrowRight'){evt.preventDefault();%s}", - datastar.PostSSE("/api/snake/%s/dir?d=0", gameID), - datastar.PostSSE("/api/snake/%s/dir?d=1", gameID), - datastar.PostSSE("/api/snake/%s/dir?d=2", gameID), - datastar.PostSSE("/api/snake/%s/dir?d=3", gameID), + datastar.PostSSE("/snake/%s/dir?d=0", gameID), + datastar.PostSSE("/snake/%s/dir?d=1", gameID), + datastar.PostSSE("/snake/%s/dir?d=2", gameID), + datastar.PostSSE("/snake/%s/dir?d=3", gameID), ) } @@ -210,8 +210,8 @@ func JoinPage(gameID string) templ.Component { } ctx = templ.InitializeContext(ctx) templ_7745c5c3_Err = components.GameJoinPrompt( - fmt.Sprintf("/login?return=/snake/%s", gameID), - fmt.Sprintf("/register?return=/snake/%s", gameID), + fmt.Sprintf("/login?return_url=/snake/%s", gameID), + fmt.Sprintf("/register?return_url=/snake/%s", gameID), fmt.Sprintf("/snake/%s", gameID), ).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { @@ -260,7 +260,7 @@ func NicknamePage(gameID string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = components.NicknamePrompt(fmt.Sprintf("/api/snake/%s/join", gameID)).Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = components.NicknamePrompt(fmt.Sprintf("/snake/%s/join", gameID)).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/features/snakegame/routes.go b/features/snakegame/routes.go index d1ccc23..4cdceec 100644 --- a/features/snakegame/routes.go +++ b/features/snakegame/routes.go @@ -10,10 +10,9 @@ import ( ) func SetupRoutes(router chi.Router, snakeStore *snake.SnakeStore, nc *nats.Conn, sessions *scs.SessionManager) error { - router.Get("/snake/{game_id}", HandleSnakePage(snakeStore, sessions)) - router.Get("/snake/{game_id}/events", HandleSnakeEvents(snakeStore, nc, sessions)) - - router.Route("/api/snake/{game_id}", func(r chi.Router) { + router.Route("/snake/{id}", func(r chi.Router) { + r.Get("/", HandleSnakePage(snakeStore, sessions)) + r.Get("/events", HandleSnakeEvents(snakeStore, nc, sessions)) r.Post("/dir", HandleSetDirection(snakeStore, sessions)) r.Post("/chat", HandleSendChat(snakeStore, nc, sessions)) r.Post("/join", HandleSetNickname(snakeStore, sessions))