4c88adc183
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.
50 lines
2.4 KiB
Go
50 lines
2.4 KiB
Go
package infra
|
|
|
|
// CRUDResource define un recurso CRUD completo para generar handlers HTTP.
|
|
// Name es el nombre singular del recurso en snake_case (ej: "project").
|
|
// Table es el nombre de la tabla SQLite asociada (ej: "projects").
|
|
// Fields son las columnas del recurso sin contar id, created_at, updated_at y deleted_at.
|
|
// SoftDelete si es true, el handler delete hace UPDATE deleted_at en vez de DELETE real.
|
|
type CRUDResource struct {
|
|
Name string // nombre del recurso (singular, snake_case)
|
|
Table string // nombre de la tabla SQLite
|
|
Fields []CRUDField // campos del recurso (sin id ni timestamps)
|
|
SoftDelete bool // si true, usa deleted_at en vez de DELETE
|
|
}
|
|
|
|
// CRUDField define un campo de un recurso CRUD.
|
|
// Type debe ser uno de: TEXT, INTEGER, REAL, BLOB.
|
|
// Required fuerza NOT NULL en la tabla y validacion en create.
|
|
// Unique anade un UNIQUE constraint en la tabla.
|
|
// Default es el valor SQL por defecto (vacio = sin default).
|
|
// Validations define reglas de validacion: min_length, max_length, pattern, min, max, enum.
|
|
type CRUDField struct {
|
|
Name string // nombre del campo (snake_case)
|
|
Type string // tipo SQLite: TEXT, INTEGER, REAL, BLOB
|
|
Required bool // NOT NULL + validacion en create
|
|
Unique bool // UNIQUE constraint
|
|
Default string // valor por defecto en CREATE TABLE
|
|
Validations map[string]string // reglas: min_length, max_length, pattern, min, max, enum
|
|
}
|
|
|
|
// CRUDListParams agrupa los parametros de paginacion, orden y filtro del endpoint list.
|
|
// Page es 1-based (default 1). PerPage tiene default 20 y max 100.
|
|
// SortBy es el nombre del campo por el que ordenar. SortDir es "asc" o "desc".
|
|
// Filters contiene pares campo -> valor para filtros exactos en WHERE.
|
|
type CRUDListParams struct {
|
|
Page int // pagina actual (1-based, default 1)
|
|
PerPage int // items por pagina (default 20, max 100)
|
|
SortBy string // campo por el que ordenar
|
|
SortDir string // "asc" o "desc"
|
|
Filters map[string]string // campo -> valor para WHERE exacto
|
|
}
|
|
|
|
// CRUDListResult resultado paginado de una lista CRUD, serializable a JSON.
|
|
type CRUDListResult struct {
|
|
Items []map[string]any `json:"items"`
|
|
Total int `json:"total"`
|
|
Page int `json:"page"`
|
|
PerPage int `json:"per_page"`
|
|
TotalPages int `json:"total_pages"`
|
|
}
|