library/main.go

81 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"strconv"
"git.saintnet.tech/tomecraft/tome_lib"
"github.com/gorilla/mux"
)
type CardDB map[tome_lib.CardType]*tome_lib.CardView
func main() {
db := LoadCards("cards.json")
router := mux.NewRouter().StrictSlash(true)
router.HandleFunc("/", homePage).Methods("GET")
router.HandleFunc("/card/{id}", db.lookupCard).Methods("GET")
log.Fatal(http.ListenAndServe(":7637", router))
}
func homePage(res http.ResponseWriter, req *http.Request) {
json.NewEncoder(res).Encode(nil)
}
func (c *CardDB) lookupCard(res http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
id, err := strconv.Atoi(vars["id"])
if err != nil {
log.Printf("Error: tryied to look up a non int:%v", err)
http.Error(res, "Bad request - need to lookup an int", 400)
return
}
card, ok := (*c)[tome_lib.CardType(id)]
if !ok {
http.Error(res, "Bad request - no such card", 404)
return
}
json.NewEncoder(res).Encode(card)
}
func LoadCards(file string) CardDB {
content, err := ioutil.ReadFile(file) // the file is inside the local directory
if err != nil {
log.Println("couldn't load file")
log.Fatal(err)
}
var cardConfs []*CardConfig
err = json.Unmarshal([]byte(content), &cardConfs)
if err != nil {
log.Println("Couldn't load json")
log.Fatal(err)
}
cardDB := make(CardDB)
for _, v := range cardConfs {
t, err := tome_lib.CardTypeString(v.CodeName)
if err != nil {
log.Println("Invalid card imported")
log.Fatal(err)
}
cardDB[t] = &tome_lib.CardView{
Name: "",
Type: int(t),
Rank: v.Rank,
ImageURI: v.ImageURI,
Flavour: v.Flavour,
Rules: v.Rules,
}
if v.Name == "" {
cardDB[t].Name = v.CodeName
}
}
return cardDB
}