Skip to content

feat(snowflake-connectors): meetings implementation [CM-1034]#3998

Merged
mbani01 merged 16 commits intomainfrom
feat/meetings_implementation
Apr 10, 2026
Merged

feat(snowflake-connectors): meetings implementation [CM-1034]#3998
mbani01 merged 16 commits intomainfrom
feat/meetings_implementation

Conversation

@mbani01
Copy link
Copy Markdown
Contributor

@mbani01 mbani01 commented Apr 3, 2026

This pull request adds support for processing and tracking meeting attendance activities from the "meetings" platform. It introduces new activity types for meeting invitations and attendance, integrates the meetings data source into the Snowflake connectors pipeline, and updates relevant enums and configurations to recognize meetings as a valid platform and organization source.

Meetings platform support:

  • Added MEETINGS as a new PlatformType, OrganizationSource, and OrganizationAttributeSource, and updated the source priority list to include meetings. [1] [2] [3] [4]
  • Introduced new meetings activity types (invited-meeting, attended-meeting) and their scoring grid, and registered them in the database. [1] [2]

Snowflake connectors integration:

  • Implemented the meetings attendance data source: added MeetingAttendanceTransformer and its source query, and registered the source in the Snowflake connectors integration index. [1] [2] [3] [4] [5]

Transformer pipeline improvements:

  • Updated the transformer pipeline to support multiple activities per row: transformRow and safeTransformRow now handle arrays of activities, and the consumer processes all returned activities. [1] [2] [3] [4]

Integrations exports:

  • Exported meetings types from the integrations library for use throughout the codebase.

Note

Medium Risk
Adds a new Snowflake connector source plus new platform/activity types, and changes the core transformer contract/consumer to support emitting multiple activities per input row, which can affect downstream processing volume and deduping behavior.

Overview
Adds a new MEETINGS Snowflake connector source (meeting-attendance) with a buildSourceQuery and MeetingAttendanceTransformer that can emit both invitation and attendance activities from a single row, including optional org enrichment from Salesforce accounts.

Updates the snowflake connector pipeline to support multiple activities per row by widening TransformerBase.transformRow/safeTransformRow to return arrays and iterating over results in transformerConsumer.

Registers meetings across the stack: new MeetingsActivityType + scoring grid export, Flyway migration inserting the two new activity types, new DataSourceName, platform/source registration, and adds MEETINGS to PlatformType, OrganizationSource/OrganizationAttributeSource, and org attribute source priority. Also tightens the scaffold skill guidance around Parquet type coercion and org-table discovery.

Reviewed by Cursor Bugbot for commit f52614a. Bugbot is set up for automated code reviews on this repo. Configure here.

mbani01 added 2 commits April 3, 2026 13:41
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
@mbani01 mbani01 self-assigned this Apr 3, 2026
@CLAassistant
Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

mbani01 added 2 commits April 3, 2026 15:27
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
@mbani01 mbani01 marked this pull request as ready for review April 3, 2026 14:53
@mbani01 mbani01 requested review from Copilot and joanagmaia April 3, 2026 14:53
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds “meetings” platform support to the Snowflake connectors pipeline, including new activity types for meeting invitations and attendance, plus the necessary enum/config updates so meetings is recognized across the codebase.

