Skip to content

CRUD

Queries use direct table access: jsorm.users, jsorm.cache.sessions. All methods are async and return { data: T }.

const { data: user } = await jsorm.users.create({
name: "Juan",
email: "juan@test.com",
});
const { data: users } = await jsorm.users.createMany([
{ name: "Juan", email: "juan@test.com" },
{ name: "Ana", email: "ana@test.com" },
]);
const { data: user } = await jsorm.users.create({
name: "Juan",
roles: [role1.id, role2.id], // INSERT users → INSERT user_roles x 2
});
const { data: user } = await jsorm.users.create({
name: "Juan",
permissions: [
{ permissionId: perm1.id, active: true },
{ permissionId: perm2.id, active: false },
],
});

const { data: users } = await jsorm.users.get({
where: { active: true },
});

With select (returns only selected fields)

Section titled “With select (returns only selected fields)”
const { data: users } = await jsorm.users.get({
select: { id: true, name: true, role: { name: true } },
where: { active: true },
orderBy: { createdAt: "desc" },
});
// users: { id: string; name: string; role: { name: string } }[]
const { data: user } = await jsorm.users.first({
select: { name: true, email: true },
where: { email: "juan@test.com" },
});

const { data: affected } = await jsorm.users.update({
where: { id: user.id },
data: { name: "Juan Updated" },
});
const { data: affected } = await jsorm.users.updateMany([
{ id: user1.id, name: "Updated 1" },
{ id: user2.id, name: "Updated 2" },
]);
await jsorm.users.update({
where: { id: user.id },
data: { roles: [role1.id, role3.id] }, // removes previous roles, inserts new ones
});

const { data: deleted } = await jsorm.users.delete({
where: { active: false },
});
const { data: deleted } = await jsorm.users.deleteMany({
where: { active: false },
});

where is required. Throws an error if omitted or empty, to prevent accidental deletion of all records:

// ❌ Error: deleteMany() requires a where clause to prevent accidental data loss
await jsorm.users.deleteMany({});