71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
|
|
"trade/web/internal/store"
|
|
)
|
|
|
|
func (d *Deps) ListScores(w http.ResponseWriter, r *http.Request) {
|
|
q := r.URL.Query()
|
|
limit := 0
|
|
if s := q.Get("limit"); s != "" {
|
|
if n, err := strconv.Atoi(s); err == nil {
|
|
limit = n
|
|
}
|
|
}
|
|
rows, err := d.Futures.ListScores(store.ScoreFilter{
|
|
TsCode: q.Get("ts_code"),
|
|
Start: q.Get("start"),
|
|
End: q.Get("end"),
|
|
Limit: limit,
|
|
})
|
|
if err != nil {
|
|
writeErr(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, rows)
|
|
}
|
|
|
|
func (d *Deps) GetScore(w http.ResponseWriter, r *http.Request) {
|
|
idStr := chi.URLParam(r, "id")
|
|
id, err := strconv.ParseInt(idStr, 10, 64)
|
|
if err != nil {
|
|
writeErr(w, http.StatusBadRequest, "invalid id")
|
|
return
|
|
}
|
|
row, err := d.Futures.GetScore(id)
|
|
if err != nil {
|
|
writeErr(w, http.StatusNotFound, err.Error())
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, row)
|
|
}
|
|
|
|
func (d *Deps) ListContracts(w http.ResponseWriter, r *http.Request) {
|
|
out, err := d.Futures.ListContracts()
|
|
if err != nil {
|
|
writeErr(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, out)
|
|
}
|
|
|
|
func (d *Deps) ListCandles(w http.ResponseWriter, r *http.Request) {
|
|
q := r.URL.Query()
|
|
rows, err := d.Futures.ListCandles(q.Get("ts_code"), q.Get("start"), q.Get("end"))
|
|
if err != nil {
|
|
if errors.Is(err, store.ErrMissingTsCode) {
|
|
writeErr(w, http.StatusBadRequest, err.Error())
|
|
return
|
|
}
|
|
writeErr(w, http.StatusInternalServerError, err.Error())
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, rows)
|
|
}
|