Function: withResourceful()
function withResourceful(
options: Partial<ResourcefulMixinOptions>,
): <Model>(superclass: Model) => Model & ResourcefulModel;Creates a mixin that adds resourceful CRUD functionality to Lucid models.
This function implements the mixin pattern to enhance AdonisJS Lucid models with metadata-driven CRUD operations, field-level access control, query scoping, and OpenAPI schema generation capabilities. The resulting model gains static methods for handling HTTP requests with built-in validation, pagination, filtering, and security features.
The mixin validates and normalizes configuration options, creates isolated metadata maps for each model class to prevent inheritance conflicts, and establishes an event emitter for monitoring ACL and validation operations.
Parameters
| Parameter | Type | Description |
|---|---|---|
options | Partial<ResourcefulMixinOptions> | Configuration object for customizing mixin behavior |
Returns
A mixin function that accepts a Lucid model class and returns the enhanced model
<Model>(superclass: Model): Model & ResourcefulModel;Type Parameters
| Type Parameter |
|---|
Model extends NormalizeConstructor<LucidModel> |
Parameters
| Parameter | Type |
|---|---|
superclass | Model |
Returns
Model & ResourcefulModel
Throws
When the provided options fail validation
Example
import { BaseModel, column } from "@ioc:Adonis/Lucid/Orm";
import { withResourceful, resourceful } from "lucid-resourceful";
class User extends withResourceful({
name: "User",
readRequiredForWrite: true,
accessControlFilters: {
read: [(ctx) => ctx.auth.user?.id === ctx.params.id],
update: [(ctx) => ctx.auth.user?.isAdmin],
},
})(BaseModel) {
@column({ isPrimary: true })
@resourceful({ type: "number", nullable: false })
public id: number;
@column()
@resourceful({ type: "string", nullable: false })
public name: string;
}
// Generated controller with CRUD operations
const UserController = User.generateController();See
- ResourcefulMixinOptions for detailed configuration options
- ResourcefulModel for the enhanced model interface