Este proyecto consiste en un microservicio en Go que expone un endpoint para leer un archivo CSV, consultar APIs de MercadoLibre y guardar los datos en una base de datos MongoDB.
- Go 1.21+
- Gin
- Godotenv
- MongoDB
- Docker
- Docker
- Docker Compose
- Postman (opcional)
- Insomnia (opcional)
proyecto-root/
│
├── api/
│ └── urls.go
│ - Define las rutas o endpoints y las asocia con sus controladores correspondientes.
│
├── config/
│ ├── bootstrap.go
│ - Maneja la inicialización y configuración de componentes esenciales, como la conexión a la base de datos y el logger.
├── core/
│ ├── csvprocessor.go
│ - Define la lógica para procesar archivos CSV.
│ ├── jsonlprocessor.go
│ - Define la lógica para procesar archivos JSONL.
│ ├── meliapi.go
│ - Define la lógica para interactuar con la API de MercadoLibre.
│ ├── meliclient.go
│ - Define la lógica para interactuar a nivel de cliente con la API de MercadoLibre.
│ ├── models.go
│ - Define la estructura `Item` que representa un ítem en la base de datos.
│ ├── process.go
│ - Define una función que inicia un proceso para manejar archivos.
│ ├── repository.go
│ - Define la lógica para interactuar con la base de datos MongoDB.
│ └── txtprocessor.go
│ - Esqueleto para el procesamiento de archivos TXT (sin implementación real).
│
├── v1/
│ ├── controllers.go
│ - Define los controladores que manejan las solicitudes HTTP.
│ └── middlewares.go
│ - Define middlewares para inyectar la base de datos y el logger en el contexto de Gin.
│
├── main.go
│ - Punto de entrada del proyecto. Inicializa componentes esenciales y arranca el servidor web.
│
└── data.csv
- Una muestra de datos en formato CSV.
- Clona el repositorio
git clone https://github.com/cesarcruzc/meli
- Entra en la carpeta del proyecto
cd meli
- Crea el archivo
.enva partir del archivo.env.example
cp .env.example .env
- Configura las variables de entorno en el archivo
.envel valorX_API_KEYfue enviado al correo y es vital.
-
El proyecto utiliza variables de entorno para configurar el servicio. Estas variables se encuentran en el archivo
.envMONGO_URI: URI de conexión a la base de datos MongoDBMONGO_DB: Nombre de la base de datos MongoDBAPI_URL: URL del API de MercadoLibreAPI_TOKEN_URL: URL de servicio externo para obtener token de acceso cada 5 horasX_API_KEY: API Key para autenticación en el servicio externoFILE_PATH: Ruta del archivo a procesarFILE_TYPE: Tipo de archivo a procesarFILE_SEPARATOR: Separador de columnas del archivo a procesar
-
Ejecuta el comando para construir la imagen de Docker y levantar los contenedores
docker-compose up --build
- El servicio estará disponible en la siguiente URL:
http://127.0.0.1:8888/
La documentación de la API se encuentra disponible en la siguiente URL: http://127.0.0.1:8888/api/v1/docs/index.html
La API expone los siguientes endpoints:
- Endpoint:
/ - Método:
GET - Descripción: Inicio de la API
- Endpoint:
/health - Método:
GET - Descripción: Verifica el estado de la API
- Endpoint:
/api/v1/process-file - Método:
POST - Descripción: Procesa un archivo CSV y guarda los datos obtenidos del API de MercadoLibre en la base de datos
-
Endpoint:
/api/v1/items -
Método:
GET -
Descripción: Obtiene todos los items
-
Parámetros:
page: Página de items a obtenerpageSize: Cantidad de items por página
-
Endpoint:
/api/v1/token -
Método:
POST -
Descripción: Obtiene un token de acceso para consumir el API de MercadoLibre de un servicio externo autenticado mediante apiKey
- Ejecutar el servicio de consulta de datos de MercadoLibre (meli)
curl --request POST \
--url http://127.0.0.1:8888/api/v1/process-file \
--header 'User-Agent: insomnia/2023.5.8'
- Consultar los items guardados en la base de datos
curl --request GET \
--url 'http://127.0.0.1:8888/api/v1/items?page=1&pageSize=10' \
--header 'User-Agent: insomnia/2023.5.8'
proyecto-root/
│
├── theoretical-challenge/
│ └── README.MD
│ - Contiene la solución al desafío técnico.
- Autor: César Cruz
- Email: cc.cruz.caceres@gmail.com
- Phone: +57 315 275 8073