Conversation
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
|
Your PR title doesn't contain a Jira issue key. Consider adding it for better traceability. Example:
Projects:
Please add a Jira issue key to your PR title. |
1 similar comment
|
Your PR title doesn't contain a Jira issue key. Consider adding it for better traceability. Example:
Projects:
Please add a Jira issue key to your PR title. |
|
Your PR title doesn't contain a Jira issue key. Consider adding it for better traceability. Example:
Projects:
Please add a Jira issue key to your PR title. |
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
Adds “committees” as a first-class platform across the pipeline (types/config, Snowflake connector extraction+transform, and DB activity type registration) so committee membership events can be exported and represented as activities.
Changes:
- Added
committeesto platform/org source enums and organization attribute source priority. - Implemented Snowflake connector source query + transformer for committee membership events.
- Added DB migration to register new committee membership activity types.
Reviewed changes
Copilot reviewed 10 out of 11 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| services/libs/types/src/enums/platforms.ts | Adds PlatformType.COMMITTEES. |
| services/libs/types/src/enums/organizations.ts | Adds COMMITTEES to org source enums. |
| services/libs/integrations/src/integrations/index.ts | Re-exports committees integration types. |
| services/libs/integrations/src/integrations/committees/types.ts | Defines committee activity types + scoring grid. |
| services/libs/data-access-layer/src/organizations/attributesConfig.ts | Adds committees to org attribute source priority list. |
| services/apps/snowflake_connectors/src/integrations/types.ts | Adds committees datasource name. |
| services/apps/snowflake_connectors/src/integrations/index.ts | Registers committees platform and datasource. |
| services/apps/snowflake_connectors/src/integrations/committees/committees/buildSourceQuery.ts | Adds Snowflake query for committee membership export. |
| services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts | Transforms exported rows into committee membership activities. |
| backend/src/database/migrations/V1775064222__addCommitteesActivityTypes.sql | Inserts committees activity types into activityTypes. |
| backend/src/database/migrations/U1775064222__addCommitteesActivityTypes.sql | Undo migration placeholder (empty). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Show resolved
Hide resolved
| return null | ||
| } | ||
|
|
||
| const committeeId = (row.COMMITTEE_ID as string).trim() |
There was a problem hiding this comment.
committeeId is computed via (row.COMMITTEE_ID as string).trim() without null/undefined protection. If COMMITTEE_ID is missing or not a string for any row, this will throw and safeTransformRow will skip the row. Consider using optional chaining + explicit skip/log when COMMITTEE_ID is not present.
| const committeeId = (row.COMMITTEE_ID as string).trim() | |
| const rawCommitteeId = row.COMMITTEE_ID | |
| const committeeId = | |
| typeof rawCommitteeId === 'string' && rawCommitteeId.trim().length > 0 | |
| ? rawCommitteeId.trim() | |
| : null | |
| if (!committeeId) { | |
| log.warn( | |
| { sfid: row.SFID, rawCommitteeId: row.COMMITTEE_ID, email }, | |
| 'Skipping row: missing or invalid committeeId', | |
| ) | |
| return null | |
| } |
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
|
Your PR title doesn't contain a Jira issue key. Consider adding it for better traceability. Example:
Projects:
Please add a Jira issue key to your PR title. |
|
|
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Outdated
Show resolved
Hide resolved
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Outdated
Show resolved
Hide resolved
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Show resolved
Hide resolved
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
cb61fdd to
2f5b708
Compare
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 3 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Show resolved
Hide resolved
|
|
||
| export const COMMITTEES_GRID: Record<CommitteesActivityType, IActivityScoringGrid> = { | ||
| [CommitteesActivityType.ADDED_TO_COMMITTEE]: { score: 1 }, | ||
| [CommitteesActivityType.REMOVED_FROM_COMMITTEE]: { score: 1 }, |
There was a problem hiding this comment.
Removal activity score inconsistent with codebase pattern
Medium Severity
REMOVED_FROM_COMMITTEE has score: 1, which is inconsistent with the established codebase scoring convention. Analogous removal activities use negative scores: UNSTAR is -2 (reversal of STAR at 2), and MEMBER_LEAVE is -2 (reversal of MEMBER_JOIN at 2). A committee removal with a positive score would incorrectly boost member engagement metrics.
services/apps/snowflake_connectors/src/integrations/committees/committees/buildSourceQuery.ts
Outdated
Show resolved
Hide resolved
services/apps/snowflake_connectors/src/integrations/committees/committees/buildSourceQuery.ts
Outdated
Show resolved
Hide resolved
| const activityTimestamp = | ||
| type === CommitteesActivityType.ADDED_TO_COMMITTEE | ||
| ? (row.CREATEDDATE as string | null) || null | ||
| : (row.FIVETRAN_SYNCED as string | null) || null |
There was a problem hiding this comment.
Should it be fivetran_deleted instead?
There was a problem hiding this comment.
Not really, fivetran_deleted is a bool. While FIVETRAN_SYNCED is a timestamp, which reflects the deletion timestamp, I believe
services/apps/snowflake_connectors/src/integrations/committees/committees/transformer.ts
Show resolved
Hide resolved
Signed-off-by: Mouad BANI <mouad-mb@outlook.com>


This pull request introduces support for "committees" as a new platform throughout the data pipeline, including database, integrations, and attribute configuration. The main changes add new activity types for committee membership, implement the data extraction and transformation logic for committee events, and update the type system and configuration to recognize "committees" as a first-class source.
Support for "committees" platform and data pipeline:
added-to-committeeandremoved-from-committee, to theactivityTypestable for tracking committee membership events.Type system and configuration updates:
PlatformType,OrganizationSource, andOrganizationAttributeSourceenums, and included it in the organization attribute source priority list, ensuring proper handling and prioritization. [1] [2] [3] [4]Note
Medium Risk
Adds a new data source and transforms/exports committee membership events, plus new enum values and activity types; main risk is incorrect Snowflake query/transform mapping causing missing/duplicated activities or misattributed org identities.
Overview
Adds Committees as a first-class platform across the pipeline.
Introduces two new activity types (
added-to-committee,removed-from-committee) via a DB migration and a new Committees scoring grid/types exported from@crowd/integrations.Implements a new Snowflake connector source (
buildSourceQuery) that joins Salesforce committee membership data with committee/project/segment, user, and account tables (with non-prod project limiting, dedup, and incremental export logic), and a transformer that emits membership add/remove activities with member identities and optional org domain identities. Updates platform/organization enums and org attribute source priority to includecommittees, and registers the new data source in the snowflake connectors platform registry.Reviewed by Cursor Bugbot for commit f110c43. Bugbot is set up for automated code reviews on this repo. Configure here.