Load identity email_address on coredata.MembershipProfile

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-03 19:45:03 +04:00
parent e156a428d4
commit 6328952c6f
7 changed files with 95 additions and 54 deletions

View File

@@ -30,7 +30,9 @@ import (
type (
MembershipProfile struct {
ID gid.GID `db:"id"`
IdentityID gid.GID `db:"identity_id"`
MembershipID gid.GID `db:"membership_id"`
EmailAddress mail.Addr `db:"email_address"`
FullName string `db:"full_name"`
Kind PeopleKind `db:"kind"`
AdditionalEmailAddresses mail.Addrs `db:"additional_email_addresses"`
@@ -66,21 +68,25 @@ func (p *MembershipProfile) LoadByMembershipID(
) error {
q := `
SELECT
id,
membership_id,
full_name,
kind,
additionalEmailAddresses,
position,
contract_start_date,
contract_end_date,
created_at,
updated_at
p.id,
p.identity_id,
p.membership_id,
i.email_address,
p.full_name,
p.kind,
p.additionalEmailAddresses,
p.position,
p.contract_start_date,
p.contract_end_date,
p.created_at,
p.updated_at
FROM
iam_membership_profiles
iam_membership_profiles p
INNER JOIN identities i
ON i.id = p.identity_id
WHERE
%s
AND membership_id = @membership_id
p.%s
AND p.membership_id = @membership_id
LIMIT 1;
`
@@ -116,21 +122,25 @@ func (p *MembershipProfile) LoadByID(
) error {
q := `
SELECT
id,
membership_id,
full_name,
kind,
additionalEmailAddresses,
position,
contract_start_date,
contract_end_date,
created_at,
updated_at
p.id,
p.identity_id,
p.membership_id,
i.email_address,
p.full_name,
p.kind,
p.additionalEmailAddresses,
p.position,
p.contract_start_date,
p.contract_end_date,
p.created_at,
p.updated_at
FROM
iam_membership_profiles
iam_membership_profiles p
INNER JOIN identities i
ON i.id = p.identity_id
WHERE
%s
AND id = @profile_id
p.%s
AND p.id = @profile_id
LIMIT 1;
`
@@ -166,21 +176,25 @@ func (p *MembershipProfiles) LoadByIDs(
) error {
q := `
SELECT
id,
membership_id,
full_name,
kind,
additionalEmailAddresses,
position,
contract_start_date,
contract_end_date,
created_at,
updated_at
p.id,
p.identity_id,
p.membership_id,
i.email_address,
p.full_name,
p.kind,
p.additionalEmailAddresses,
p.position,
p.contract_start_date,
p.contract_end_date,
p.created_at,
p.updated_at
FROM
iam_membership_profiles
iam_membership_profiles p
INNER JOIN identities i
ON i.id = p.identity_id
WHERE
%s
AND id = ANY(@profile_ids)
p.%s
AND p.id = ANY(@profile_ids)
`
q = fmt.Sprintf(q, scope.SQLFragment())
@@ -213,7 +227,9 @@ func (p *MembershipProfiles) LoadByMeetingID(
WITH attendees AS (
SELECT
p.id,
p.identity_id,
p.membership_id,
i.email_address,
p.full_name,
p.kind,
p.additionalEmailAddresses,
@@ -225,6 +241,8 @@ WITH attendees AS (
ma.created_at AS attendee_created_at
FROM
iam_membership_profiles p
INNER JOIN identities i
ON i.id = p.identity_id
INNER JOIN
meeting_attendees ma ON p.id = ma.attendee_profile_id
WHERE
@@ -232,8 +250,10 @@ WITH attendees AS (
)
SELECT
id,
organization_id,
identity_id,
membership_id,
kind,
email_address,
full_name,
additional_email_addresses,
position,
@@ -287,19 +307,23 @@ WITH signatories AS (
signed_by
)
SELECT
id,
organization_id,
kind,
full_name,
additional_email_addresses,
position,
contract_start_date,
contract_end_date,
created_at,
updated_at
p.id,
p.identity_id,
p.membership_id,
p.kind,
p.full_name,
i.email_address,
p.additional_email_addresses,
p.position,
p.contract_start_date,
p.contract_end_date,
p.created_at,
p.updated_at
FROM
iam_membership_profiles
INNER JOIN signatories ON iam_membership_profiles.id = signatories.signed_by_profile_id
iam_membership_profiles p
INNER JOIN identities i
ON i.id = p.identity_id
INNER JOIN signatories ON p.id = signatories.signed_by_profile_id
`
q = fmt.Sprintf(q, scope.SQLFragment())
@@ -328,6 +352,7 @@ INSERT INTO
iam_membership_profiles (
tenant_id,
id,
identity_id,
membership_id,
full_name,
kind,
@@ -341,6 +366,7 @@ INSERT INTO
VALUES (
@tenant_id,
@id,
@identity_id,
@membership_id,
@full_name,
@kind,
@@ -356,6 +382,7 @@ VALUES (
args := pgx.StrictNamedArgs{
"tenant_id": p.ID.TenantID().String(),
"id": p.ID,
"identity_id": p.IdentityID,
"membership_id": p.MembershipID,
"full_name": p.FullName,
"kind": p.Kind,

View File

@@ -1,6 +1,8 @@
-- 1. Add peoples column onto profiles
ALTER TABLE
iam_membership_profiles
ADD
COLUMN identity_id REFERENCES identities(id) NOT NULL,
ADD
COLUMN additional_email_addresses CITEXT [] NOT NULL,
ADD
@@ -12,6 +14,15 @@ ADD
ADD
COLUMN position TEXT;
UPDATE
iam_membership_profiles mp
SET
identity_id = m.identity_id
FROM
iam_memberships m
WHERE
m.id = mp.membership_id;
-- 2. Add profile references to all table referencing peoples
-- was owner_id, NOT NULL
ALTER TABLE

View File

@@ -267,6 +267,7 @@ func (s *AccountService) AcceptInvitation(
profile := &coredata.MembershipProfile{
ID: gid.New(tenantID, coredata.MembershipProfileEntityType),
IdentityID: identity.ID,
MembershipID: membership.ID,
FullName: identity.FullName,
CreatedAt: now,

View File

@@ -667,6 +667,7 @@ func (s *OrganizationService) CreateOrganization(
profile := &coredata.MembershipProfile{
ID: gid.New(tenantID, coredata.MembershipProfileEntityType),
IdentityID: identity.ID,
MembershipID: membership.ID,
FullName: identity.FullName,
CreatedAt: now,

View File

@@ -318,6 +318,7 @@ func (s *Service) HandleAssertion(
membershipProfile := &coredata.MembershipProfile{
ID: gid.New(membership.ID.TenantID(), coredata.MembershipProfileEntityType),
IdentityID: identity.ID,
MembershipID: membership.ID,
FullName: fullname,
CreatedAt: now,

View File

@@ -197,6 +197,7 @@ func (s *Service) CreateUser(
// Create membership profile
membershipProfile := &coredata.MembershipProfile{
ID: gid.New(membership.ID.TenantID(), coredata.MembershipProfileEntityType),
IdentityID: identity.ID,
MembershipID: membership.ID,
FullName: fullName,
CreatedAt: now,

View File

@@ -557,8 +557,7 @@ func (s *DocumentService) SendSigningNotifications(
email := coredata.NewEmail(
signatory.FullName,
// FIXME: load email with profile
"contact@getprobo.com",
signatory.EmailAddress,
subject,
textBody,
htmlBody,