API Reference

createCrudActions API

TL;DR

Create standard CRUD Actions in one line, automatically connected with permissions/logging: const { getList, getDetail, create, update, delete: del } = createCrudActions(config).


⚙️ Exports

  • createCrudActions(config, options?)
  • createReadOnlyActions(config, options?)
  • extendCrudActions(base, extensions)

👀 Quick Start

import { createCrudActions } from '@/lib/core/crud-helper'

export const {
  getList: sysGetRoleList,
  getDetail: sysGetRoleDetail,
  create: sysCreateRole,
  update: sysUpdateRole,
  delete: sysDeleteRole,
  batchDelete: sysBatchDeleteRole,
} = createCrudActions({
  modelName: 'role',
  tableName: 'roles',            // Required for selects joins
  primaryKey: 'id',
  softDelete: true,
  fields: {
    creatable: ['name', 'remark'],
    updatable: ['name', 'remark'],
    searchable: ['name'],
  },
  query: {
    defaultSort: { createdAt: 'desc' },
    defaultPageSize: 20,
    foreignDB: [],                // Configure when joins are needed
  },
  validation: {                  // auto-schema validation
    name: { required: true, minLength: 2, maxLength: 50 },
  },
  uniqueFields: ['name'],
})

🔧 Parameters

createCrudActions(
  config: {
    modelName: string
    tableName?: string            // Required for selects queries
    primaryKey?: string           // Default 'id'
    softDelete?: boolean          // Default true
    requireAdmin?: boolean        // Admin only
    fields?: {
      creatable?: string[]
      updatable?: string[]
      searchable?: string[]
    }
    query?: {
      defaultSort?: Record<string,'asc'|'desc'>
      defaultPageSize?: number
      baseFilter?: object
      include?: object            // Prisma include
      foreignDB?: any[]           // selects joins
    }
    validation?: Record<string, any>  // auto-schema rules
    uniqueFields?: string[]
    hooks?: Record<string, Function>
    transforms?: { input?: (d)=>any, output?: (r)=>any }
  },
  options?: { prefix?: 'sys'|'auth'|'pub', enableBatch?: boolean }
): {
  getList, getDetail, create, update, delete, batchUpdate?, batchDelete?, _dao
}

📌 Behavior

  • Generated function names include prefix (default sys*), automatically entering admin permission and RBAC checks;
  • getDetail defaults to using config.query.foreignDB for joins;
  • create/update/delete automatically log operations;
  • Batch operations controlled by options.enableBatch (default true).

🧪 Read-Only Actions

import { createReadOnlyActions } from '@/lib/core/crud-helper'

export const { getList, getDetail } = createReadOnlyActions({
  modelName: 'actionLog',
  query: { defaultSort: { createdAt: 'desc' } },
})