Files
fn_registry/functions/infra/crud_generate_table_sql.md
T
egutierrez 4c88adc183 feat(crud): tipos y generador de DDL para recursos CRUD
Anade los tipos CRUDResource, CRUDField, CRUDListParams y CRUDListResult
que modelan un recurso CRUD sobre SQLite, junto con dos funciones puras:
- crud_define_resource valida nombre, tabla y campos (tipos SQLite validos,
  nombres reservados, duplicados) antes de retornar el CRUDResource.
- crud_generate_table_sql genera el DDL CREATE TABLE IF NOT EXISTS con
  id TEXT PRIMARY KEY, timestamps estandar y, si aplica, deleted_at para
  soft delete.

Primera capa de 0021 — el resto (handlers + registro de rutas) se apoya
sobre estas estructuras.
2026-04-18 17:15:21 +02:00

1.7 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
crud_generate_table_sql function go infra 1.0.0 pure func CRUDGenerateTableSQL(res CRUDResource) string Genera el DDL CREATE TABLE IF NOT EXISTS de un CRUDResource. Incluye id como PRIMARY KEY, timestamps created_at/updated_at y deleted_at si soft_delete. Cada campo aplica su tipo SQLite y constraints NOT NULL/UNIQUE/DEFAULT.
crud
sql
ddl
generate
sqlite
infra
CRUDResource_go_infra
false
fmt
strings
name desc
res CRUDResource con la definicion completa del recurso
string con el statement CREATE TABLE listo para ejecutar true
genera tabla basica con timestamps
aplica NOT NULL y UNIQUE
aplica DEFAULT
anade deleted_at si soft_delete
functions/infra/crud_test.go functions/infra/crud_generate_table_sql.go

Ejemplo

res, _ := CRUDDefineResource("project", "projects", []CRUDField{
    {Name: "name", Type: "TEXT", Required: true, Unique: true},
    {Name: "priority", Type: "INTEGER", Default: "0"},
}, false)
ddl := CRUDGenerateTableSQL(res)
// CREATE TABLE IF NOT EXISTS projects (
//     id TEXT PRIMARY KEY,
//     name TEXT NOT NULL UNIQUE,
//     priority INTEGER DEFAULT 0,
//     created_at TEXT NOT NULL,
//     updated_at TEXT NOT NULL
// );
db.Exec(ddl)

Notas

Funcion pura — solo manipula strings. Usa CREATE TABLE IF NOT EXISTS para ser idempotente. Las columnas id, created_at y updated_at siempre se generan. Si el CRUDResource es SoftDelete, se anade deleted_at TEXT nullable. El resultado se puede ejecutar directamente con db.Exec o envolver como migracion.