0.65.2 • Published 5 days ago

@dzangolab/fastify-multi-tenant v0.65.2

Weekly downloads
-
License
MIT
Repository
github
Last release
5 days ago

@dzangolab/fastify-multi-tenant

A Fastify plugin that adds support for multi-tenant architecture in your API.

Requirements

  • @dzangolab/fastify-config
  • @dzangolab/fastify-mailer
  • @dzangolab/fastify-mercurius
  • @dzangolab/fastify-slonik
  • @dzangolab/fastify-user

Tenants table

You need to create a table containing the tenants. You can name the table as you wish. The default name is tenants.

The table should contain the following columns:

PurposeTypeConstraintsDefault column name
Identifierinteger \| varchar(255) \| uuidPKid
Display namevarchar(255)NOT NULLname
Owner IDvarchar(36)owner_id
Slugvarchar(63)NOT NULL UNIQUEslug
Domainvarchar(255)UNIQUEdomain
created_atTIMESTAMPDEFAULT NOW() NOT NULLcreated_at
updated_atTIMESTAMPDEFAULT NOW() NOT NULLupdated_at

The owner_id column serves as a foreign key referencing the id column in the users table.

Installation

In a simple repo:

npm install @dzangolab/fastify-config @dzangolab/fastify-mailer @dzangolab/fastify-mercurius @dzangolab/fastify-slonik @dzangolab/fastify-multi-tenant @dzangolab/fastify-user

If using in a monorepo with pnpm:

pnpm add --filter "myrepo" @dzangolab/fastify-config @dzangolab/fastify-mailer @dzangolab/fastify-mercurius @dzangolab/fastify-slonik @dzangolab/fastify-multi-tenant @dzangolab/fastify-user

Usage

Register the fastify plugin

Register the plugin with your Fastify instance:

import configPlugin from "@dzangolab/fastify-config";
import multiTenantPlugin, {
  tenantMigrationPlugin,
} from "@dzangolab/fastify-multi-tenant"
import slonikPlugin, { migrationPlugin } from "@dzangolab/fastify-slonik"
import fastify from "fastify";

import config from "./config";

import type { ApiConfig } from "@dzangolab/fastify-config";
import type { FastifyInstance } from "fastify";

// Create fastify instance
const fastify = Fastify({
  logger: config.logger,
});

// Register fastify-config plugin
await fastify.register(configPlugin, { config });

// Register mailer plugin
await api.register(mailerPlugin);

// Register database plugin
await api.register(slonikPlugin);

// Register multi tenant plugin
await api.register(multiTenantPlugin);

// Register mercurius plugin
await api.register(mercuriusPlugin);

// Register user plugin
await api.register(userPlugin);

// Run app database migrations
await api.register(migrationPlugin);

// Run tenant database migrations
await api.register(tenantMigrationPlugin);


await fastify.listen({
  port: config.port,
  host: "0.0.0.0",
 });

Configuration

If you are not using the default table name and columns, add the following configuration to your config:

const config: ApiConfig = {
  // ...
  multiTenant: {
    reserved: {
      slugs: ["..."],
      domains: ["..."],
    },
    rootDomain: "";
    table: {
      columns: {
        id: "...",
        domain: "...",
        name: "...",
        ownerId: "...",
        slug: "...",
      },
      name: "...",
    },
  }
};
0.65.2

5 days ago

0.65.1

8 days ago

0.65.0

13 days ago

0.64.2

1 month ago

0.64.1

1 month ago

0.64.0

2 months ago

0.63.0

2 months ago

0.62.4

2 months ago

0.62.3

2 months ago

0.62.2

2 months ago

0.62.1

3 months ago

0.62.0

3 months ago

0.61.1

3 months ago

0.61.0

3 months ago

0.60.0

3 months ago

0.59.0

3 months ago

0.58.0

4 months ago

0.57.1

4 months ago

0.57.0

4 months ago

0.56.0

4 months ago

0.55.2

5 months ago

0.55.1

5 months ago

0.55.0

5 months ago

0.54.0

5 months ago

0.53.4

5 months ago

0.53.3

5 months ago

0.43.0

8 months ago

0.41.0

9 months ago

0.38.0

9 months ago

0.36.2

9 months ago

0.36.1

10 months ago

0.36.0

10 months ago

0.53.2

5 months ago

0.34.0

10 months ago

0.53.0

6 months ago

0.53.1

6 months ago

0.51.0

6 months ago

0.51.1

6 months ago

0.48.0

8 months ago

0.48.1

7 months ago

0.46.0

8 months ago

0.44.0

8 months ago

0.42.0

8 months ago

0.40.2

9 months ago

0.40.0

9 months ago

0.40.1

9 months ago

0.39.1

9 months ago

0.39.0

9 months ago

0.37.1

9 months ago

0.37.0

9 months ago

0.35.0

10 months ago

0.52.1

6 months ago

0.50.1

6 months ago

0.52.0

6 months ago

0.50.0

7 months ago

0.49.0

7 months ago

0.47.0

8 months ago

0.45.0

8 months ago

0.33.0

11 months ago

0.20.0

1 year ago

0.32.8

11 months ago

0.19.0

1 year ago

0.32.7

11 months ago

0.32.6

11 months ago

0.32.5

12 months ago

0.32.4

12 months ago

0.32.3

12 months ago

0.32.2

12 months ago

0.32.1

12 months ago

0.32.9

11 months ago

0.32.0

12 months ago

0.30.0

1 year ago

0.29.0

1 year ago

0.27.1

1 year ago

0.25.3

1 year ago

0.27.0

1 year ago

0.25.2

1 year ago

0.25.1

1 year ago

0.25.0

1 year ago

0.23.0

1 year ago

0.32.10

11 months ago

0.21.0

1 year ago

0.18.1

1 year ago

0.18.2

1 year ago

0.18.3

1 year ago

0.31.3

1 year ago

0.31.2

1 year ago

0.18.0

1 year ago

0.31.1

1 year ago

0.31.0

1 year ago

0.26.3

1 year ago

0.28.0

1 year ago

0.26.2

1 year ago

0.26.1

1 year ago

0.26.0

1 year ago

0.24.0

1 year ago

0.22.1

1 year ago

0.22.0

1 year ago

0.17.1

1 year ago

0.17.0

1 year ago

0.16.0

1 year ago

0.15.2

1 year ago

0.15.1

1 year ago

0.15.0

1 year ago

0.14.1

1 year ago

0.14.0

1 year ago

0.13.0

1 year ago