---
name: CRUDResource
lang: go
domain: infra
version: "1.0.0"
algebraic: product
definition: |
  type CRUDResource struct {
      Name       string
      Table      string
      Fields     []CRUDField
      SoftDelete bool
  }
description: "Define un recurso CRUD completo (nombre, tabla, campos y modo de borrado) para generar handlers HTTP y SQL DDL. Se usa como input de crud_generate_table_sql y crud_generate_handlers."
tags: [crud, resource, http, sqlite, rest, infra]
uses_types: [CRUDField_go_infra]
file_path: "functions/infra/crud_resource.go"
---

## Ejemplo

```go
res := CRUDResource{
    Name:  "project",
    Table: "projects",
    Fields: []CRUDField{
        {Name: "name", Type: "TEXT", Required: true, Unique: true},
        {Name: "description", Type: "TEXT"},
    },
    SoftDelete: false,
}
```

## Notas

Tipo producto. Name es el singular en snake_case ("project"), Table es el plural SQL ("projects"). Fields no incluye id ni timestamps: esos los gestiona el generador. Si SoftDelete es true, la tabla tendra una columna deleted_at TEXT y el handler delete hara UPDATE en vez de DELETE.
