Skip to content

Commit b137784

Browse files
satellite/db: add tenant_id column to users table
Issue: storj/storj-private#1644 Change-Id: Ie7b1afc97ce7d9c09d81c41061966ad0dac4c303
1 parent 797d6e0 commit b137784

File tree

11 files changed

+3815
-51
lines changed

11 files changed

+3815
-51
lines changed

satellite/satellitedb/dbx/satellitedb.dbx.go

Lines changed: 115 additions & 46 deletions
Large diffs are not rendered by default.

satellite/satellitedb/dbx/satellitedb.dbx.pgx.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ CREATE TABLE stripecoinpayments_tx_conversion_rates (
465465
CREATE TABLE users (
466466
id bytea NOT NULL,
467467
external_id text,
468+
tenant_id text,
468469
email text NOT NULL,
469470
normalized_email text NOT NULL,
470471
full_name text NOT NULL,
@@ -678,6 +679,8 @@ CREATE INDEX users_email_status_index ON users ( normalized_email, status ) ;
678679
CREATE INDEX trial_expiration_index ON users ( trial_expiration ) ;
679680
CREATE INDEX users_external_id_index ON users ( external_id ) WHERE users.external_id is not NULL ;
680681
CREATE INDEX users_status_status_updated_at_index ON users ( status, status_updated_at ) WHERE users.status_updated_at is not NULL ;
682+
CREATE INDEX users_tenant_id_index ON users ( tenant_id ) WHERE users.tenant_id is not NULL ;
683+
CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) WHERE users.tenant_id is not NULL ;
681684
CREATE INDEX webapp_sessions_user_id_index ON webapp_sessions ( user_id ) ;
682685
CREATE INDEX bucket_migrations_state_created_at_index ON bucket_migrations ( state, created_at ) ;
683686
CREATE INDEX project_invitations_project_id_index ON project_invitations ( project_id ) ;

satellite/satellitedb/dbx/satellitedb.dbx.pgxcockroach.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ CREATE TABLE stripecoinpayments_tx_conversion_rates (
465465
CREATE TABLE users (
466466
id bytea NOT NULL,
467467
external_id text,
468+
tenant_id text,
468469
email text NOT NULL,
469470
normalized_email text NOT NULL,
470471
full_name text NOT NULL,
@@ -678,6 +679,8 @@ CREATE INDEX users_email_status_index ON users ( normalized_email, status ) ;
678679
CREATE INDEX trial_expiration_index ON users ( trial_expiration ) ;
679680
CREATE INDEX users_external_id_index ON users ( external_id ) WHERE users.external_id is not NULL ;
680681
CREATE INDEX users_status_status_updated_at_index ON users ( status, status_updated_at ) WHERE users.status_updated_at is not NULL ;
682+
CREATE INDEX users_tenant_id_index ON users ( tenant_id ) WHERE users.tenant_id is not NULL ;
683+
CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) WHERE users.tenant_id is not NULL ;
681684
CREATE INDEX webapp_sessions_user_id_index ON webapp_sessions ( user_id ) ;
682685
CREATE INDEX bucket_migrations_state_created_at_index ON bucket_migrations ( state, created_at ) ;
683686
CREATE INDEX project_invitations_project_id_index ON project_invitations ( project_id ) ;

satellite/satellitedb/dbx/satellitedb.dbx.spanner.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ CREATE TABLE stripecoinpayments_tx_conversion_rates (
428428
CREATE TABLE users (
429429
id BYTES(MAX) NOT NULL,
430430
external_id STRING(MAX),
431+
tenant_id STRING(MAX),
431432
email STRING(MAX) NOT NULL,
432433
normalized_email STRING(MAX) NOT NULL,
433434
full_name STRING(MAX) NOT NULL,
@@ -641,6 +642,8 @@ CREATE INDEX users_email_status_index ON users ( normalized_email, status ) ;
641642
CREATE INDEX trial_expiration_index ON users ( trial_expiration ) ;
642643
CREATE INDEX users_external_id_index ON users ( external_id ) ;
643644
CREATE INDEX users_status_status_updated_at_index ON users ( status, status_updated_at ) ;
645+
CREATE INDEX users_tenant_id_index ON users ( tenant_id ) ;
646+
CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) ;
644647
CREATE INDEX webapp_sessions_user_id_index ON webapp_sessions ( user_id ) ;
645648
CREATE INDEX bucket_migrations_state_created_at_index ON bucket_migrations ( state, created_at ) ;
646649
CREATE INDEX project_invitations_project_id_index ON project_invitations ( project_id ) ;

satellite/satellitedb/dbx/user.dbx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,24 @@ model user (
2626
where user.status_updated_at != null
2727
)
2828

29+
index (
30+
name users_tenant_id_index
31+
fields tenant_id
32+
where user.tenant_id != null
33+
)
34+
35+
index (
36+
name users_normalized_email_tenant_id_status_index
37+
fields normalized_email tenant_id status
38+
where user.tenant_id != null
39+
)
40+
2941
// id is an uuid for the user.
3042
field id blob
3143
// external_id is a user id provided by an external source, such as a single-sign-on identity provider.
3244
field external_id text ( updatable, nullable )
45+
// tenant_id is is used to associate the user with a tenant, allowing the same email to be used in different tenants.
46+
field tenant_id text ( updatable, nullable )
3347
// email is the user specified email.
3448
field email text ( updatable )
3549
// normalized_email is the email transformed by usual rules, e.g. case-insensitive.

satellite/satellitedb/migrate.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,23 @@ func (db *satelliteDB) productionMigrationSpanner() *migrate.Migration {
10821082
`CREATE INDEX bucket_migrations_state_created_at_index ON bucket_migrations ( state, created_at )`,
10831083
},
10841084
},
1085+
{
1086+
DB: &db.migrationDB,
1087+
Description: "add tenant_id column to users",
1088+
Version: 304,
1089+
Action: migrate.SQL{
1090+
`ALTER TABLE users ADD COLUMN tenant_id STRING(MAX);`,
1091+
},
1092+
},
1093+
{
1094+
DB: &db.migrationDB,
1095+
Description: "add indexes to users.tenant_id column",
1096+
Version: 305,
1097+
Action: migrate.SQL{
1098+
`CREATE INDEX users_tenant_id_index ON users ( tenant_id );`,
1099+
`CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status );`,
1100+
},
1101+
},
10851102
// NB: after updating testdata in `testdata`, run
10861103
// `go generate` to update `migratez.go`.
10871104
},
@@ -4006,6 +4023,23 @@ func (db *satelliteDB) productionMigrationPostgres() *migrate.Migration {
40064023
`CREATE INDEX bucket_migrations_state_created_at_index ON bucket_migrations ( state, created_at )`,
40074024
},
40084025
},
4026+
{
4027+
DB: &db.migrationDB,
4028+
Description: "add tenant_id column to users",
4029+
Version: 304,
4030+
Action: migrate.SQL{
4031+
`ALTER TABLE users ADD COLUMN tenant_id TEXT;`,
4032+
},
4033+
},
4034+
{
4035+
DB: &db.migrationDB,
4036+
Description: "add indexes to users.tenant_id column",
4037+
Version: 305,
4038+
Action: migrate.SQL{
4039+
`CREATE INDEX users_tenant_id_index ON users ( tenant_id ) WHERE tenant_id IS NOT NULL;`,
4040+
`CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) WHERE users.tenant_id is not NULL;`,
4041+
},
4042+
},
40094043
// NB: after updating testdata in `testdata`, run
40104044
// `go generate` to update `migratez.go`.
40114045
},

