first commit of restructured project

This commit is contained in:
KS Jannette
2026-02-22 15:21:18 -05:00
commit 9fca234606
75 changed files with 8299 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
package api
import (
"fmt"
"net/http"
"github.com/kjannette/trahn-backend/internal/repository"
)
type priceJSON struct {
T int64 `json:"t"`
P float64 `json:"p"`
}
func (s *Server) handlePricesToday(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
today := repository.TradingDayNow()
prices, err := s.priceRepo.GetByDay(ctx, today)
if err != nil {
fmt.Printf("Error fetching today's prices: %v\n", err)
writeError(w, http.StatusInternalServerError, "failed to fetch prices")
return
}
out := make([]priceJSON, len(prices))
for i, p := range prices {
out[i] = priceJSON{T: p.Timestamp.UnixMilli(), P: p.Price}
}
writeJSON(w, http.StatusOK, out)
}
func (s *Server) handlePricesByDay(w http.ResponseWriter, r *http.Request) {
date := r.PathValue("date")
if !validateDate(date) {
writeError(w, http.StatusBadRequest, "invalid date format, expected YYYY-MM-DD")
return
}
ctx := r.Context()
prices, err := s.priceRepo.GetByDay(ctx, date)
if err != nil {
fmt.Printf("Error fetching prices for %s: %v\n", date, err)
writeError(w, http.StatusInternalServerError, "failed to fetch prices")
return
}
out := make([]priceJSON, len(prices))
for i, p := range prices {
out[i] = priceJSON{T: p.Timestamp.UnixMilli(), P: p.Price}
}
writeJSON(w, http.StatusOK, out)
}
func (s *Server) handleAvailableDays(w http.ResponseWriter, r *http.Request) {
days, err := s.priceRepo.GetAvailableDays(r.Context())
if err != nil {
fmt.Printf("Error fetching available days: %v\n", err)
writeError(w, http.StatusInternalServerError, "failed to fetch available days")
return
}
if days == nil {
days = []string{}
}
writeJSON(w, http.StatusOK, days)
}
func (s *Server) handleLatestPrice(w http.ResponseWriter, r *http.Request) {
price, err := s.priceRepo.GetLatest(r.Context())
if err != nil {
fmt.Printf("Error fetching latest price: %v\n", err)
writeError(w, http.StatusInternalServerError, "failed to fetch latest price")
return
}
if price == nil {
writeError(w, http.StatusNotFound, "no price data available")
return
}
writeJSON(w, http.StatusOK, priceJSON{T: price.Timestamp.UnixMilli(), P: price.Price})
}