Remove membership derived struct fields

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-13 12:51:14 +04:00
parent baeb758a4f
commit 4c67217e35
3 changed files with 56 additions and 187 deletions

View File

@@ -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

View File

@@ -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
`

View File

@@ -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;