A CLI tool for managing GraphQL stores
Project description
GraphQLStore
🚀 Herramienta CLI avanzada para gestionar esquemas GraphQL y base de datos de manera sincronizada
📖 Documentación • ⚡ Inicio Rápido • 🎯 Características • 📊 Ejemplos
🌟 Descripción
GraphQLStore CLI es una herramienta de línea de comandos profesional que automatiza la gestión de bases de datos MySQL a partir de esquemas GraphQL. Transforma definiciones GraphQL en estructuras de base de datos completamente funcionales con soporte para relaciones complejas, migraciones automáticas y visualización rica.
✨ ¿Por qué GraphQLStore CLI?
- 🔄 Transformación Automática: Convierte esquemas GraphQL a MySQL sin configuración manual
- 🛡️ Migraciones Seguras: Evoluciona tu base de datos preservando la integridad de los datos
- 🎨 Visualización Rica: Interfaz beautiful con Rich Console y syntax highlighting
- ⚡ Detección Inteligente: Encuentra y procesa esquemas automáticamente
- 🔗 Relaciones Avanzadas: Soporte completo para relaciones 1:1, 1:N y N:M
- 📊 Producción Ready: 97% de cobertura de tests y arquitectura escalable
🎯 Características
🏗️ Comandos Principales
| Comando | Descripción | Estado |
|---|---|---|
conexion |
Configurar conexión a base de datos MySQL | ✅ |
probar-conexion |
Verificar conectividad y diagnósticos | ✅ |
inicializar |
Crear base de datos desde esquema GraphQL | ✅ |
migracion |
Evolucionar esquemas existentes | ✅ |
🔧 Características Técnicas
- 🔍 Parser GraphQL: Análisis completo de esquemas
- 🔗 Procesador de Relaciones: Manejo inteligente de relaciones
- 🗄️ Generador MySQL: Conversión optimizada GraphQL → SQL
- 📈 Sistema de Migraciones: Evolución segura de esquemas
🎨 Tipos de Datos Soportados
| GraphQL | MySQL | Características |
|---|---|---|
ID |
VARCHAR(25) |
Primary keys automáticos |
String |
VARCHAR(255) |
Soporte UTF-8 completo |
Int |
INT |
Enteros con validación |
Boolean |
BOOLEAN |
Valores true/false |
DateTime |
DATETIME |
Timestamps con @createdAt/@updatedAt |
Float |
DECIMAL(10,2) |
Precisión decimal |
JSON |
JSON |
Objetos complejos nativos |
[] |
JSON |
Listas de valores |
Enum |
ENUM(...) |
Enumeraciones tipo-seguras |
⚡ Inicio Rápido
📦 Instalación
Desde PyPI (Recomendado)
pip install graphqlstore
Desde Código Fuente
git clone https://github.com/your-username/graphqlstore.git
cd graphqlstore
pipenv install --dev
🚀 Flujo Básico
1. Configurar Conexión
# Configuración interactiva
graphqlstore conexion
# O con parámetros directos
graphqlstore conexion \
--host localhost \
--puerto 3306 \
--usuario admin \
--password secret \
--base-datos mi_app
2. Verificar Conexión
graphqlstore probar-conexion --verbose
3. Inicializar Base de Datos
# Desde archivo específico
graphqlstore inicializar --esquema mi_esquema.graphql
# Detección automática
graphqlstore inicializar
4. Evolucionar Esquema
# Migración automática
graphqlstore migracion --esquema mi_esquema_v2.graphql
📊 Ejemplos
🎮 Esquema GraphQL de Ejemplo
type User {
id: ID! @id
username: String! @unique
email: String! @unique
role: UserRole!
posts: [Post!]! @relation(name: "UserPosts")
profile: Profile @relation(name: "UserProfile")
createdAt: DateTime @createdAt
updatedAt: DateTime @updatedAt
}
type Post {
id: ID! @id
title: String!
content: String
published: Boolean! @default(value: "false")
tags: [String!]!
author: User! @relation(name: "UserPosts", onDelete: CASCADE)
createdAt: DateTime @createdAt
}
type Profile {
id: ID! @id
bio: String
avatar: String
user: User! @relation(name: "UserProfile", onDelete: CASCADE)
}
enum UserRole {
ADMIN
AUTHOR
USER
}
🗄️ SQL Generado Automáticamente
-- Tabla User con constraints
CREATE TABLE User (
`id` VARCHAR(25) NOT NULL PRIMARY KEY,
`username` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`role` ENUM('ADMIN','AUTHOR','USER') NOT NULL,
`createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP,
`updatedAt` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Relaciones con foreign keys
ALTER TABLE `Post`
ADD COLUMN `author_id` VARCHAR(25) NOT NULL,
ADD CONSTRAINT `fk_User_posts_Post` FOREIGN KEY (`author_id`)
REFERENCES `User`(id) ON DELETE CASCADE;
ALTER TABLE `Profile`
ADD COLUMN `user_id` VARCHAR(25) UNIQUE,
ADD CONSTRAINT `fk_User_profile_Profile` FOREIGN KEY (`user_id`)
REFERENCES `User`(id) ON DELETE CASCADE;
📈 Visualización Rica
GraphQLStore CLI v1.0.0
Desplegando servicio
📋 Diferencias detectadas
├── ➕ Tablas agregadas: 1
├── 🔹 Campos agregados: 3
└── 🔗 Relaciones agregadas: 2
🔧 CREAR TABLA
├── Creando tabla Profile
🔧 AGREGAR RELACIÓN
├── Agregando relación UserProfile
✅ Migración generada exitosamente
📊 Total de sentencias SQL: 5
🏗️ Arquitectura
📁 Estructura del Proyecto
graphqlstore/
├── 📂 source/cli/
│ ├── 🔌 conexion/ # Gestión de configuración BD
│ ├── 🩺 probar_conexion/ # Diagnósticos y validación
│ ├── 🚀 inicializar/ # Inicialización de esquemas
│ ├── 📈 migracion/ # Sistema de migraciones
│ ├── 🔍 graphql/ # Motor GraphQL
│ │ ├── parser.py # Parser de esquemas
│ │ ├── mysql_generador.py # Generador SQL
│ │ ├── mysql_migracion.py # Motor de migraciones
│ │ └── procesar_relaciones.py # Procesador de relaciones
│ ├── 🗄️ database/ # Adaptadores de BD
│ └── 🛠️ utilidades/ # Herramientas auxiliares
├── 📂 tests/ # Suite de pruebas (97% cobertura)
└── 📂 .github/workflows/ # CI/CD automatizado
├── 📄 README.md # Documentación principal
├── 📄 LICENSE # Licencia del proyecto
├── 📄 setup.py # Configuración del paquete
├── 📄 requirements.txt # Dependencias del proyecto
├── 📄 requirements-dev.txt # Dependencias de desarrollo
├── 📄 .pre-commit-config.yaml # Configuración de pre-commit
├── 📄 Pipfile # Gestión de dependencias con Pipenv
├── 📄 pyproject.toml # Configuración del proyecto
├── 📄 .pylintrc # Configuración de pylint
🔧 Componentes Principales
🔍 Parser GraphQL (source/cli/graphql/docs/parser.md)
- Análisis de esquemas GraphQL
- Extracción de tipos, campos y directivas
- Validación de sintaxis y semántica
🔗 Procesador de Relaciones (source/cli/graphql/docs/procesar_relaciones.md)
- Detección automática de relaciones
- Clasificación 1:1, 1:N, N:M
- Generación de constraints
🗄️ Generador MySQL (source/cli/graphql/docs/mysql_generador.md)
- Transformación GraphQL → SQL
- Generación de DDL completo
📈 Sistema de Migraciones (source/cli/graphql/docs/mysql_migracion.md)
- Detección inteligente de cambios
- Generación de SQL incremental
- Preservación de integridad referencial
🛠️ Entorno de Desarrollo
📋 Requisitos
- Python: 3.9+
- MySQL: 8.0+
- Pipenv: Para gestión de dependencias
🔧 Herramientas de Calidad
| Herramienta | Propósito | Estado |
|---|---|---|
| pytest | Testing framework | ✅ 97% cobertura |
| black | Formateo de código | ✅ Configurado |
| flake8 | Linting (ligero) | ✅ Configurado |
| pylint | Linting (exhausto) | ✅ Configurado |
| mypy | Type checking | ✅ Configurado |
| pre-commit | Git hooks | ✅ Configurado |
📊 Cobertura y Calidad
🎯 Métricas de Cobertura
| Módulo | Statements | Miss | Branch | BrPart | Cover |
|---|---|---|---|---|---|
| Parser GraphQL | 64 | 1 | 18 | 1 | 98% |
| Procesador Relaciones | 96 | 4 | 38 | 6 | 93% |
| Generador MySQL | 217 | 5 | 78 | 11 | 95% |
| Sistema Migraciones | 376 | 14 | 192 | 20 | 94% |
| Comandos CLI | 252 | 11 | 54 | 2 | 100% |
| 🎯 TOTAL PROYECTO | 2993 | 46 | 428 | 44 | 🏆 97% |
✅ Suite de Pruebas (TOTAL PROYECTO)
- 📈 122 pruebas ejecutándose en 4.72 segundos
- 🎯 97% cobertura global con 0 fallos
- 🔍 Casos edge y integración completa
- 🚀 CI/CD automatizado en GitHub Actions
🔄 CI/CD Pipeline
🛠️ Flujo Automatizado
🔍 CI Pipeline (.github/workflows/ci.yml)
🔄 Flujo de Integración Continua:
📋 Entrada (Push/PR)
↓
🔧 Instalación de Dependencias
↓
🎯 Pre-commit Hooks
├── ⚫ Black (Formateo)
├── 🔍 Flake8 (Linting ligero)
├── 📋 Pylint (Análisis exhaustivo)
└── 🔤 Mypy (Type checking)
↓
🧪 Testing Suite + Cobertura
↓
✅ Pipeline Completo
| Etapa | Proceso | Estado |
|---|---|---|
| 🔧 Setup | Instalación de dependencias | ✅ |
| 🎯 Quality | Pre-commit hooks completos | ✅ |
| ⚫ Black | Formateo automático de código | ✅ |
| 🔍 Flake8 | Linting ligero y rápido | ✅ |
| 📋 Pylint | Análisis exhaustivo de código | ✅ |
| 🔤 Mypy | Verificación estática de tipos | ✅ |
| 🧪 Testing | Suite completa con cobertura | ✅ |
🚀 CD Pipeline (.github/workflows/cd.yml)
📦 Flujo de Despliegue Continuo:
🏷️ Release Tag
↓
🛠️ Configuración Build Tools
↓
📦 Empaquetado Multi-formato
├── 🎯 Wheel Distribution
└── 📄 Source Distribution
↓
🚀 Publicación PyPI
↓
📋 GitHub Release + Artifacts
↓
✅ Deploy Completo
| Etapa | Proceso | Descripción |
|---|---|---|
| 🛠️ Setup | Configuración de herramientas | Preparación del entorno de build |
| 📦 Build | Empaquetado multi-formato | Wheel + Source distributions |
| 🎯 Wheel | Distribución binaria | Instalación rápida optimizada |
| 📄 Source | Distribución de código fuente | Máxima compatibilidad |
| 🚀 PyPI | Publicación automática | Deploy en nuevas versiones |
| 📋 GitHub | Release + artifacts | Documentación y archivos |
⚡ Pipeline Triggers
- CI:
push,pull_request→main - CD:
release→published→ PyPI + GitHub Release
📦 Releases
| Versión | Estado | Características |
|---|---|---|
| v1.0.0 | 🎯 Actual | Core completo + Migraciones |
| v2.0.0 | Directivas avanzadas | |
| v3.0.0 | Soporte GraphQL Server |
📚 Documentación
📖 Guías Detalladas
- 🔌 Comando
conexion- Configuración de base de datos - 🩺 Comando
probar-conexion- Diagnósticos y validación de base de datos - 🚀 Comando
inicializar- Inicialización de esquemas - 📈 Comando
migracion- Sistema de migraciones
🔧 Documentación Técnica
- 🔍 Parser GraphQL - Motor de análisis
- 🔗 Procesador de Relaciones - Gestión de relaciones
- 🗄️ Generador MySQL - Transformación SQL
- 📈 Sistema de Migraciones - Evolución de esquemas
🎯 Casos de Uso
🚀 Desarrollo de APIs
# Inicialización completa de proyecto
graphqlstore conexion
graphqlstore inicializar
# ✅ Base de datos lista para desarrollo
🔄 Evolución de Esquemas
# Migración automática
graphqlstore migracion
# ✅ Esquema actualizado preservando datos
🏭 Integración CI/CD
# Modo silencioso para pipelines
graphqlstore migracion \
--esquema schemas/production.graphql \
--no-visualizar-salida \
--no-visualizar-sql
🤝 Contribuir
🐛 Reportar Issues
muy pronto
📝 Desarrollo Local
muy pronto
🗺️ Roadmap
🚀 v1.0.0 - Core
-
conexion- Configuración de conexión a MySQL -
probar-conexion- Verificación de conectividad -
inicializar- Inicialización de base de datos desde esquema GraphQL -
migracion- Sistema de migraciones automático
🎯 v2.0.0 - Directivas Avanzadas
-
@unique- Campos únicos -
@default- Valores por defecto -
@db- Renombrado de campos -
@protected- Campos protegidos
🚀 v3.0.0 - GraphQL Server
-
server- Lanzar servidor (en js o py) GraphQL
🏭 v4.0.0 - Refactorizar modulos
- Refactorizar modulos
GeneradorEsquemaMySQLyGenerarMigracionMySQLimplementando patrones de diseño para escalar el codigo y mejorar la mantenibilidad, sobre todo para implementar la funcionalidad multi-base de datos. - Implementar soporte PostgreSQL
- Implementar soporte a Redis
📜 Licencia
Este proyecto utiliza una Licencia Privada que prohíbe:
- ❌ Redistribución en cualquier forma
- ❌ Modificación del software
- ❌ Creación de obras derivadas
- ❌ Uso comercial no autorizado
- ❌ Compartición pública
Ver LICENSE para detalles completos.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file graphqlstore-0.8.0.tar.gz.
File metadata
- Download URL: graphqlstore-0.8.0.tar.gz
- Upload date:
- Size: 34.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1410a8a2d3e86370d7628f4be7ab0c4e7852565c359b984755a3d4f26f848e02
|
|
| MD5 |
9e4a78311de5c5ef7939f0721865a1b0
|
|
| BLAKE2b-256 |
1a7a9485eeb190a3d34ed97d1fab7ca58983d0240603db645d8669c8a7162595
|
File details
Details for the file graphqlstore-0.8.0-py3-none-any.whl.
File metadata
- Download URL: graphqlstore-0.8.0-py3-none-any.whl
- Upload date:
- Size: 43.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7d0ea95b478f79d1df308130623359a348297d99b39bf7c1176fdfef7fbb5a9
|
|
| MD5 |
3cd357d7b2e425a4ceeb11b8a32e4fe8
|
|
| BLAKE2b-256 |
858cc44fc6a71ecbc522fb01db90a3db26466dfeff42f89f510c7b20e8a843b7
|