package api import ( "net/http" "gitea.konchin.com/ytshih/inp2025/game/models" "gitea.konchin.com/ytshih/inp2025/game/server/middlewares" "gitea.konchin.com/ytshih/inp2025/game/types" "github.com/uptrace/bunrouter" ) func (self *Handlers) CreateRoom( w http.ResponseWriter, req bunrouter.Request, ) error { ctx := req.Context() user, ok := ctx.Value(types.User("")).(models.User) if !ok { return middlewares.HTTPError{ StatusCode: http.StatusUnauthorized, Message: "user not found", } } room, err := self.roomManager.CreateRoom(user.Username) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusInternalServerError, Message: "failed to create room", OriginError: err, } } return bunrouter.JSON(w, room) } func (self *Handlers) GetLobbyRooms( w http.ResponseWriter, req bunrouter.Request, ) error { rooms := self.roomManager.GetRooms() return bunrouter.JSON(w, rooms) } func (self *Handlers) JoinRoom( w http.ResponseWriter, req bunrouter.Request, ) error { ctx := req.Context() user, ok := ctx.Value(types.User("")).(models.User) if !ok { return middlewares.HTTPError{ StatusCode: http.StatusUnauthorized, Message: "user not found", } } roomID := req.Param("id") room, err := self.roomManager.JoinRoom(roomID, user.Username) if err != nil { return middlewares.HTTPError{ StatusCode: http.StatusBadRequest, Message: err.Error(), OriginError: err, } } return bunrouter.JSON(w, room) } func (self *Handlers) GetRoom( w http.ResponseWriter, req bunrouter.Request, ) error { roomID := req.Param("id") room, ok := self.roomManager.GetRoom(roomID) if !ok { return middlewares.HTTPError{ StatusCode: http.StatusNotFound, Message: "room not found", } } return bunrouter.JSON(w, room) } func (self *Handlers) WSGetRoomState( w http.ResponseWriter, req bunrouter.Request, ) error { roomID := req.Param("id") handler, ok := self.roomManager.GetGameHandler(roomID) if !ok { return middlewares.HTTPError{ StatusCode: http.StatusNotFound, Message: "game handler not found", } } return handler.WSGetState(w, req) } func (self *Handlers) PostGuess( w http.ResponseWriter, req bunrouter.Request, ) error { roomID := req.Param("id") handler, ok := self.roomManager.GetGameHandler(roomID) if !ok { return middlewares.HTTPError{ StatusCode: http.StatusNotFound, Message: "game handler not found", } } return handler.WSPostGuess(w, req) }