From 31fad03af8bcc02d247e6a74c820dfa22cd24905 Mon Sep 17 00:00:00 2001 From: x032205 Date: Fri, 9 May 2025 23:41:11 -0400 Subject: [PATCH 1/4] Return metadata with identity post endpoints --- backend/src/db/schemas/identities.ts | 3 +- .../src/server/routes/v1/identity-router.ts | 2 +- .../src/services/identity/identity-service.ts | 69 +++++++++++++------ 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/backend/src/db/schemas/identities.ts b/backend/src/db/schemas/identities.ts index adf3a6ef2..79ddcdea0 100644 --- a/backend/src/db/schemas/identities.ts +++ b/backend/src/db/schemas/identities.ts @@ -12,7 +12,8 @@ export const IdentitiesSchema = z.object({ name: z.string(), authMethod: z.string().nullable().optional(), createdAt: z.date(), - updatedAt: z.date() + updatedAt: z.date(), + metadata: z.object({ id: z.string(), key: z.string(), value: z.string() }).array().optional() }); export type TIdentities = z.infer; diff --git a/backend/src/server/routes/v1/identity-router.ts b/backend/src/server/routes/v1/identity-router.ts index 7731aad98..cd49a1235 100644 --- a/backend/src/server/routes/v1/identity-router.ts +++ b/backend/src/server/routes/v1/identity-router.ts @@ -227,8 +227,8 @@ export const registerIdentityRouter = async (server: FastifyZodProvider) => { identity: IdentityOrgMembershipsSchema.extend({ metadata: z .object({ - key: z.string().trim().min(1), id: z.string().trim().min(1), + key: z.string().trim().min(1), value: z.string().trim().min(1) }) .array() diff --git a/backend/src/services/identity/identity-service.ts b/backend/src/services/identity/identity-service.ts index 6f72b3c6e..a664782cc 100644 --- a/backend/src/services/identity/identity-service.ts +++ b/backend/src/services/identity/identity-service.ts @@ -106,18 +106,29 @@ export const identityServiceFactory = ({ }, tx ); + + let insertedMetadata: Array<{ + id: string; + key: string; + value: string; + }> = []; + if (metadata && metadata.length) { - await identityMetadataDAL.insertMany( - metadata.map(({ key, value }) => ({ - identityId: newIdentity.id, - orgId, - key, - value - })), - tx - ); + const rowsToInsert = metadata.map(({ key, value }) => ({ + identityId: newIdentity.id, + orgId, + key, + value + })); + + insertedMetadata = await identityMetadataDAL.insertMany(rowsToInsert, tx); } - return { ...newIdentity, authMethods: [] }; + + return { + ...newIdentity, + authMethods: [], + metadata: insertedMetadata + }; }); await licenseService.updateSubscriptionOrgMemberCount(orgId); @@ -189,21 +200,31 @@ export const identityServiceFactory = ({ tx ); } + let insertedMetadata: Array<{ + id: string; + key: string; + value: string; + }> = []; + if (metadata) { await identityMetadataDAL.delete({ orgId: identityOrgMembership.orgId, identityId: id }, tx); + if (metadata.length) { - await identityMetadataDAL.insertMany( - metadata.map(({ key, value }) => ({ - identityId: newIdentity.id, - orgId: identityOrgMembership.orgId, - key, - value - })), - tx - ); + const rowsToInsert = metadata.map(({ key, value }) => ({ + identityId: newIdentity.id, + orgId: identityOrgMembership.orgId, + key, + value + })); + + insertedMetadata = await identityMetadataDAL.insertMany(rowsToInsert, tx); } } - return newIdentity; + + return { + ...newIdentity, + metadata: insertedMetadata + }; }); return { ...identity, orgId: identityOrgMembership.orgId }; @@ -224,7 +245,13 @@ export const identityServiceFactory = ({ actorOrgId ); ForbiddenError.from(permission).throwUnlessCan(OrgPermissionIdentityActions.Read, OrgPermissionSubjects.Identity); - return identity; + + const metadata = await identityMetadataDAL.find({ + identityId: id, + orgId: identity.orgId + }); + + return { ...identity, metadata }; }; const deleteIdentity = async ({ From 2793ac22aa5b193abe011104b36c519252cd3808 Mon Sep 17 00:00:00 2001 From: x032205 Date: Sun, 11 May 2025 22:27:09 -0400 Subject: [PATCH 2/4] remove duplicate field --- backend/src/services/identity/identity-service.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/backend/src/services/identity/identity-service.ts b/backend/src/services/identity/identity-service.ts index a664782cc..fd893713e 100644 --- a/backend/src/services/identity/identity-service.ts +++ b/backend/src/services/identity/identity-service.ts @@ -246,12 +246,7 @@ export const identityServiceFactory = ({ ); ForbiddenError.from(permission).throwUnlessCan(OrgPermissionIdentityActions.Read, OrgPermissionSubjects.Identity); - const metadata = await identityMetadataDAL.find({ - identityId: id, - orgId: identity.orgId - }); - - return { ...identity, metadata }; + return identity; }; const deleteIdentity = async ({ From 3f8eaa0679422791196ac3deb9a5f1b2173888b8 Mon Sep 17 00:00:00 2001 From: x032205 Date: Mon, 12 May 2025 18:13:14 -0400 Subject: [PATCH 3/4] remove schema change --- backend/src/db/schemas/identities.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/db/schemas/identities.ts b/backend/src/db/schemas/identities.ts index 79ddcdea0..adf3a6ef2 100644 --- a/backend/src/db/schemas/identities.ts +++ b/backend/src/db/schemas/identities.ts @@ -12,8 +12,7 @@ export const IdentitiesSchema = z.object({ name: z.string(), authMethod: z.string().nullable().optional(), createdAt: z.date(), - updatedAt: z.date(), - metadata: z.object({ id: z.string(), key: z.string(), value: z.string() }).array().optional() + updatedAt: z.date() }); export type TIdentities = z.infer; From 70fff1f2da58f122786c24911473a8ef734bf1ca Mon Sep 17 00:00:00 2001 From: x032205 Date: Mon, 12 May 2025 19:38:00 -0400 Subject: [PATCH 4/4] review fixes --- backend/src/server/routes/v1/identity-router.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/server/routes/v1/identity-router.ts b/backend/src/server/routes/v1/identity-router.ts index cd49a1235..0e127796a 100644 --- a/backend/src/server/routes/v1/identity-router.ts +++ b/backend/src/server/routes/v1/identity-router.ts @@ -52,7 +52,8 @@ export const registerIdentityRouter = async (server: FastifyZodProvider) => { response: { 200: z.object({ identity: IdentitiesSchema.extend({ - authMethods: z.array(z.string()) + authMethods: z.array(z.string()), + metadata: z.object({ id: z.string(), key: z.string(), value: z.string() }).array() }) }) } @@ -123,7 +124,9 @@ export const registerIdentityRouter = async (server: FastifyZodProvider) => { }), response: { 200: z.object({ - identity: IdentitiesSchema + identity: IdentitiesSchema.extend({ + metadata: z.object({ id: z.string(), key: z.string(), value: z.string() }).array() + }) }) } },