|
3 | 3 | create table if not exists {{ index .Options "Namespace" }}.scim_groups ( |
4 | 4 | id uuid not null, |
5 | 5 | sso_provider_id uuid not null, |
6 | | - external_id text not null, |
| 6 | + external_id text null, |
7 | 7 | display_name text not null, |
8 | 8 | created_at timestamptz null, |
9 | 9 | updated_at timestamptz null, |
10 | 10 |
|
11 | 11 | constraint scim_groups_pkey primary key (id), |
12 | 12 | constraint scim_groups_sso_provider_fkey foreign key (sso_provider_id) |
13 | 13 | references {{ index .Options "Namespace" }}.sso_providers (id) on delete cascade, |
14 | | - constraint "external_id not empty" check (char_length(external_id) > 0), |
| 14 | + constraint "external_id not empty if set" check (external_id is null or char_length(external_id) > 0), |
15 | 15 | constraint "display_name not empty" check (char_length(display_name) > 0) |
16 | 16 | ); |
17 | 17 |
|
18 | | --- Unique index Scoped to SSO provider |
| 18 | +-- Unique index scoped to SSO provider (only for non-null external_id) |
19 | 19 | create unique index if not exists scim_groups_sso_provider_external_id_idx |
20 | | - on {{ index .Options "Namespace" }}.scim_groups (sso_provider_id, external_id); |
| 20 | + on {{ index .Options "Namespace" }}.scim_groups (sso_provider_id, external_id) |
| 21 | + where external_id is not null; |
| 22 | + |
| 23 | +-- Unique index for displayName per SSO provider (case-insensitive, required by Azure AD) |
| 24 | +create unique index if not exists scim_groups_sso_provider_display_name_idx |
| 25 | + on {{ index .Options "Namespace" }}.scim_groups (sso_provider_id, lower(display_name)); |
21 | 26 |
|
22 | 27 | -- Index for listing groups by SSO provider |
23 | 28 | create index if not exists scim_groups_sso_provider_id_idx |
|
0 commit comments