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

View File

@@ -1,6 +1,8 @@
-- 1. Add peoples column onto profiles -- 1. Add peoples column onto profiles
ALTER TABLE ALTER TABLE
iam_membership_profiles iam_membership_profiles
ADD
COLUMN identity_id REFERENCES identities(id) NOT NULL,
ADD ADD
COLUMN additional_email_addresses CITEXT [] NOT NULL, COLUMN additional_email_addresses CITEXT [] NOT NULL,
ADD ADD
@@ -12,6 +14,15 @@ ADD
ADD ADD
COLUMN position TEXT; 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 -- 2. Add profile references to all table referencing peoples
-- was owner_id, NOT NULL -- was owner_id, NOT NULL
ALTER TABLE ALTER TABLE

View File

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

View File

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

View File

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

View File

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

View File

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