Go binary/server for helping run/build sessions for the Maze Rats TTRPG
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

71 lines
1.9 KiB

package handlers
import (
"fmt"
"github.com/gorilla/mux"
"mazeratsgen/internal/tables"
"net/http"
)
func LoadHandlers(r *mux.Router) {
r.HandleFunc("/api/generate/name", GenName)
r.HandleFunc("/api/generate/spell", GenSpell)
r.HandleFunc("/api/generate/potion", GenPotion)
r.HandleFunc("/api/generate/mutation", GenMutation)
r.HandleFunc("/api/generate/insanity", GenInsanity)
r.HandleFunc("/api/generate/catastrophe", GenCatastrophe)
r.HandleFunc("/api/generate/monster", GenMonster)
r.HandleFunc("/api/monster/{seed}", Monster)
r.HandleFunc("/api/generate/character", GenCharacter)
r.HandleFunc("/api/character/{seed}", Character)
r.HandleFunc("/api/generate/npc", GenNPC)
r.HandleFunc("/api/npc/{seed}", NPC)
r.HandleFunc("/api/generate/character", GenCharacter)
r.HandleFunc("/api/generate/city", GenCity)
r.HandleFunc("/api/city/{seed}", City)
r.HandleFunc("/api/generate/dungeon", GenDungeon)
r.HandleFunc("/api/dungeon/{seed}", Dungeon)
r.HandleFunc("/api/roll/{xdy}", Roll)
}
func WriteResponse(w http.ResponseWriter, r *http.Request, i interface{}, t string) {
var response interface{}
var err error
if r.Header.Get("Accept") == "text/plain" {
w.Header().Set("Content-Type", "text/plain")
response, err = tables.ConvertToText(i, t)
if err != nil {
// TODO: Return json error
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
return
}
} else {
w.Header().Set("Content-Type", "application/json")
response, err = tables.ConvertToJSON(i)
if err != nil {
// TODO: Return json error
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
return
}
}
w.WriteHeader(http.StatusOK)
switch response.(type) {
case []byte:
w.Write(response.([]byte))
case string:
w.Write([]byte(response.(string)))
default:
err := fmt.Sprintf("Error writing response, '%v' not handled", response)
w.Write([]byte(err))
}
}