Files
fn_registry/functions/infra/migration_create.md
T
egutierrez 9b0e1f836d feat: funciones impuras migration_create, migration_up, migration_down, migration_status
Fase 2 del issue 0015. MigrationCreate (crea archivo .sql template con version
auto-calculada), MigrationUp (aplica migraciones pendientes en transacciones
individuales), MigrationDown (revierte ultimas N via down_sql de _migrations),
MigrationGetStatus (cruza disco con BD, detecta orphaned). Tests de integracion:
ciclo completo create->up->status->down->status. 26 tests, todos pasan.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 02:01:40 +02:00

56 lines
2.1 KiB
Markdown

---
name: migration_create
kind: function
lang: go
domain: infra
version: "1.0.0"
purity: impure
signature: "func MigrationCreate(dir string, name string) (string, error)"
description: "Crea un archivo .sql de migracion con template -- +up / -- +down en el directorio indicado. Calcula automaticamente el siguiente numero de version escaneando archivos .sql existentes. Retorna el path absoluto del archivo creado."
tags: [migration, database, sql, schema, sqlite, create, file]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["fmt", "os", "path/filepath", "regexp", "strconv", "strings"]
params:
- name: dir
desc: "directorio donde crear el archivo de migracion (se crea si no existe, ej: apps/my_app/migrations)"
- name: name
desc: "nombre descriptivo de la migracion en snake_case (ej: create_users, add_email_column). Solo letras, numeros y underscore."
output: "path absoluto del archivo .sql creado (ej: apps/my_app/migrations/001_create_users.sql)"
tested: true
tests:
- "directorio vacio crea archivo con version 001"
- "directorio con migraciones existentes calcula siguiente version"
- "nombre invalido retorna error"
- "directorio inexistente se crea automaticamente"
test_file_path: "functions/infra/migration_create_test.go"
file_path: "functions/infra/migration_create.go"
---
## Ejemplo
```go
// Primera migracion
path, err := MigrationCreate("apps/my_app/migrations", "create_users")
// path = "apps/my_app/migrations/001_create_users.sql"
// Contenido del archivo:
// -- 001_create_users.sql
//
// -- +up
//
//
// -- +down
//
// Segunda migracion (ya existe 001)
path2, err := MigrationCreate("apps/my_app/migrations", "add_email")
// path2 = "apps/my_app/migrations/002_add_email.sql"
```
## Notas
Crea el directorio si no existe (`os.MkdirAll`). La version se calcula encontrando el maximo numero existente entre los archivos `NNN_*.sql` del directorio y sumando 1. El template generado tiene los marcadores vacios para que el desarrollador complete el SQL. Nombre valido: `^[a-zA-Z][a-zA-Z0-9_]*$` — no puede empezar con numero ni contener espacios o guiones.