| pkg | ||
| service_a | ||
| service_b | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Makefile | ||
| meteo.csv | ||
| README.md | ||
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
-
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)
-
Hablar sobre las sobreabstracciones que se hacen en el código. Hay que busca un punto de equlibrio entre abstraer o ser explícito.