Go to file
2025-10-31 13:58:44 +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 13:58:44 +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

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

Servicio B

  • Especificación OpenAPI
  • Endpoint GET /weather/{city} + parámetros
  • Conversión entre Celsius y Fahrenheit
  • Caché
  • 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

Recientemente hice otra prueba técnica para el mismo puesto y mismo lenguaje distintas tecnologías, en ese caso era para trabajar con mensajería NATS, puedes ver más

  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.