mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
Split JSON rankings API into its own file.
This commit is contained in:
38
api.go
Normal file
38
api.go
Normal file
@@ -0,0 +1,38 @@
|
||||
// Copyright 2014 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
//
|
||||
// Web API for providing JSON-formatted event data.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// Generates a JSON dump of the qualification rankings.
|
||||
func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rankings, err := db.GetAllRankings()
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
if rankings == nil {
|
||||
// Go marshals an empty slice to null, so explicitly create it so that it appears as an empty JSON array.
|
||||
rankings = make([]Ranking, 0)
|
||||
}
|
||||
|
||||
data, err := json.MarshalIndent(rankings, "", " ")
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_, err = io.WriteString(w, string(data))
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
38
api_test.go
Normal file
38
api_test.go
Normal file
@@ -0,0 +1,38 @@
|
||||
// Copyright 2014 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRankingsApi(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, _ = OpenDatabase(testDbPath)
|
||||
|
||||
// Test that empty rankings produces an empty array.
|
||||
recorder := getHttpResponse("/api/rankings")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
assert.Equal(t, "application/json", recorder.HeaderMap["Content-Type"][0])
|
||||
assert.Equal(t, "[]", recorder.Body.String())
|
||||
|
||||
ranking1 := Ranking{1114, 2, 18, 1100, 625, 90, 554, 0.254, 9, 1, 0, 0, 10}
|
||||
ranking2 := Ranking{254, 1, 20, 1100, 625, 90, 554, 0.254, 10, 0, 0, 0, 10}
|
||||
db.CreateRanking(&ranking1)
|
||||
db.CreateRanking(&ranking2)
|
||||
|
||||
recorder = getHttpResponse("/api/rankings")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
assert.Equal(t, "application/json", recorder.HeaderMap["Content-Type"][0])
|
||||
var jsonRankings []Ranking
|
||||
err := json.Unmarshal([]byte(recorder.Body.String()), &jsonRankings)
|
||||
assert.Nil(t, err)
|
||||
if assert.Equal(t, 2, len(jsonRankings)) {
|
||||
assert.Equal(t, ranking1, jsonRankings[1])
|
||||
assert.Equal(t, ranking2, jsonRankings[0])
|
||||
}
|
||||
}
|
||||
24
reports.go
24
reports.go
@@ -7,10 +7,8 @@ package main
|
||||
|
||||
import (
|
||||
"code.google.com/p/gofpdf"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/gorilla/mux"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"text/template"
|
||||
@@ -38,28 +36,6 @@ func RankingsCsvReportHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
// Generates a JSON-formatted report of the qualification rankings.
|
||||
func RankingsJSONReportHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rankings, err := db.GetAllRankings()
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text/plain")
|
||||
data, err := json.MarshalIndent(rankings, "", " ")
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = io.WriteString(w, string(data))
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Generates a PDF-formatted report of the qualification rankings.
|
||||
func RankingsPdfReportHandler(w http.ResponseWriter, r *http.Request) {
|
||||
rankings, err := db.GetAllRankings()
|
||||
|
||||
16
web.go
16
web.go
@@ -125,14 +125,14 @@ func newHandler() http.Handler {
|
||||
router.HandleFunc("/match_review", MatchReviewHandler).Methods("GET")
|
||||
router.HandleFunc("/match_review/{matchId}/edit", MatchReviewEditGetHandler).Methods("GET")
|
||||
router.HandleFunc("/match_review/{matchId}/edit", MatchReviewEditPostHandler).Methods("POST")
|
||||
router.HandleFunc("/reports/csv/rankings", RankingsCsvReportHandler)
|
||||
router.HandleFunc("/reports/pdf/rankings", RankingsPdfReportHandler)
|
||||
router.HandleFunc("/reports/json/rankings", RankingsJSONReportHandler)
|
||||
router.HandleFunc("/reports/csv/schedule/{type}", ScheduleCsvReportHandler)
|
||||
router.HandleFunc("/reports/pdf/schedule/{type}", SchedulePdfReportHandler)
|
||||
router.HandleFunc("/reports/csv/teams", TeamsCsvReportHandler)
|
||||
router.HandleFunc("/reports/pdf/teams", TeamsPdfReportHandler)
|
||||
router.HandleFunc("/", IndexHandler)
|
||||
router.HandleFunc("/reports/csv/rankings", RankingsCsvReportHandler).Methods("GET")
|
||||
router.HandleFunc("/reports/pdf/rankings", RankingsPdfReportHandler).Methods("GET")
|
||||
router.HandleFunc("/reports/csv/schedule/{type}", ScheduleCsvReportHandler).Methods("GET")
|
||||
router.HandleFunc("/reports/pdf/schedule/{type}", SchedulePdfReportHandler).Methods("GET")
|
||||
router.HandleFunc("/reports/csv/teams", TeamsCsvReportHandler).Methods("GET")
|
||||
router.HandleFunc("/reports/pdf/teams", TeamsPdfReportHandler).Methods("GET")
|
||||
router.HandleFunc("/api/rankings", RankingsApiHandler).Methods("GET")
|
||||
router.HandleFunc("/", IndexHandler).Methods("GET")
|
||||
return router
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user