meteologica/README.md
2025-10-31 13:58:44 +01:00

90 lines
2.3 KiB
Markdown

# 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.
```bash
docker compose --env-file <path/to/file> up --build`
```
Hacer petición POST con fichero a `/ingest/csv`
```bash
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
```bash
curl "http://<host>/cities"
curl "http://localhost:8080/cities"
```
Hacer petición GET a `/data` para obtener datos en crudo
```bash
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}`
```bash
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](https://github.com/zepyrshut/gopher-toolbox). De
las cuales son:
- La conexión con la base de datos, usando el controlador [pgx](https://github.com/jackc/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.