Documentación de Blueprint

Blueprint es una poderosa herramienta CLI diseñada para generar proyectos de API en Go listos para producción a partir de una simple definición en Markdown.

Objetivo: Eliminar el código repetitivo (boilerplate) y permitirte enfocarte en la lógica de negocio desde el primer minuto.

Características Principales

🚀 Generación Rápida

Crea una estructura de proyecto Go completa en segundos.

🔒 Auth Integrado

Soporte opcional para Firebase Auth (Login, Registro, Roles).

📦 Auto CRUD

Genera handlers y rutas para crear, leer, actualizar y borrar documentos.

💳 Mercado Pago

Integración nativa para procesar pagos fácilmente.

Requisitos Previos

Instalación

Clona el repositorio y compila el generador usando el Makefile proporcionado:

git clone https://github.com/elbader17/Blueprint
cd Blueprint
make build

Esto descargará las dependencias y compilará el binario blueprint_gen.

Uso

Modo Interactivo (Recomendado)

Ejecuta el generador sin argumentos para lanzar la interfaz visual (TUI):

./blueprint_gen

El asistente te guiará paso a paso para definir tu proyecto, base de datos, autenticación y modelos.

Modo Manual

Puedes proporcionar un archivo de definición existente directamente:

./blueprint_gen blueprint.md

Credenciales

Para que la API generada funcione correctamente, necesitas configurar tu proyecto de Firebase.

1. Project ID

Obtenlo en la configuración de tu proyecto en Firebase Console.

project_id: "my-shop-123"

2. Service Account Key

  1. Ve a Project settings > Service accounts.
  2. Genera una nueva clave privada (JSON).
  3. Renombra el archivo a firebaseCredentials.json.
  4. Colócalo en la raíz de tu proyecto generado.
Nunca subas este archivo a un repositorio público. Añádelo a tu .gitignore.

Formato blueprint.md

El archivo de entrada debe contener un bloque de código JSON con la siguiente estructura:

blueprint.md
{
  "project_name": "ShopMasterAPI",
  "database": {
    "type": "firestore",
    "project_id": "shop-master-prod"
  },
  "auth": {
    "enabled": true,
    "user_collection": "users"
  },
  "payments": {
    "enabled": true,
    "provider": "mercadopago",
    "transactions_collection": "transactions"
  },
  "models": [
    {
      "name": "products",
      "protected": false,
      "fields": {
        "name": "string",
        "price": "float",
        "description": "text",
        "in_stock": "boolean"
      },
      "relations": {
        "category": "belongsTo:categories"
      }
    }
  ]
}

Explicación de Campos

  • project_name: Nombre de la carpeta y módulo Go que se generará.
  • database: Configuración del driver de base de datos (firestore, postgresql, mongodb).
  • auth: Configuración de autenticación. Si enabled es true, se genera el sistema de login.
  • models: Lista de entidades de tu base de datos.
    • protected: Si es true, las rutas requerirán token Bearer.
    • fields: Mapa de nombre:tipo (string, text, integer, float, boolean, datetime).

Arquitectura

El código generado sigue los principios de Arquitectura Hexagonal (Ports and Adapters) y Clean Code.

Domain Layer

Modelos principales e interfaces de repositorio (Ports). Desacoplado de la infraestructura.

Infrastructure Layer

Implementaciones concretas (Adapters) como Firestore, Postgres, etc.

Application Layer

Handlers HTTP, lógica de negocio y casos de uso.

Endpoints Generados

Dependiendo de tu configuración, se generarán los siguientes endpoints:

Autenticación

POST /auth/login
POST /auth/register
GET /auth/me Auth Required

Modelos (ej. Products)

GET /api/products
GET /api/products/:id
POST /api/products
PUT /api/products/:id
DELETE /api/products/:id