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 }