63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# Multi tenancy sketches
|
|
|
|
This project is a synthetic test project for implementing multi tenancy.
|
|
Its a functional graphql api backend, that is easiest to access from the apollo graphql explorer.
|
|
The api and the explorer are available by default at `http://localhost:4000` by default,
|
|
after the app and its dependencies have been started
|
|
|
|
## Project setup
|
|
|
|
This project is using [`pnpm`](https://pnpm.io/) as its package manager.
|
|
To start the required databases or other dependencies, run `docker compose up -d`
|
|
|
|
## About Postgres setup
|
|
|
|
I had to change the `wal_level` on my local postgres instances
|
|
it is done with running the SQL command below, and restating the database server:
|
|
|
|
```sql
|
|
ALTER SYSTEM SET wal_level = logical;
|
|
```
|
|
|
|
Note: Postgres subscriptions (which we use) in the same db server don't work that easily; easiest way to get things going is to set up multiple db servers locally.
|
|
|
|
## Project description
|
|
|
|
The app has these basic concepts:
|
|
|
|
### User
|
|
|
|
A user of the system (obviously). User authn is not implemented, authz is very simplified.
|
|
|
|
### Resource
|
|
|
|
This is an abstract object representing a project, that multiple users might work on.
|
|
The notion of work on is currently implemented as the comment create action.
|
|
A resource might belong to an organization or belong to the default (null) organization.
|
|
|
|
### Comment
|
|
|
|
A text note, that belongs to a given resource, created by a user.
|
|
|
|
### Region
|
|
|
|
A geo-located data storage region, currently implemented as a PostgresSQL database server.
|
|
When providing a connection url to a region, make sure to not include a database name or any trailing `/`-s in the url.
|
|
|
|
### Organization
|
|
|
|
A collection of users and an owner of resource. Any user may create organizations.
|
|
Organizations may be granted access to any given region. That action creates a new database in the region DB server. migrates it to the latest DB schema and sets up user and resource publish and subscribe mechanisms.
|
|
|
|
## Steps to flex this POC
|
|
|
|
Using the exposed graphql explorer, you can go ahead and
|
|
- create a user
|
|
- create an organisation
|
|
- add the user to the organisation
|
|
- create regions & associate them with an organisation
|
|
- create a resource in the default organisation, or for a specific organisation & region
|
|
- etc.
|
|
|
|
|