From 802dfc97a2b869effc0bd9d650bede2b80313c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Thu, 30 Oct 2025 14:44:26 +0100 Subject: [PATCH] add simple fetch to another service --- service_b/internal/domains/meteo/handlers.go | 12 ++++++-- service_b/internal/domains/meteo/service.go | 29 ++++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/service_b/internal/domains/meteo/handlers.go b/service_b/internal/domains/meteo/handlers.go index a383faa..485251f 100644 --- a/service_b/internal/domains/meteo/handlers.go +++ b/service_b/internal/domains/meteo/handlers.go @@ -33,8 +33,16 @@ func (h *Handler) GetMeteoData(w http.ResponseWriter, r *http.Request) { if err := params.Validate(); err != nil { slog.Error("error validating struct", "error", err) h.ToJSON(w, http.StatusBadRequest, app.H{"error": err.Error()}) + return } - slog.Info("loc value", "value", params) - return + data, err := h.s.GetWeatherByCity(r.Context(), params) + if err != nil { + slog.Error("error", "err", err) + h.ToJSON(w, http.StatusInternalServerError, app.H{"error": err}) + return + } + + slog.Info("data retrieved", "location", params.Location) + h.ToJSON(w, http.StatusOK, data) } diff --git a/service_b/internal/domains/meteo/service.go b/service_b/internal/domains/meteo/service.go index 37c3250..53df9ec 100644 --- a/service_b/internal/domains/meteo/service.go +++ b/service_b/internal/domains/meteo/service.go @@ -2,12 +2,17 @@ package meteo import ( "context" + "fmt" + "log/slog" + "net/http" "sync" + "time" ) type inMemory struct { - data map[string]MeteoData - mu *sync.RWMutex + data any + mu *sync.RWMutex + expiry time.Time } type Service struct { inMemory @@ -18,5 +23,25 @@ func NewService() *Service { } func (s *Service) GetWeatherByCity(ctx context.Context, params GetMeteoData) ([]MeteoData, error) { + fromDate, err := time.Parse("2006-01-02", params.Date) + if err != nil { + return nil, err + } + toDate := fromDate.AddDate(0, 0, params.Days-1) + + url := fmt.Sprintf("http://localhost:8080/data?city=%s&from=%s&to=%s", + params.Location, params.Date, toDate.Format("2006-01-02")) + + resp, err := http.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + // TODO add backoff + // TODO add ristretto + + slog.Info("fetched data", "data", resp) + return []MeteoData{}, nil }