satellite/satellitedb/migratez.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func (db *satelliteDB) testMigrationSpanner() *migrate.Migration {
2121
{
2222
DB: &db.migrationDB,
2323
Description: "Testing setup",
24-
Version: 303,
24+
Version: 305,
2525
Action: migrate.SQL{`-- AUTOGENERATED BY storj.io/dbx
2626
-- DO NOT EDIT
2727
CREATE TABLE account_freeze_events (
@@ -452,7 +452,8 @@ CREATE TABLE stripecoinpayments_tx_conversion_rates (
452452
CREATE TABLE users (
453453
id BYTES(MAX) NOT NULL,
454454
external_id STRING(MAX),
455-
email STRING(MAX) NOT NULL,
455+
tenant_id STRING(MAX),
456+
email STRING(MAX) NOT NULL,
456457
normalized_email STRING(MAX) NOT NULL,
457458
full_name STRING(MAX) NOT NULL,
458459
short_name STRING(MAX),
@@ -671,7 +672,9 @@ CREATE INDEX project_invitations_project_id_index ON project_invitations ( proje
671672
CREATE INDEX project_invitations_email_index ON project_invitations ( email ) ;
672673
CREATE INDEX project_members_project_id_index ON project_members ( project_id ) ;
673674
CREATE INDEX rest_api_keys_user_id_index ON rest_api_keys ( user_id ) ;
674-
CREATE INDEX rest_api_keys_name_index ON rest_api_keys ( name )
675+
CREATE INDEX rest_api_keys_name_index ON rest_api_keys ( name ) ;
676+
CREATE INDEX users_tenant_id_index ON users ( tenant_id ) ;
677+
CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) ;
675678
676679
`},
677680
},
@@ -687,7 +690,7 @@ func (db *satelliteDB) testMigrationPostgres() *migrate.Migration {
687690
{
688691
DB: &db.migrationDB,
689692
Description: "Testing setup",
690-
Version: 303,
693+
Version: 305,
691694
Action: migrate.SQL{`-- AUTOGENERATED BY storj.io/dbx
692695
-- DO NOT EDIT
693696
CREATE TABLE account_freeze_events (
@@ -1155,6 +1158,7 @@ CREATE TABLE stripecoinpayments_tx_conversion_rates (
11551158
CREATE TABLE users (
11561159
id bytea NOT NULL,
11571160
external_id text,
1161+
tenant_id text,
11581162
email text NOT NULL,
11591163
normalized_email text NOT NULL,
11601164
full_name text NOT NULL,
@@ -1374,7 +1378,9 @@ CREATE INDEX project_invitations_project_id_index ON project_invitations ( proje
13741378
CREATE INDEX project_invitations_email_index ON project_invitations ( email ) ;
13751379
CREATE INDEX project_members_project_id_index ON project_members ( project_id ) ;
13761380
CREATE INDEX rest_api_keys_user_id_index ON rest_api_keys ( user_id ) ;
1377-
CREATE INDEX rest_api_keys_name_index ON rest_api_keys ( name )
1381+
CREATE INDEX rest_api_keys_name_index ON rest_api_keys ( name ) ;
1382+
CREATE INDEX users_tenant_id_index ON users ( tenant_id ) WHERE users.tenant_id is not NULL ;
1383+
CREATE INDEX users_normalized_email_tenant_id_status_index ON users ( normalized_email, tenant_id, status ) WHERE users.tenant_id is not NULL ;
13781384
13791385
`},
13801386
},

0 commit comments

Comments
 (0)