{"id":15069399,"url":"https://github.com/dantezulli/convertrail","last_synced_at":"2026-01-02T23:07:51.325Z","repository":{"id":177403772,"uuid":"660250967","full_name":"DanteZulli/convertrail","owner":"DanteZulli","description":"Un wizard conversor de archivos de CSV 🧙","archived":false,"fork":false,"pushed_at":"2023-07-18T12:41:51.000Z","size":597,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-16T09:14:33.826Z","etag":null,"topics":["csv","csv-parser","java","json","maven","openjdk","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DanteZulli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-29T15:20:57.000Z","updated_at":"2023-07-04T13:40:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"8608c63b-f271-49dc-a48f-52818d4a8357","html_url":"https://github.com/DanteZulli/convertrail","commit_stats":null,"previous_names":["dantezulli/convertrail"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanteZulli%2Fconvertrail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanteZulli%2Fconvertrail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanteZulli%2Fconvertrail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanteZulli%2Fconvertrail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanteZulli","download_url":"https://codeload.github.com/DanteZulli/convertrail/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243847061,"owners_count":20357317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","csv-parser","java","json","maven","openjdk","spring-boot"],"created_at":"2024-09-25T01:42:15.549Z","updated_at":"2026-01-02T23:07:51.307Z","avatar_url":"https://github.com/DanteZulli.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"images/logo.png\" alt=\"Logo\" width=\"200\" height=\"200\"\u003e\n    \u003ch1 align=\"center\"\u003eConvertrail\u003c/h1\u003e\n\n  \u003cp align=\"center\"\u003e\n      Un wizard conversor de archivos de CSV 🧙\n    \u003cbr/\u003e\n    \u003ca href=\"https://github.com/DanteZulli/convertrail\"\u003eDocumentación\u003c/a\u003e\n    .\n    \u003ca href=\"https://github.com/DanteZulli/convertrail/issues\"\u003eReportar Bugs\u003c/a\u003e\n    .\n    \u003ca href=\"https://github.com/DanteZulli/convertrail/issues\"\u003eSolicitar features\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Downloads](https://img.shields.io/github/downloads/DanteZulli/convertrail/total) ![Contributors](https://img.shields.io/github/contributors/DanteZulli/convertrail?color=dark-greenn) ![Issues](https://img.shields.io/github/issues/DanteZulli/convertrail) ![License](https://img.shields.io/github/license/DanteZulli/convertrail.svg?)\n\n\u003c/div\u003e\n\n## Tabla de contenidos\n\n- [Tabla de contenidos](#tabla-de-contenidos)\n- [Sobre el proyecto](#sobre-el-proyecto)\n- [Diagrama de clases (UML)](#diagrama-de-clases-uml)\n- [Construido con](#construido-con)\n- [Para empezar](#para-empezar)\n  - [Prerrequisitos](#prerrequisitos)\n  - [Que incluye este proyecto?](#que-incluye-este-proyecto)\n- [Roadmap del proyecto](#roadmap-del-proyecto)\n- [To-Do List](#to-do-list)\n- [Contribuciones](#contribuciones)\n  - [Creando un Pull Request](#creando-un-pull-request)\n- [Licencia](#licencia)\n- [Autor](#autor)\n- [Otros Recursos que usé](#otros-recursos-que-usé)\n\n## Sobre el proyecto\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"images/wizard_1.png\" alt=\"Logo\" width=\"200\" height=\"200\"\u003e\n\u003c/div\u003e\n\u003ci\u003e\u003cb\u003eConvertrail\u003c/b\u003e\u003c/i\u003e (un juego de palabras entre \"convert\" y \"trail\", que significa \"conversor\" y \"camino\" respectivamente) es un conversor de archivos CSV. Nació como un proyecto para la [Superintendencia de Seguros de la Nación](https://www.argentina.gob.ar/superintendencia-de-seguros), pero luego fue separado y se le fueron agregando funcionalidades (Así como cambiando de perspectiva) para que llegue a ser lo que es ahora.\u003cbr\u003e\nEl proyecto apunta a ser una forma sencilla de convertir archivos CSV a otros formatos, como JSON (Actualmente el único formato disponible).\u003cbr\u003e\nSe intenta mantener el dinamismo y la versatilidad, utilizando un sistema de parseo que cambia dinámicamente según los datos que se le pasen.\u003cbr\u003e\nTambién posee un ApiController via \u003ci\u003eHttpClient\u003c/i\u003e que se encarga de manejar las peticiones al servidor (por si se requiere consumir una API con los datos parseados), y un sistema de logs que se encarga de registrar los errores y las acciones que se realizan en el programa.\u003cbr\u003e\nEl proyecto está en constante desarrollo, por lo que se irán agregando funcionalidades y mejorando el código con el pasar del tiempo. Mientras tanto, sientanse libres de utilzarlo, armarlo y desarmarlo a gusto! 😄\n\n\n## Diagrama de clases (UML)\n\nRecientemente realicé una refactorización completa al código de Convertrail. Como ahora está estructurado, decidí agregarle un diagrama como corresponde, para facilitar así su comprensión.\u003cbr\u003e\n(Por si no se ve correctamente: Está programado en Mermaid🧜‍♀️ así que debería de verse integrado a la perfección en este Readme. De no ser así, pueden copiar el código y pegarlo en el siguiente [editor online](https://mermaid.live/edit#pako:eNqlVFFrwjAQ_ishT5XZPxBEGI6BwtxYZU99OZqzZmvTkqQycf73XVun1bQiLC8Jl_u-u_u-NnueFBK54EkG1j4pSA3ksWa0mgh7VhnOCr1F49CwfXtVr8lkrim0hgSn03P4IWmTAwkOBHsfCbZqbw-x7hLPoo9B7vBekkX0uvw_C7WyKmqqRwmlR2K3J3bhdd1J_LSF7mR6rXU0ui4YjHwB2xziDKiDmkg0XoxZXac-vYHbCBY5o3R6ji4hx78oDbwtlLya2RM-DH-mVz4LpvIywxy1sy3KV_oumCdtL6qyaD1L5rqsHA0CDtPdPV-eQZCEC0aslWrI64aYyuO3u3DaHmsJr_qldR18MIzpWpqiaxq70VcjyY2hw9N0vSS98EZrL9prUleTIZjEtdJo-ZjnaHJQkp6NpsOYuw3xxVzQUYL5inmsD5QHlSuinU64cKbCMa9K-hXx-MpwsYbMUhSlcoV5Ob5D9Xb4Bcw5ebQ))\n\n```mermaid\nclassDiagram\n    class FileConverter {\n        \u003c\u003cInterface\u003e\u003e\n        +convert(data: R): T\n    }\n\n    class CSVFileConverter {\n        -convert(data: R): T\n    }\n\n    class JSONFileConverter {\n        -convert(data: R): T\n    }\n\n    class CSVToJSONAdapter {\n        -csvConverter: CSVFileConverter\n        -jsonConverter: JSONFileConverter\n        +CSVToJSONAdapter()\n        +convertCSVToJson(csvFile: File, jsonFilePath: String, jsonFileName: String): void\n    }\n\n    CSVFileConverter --|\u003e FileConverter : implements\n    JSONFileConverter --|\u003e FileConverter : implements\n    CSVToJSONAdapter --|\u003e FileConverter : uses\n\n    class CSVInputStrategy {\n        \u003c\u003cInterface\u003e\u003e\n        +readCSV() : File\n    }\n\n    class CSVInputConext {\n        -strategy: CSVInputStrategy\n        +CSVInputConext(strategy: CSVInputStrategy)\n        +getCSV(): File\n    }\n\n    class FileCSVInputStrategy {\n        -readCSV(): File\n    }\n\n    FileCSVInputStrategy --|\u003e CSVInputStrategy : implements\n    CSVInputConext --|\u003e CSVInputStrategy : defines\n```\n\nPor el momento, presenta dos estructuras base; Una para el input de los CSV (Dentro del paquete \"input\"), y otra para la conversión de los mismos (Dentro del paquete \"conversion\").\nEl paquete \"conversion\" se aferra al [Patrón de diseño estructural \"Adapter\"](https://refactoring.guru/design-patterns/adapter), que es la opción que elegí (y la más viable) para escalabilidad del mismo respecto a los tipos de archivos y sus formatos de salida.\u003cbr\u003e\nSiguiendo el mismo enfoque, apliqué un [Patrón de comportamiento Strategy](https://refactoring.guru/design-patterns/strategy) en el paquete \"input\", para facilitar el ingreso de archivos CSV, pudiendo definir distintas estrategias de operación para distintos tipos de ingreso de datos.\n\n## Construido con\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"images/wizard_3.png\" alt=\"Logo\" width=\"200\" height=\"200\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\nEste proyecto fue construido con las siguientes herramientas:\n\n- [Java](https://www.java.com/es/download/) (Versión 17, aunque el código es compatible con versiones anteriores hasta Java 11)\n- [SpringBoot](https://spring.io/projects/spring-boot) (Versión 3.1.1)\n- [Maven](https://maven.apache.org/) (Versión 4.0.0, para manejar dependencias como GSON, Jackson, OpenCsv, etc)\n- [OpenJDK](https://openjdk.java.net/) (Versión 17, para compilar el código)\n- [VSCode](https://code.visualstudio.com/) (Como entorno de desarrollo, con todas las extensiones del pack de Java, las del pack de Spring y alguna que otra más) (NOTA: Hubo situaciones en las que VSCode rompía el proyecto al integrarlo en un Workspace. Lo sé, rarísimo. En esos casos para arreglarlo usé [Eclipse IDE](https://www.eclipse.org/downloads/))\n\nSi necesitan saber sobre alguna otra herramienta que se haya utilizado, pueden preguntar en los [issues](https://github.com/DanteZulli/convertrail/issues).\n\n## Para empezar\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"images/wizard_2.png\" alt=\"Logo\" width=\"200\" height=\"200\"\u003e\n\u003c/div\u003e\n\u003cbr\u003e\nEstas son las instrucciones para correr el proyecto en tu computadora local (A modo de ejemplo, esto no quiere decir que sea la única forma de correrlo).\n\n1. Clonar el repositorio\n\n```sh\ngit clone https://github.com/DanteZulli/quartz_scheduler.git\n```\n\n2. Asegurarse de tener instalado correctamente instalado Java 17.\n3. Asegurarse de tener correctamente instalados todos los tools de OpenJDK 17 (O superior) y que estos se encuentren agregados al PATH (O que la ruta de acceso esté especificada en tu IDE).\n\n```sh\nopenjdk version \"17.0.7\" 2023-04-18\nOpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7)\nOpenJDK 64-Bit Server VM Temurin-17.0.7+7 (build 17.0.7+7, mixed mode, sharing)\n```\n\n4. Importar el proyecto en tu IDE favorito (En mi caso, VSCode).\n5. Crear una build del proyecto y correrlo.\n\n### Prerrequisitos\n\n- Java 17 (O superior)\n- OpenJDK 17 (O superior)\n- Maven 4.0.0 (O superior)\n- VSCode (O cualquier otro IDE que soporte Java 17)\n- Git (O cualquier otro software de control de versiones)\n- Un poco de paciencia\n\n### Que incluye este proyecto?\n\nEn general, esta es la estructura del proyecto. Se intentará mantener/modificar con el pasar del desarrollo, desde yá pido disculpas si no se encuentra actualizada.\n\n```text\nsrc/main/java/\n└── ...convertrail/\n    ├── api/\n    │   ├── setup/\n    |   |   └── Archivos de configuración de la API\n    │   └── Archivos generales de la API\n    |── input/\n    |   └── Archivos para el manejo de archivos CSV\n    |── conversion/\n    |   └── Archivos para la conversion de archivos CSV\n    └── ConvertrailApplication.java\ncsv_pruebas/\n└── Archivos CSV varios a modo de pruebas/referencias\njson_output/\n└── Archivos JSON generados a partir de los\n```\n\n## Roadmap del proyecto\n\nPodés revisar los [open issues](https://github.com/DanteZulli/convertrail/issues) para ver una lista de las features propuestas (y los bugs conocidos).\n\n## To-Do List\n\n- [ ] Migrar a REST el ApiController. (Actualmente es un simple HttpClient).\n- [ ] Agregar soporte para otros formatos de archivos (XML, YAML, etc).\n- [ ] Configurar correctamente el sistema de logs (Con log4j2).\n- [ ] Crear algún tipo de interfaz gráfica para el usuario.\n- [ ] Agregar soporte para archivos comprimidos (ZIP, RAR, etc).\n- [ ] Agregar soporte para archivos encriptados (AES, RSA, etc).\n- [ ] Agregar soporte para archivos de texto plano (TXT, DOC, etc).\n- [ ] Desarrollar un sistema de tests para el proyecto (JUnit, Mockito, etc).\n- [x] Mejorar la estructura del proyecto (Separar en módulos, etc).\n\u003cbr\u003e\u003cem\u003e (Se aplicaron patrones de diseño Strategy y Adapter) \u003c/em\u003e\n- [x] Sintetizar el código (Reducir la cantidad de líneas, etc).\n\u003cbr\u003e\u003cem\u003eSe redujo código redundante en gran parte de las clases\u003c/em\u003e\n- [x] Estandarizar el código (Aplicar buenas prácticas, etc).\n\u003cbr\u003e\u003cem\u003eSe aplicaron patrones, y se re-designaron las responsabilidades de cada clase y método\u003c/em\u003e\n\nEntre otras cosas que se irán agregando con el pasar del tiempo.\n\n## Contribuciones\n\nLas contribuciones son lo que hacen que la comunidad open source sea un lugar tan increíble para aprender, inspirarse y crear. Cualquier contribución que hagas es **muy apreciada**. :D\n\n- Si tenes sugerencias para mejorar o modificar el proyecto, podés [abrir un issue](https://github.com/DanteZulli/convertrail/issues/new).\n- Si queres contribuir directamente, podes hacer un fork del proyecto, crear una branch con tus cambios y luego hacer un pull request.\n\n### Creando un Pull Request\n\n1. Hacé un Fork del proyecto\n2. Creá tu propia branch (`git checkout -b feature/AmazingFeature`)\n3. Hacé un commit con tus cambios (`git commit -m 'Add some AmazingFeature'`)\n4. Hacé un push (`git push origin feature/AmazingFeature`)\n5. Abrí un Pull Request\n\n## Licencia\n\nDistribuído bajo la licencia [MIT](https://opensource.org/license/mit/). Ver [LICENSE](https://github.com/DanteZulli/convertrail/LICENSE.md) para más información\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cimg src=\"images/open-sourcerer.png\" alt=\"Logo\" width=\"120\"\u003e\n\n## Autor\n\n- **Dante Zulli** - [Github](https://github.com/DanteZulli) - _Todos mis proyectos_\n\n## Otros Recursos que usé\n\n- [Othneil Drew](https://github.com/othneildrew/Best-README-Template) (Para el template del Readme)\n- [ImgShields](https://shields.io/) (Para los badges)\n- [Dall-E](https://openai.com/blog/dall-e/) (Para esos maguitos facheros)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdantezulli%2Fconvertrail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdantezulli%2Fconvertrail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdantezulli%2Fconvertrail/lists"}