Skip to content

DanteZulli/convertrail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Logo

Convertrail

Un wizard conversor de archivos de CSV 🧙
Documentación . Reportar Bugs . Solicitar features

Downloads Contributors Issues License

Tabla de contenidos

Sobre el proyecto

Logo
Convertrail (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.
El proyecto apunta a ser una forma sencilla de convertir archivos CSV a otros formatos, como JSON (Actualmente el único formato disponible).
Se intenta mantener el dinamismo y la versatilidad, utilizando un sistema de parseo que cambia dinámicamente según los datos que se le pasen.
También posee un ApiController via HttpClient 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.
El 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! 😄

Diagrama de clases (UML)

Recientemente 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.
(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)

classDiagram
    class FileConverter {
        <<Interface>>
        +convert(data: R): T
    }

    class CSVFileConverter {
        -convert(data: R): T
    }

    class JSONFileConverter {
        -convert(data: R): T
    }

    class CSVToJSONAdapter {
        -csvConverter: CSVFileConverter
        -jsonConverter: JSONFileConverter
        +CSVToJSONAdapter()
        +convertCSVToJson(csvFile: File, jsonFilePath: String, jsonFileName: String): void
    }

    CSVFileConverter --|> FileConverter : implements
    JSONFileConverter --|> FileConverter : implements
    CSVToJSONAdapter --|> FileConverter : uses

    class CSVInputStrategy {
        <<Interface>>
        +readCSV() : File
    }

    class CSVInputConext {
        -strategy: CSVInputStrategy
        +CSVInputConext(strategy: CSVInputStrategy)
        +getCSV(): File
    }

    class FileCSVInputStrategy {
        -readCSV(): File
    }

    FileCSVInputStrategy --|> CSVInputStrategy : implements
    CSVInputConext --|> CSVInputStrategy : defines
Loading

Por 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"). El paquete "conversion" se aferra al Patrón de diseño estructural "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.
Siguiendo el mismo enfoque, apliqué un Patrón de comportamiento 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.

Construido con

Logo

Este proyecto fue construido con las siguientes herramientas:
  • Java (Versión 17, aunque el código es compatible con versiones anteriores hasta Java 11)
  • SpringBoot (Versión 3.1.1)
  • Maven (Versión 4.0.0, para manejar dependencias como GSON, Jackson, OpenCsv, etc)
  • OpenJDK (Versión 17, para compilar el código)
  • VSCode (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)

Si necesitan saber sobre alguna otra herramienta que se haya utilizado, pueden preguntar en los issues.

Para empezar

Logo

Estas 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).
  1. Clonar el repositorio
git clone https://github.com/DanteZulli/quartz_scheduler.git
  1. Asegurarse de tener instalado correctamente instalado Java 17.
  2. 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).
openjdk version "17.0.7" 2023-04-18
OpenJDK Runtime Environment Temurin-17.0.7+7 (build 17.0.7+7)
OpenJDK 64-Bit Server VM Temurin-17.0.7+7 (build 17.0.7+7, mixed mode, sharing)
  1. Importar el proyecto en tu IDE favorito (En mi caso, VSCode).
  2. Crear una build del proyecto y correrlo.

Prerrequisitos

  • Java 17 (O superior)
  • OpenJDK 17 (O superior)
  • Maven 4.0.0 (O superior)
  • VSCode (O cualquier otro IDE que soporte Java 17)
  • Git (O cualquier otro software de control de versiones)
  • Un poco de paciencia

Que incluye este proyecto?

En 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.

src/main/java/
└── ...convertrail/
    ├── api/
    │   ├── setup/
    |   |   └── Archivos de configuración de la API
    │   └── Archivos generales de la API
    |── input/
    |   └── Archivos para el manejo de archivos CSV
    |── conversion/
    |   └── Archivos para la conversion de archivos CSV
    └── ConvertrailApplication.java
csv_pruebas/
└── Archivos CSV varios a modo de pruebas/referencias
json_output/
└── Archivos JSON generados a partir de los

Roadmap del proyecto

Podés revisar los open issues para ver una lista de las features propuestas (y los bugs conocidos).

To-Do List

  • Migrar a REST el ApiController. (Actualmente es un simple HttpClient).
  • Agregar soporte para otros formatos de archivos (XML, YAML, etc).
  • Configurar correctamente el sistema de logs (Con log4j2).
  • Crear algún tipo de interfaz gráfica para el usuario.
  • Agregar soporte para archivos comprimidos (ZIP, RAR, etc).
  • Agregar soporte para archivos encriptados (AES, RSA, etc).
  • Agregar soporte para archivos de texto plano (TXT, DOC, etc).
  • Desarrollar un sistema de tests para el proyecto (JUnit, Mockito, etc).
  • Mejorar la estructura del proyecto (Separar en módulos, etc).
    (Se aplicaron patrones de diseño Strategy y Adapter)
  • Sintetizar el código (Reducir la cantidad de líneas, etc).
    Se redujo código redundante en gran parte de las clases
  • Estandarizar el código (Aplicar buenas prácticas, etc).
    Se aplicaron patrones, y se re-designaron las responsabilidades de cada clase y método

Entre otras cosas que se irán agregando con el pasar del tiempo.

Contribuciones

Las 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

  • Si tenes sugerencias para mejorar o modificar el proyecto, podés abrir un issue.
  • Si queres contribuir directamente, podes hacer un fork del proyecto, crear una branch con tus cambios y luego hacer un pull request.

Creando un Pull Request

  1. Hacé un Fork del proyecto
  2. Creá tu propia branch (git checkout -b feature/AmazingFeature)
  3. Hacé un commit con tus cambios (git commit -m 'Add some AmazingFeature')
  4. Hacé un push (git push origin feature/AmazingFeature)
  5. Abrí un Pull Request

Licencia

Distribuído bajo la licencia MIT. Ver LICENSE para más información

Logo

Autor

  • Dante Zulli - Github - Todos mis proyectos

Otros Recursos que usé

Releases

No releases published

Packages

No packages published

Languages