Ejemplo n.º 1
0
// StandingsHandler returns a web handler function that provides information on
// the user's toons' effective standings.
func StandingsHandler(localdb db.LocalDB, sess server.Sessionizer) web.HandlerFunc {
	standingsFunc := func(c web.C, w http.ResponseWriter, r *http.Request) {
		s := sess.GetSession(&c, w, r)
		userID := s.User
		charID, _ := strconv.Atoi(c.URLParams["charID"])
		npcCorpID, _ := strconv.Atoi(c.URLParams["npcCorpID"])
		corpStanding, facStanding, err := localdb.CharacterStandings(userID, charID, npcCorpID)
		if err != nil {
			errorStr := "Unable to get character standings."
			if err == sql.ErrNoRows {
				errorStr = "Invalid corporation ID passed."
			}
			http.Error(w, fmt.Sprintf(`{"status": "Error", "error": "%v"}`, errorStr),
				http.StatusInternalServerError)
			return
		}
		connections, err := localdb.CharacterSkill(userID, charID, connectionsSkillID)
		if err != nil {
			http.Error(w, `{"status": "Error", "error": "Ouch"}`,
				http.StatusInternalServerError)
			return
		}
		diplomacy, err := localdb.CharacterSkill(userID, charID, diplomacySkillID)
		if err != nil {
			http.Error(w, `{"status": "Error", "error": "Ouch"}`,
				http.StatusInternalServerError)
			return
		}
		effectiveStanding := character.EffectiveStanding(corpStanding, facStanding, connections, diplomacy)
		statusMsg := struct {
			Status            string  `json:"status"`
			EffectiveStanding float64 `json:"standing"`
		}{
			"OK",
			effectiveStanding,
		}

		statusJSON, _ := json.Marshal(&statusMsg)
		w.Write(statusJSON)
		return
	}

	return standingsFunc
}