Go to file
2025-10-31 00:53:11 +01:00
pkg some fixes for docker and migrations 2025-10-31 00:17:48 +01:00
service_a some fixes for docker and migrations 2025-10-31 00:17:48 +01:00
service_b some fixes for docker and migrations 2025-10-31 00:17:48 +01:00
.env.example add .env.example and update .gitignore 2025-10-31 00:18:51 +01:00
.gitignore add .env.example and update .gitignore 2025-10-31 00:18:51 +01:00
docker-compose.yml some fixes for docker and migrations 2025-10-31 00:17:48 +01:00
Makefile refactor to add ingest batchs for better traceability 2025-10-23 18:11:26 +02:00
meteo.csv add more tests cases 2025-10-23 03:23:26 +02:00
README.md update readme 2025-10-31 00:53:11 +01:00

meteologica

Prueba técnica para el puesto de desarrollador Go/C++

Requisitos previos

  • Docker
  • Go
  • Make, si prefieres usar la comodidad de Makefile

Rutas disponibles

Compilar todos los servicios e iniciar los contenedores Docker.

docker compose --env-file <path/to/file> up --build`

Hacer petición POST con fichero a /ingest/csv

curl -X POST "http://<host>/ingest/csv" -F "file=@<file>.csv"

curl -X POST "http://localhost:8080/ingest/csv" -F "file@meteo.csv"

Hacer petición GET a /cities para listar las ciudades

curl "http://<host>/cities"

curl "http://localhost:8080/cities"

Hacer petición GET a /data para obtener datos en crudo

curl "http://<host>/data?city=<city>&from=<yyyy-mm-dd>&to=<yyyy-mm-dd>&page=<n>&limit=<n>"

curl "http://localhost:8080/data?city=Madrid&from=2025-01-01&to=2025-12-31&page=3&limit=2"

Hacer petición GET a /weather/{city}

curl "http://<host>/weather/<city>?date=<yyyy-mm-dd>&days=<1-10>&unit=<C | F>&agg=<daily | rolling>"

curl "http://localhost:8090/weather/madrid?date=2025-11-02&days=10&unit=F&agg=rolling"

Requisitos cubiertos

Servicio A

[x] Base de datos [x] Endpoint POST /ingest/csv [x] Listar ciudades en base de datos [x] Mostrar registros en crudo [ ] Especificación OpenAPI

Servicio B

[ ] Especificación OpenAPI [x] Endpoint GET /weather/{city} + parámetros [x] Conversión entre Celsius y Fahrenheit [ ] Caché [x] Tolerancia a fallos

Consideraciones

Hay partes de códigos que son snippets extraídos de una librería de autoría propia. Repositorio GitHub. De las cuales son:

  • La conexión con la base de datos, usando el controlador pgx.
  • La carga de variables de entorno mediante fichero.
  • La migración de base de datos.

Bitácora

  1. Hablar sobre la función normalize, repetición de parse float. Justificar que se puede haber extraído a una función, pero ambas opciones son válidas (YAGNI)

  2. Hablar sobre las sobreabstracciones que se hacen en el código. Hay que busca un punto de equlibrio entre abstraer o ser explícito.