feat(meeting): nest recording/transcript into get_past_meeting - #106
Conversation
Fetch the base past meeting via the meeting-service GetItxPastMeeting Goa client and nest recording/transcript sub-objects (query-service, parent-ref scoped), gracefully omitting them when absent or inaccessible. Signed-off-by: Nirav Patel <npatel@linuxfoundation.org>
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.
Tip: disable this comment in your organization's Code Review settings.
There was a problem hiding this comment.
Pull request overview
Adds enriched past-meeting retrieval using the meeting service plus query-service recording and transcript data.
Changes:
- Adds the meeting-service client and dependency.
- Returns nested meeting, recording, and transcript objects.
- Treats unavailable child resources as optional.
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
internal/tools/meeting.go |
Implements nested past-meeting retrieval. |
internal/lfxv2/client.go |
Initializes the meeting-service client. |
go.mod |
Adds the meeting-service dependency. |
go.sum |
Updates dependency checksums. |
| meeting, err := clients.Meeting.GetItxPastMeeting(ctx, &meetingservice.GetItxPastMeetingPayload{ | ||
| Version: &version, | ||
| PastMeetingID: args.UID, | ||
| }) |
There was a problem hiding this comment.
This is not true; the LFX MCP uses token exchange to get a user-scoped LFX v2 API token. All client calls use these tokens and are subject to API-gateway authorization checks.
There was a problem hiding this comment.
AI-assisted: Confirmed. NewClients builds one httpClient, wraps it once via wrapWithAuthInterceptor (client.go:164-177), and passes that same wrapped instance into every per-service NewClient(...) call, including the new meetinghttpclient.NewClient(..., httpClient, ...) (client.go:294). authInterceptor.RoundTrip (client.go:459-477) then injects the token from getOrExchangeToken (client.go:502-536), which does RFC 8693 token exchange for user tokens (falling back to client_credentials only for M2M/API-key). No service-specific auth branching exists — the Meeting client goes through the identical user-scoped token-exchange path as Committee/MailingList/Member/Project/QuerySvc.
| Type: &resourceType, | ||
| Parent: &parentRef, | ||
| PageSize: 1, | ||
| Sort: "name_asc", |
There was a problem hiding this comment.
AI-assisted: Sort: "name_asc" here only matters if more than one result can come back for a given past_meeting:<id> parent ref — otherwise it is dead weight. If the code does anticipate >1 recording/transcript per past meeting, "first alphabetically by name" is an arbitrary tie-breaker (should be recency or size, not name).
There was a problem hiding this comment.
Actually, I don't think Query Service supports a "no sort" option. There will always be a sort, even if we didn't include it here, so it's not like a performance optimization.
|
AI-assisted: Checked whether By design this differs from PCC: both Empirically confirmed against OpenSearch (terms agg on
So |
Fetch the base past meeting via the meeting-service GetItxPastMeeting Goa client and nest recording/transcript sub-objects (query-service, parent-ref scoped), gracefully omitting them when absent or inaccessible.