Skip to content

[LFXV2-884] Add meeting invite response event handling for v2 indexing#18

Merged
emsearcy merged 9 commits intomainfrom
andrest50/v1-meeting-rsvp
Dec 15, 2025
Merged

[LFXV2-884] Add meeting invite response event handling for v2 indexing#18
emsearcy merged 9 commits intomainfrom
andrest50/v1-meeting-rsvp

Conversation

@andrest50
Copy link
Contributor

@andrest50 andrest50 commented Dec 5, 2025

Summary

  • Added handler for itx-zoom-meetings-invite-responses-v2 events to sync meeting RSVP data to v2 system
  • Created inviteResponseInput struct to model invite response data with all required fields
  • Implemented data conversion, validation, and indexing logic for invite responses
  • Added parent meeting validation to ensure invite responses are only indexed when the parent meeting exists

Ticket

LFXV2-884

Changes

  • handlers.go: Added case handler for itx-zoom-meetings-invite-responses-v2 events
  • handlers_meetings.go:
    • Added handleZoomMeetingInviteResponseUpdate function to process invite response events
    • Implemented convertMapToInputInviteResponse for data transformation
    • Added getInviteResponseTags helper for generating index tags
    • Validates parent meeting exists before indexing
    • Filters out MAILER-DAEMON email responses
    • Sends indexer messages to lfx.index.v1_meeting_rsvp subject
  • models_meetings.go: Added inviteResponseInput struct with complete field definitions

🤖 Generated with Claude Code

- Add handler for itx-zoom-meetings-invite-responses-v2 events
- Create inviteResponseInput struct to model invite response data
- Implement convertMapToInputInviteResponse for data conversion
- Add validation to skip MAILER-DAEMON responses
- Verify parent meeting exists before indexing invite response
- Send indexer messages to lfx.index.v1_meeting_rsvp subject
- Track processed invite responses in mappings KV store

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
Signed-off-by: Andres Tobon <andrest2455@gmail.com>
@andrest50 andrest50 force-pushed the andrest50/v1-meeting-rsvp branch from 8ea4dc0 to a954000 Compare December 8, 2025 17:13
@andrest50 andrest50 marked this pull request as ready for review December 9, 2025 18:21
@andrest50 andrest50 requested review from a team and emsearcy as code owners December 9, 2025 18:21
Copilot AI review requested due to automatic review settings December 9, 2025 18:21
Copy link
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

This PR adds support for syncing Zoom meeting invite response (RSVP) data from the v1 system to the v2 indexing system. The implementation follows the established patterns for other meeting-related entities like registrants and mappings, ensuring consistency with the existing codebase.

  • Created the inviteResponseInput model with comprehensive field definitions for RSVP data
  • Added event handler for itx-zoom-meetings-invite-responses-v2 to process invite response updates
  • Implemented validation logic to ensure invite responses are only indexed when the parent meeting exists in the mappings

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
meltano/README.md Fixed trailing slash in tap-postgres documentation URL
cmd/lfx-v1-sync-helper/models_meetings.go Added inviteResponseInput struct with all required fields for modeling invite response data
cmd/lfx-v1-sync-helper/handlers_meetings.go Implemented complete handler logic including conversion, validation, and indexing functions for invite responses
cmd/lfx-v1-sync-helper/handlers.go Added case handler for itx-zoom-meetings-invite-responses-v2 events
charts/lfx-v1-sync-helper/Chart.yaml Bumped chart version to 0.3.6

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

return
}

if inviteResponseID != "" {
Copy link
Contributor

Choose a reason for hiding this comment

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

this if statement is unnecessary; not only did we test for an empty value on line 663, but we already used this value to create the mappingKey that will be used for the Put call, and this value is otherwise only used for the log line. The validation happened where it should—before we interpolated the mapping key.

- Add RSVPResponseType enum (accepted, maybe, declined) for v2 system
- Add RSVPScope enum (single, all, this_and_following) for v2 system
- Transform v1 response types (ACCEPTED, TENTATIVE, DECLINED) to v2 format
- Calculate RSVP scope based on occurrence_id and is_response_recurring fields
- Remove IsResponseRecurring field in favor of Scope field
- Remove unnecessary inviteResponseID empty check before storing mapping
- Improve log consistency by using invite_response_id instead of id

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
Signed-off-by: Andres Tobon <andrest2455@gmail.com>
- Add Username field to inviteResponseInput struct for v2 system
- Implement username lookup using UserID (v1 platform ID) via lookupV1User
- Map username to Auth0 "sub" format using mapUsernameToAuthSub helper
- Add debug logging for successful lookups and warning for failures
- Follows same pattern as invitee and attendee username resolution

This allows the v2 system to associate RSVP responses with the correct user accounts.

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
Copy link
Contributor

@emsearcy emsearcy left a comment

Choose a reason for hiding this comment

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

nitpick on logging

@emsearcy
Copy link
Contributor

Oh, can you also add in itx-zoom-meetings-invite-responses-v2 under "tables" in meltano/meltano.yml? I removed it in 71b253b. Thanks!

This commit standardizes logging patterns across all meeting-related
handlers to improve debugging and reduce log noise:

1. Use function-scoped loggers with contextual fields:
   - Create `funcLogger` at function start with key information
   - Progressively add context (meeting_id, registrant_id, etc.)
   - Avoid repeating fields in every log call

2. Remove redundant logging:
   - Remove duplicate error logs before returning formatted errors
   - Remove success confirmation logs from utility functions
   - Keep important high-level success/error logs in handlers

3. Improve error message context:
   - Include relevant IDs in error messages for better debugging
   - Use consistent error message format across handlers
   - Make messages more descriptive about what failed

4. Affected handlers:
   - handleZoomMeetingUpdate
   - handleZoomMeetingMappingUpdate
   - handleZoomMeetingRegistrantUpdate
   - handleZoomMeetingInviteResponseUpdate
   - handleZoomPastMeetingUpdate
   - handleZoomPastMeetingMappingUpdate
   - handleZoomPastMeetingInviteeUpdate
   - handleZoomPastMeetingAttendeeUpdate
   - handleZoomPastMeetingRecordingUpdate
   - handleZoomPastMeetingSummaryUpdate

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
This commit adds the itx-zoom-meetings-invite-responses-v2 table to the
list of DynamoDB tables replicated by meltano from v1 to NATS KV.

This enables the v1-sync-helper to process meeting invite RSVP data and
index it into the v2 system alongside the existing meetings, registrants,
past meetings, and other meeting-related data.

The invite responses track when registrants accept, decline, or mark as
maybe for meeting invitations, including the scope of their response
(single occurrence, all occurrences, or this and following occurrences).

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
Fixed 9 revive lint errors by removing unused context.Context parameters
from functions that don't use them:
- sendAccessMessage
- convertMapToInputMeetingMapping
- convertMapToInputRegistrant
- convertMapToInputInviteResponse
- convertMapToInputPastMeetingMapping
- convertMapToInputPastMeetingInvitee
- convertInviteeToV2Participant
- convertMapToInputPastMeetingAttendee
- convertAttendeeToV2Participant
- convertMapToInputPastMeetingRecording
- convertMapToInputPastMeetingSummary

Updated all call sites to match new function signatures and changed
logging calls in converter functions to use Warn() instead of
WarnContext() where context is no longer available.

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
@andrest50 andrest50 requested a review from emsearcy December 12, 2025 18:28
@emsearcy emsearcy merged commit 2a304a1 into main Dec 15, 2025
3 checks passed
@emsearcy emsearcy deleted the andrest50/v1-meeting-rsvp branch December 15, 2025 17:30
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.

3 participants