fix: 🐛 Link administrator to event on account creation #589
Tim Izzo tim@5ika.ch
Wed, 18 Jun 2025 10:49:08 +0200
2 files changed,
36 insertions(+),
18 deletions(-)
M
backend/src/extensions/users-permissions/content-types/user/lifecycles.ts
→
backend/src/extensions/users-permissions/content-types/user/lifecycles.ts
@@ -2,21 +2,37 @@ export default {
async afterCreate(event) { const { result } = event; if (result.email) { - const linkedEvents = await strapi.entityService.findMany( + // Link events where new user is creator + const eventsWithCreatorEmail = await strapi.entityService.findMany( "api::event.event", - { - filters: { email: result.email }, - populate: ["users"], - } + { filters: { email: result.email } } ); - for (const event of linkedEvents) { + for (const linkedEvent of eventsWithCreatorEmail) { strapi.log.info( - `Set user ${result.id} (${result.email}) as creator of event ${event.id} (${event.uuid})` + `Set user ${result.id} (${result.email}) as creator of event ${linkedEvent.id} (${linkedEvent.uuid})` ); - await strapi.entityService.update("api::event.event", event.id, { + await strapi.entityService.update("api::event.event", linkedEvent.id, { data: { creator: result.id, - users: [...(event.users || []), result.id], + users: { connect: [result.id] }, + }, + }); + } + + // Link events where new user is administrator + const knex = strapi.db.connection; + const eventsWithAdminEmail = await knex("events") + .select("*") + .whereRaw( + `'${result.email}' = ANY(string_to_array(replace(administrators, ' ', ''), ','))` + ); + for (const linkedEvent of eventsWithAdminEmail) { + strapi.log.info( + `Link user ${result.id} (${result.email}) to event ${linkedEvent.id} (${linkedEvent.uuid})` + ); + await strapi.entityService.update("api::event.event", linkedEvent.id, { + data: { + users: { connect: [result.id] }, }, }); }
M
frontend/pages/e/[uuid]/prices.tsx
→
frontend/pages/e/[uuid]/prices.tsx
@@ -53,13 +53,15 @@ },
}} > <Box mb={4}> - {/* @ts-ignore */} - <stripe-pricing-table - pricing-table-id={modulesSettings.caroster_plus_pricing_grid_id} - publishable-key={modulesSettings.caroster_plus_publishable_key} - client-reference-id={event.uuid} - customer-email={profile?.email} - /> + {modulesSettings && ( + /* @ts-ignore */ + <stripe-pricing-table + pricing-table-id={modulesSettings.caroster_plus_pricing_grid_id} + publishable-key={modulesSettings.caroster_plus_publishable_key} + client-reference-id={event.uuid} + customer-email={profile?.email} + /> + )} </Box> </Container> </Box>@@ -92,7 +94,7 @@ const {data} = await apolloClient.query({
query: ModuleDocument, variables: {locale: context.locale}, }); - modulesSettings = data?.module?.data?.attributes || {}; + modulesSettings = data?.module?.data?.attributes || null; if (!modulesSettings?.caroster_plus_pricing_grid_id) { console.warn(@@ -104,7 +106,7 @@ const {data: enData} = await apolloClient.query({
query: ModuleDocument, variables: {locale: SupportedLocales['en']}, }); - modulesSettings = enData?.module?.data?.attributes; + modulesSettings = enData?.module?.data?.attributes || null; } } catch (error) { console.error("Can't fetch config for module: ", error);