Models

Define your data models with type-safe schemas

Basic Model Definition

Models represent your database tables and define their structure:

models/user.tstypescript
import { defineModel, DataTypes } from "stabilize-orm";
const User = defineModel({
tableName: "users",
columns: {
id: {
type: DataTypes.INTEGER,
required: true,
},
email: {
type: DataTypes.STRING,
length: 100,
required: true,
unique: true
},
name: {
type: DataTypes.STRING,
length: 255
},
age: {
type: DataTypes.INTEGER
},
isActive: {
type: DataTypes.BOOLEAN,
defaultValue: true
},
createdAt: {
type: DataTypes.DATETIME,
defaultValue: () => new Date()
},
},
});

Available Data Types

types.tstypescript
DataTypes.STRING // VARCHAR
DataTypes.TEXT // TEXT
DataTypes.INTEGER // INTEGER
DataTypes.FLOAT // FLOAT
DataTypes.DECIMAL // DECIMAL
DataTypes.BOOLEAN // BOOLEAN
DataTypes.DATETIME // TIMESTAMP
DataTypes.DATE // DATE
DataTypes.TIME // TIME
DataTypes.JSON // JSON
DataTypes.UUID // UUID

Model with Timestamps

Enable automatic timestamp management:

models/post.tstypescript
const Post = defineModel({
tableName: "posts",
columns: {
id: { type: DataTypes.INTEGER },
title: { type: DataTypes.STRING, length: 255 },
content: { type: DataTypes.TEXT },
},
// Adds createdAt and updatedAt
timestamps: {
createdAt: "createdAt",
updatedAt: "updatedAt",
},
});

Model with Soft Deletes

Enable soft deletes to mark records as deleted without removing them:

models/product.tstypescript
const Product = defineModel({
tableName: "products",
softDelete: true, // Adds deletedAt column
columns: {
id: { type: DataTypes.INTEGER},
name: { type: DataTypes.STRING, length: 255 },
price: { type: DataTypes.DECIMAL },
},
});

Model with Versioning

Enable automatic versioning for time-travel queries:

models/document.tstypescript
const Document = defineModel({
tableName: "documents",
versioned: true, // Enable version tracking
columns: {
id: { type: DataTypes.Integer },
title: { type: DataTypes.STRING, length: 255 },
content: { type: DataTypes.TEXT },
},
});