Lifecycle Hooks

Execute custom logic before and after database operations

Available Hooks

Stabilize provides the following lifecycle hooks:

  • beforeCreate - Before inserting a new record
  • afterCreate - After inserting a new record
  • beforeUpdate - Before updating a record
  • afterUpdate - After updating a record
  • beforeSave - Before create or update
  • afterSave - After create or update
  • beforeDelete - Before deleting a record
  • afterDelete - After deleting a record

Define Hooks in Model

models/user.tstypescript
import { defineModel, DataTypes } from "stabilize-orm";
const User = defineModel({
tableName: "users",
columns: {
id: { type: DataTypes.INTEGER },
email: { type: DataTypes.STRING, length: 100 },
password: { type: DataTypes.STRING, length: 255 },
},
hooks: {
beforeCreate: async (entity) => {
// Hash password before saving
entity.password = await hashPassword(entity.password);
},
afterCreate: async (entity) => {
// Send welcome email
await sendWelcomeEmail(entity.email);
},
beforeUpdate: async (entity) => {
// Update modified timestamp
entity.updatedAt = new Date();
},
},
});

Multiple Hooks

You can define multiple callbacks for the same hook:

models/user.tstypescript
const User = defineModel({
tableName: "users",
columns: { /* ... */ },
hooks: {
beforeCreate: [
async (entity) => {
entity.password = await hashPassword(entity.password);
},
async (entity) => {
entity.createdAt = new Date();
},
],
},
});