From 28c2c6a5d6a4c7b50dcca1dcafd10d06fb9a582c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Thu, 23 Oct 2025 17:23:52 +0200 Subject: [PATCH] change db types for better handling --- service_a/internal/domains/meteo/domain.go | 2 +- service_a/internal/domains/meteo/file.go | 14 +++++++++++++- .../server/database/migrations/001_data.up.sql | 12 +++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/service_a/internal/domains/meteo/domain.go b/service_a/internal/domains/meteo/domain.go index 8a3941b..0451df9 100644 --- a/service_a/internal/domains/meteo/domain.go +++ b/service_a/internal/domains/meteo/domain.go @@ -13,7 +13,7 @@ type MeteoData struct { MaxTemp float32 `csv:"temperatura maxima"` MinTemp float32 `csv:"temperatura minima"` Rainfall float32 `csv:"precipitacion"` - Cloudiness float32 `csv:"nubosidad"` + Cloudiness int `csv:"nubosidad"` } type RejectedMeteoData struct { diff --git a/service_a/internal/domains/meteo/file.go b/service_a/internal/domains/meteo/file.go index ddc3324..3af1fab 100644 --- a/service_a/internal/domains/meteo/file.go +++ b/service_a/internal/domains/meteo/file.go @@ -129,7 +129,7 @@ func normalize(record H) (*MeteoData, error) { return nil, err } - meteoData.Cloudiness, err = parseFloatField(record, "Nubosidad (%)", ErrMissingOrInvalidCloudiness) + meteoData.Cloudiness, err = parseIntField(record, "Nubosidad (%)", ErrMissingOrInvalidCloudiness) if err != nil { return nil, err } @@ -166,3 +166,15 @@ func parseFloatField(record H, key string, errMissing error) (float32, error) { } return 0, errMissing } + +func parseIntField(record H, key string, errMissing error) (int, error) { + if str, ok := record[key].(string); ok && str != "" { + str = strings.TrimSpace(str) + i, err := strconv.Atoi(str) + if err != nil { + return 0, errMissing + } + return i, nil + } + return 0, errMissing +} diff --git a/service_a/server/database/migrations/001_data.up.sql b/service_a/server/database/migrations/001_data.up.sql index 7395d13..5e063b1 100644 --- a/service_a/server/database/migrations/001_data.up.sql +++ b/service_a/server/database/migrations/001_data.up.sql @@ -1,14 +1,16 @@ +create extension citext; -- noqa + create table public.meteo_data ( id serial primary key, location_name citext not null, - max_temp float not null, - min_temp float not null, - rainfall float not null, - cloudiness float not null, + max_temp numeric(5,2) not null, + min_temp numeric(5,2) not null, + rainfall numeric(5,2) not null, + cloudiness int not null, - created_at timestamp not null default now() + created_at date not null default now() ); create index idx_meteo_data_location_name on public.meteo_data (location_name);