@baseworks/organization
v0.2.1
Published
Organization / Workspace / Project hierarchy for multi-tenant applications. Includes DB schema (SQLite + PostgreSQL), repository layer, and CLI plugin.
Downloads
39
Readme
@baseworks/organization
Organization / Workspace / Project hierarchy for multi-tenant applications. Includes DB schema (SQLite + PostgreSQL), repository layer, and CLI plugin.
Schema
organizations (id, short_id, slug, name, metadata, ...)
workspaces (id, organization_id → CASCADE, slug, name, is_default, ...)
projects (id, workspace_id → CASCADE, slug, name, is_default, ...)
environments (id, project_id → CASCADE, slug, name, ...)
org_memberships (id, organization_id → CASCADE, user_id, role, ...)Cascade: deleting an org removes all workspaces, projects, environments, and memberships.
Installation
npm install @baseworks/organizationUsage
import {
createOrganizationRepo,
createWorkspaceRepo,
createProjectRepo,
} from '@baseworks/organization'
const orgRepo = createOrganizationRepo(db, schema)
const org = await orgRepo.create({ name: 'Acme Inc' })
const ws = await wsRepo.create({ organizationId: org.id, name: 'main' })SQLite schema
import * as schema from '@baseworks/organization/schema/sqlite'PostgreSQL schema
import * as schema from '@baseworks/organization/schema/pg'Migrations (SQLite)
SQL migration files are included in the package under migrations/sqlite/.
Use with any migration runner that reads .sql files.
import { runMigrations } from '@dotlabshq/flect-sdk'
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const pkgDir = require.resolve('@baseworks/organization/package.json').replace('/package.json', '')
await runMigrations(client, `${pkgDir}/migrations/sqlite`)CLI plugin
import { orgCliPlugin } from '@baseworks/organization/cli'
// Commands: org, workspace (ws), project (proj), use, lsls output
acme ★ active org
└── main ● active workspace
├── api ● active project
└── web
1 org · 1 workspace · 2 projectsRoles
owner · admin · member · viewer
