diff --git a/pkg/coredata/membership.go b/pkg/coredata/membership.go index 81664868e..77b783004 100644 --- a/pkg/coredata/membership.go +++ b/pkg/coredata/membership.go @@ -37,10 +37,12 @@ type ( Role MembershipRole `db:"role"` Source MembershipSource `db:"source"` State MembershipState `db:"state"` - FullName string `db:"full_name"` - EmailAddress mail.Addr `db:"email_address"` - CreatedAt time.Time `db:"created_at"` - UpdatedAt time.Time `db:"updated_at"` + // FIXME: remove after scim is based on profile + EmailAddress mail.Addr `db:"-"` + FullName string `db:"-"` + + CreatedAt time.Time `db:"created_at"` + UpdatedAt time.Time `db:"updated_at"` } Memberships []*Membership @@ -48,10 +50,6 @@ type ( func (m Membership) CursorKey(orderBy MembershipOrderField) page.CursorKey { switch orderBy { - case MembershipOrderFieldFullName: - return page.NewCursorKey(m.ID, m.FullName) - case MembershipOrderFieldEmailAddress: - return page.NewCursorKey(m.ID, m.EmailAddress) case MembershipOrderFieldRole: return page.NewCursorKey(m.ID, m.Role) case MembershipOrderFieldCreatedAt: @@ -63,39 +61,20 @@ func (m Membership) CursorKey(orderBy MembershipOrderField) page.CursorKey { func (m *Membership) LoadByIdentityInOrganization(ctx context.Context, conn pg.Conn, identityID gid.GID, organizationID gid.GID) error { q := ` -WITH mbr AS ( - SELECT - id, - identity_id, - organization_id, - role, - source, - state, - created_at, - updated_at - FROM - iam_memberships - WHERE - identity_id = @identity_id - AND organization_id = @organization_id -) SELECT - mbr.id, - mbr.identity_id, - mbr.organization_id, - mbr.role, - mbr.source, - mbr.state, - COALESCE(mp.full_name, i.full_name, '') as full_name, - i.email_address, - o.name AS organization_name, - mbr.created_at, - mbr.updated_at + id, + identity_id, + organization_id, + role, + source, + state, + created_at, + updated_at FROM - mbr -JOIN identities i ON mbr.identity_id = i.id -JOIN organizations o ON mbr.organization_id = o.id -LEFT JOIN iam_membership_profiles mp ON mp.membership_id = mbr.id + iam_memberships +WHERE + identity_id = @identity_id + AND organization_id = @organization_id ` args := pgx.StrictNamedArgs{ @@ -184,42 +163,20 @@ func (m *Membership) LoadByID( membershipID gid.GID, ) error { query := ` -WITH mbr AS ( - SELECT - id, - identity_id, - organization_id, - role, - source, - state, - created_at, - updated_at - FROM - iam_memberships - WHERE - id = @membership_id - AND %s -) SELECT - mbr.id, - mbr.identity_id, - mbr.organization_id, - mbr.role, - mbr.source, - mbr.state, - COALESCE(mp.full_name, i.full_name, '') as full_name, - i.email_address, - o.name as organization_name, - mbr.created_at, - mbr.updated_at + id, + identity_id, + organization_id, + role, + source, + state, + created_at, + updated_at FROM - mbr -JOIN - identities i ON mbr.identity_id = i.id -JOIN - organizations o ON mbr.organization_id = o.id -LEFT JOIN - iam_membership_profiles mp ON mp.membership_id = mbr.id + iam_memberships +WHERE + id = @membership_id + AND %s ` query = fmt.Sprintf(query, scope.SQLFragment()) @@ -293,45 +250,23 @@ func (m *Membership) LoadByIdentityAndOrg( organizationID gid.GID, ) error { q := ` -WITH mbr AS ( - SELECT - am.id, - am.identity_id, - am.organization_id, - am.role, - am.source, - am.state, - am.created_at, - am.updated_at - FROM - iam_memberships am - WHERE - am.identity_id = @identity_id - AND am.organization_id = @organization_id - AND %s -) SELECT - mbr.id, - mbr.identity_id, - mbr.organization_id, - mbr.role, - mbr.source, - mbr.state, - COALESCE(mp.full_name, i.full_name, '') as full_name, - i.email_address, - o.name as organization_name, - mbr.created_at, - mbr.updated_at + id, + identity_id, + organization_id, + role, + source, + state, + created_at, + updated_at FROM - mbr -JOIN - identities i ON mbr.identity_id = i.id -JOIN - organizations o ON mbr.organization_id = o.id -LEFT JOIN - iam_membership_profiles mp ON mp.membership_id = mbr.id + iam_memberships +WHERE + identity_id = @identity_id + AND organization_id = @organization_id + AND %s +) ` - q = fmt.Sprintf(q, scope.SQLFragment()) args := pgx.StrictNamedArgs{ @@ -432,46 +367,6 @@ func (m *Memberships) LoadByOrganizationID( filter *MembershipFilter, ) error { query := ` -WITH m AS ( - SELECT - id, - identity_id, - organization_id, - role, - source, - state, - created_at, - updated_at - FROM - iam_memberships - WHERE - organization_id = @organization_id - AND %s -), -r AS ( - SELECT - m.id, - m.identity_id, - m.organization_id, - m.role, - m.source, - m.state, - COALESCE(mp.full_name, i.full_name, '') as full_name, - o.name as organization_name, - i.email_address, - m.created_at, - m.updated_at - FROM - m - JOIN - identities i ON m.identity_id = i.id - JOIN - organizations o ON m.organization_id = o.id - LEFT JOIN - iam_membership_profiles mp ON mp.membership_id = m.id - WHERE - %s -) SELECT id, identity_id, @@ -479,15 +374,15 @@ SELECT role, source, state, - full_name, - organization_name, - email_address, created_at, updated_at FROM - r + iam_memberships WHERE %s + AND %s + organization_id = @organization_id + AND %s ` query = fmt.Sprintf(query, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment()) @@ -586,9 +481,6 @@ SELECT role, source, state, - '' as full_name, - NULL as email_address, - '' as organization_name, created_at, updated_at FROM diff --git a/pkg/coredata/membership_profile.go b/pkg/coredata/membership_profile.go index f76435191..3f276d182 100644 --- a/pkg/coredata/membership_profile.go +++ b/pkg/coredata/membership_profile.go @@ -99,6 +99,7 @@ SELECT p.position, p.contract_start_date, p.contract_end_date, + '' AS organization_name, p.created_at, p.updated_at FROM @@ -154,6 +155,7 @@ SELECT p.position, p.contract_start_date, p.contract_end_date, + '' AS organization_name, p.created_at, p.updated_at FROM @@ -212,6 +214,7 @@ SELECT p.position, p.contract_start_date, p.contract_end_date, + '' AS organization_name, p.created_at, p.updated_at FROM @@ -284,6 +287,7 @@ SELECT p.position, p.contract_start_date, p.contract_end_date, + '' AS organization_name, p.created_at, p.updated_at FROM profiles p @@ -338,7 +342,6 @@ WITH profiles AS ( %s AND identity_id = @identity_id AND %s - AND %s ) SELECT p.id, @@ -357,6 +360,8 @@ SELECT FROM profiles p INNER JOIN identities i ON i.id = p.identity_id INNER JOIN organizations o ON o.id = p.organization_id +WHERE + %s ` q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment()) @@ -624,6 +629,7 @@ SELECT position, contract_start_date, contract_end_date, + '' AS organization_name, created_at, updated_at FROM @@ -682,6 +688,7 @@ SELECT p.position, p.contract_start_date, p.contract_end_date, + '' AS organization_name, p.created_at, p.updated_at FROM @@ -721,7 +728,6 @@ FROM iam_membership_profiles WHERE %s - AND %s AND identity_id = @identity_id ` diff --git a/pkg/coredata/migrations/20260212T163603Z.sql b/pkg/coredata/migrations/20260212T163603Z.sql index 0179c827e..08f7a3f75 100644 --- a/pkg/coredata/migrations/20260212T163603Z.sql +++ b/pkg/coredata/migrations/20260212T163603Z.sql @@ -1,31 +1,2 @@ -ALTER TABLE - iam_memberships -ADD - COLUMN profile_id REFERENCES iam_membership_profiles(id); - -UPDATE - iam_memberships m -SET - profile_id = p.id -FROM - iam_membership_profiles p -WHERE - p.membership_id = m.id; - -DROP INDEX authz_memberships_user_id_organization_id_key; - -DROP INDEX idx_iam_memberships_identity_tenant_org; - -CREATE UNIQUE INDEX idx_iam_memberships_profile_id_idx ON iam_memberships(profile_id); - -ALTER TABLE - iam_memberships -ALTER COLUMN - profile_id -SET - NOT NULL, - DROP COLUMN organization_id, - DROP COLUMN identity_id; - ALTER TABLE iam_membership_profiles DROP COLUMN membership_id;