53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type srLatestResponse struct {
|
|
Support float64 `json:"support"`
|
|
Resistance float64 `json:"resistance"`
|
|
Midpoint float64 `json:"midpoint"`
|
|
AvgPrice *float64 `json:"avgPrice"`
|
|
Method string `json:"method"`
|
|
LookbackDays int `json:"lookbackDays"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
func (s *Server) handleSRLatest(w http.ResponseWriter, r *http.Request) {
|
|
sr, err := s.srRepo.GetLatest(r.Context())
|
|
if err != nil {
|
|
fmt.Printf("Error fetching latest S/R: %v\n", err)
|
|
writeError(w, http.StatusInternalServerError, "failed to fetch S/R data")
|
|
return
|
|
}
|
|
if sr == nil {
|
|
writeError(w, http.StatusNotFound, "no S/R data available")
|
|
return
|
|
}
|
|
|
|
writeJSON(w, http.StatusOK, srLatestResponse{
|
|
Support: sr.Support,
|
|
Resistance: sr.Resistance,
|
|
Midpoint: sr.Midpoint,
|
|
AvgPrice: sr.AvgPrice,
|
|
Method: sr.Method,
|
|
LookbackDays: sr.LookbackDays,
|
|
Timestamp: sr.Timestamp,
|
|
})
|
|
}
|
|
|
|
func (s *Server) handleSRHistory(w http.ResponseWriter, r *http.Request) {
|
|
limit := parseLimit(r, 100)
|
|
|
|
history, err := s.srRepo.GetHistory(r.Context(), limit)
|
|
if err != nil {
|
|
fmt.Printf("Error fetching S/R history: %v\n", err)
|
|
writeError(w, http.StatusInternalServerError, "failed to fetch S/R history")
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, history)
|
|
}
|