Changes:

  • Introduces MEETINGS as a supported platform/org source and wires it into source priority.
  • Adds meetings activity types (invited-meeting, attended-meeting) with scoring grid + DB registration.
  • Extends the transformer pipeline to allow a single row to produce multiple activities and updates the consumer to emit them all.

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
services/libs/types/src/enums/platforms.ts Adds MEETINGS to PlatformType.
services/libs/types/src/enums/organizations.ts Adds MEETINGS to organization source enums.
services/libs/integrations/src/integrations/meetings/types.ts Defines meetings activity types + scoring grid.
services/libs/integrations/src/integrations/index.ts Exports meetings integration types.
services/libs/data-access-layer/src/organizations/attributesConfig.ts Adds meetings to org attribute source priority list.
services/apps/snowflake_connectors/src/integrations/types.ts Registers meetings meeting-attendance as a data source name.
services/apps/snowflake_connectors/src/integrations/meetings/meeting-attendance/transformer.ts Implements meetings attendance transformer producing invited/attended activities.
services/apps/snowflake_connectors/src/integrations/meetings/meeting-attendance/buildSourceQuery.ts Adds Snowflake query for exporting meeting attendance rows + incremental logic.
services/apps/snowflake_connectors/src/integrations/index.ts Registers meetings platform and its source in the connectors registry.
services/apps/snowflake_connectors/src/core/transformerBase.ts Updates transformer API to allow multiple activities per row; normalizes safeTransformRow to arrays.
services/apps/snowflake_connectors/src/consumer/transformerConsumer.ts Updates consumer to handle multiple transformed activities per input row.
backend/src/database/migrations/V1775219382__addMeetingsActivityTypes.sql Inserts new meetings activity types into activityTypes.
backend/src/database/migrations/U1775219382__addMeetingsActivityTypes.sql (Present but empty) rollback migration file for the above insert.
.claude/skills/scaffold-snowflake-connector/SKILL.md Updates internal scaffolding guidance related to org mapping discovery.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +98 to 111
for (const result of results) {
const resolved = await this.integrationResolver.resolve(platform, result.segment)
if (!resolved) {
resolveSkippedCount++
continue
}

await this.emitter.createAndProcessActivityResult(
resolved.segmentId,
resolved.integrationId,
result.activity,
)
transformedCount++
}
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that transformers may return multiple activities per row, this loop resolves the same segment repeatedly when multiple activities share it (common when a row yields multiple activity types). Consider de-duplicating integrationResolver.resolve(...) calls per row (e.g., cache by slug+sourceId) to avoid extra Redis/DB lookups and reduce latency.

Copilot uses AI. Check for mistakes.
platform: PlatformType.MEETINGS,
timestamp,
score: MEETINGS_GRID[MeetingsActivityType.INVITED_MEETING].score,
sourceId: `${primaryKey}_invited`,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@joanagmaia, this one is different from specs, as meeting_id isn't unique (similar to committees). Used primaryKey as it seems to be unique

Comment thread services/apps/snowflake_connectors/src/core/transformerBase.ts Outdated
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
mbani01 and others added 5 commits April 9, 2026 15:50
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mbani@contractor.linuxfoundation.org>
@mbani01 mbani01 requested a review from joanagmaia April 9, 2026 17:25
Comment thread services/apps/snowflake_connectors/src/integrations/index.ts
Comment thread services/apps/snowflake_connectors/src/integrations/index.ts
mbani01 added 3 commits April 10, 2026 11:32
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Copy link
Copy Markdown
Contributor

@joanagmaia joanagmaia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f52614a. Configure here.

type: OrganizationIdentityType.PRIMARY_DOMAIN,
verified: true,
},
],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Org identity created with potentially null website value

Low Severity

In the isIndividualNoAccount branch of buildOrganizations, the null guard on website was removed from the committees transformer, and the meetings transformer was written with the same unguarded pattern. If website is null but domainAliases is non-null, an organization identity with value: null is created. The Cvent reference implementation correctly uses website ? [{...}] : [] to guard against this. While current SQL filters (WHERE website IS NOT NULL) make this unlikely, the defensive guard was intentionally present and its removal makes the code fragile.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f52614a. Configure here.

platform: PlatformType.MEETINGS,
timestamp,
score: MEETINGS_GRID[type].score,
sourceId: `${meetingId}-${userId}`,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Duplicate sourceId for invited and attended activities

Medium Severity

When a row has both WAS_INVITED and INVITEE_ATTENDED as true, buildActivity produces two activities with the same sourceId (${meetingId}-${userId}). The IActivityData interface documents sourceId as a "Unique external identifier of the activity." If downstream upsert logic deduplicates by (sourceId, platform), one activity will overwrite the other, silently discarding meeting data. The activity type could be appended to sourceId to differentiate them.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f52614a. Configure here.

@mbani01 mbani01 merged commit e81fabf into main Apr 10, 2026
16 checks passed
@mbani01 mbani01 deleted the feat/meetings_implementation branch April 10, 2026 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants