func Get()

in functions.go [124:190]


func Get(res http.ResponseWriter, req *http.Request) {
	l := namedLogger(zap.S(), "Get", req)
	defer l.Sync()

	l.Info("Get start")
	res.Header().Set("Access-Control-Allow-Origin", "*")

	q := req.URL.Query()
	radix, err := getIntQueryParam(l, q, "radix", 10)
	if err != nil {
		writeError(l, res, http.StatusBadRequest, err.Error())
		return
	}
	if radix != 10 && radix != 16 {
		writeError(l, res, http.StatusBadRequest, "radix must be either 10 or 16")
		return
	}
	set := index.Decimal
	if radix == 16 {
		set = index.Hexadecimal
	}

	start, err := getIntQueryParam(l, q, "start", 0)
	if err != nil {
		writeError(l, res, http.StatusBadRequest, err.Error())
		return
	}
	if start < 0 {
		writeError(l, res, http.StatusBadRequest, "start is negative")
		return
	}
	if start > set.TotalDigits() {
		writeError(l, res, http.StatusBadRequest, "start out of range")
		return
	}

	numberOfDigits, err := getIntQueryParam(l, q, "numberOfDigits", 100)
	if err != nil {
		writeError(l, res, http.StatusBadRequest, err.Error())
		return
	}
	if numberOfDigits < 0 {
		writeError(l, res, http.StatusBadRequest, "numberOfDigits is negative")
		return
	}
	if numberOfDigits > int64(maxDigitsPerRequest) {
		writeError(l, res, http.StatusBadRequest, "numberOfDigits is too big")
		return
	}

	unpacked, err := getService(req.Context()).
		Get(req.Context(), l, set, start, numberOfDigits)
	if err != nil {
		writeError(l, res, http.StatusInternalServerError, "Internal Server Error")
		return
	}
	res.Header().Set("Content-Type", "application/json")
	res.WriteHeader(http.StatusOK)
	err = json.NewEncoder(res).EncodeWithOption(
		&GetResponse{Content: string(unpacked)},
		json.DisableHTMLEscape(),
	)
	if err != nil {
		l.Errorw("json encode failed",
			"error", err)
	}
}