-
Notifications
You must be signed in to change notification settings - Fork 14
feat: algolia video troubleshooter backend #8463
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat: algolia video troubleshooter backend #8463
Conversation
…deo-managament-avaliable-languages
WalkthroughRemoves Cloudflare R2 multipart upload GraphQL types and mutations; adds Algolia index check/update GraphQL types, queries, and mutations; implements resolvers, Algolia client/config changes, update helpers adjustments, and extensive unit tests for Algolia operations. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant GraphQL as GraphQL Resolver
participant Prisma as Database
participant Algolia
Client->>GraphQL: checkVideoInAlgolia(videoId)
GraphQL->>Prisma: fetch video minimal fields
Prisma-->>GraphQL: video data (or null)
GraphQL->>Algolia: getObject(recordId)
Algolia-->>GraphQL: algolia record (or error)
GraphQL->>GraphQL: compare fields, collect mismatches
GraphQL-->>Client: CheckVideoInAlgoliaResult{ok, mismatches, recordUrl}
sequenceDiagram
participant Client
participant GraphQL as GraphQL Resolver
participant Prisma as Database
participant Algolia
Client->>GraphQL: updateVideoAlgoliaIndex(videoId)
GraphQL->>Prisma: verify video exists
Prisma-->>GraphQL: video found
GraphQL->>Algolia: updateVideoInAlgolia(videoId)
Algolia-->>GraphQL: update result
GraphQL-->>Client: Boolean (true)
sequenceDiagram
participant Client
participant GraphQL as GraphQL Resolver
participant Prisma as Database
participant Algolia
Client->>GraphQL: checkVideoVariantsInAlgolia(videoId)
GraphQL->>Prisma: fetch video variants
Prisma-->>GraphQL: variants list
loop per variant
GraphQL->>Algolia: getObject(variantRecordId)
Algolia-->>GraphQL: record (or null)
GraphQL->>GraphQL: mark missing/mismatch
end
GraphQL-->>Client: CheckVideoVariantsInAlgoliaResult{ok, missingVariants, browseUrl}
sequenceDiagram
participant Client
participant GraphQL as GraphQL Resolver
participant Prisma as Database
participant Algolia
Client->>GraphQL: updateVideoVariantAlgoliaIndex(videoId)
GraphQL->>Prisma: fetch variants
Prisma-->>GraphQL: variants list
loop per variant
GraphQL->>Algolia: updateVideoVariantInAlgolia(variantId)
Algolia-->>GraphQL: update result
end
GraphQL-->>Client: Boolean (true)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
View your CI Pipeline Execution ↗ for commit 50cf802
☁️ Nx Cloud last updated this comment at |
|
The latest updates on your projects.
|
|
The latest updates on your projects.
|
|
The latest updates on your projects.
|
|
The latest updates on your projects.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In @apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts:
- Line 107: Replace the hardcoded languageId '529' used in the variant query
with the video's actual primary language by using video.primaryLanguageId (e.g.,
change where: { languageId: '529' } to where: { languageId:
video.primaryLanguageId }); ensure you handle any type mismatches (string vs
number) and that video.primaryLanguageId is defined before using it so the
variant fetch in videoAlgolia correctly returns the video's primary variant.
- Around line 107-122: The access of video.variants[0] (primaryVariant) can be
undefined; update the logic around primaryVariant in the resolver that computes
isVideoContent and isDownloadable to guard against that: retrieve primaryVariant
via video.variants[0] and then either (A) throw a GraphQLError if a primary
variant is required, or (B) treat a missing variant as
non-video/non-downloadable by setting isVideoContent =
Boolean(primaryVariant?.hls) and isDownloadable = primaryVariant ? (video.label
=== 'collection' || video.label === 'series' ? false :
(primaryVariant.downloadable ?? false)) : false; ensure all uses of
primaryVariant use optional chaining or null checks to avoid undefined access.
🧹 Nitpick comments (3)
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts (3)
186-195: Simplify redundant logging.The code logs to both
loggerandconsole.errorwhenloggeris null. Consider simplifying this pattern since the logger typically handles both cases internally.♻️ Proposed refactor
- logger?.error( + const logMsg = 'Algolia getObject failed while checking video in Algolia' + const logContext = { err, ...context } + + if (logger != null) { + logger.error(logContext, logMsg) + } else { + console.error( - { err, ...context }, - 'Algolia getObject failed while checking video in Algolia' - ) - - if (logger == null) { - console.error( - `Algolia getObject failed while checking video in Algolia (videoId=${videoId}, appId=${appId}, videosIndex=${videosIndex}): ${errorString}` + `${logMsg} (videoId=${videoId}, appId=${appId}, videosIndex=${videosIndex}): ${errorString}`, + logContext ) }
223-239: Consider logging errors in the catch block.The catch block at line 236 silently adds variants to
missingVariantswithout logging the underlying error. This makes it difficult to distinguish between truly missing variants and those that failed due to other errors (network issues, permission problems, etc.).📝 Suggested enhancement
} catch { + logger?.warn( + { variantId: variant.id, videoId }, + 'Failed to fetch variant from Algolia' + ) missingVariants.push(variant.id) }Or capture the error to include in the response:
- } catch { + } catch (err) { + logger?.warn( + { err, variantId: variant.id, videoId }, + 'Failed to fetch variant from Algolia' + ) missingVariants.push(variant.id) }
229-231: Use consistent null checking.Line 231 uses loose equality (
== null) for the first check but strict equality (=== videoId) for the second. While== nullcorrectly checks for bothnullandundefined, using strict equality throughout is more consistent with modern JavaScript/TypeScript conventions.♻️ Proposed refactor
const objectIdMatches = record.objectID === variant.id const videoIdMatches = - record.videoId == null || record.videoId === videoId + (record.videoId === null || record.videoId === undefined) || record.videoId === videoIdOr use optional chaining if appropriate:
const videoIdMatches = - record.videoId == null || record.videoId === videoId + !record.videoId || record.videoId === videoId
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
apis/api-media/schema.graphqlapis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
**/*.{ts,tsx,js,jsx}: Use early returns whenever possible to make the code more readable.
Use descriptive variable and function/const names.
Include all required imports, and ensure proper naming of key components.
Files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
Define a type if possible.
Files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
🧠 Learnings (9)
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Preserve existing contracts in components like `VideoBlock` which depend on the full provider stack, video.js, and mux metadata so autoplay, subtitles, and analytics remain intact.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Apollo hooks should use generated types alongside colocated documents. Reference the pattern of `useVideoChildren` (`apps/watch/src/libs/useVideoChildren/useVideoChildren.ts`) for data fetching.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-11-11T23:22:02.196Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 8156
File: apis/api-journeys-modern/src/lib/google/googleAuth.ts:0-0
Timestamp: 2025-11-11T23:22:02.196Z
Learning: In apis/api-journeys-modern, use the validated `env` object from `../../env` instead of accessing `process.env` directly for environment variables that are defined in env.ts (e.g., GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET). This eliminates the need for runtime validation checks since Zod validates them at application startup.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-04-23T18:26:44.096Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 6358
File: apis/api-journeys/db/seeds/playwrightUserAccess.ts:16-53
Timestamp: 2025-04-23T18:26:44.096Z
Learning: For seeding scripts in the JesusFilm/core repository, environment variables should be validated and the code should throw an error if required variables are missing rather than silently continuing with fallbacks or filtering.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : REST-like endpoints should use SWR hooks paired with zod guards for response validation; parse responses before returning them to callers.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-05-22T02:57:46.179Z
Learnt from: Kneesal
Repo: JesusFilm/core PR: 6734
File: apps/journeys-admin/src/components/TermsAndConditions/TermsAndConditions.tsx:58-71
Timestamp: 2025-05-22T02:57:46.179Z
Learning: The team prefers to avoid try/catch blocks when working with Apollo Client mutations in favor of Apollo's built-in error handling mechanisms (checking the returned errors property).
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-07-10T22:50:12.252Z
Learnt from: tataihono
Repo: JesusFilm/core PR: 7153
File: apis/api-journeys-modern/src/schema/journey/simple/getSimpleJourney.ts:13-21
Timestamp: 2025-07-10T22:50:12.252Z
Learning: Prisma's `findUnique` method returns `null` when no record is found, rather than throwing an error. The "not found" case should be handled by checking for null, not with try-catch blocks.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-09-29T23:03:36.840Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7629
File: apis/api-journeys-modern/src/schema/event/utils.ts:43-60
Timestamp: 2025-09-29T23:03:36.840Z
Learning: In the JesusFilm/core repository, do not recommend using Prisma's `upsert` operation for `JourneyVisitor` creation in `apis/api-journeys-modern/src/schema/event/utils.ts` as it is not race condition safe for this use case. The current `findUnique` then `create` pattern is the preferred approach.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-08-18T17:23:02.876Z
Learnt from: tanflem
Repo: JesusFilm/core PR: 7464
File: apis/api-media/src/workers/processVideoUploads/service/service.ts:300-303
Timestamp: 2025-08-18T17:23:02.876Z
Learning: In the Video GraphQL schema, the slug field is defined as nullable: false with a resolver that returns slug ?? '', meaning it will never be null but could be an empty string if the underlying data is null/undefined.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
- GitHub Check: affected (22)
- GitHub Check: lint (22)
- GitHub Check: test (22, 3/3)
- GitHub Check: test (22, 1/3)
- GitHub Check: test (22, 2/3)
- GitHub Check: build (22)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts (4)
14-28: LGTM!The error handling utility is well-structured with appropriate fallbacks for different error types.
30-79: LGTM!The GraphQL type definitions are properly structured and align with the schema changes.
250-270: LGTM!The mutation properly validates video existence before triggering the Algolia update.
271-330: Well-implemented batch update with comprehensive error handling.The use of
Promise.allSettledensures all variants are attempted even if some fail, and the error aggregation provides clear feedback about which variants failed. The error message preview limiting to 10 variants is a nice touch for readability.apis/api-media/schema.graphql (2)
49-66: LGTM!The new GraphQL types for Algolia validation are well-structured and properly aligned with the TypeScript implementation. The nullability annotations correctly reflect the implementation's behavior.
356-357: LGTM!The new mutations and queries provide a clean API for Algolia troubleshooting. The required
videoIdargument and non-null return types are appropriate for these operations.Also applies to: 749-750
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts (4)
107-107: Clarify the hardcoded languageId.The hardcoded
'529'for primary variant selection appears intentional but lacks context. Is this the English language ID? Consider adding a comment or extracting to a named constant.♻️ Suggested refactor
+// Language ID for English (primary variant) +const PRIMARY_VARIANT_LANGUAGE_ID = '529' + builder.queryFields((t) => ({ checkVideoInAlgolia: t.withAuth({ isPublisher: true }).field({ ... variants: { select: { hls: true, lengthInMilliseconds: true, downloadable: true }, - where: { languageId: '529' }, + where: { languageId: PRIMARY_VARIANT_LANGUAGE_ID }, take: 1 }
223-239: Performance: Parallelize variant checks.Sequential Algolia API calls could be slow for videos with many variants. The
updateVideoVariantAlgoliaIndexmutation usesPromise.allSettledfor parallel execution—consider applying the same pattern here.♻️ Proposed refactor using Promise.allSettled
- for (const variant of variants) { - try { - const record = await client.getObject({ - indexName: algoliaConfig.videoVariantsIndex, - objectID: variant.id - }) - const objectIdMatches = record.objectID === variant.id - const videoIdMatches = - record.videoId == null || record.videoId === videoId - - if (!(objectIdMatches && videoIdMatches)) { - missingVariants.push(variant.id) - } - } catch { - missingVariants.push(variant.id) - } - } + const results = await Promise.allSettled( + variants.map(async (variant) => { + const record = await client.getObject({ + indexName: algoliaConfig.videoVariantsIndex, + objectID: variant.id + }) + const objectIdMatches = record.objectID === variant.id + const videoIdMatches = + record.videoId == null || record.videoId === videoId + + if (!(objectIdMatches && videoIdMatches)) { + return { missing: true, variantId: variant.id } + } + return { missing: false, variantId: variant.id } + }) + ) + + results.forEach((result) => { + if (result.status === 'rejected' || + (result.status === 'fulfilled' && result.value.missing)) { + const variantId = result.status === 'fulfilled' + ? result.value.variantId + : variants.find(v => v.id)?.id + if (variantId != null) { + missingVariants.push(variantId) + } + } + })
236-238: Add error logging for debugging.The silent catch makes it difficult to diagnose why variants are marked as missing. Consider logging errors similar to the
updateVideoVariantAlgoliaIndexmutation (lines 309-312).♻️ Proposed logging addition
- } catch { + } catch (err) { + logger?.error( + { err, variantId: variant.id, videoId }, + 'Failed to check variant in Algolia' + ) missingVariants.push(variant.id) }
267-268: Consider error handling for consistency.Unlike
updateVideoVariantAlgoliaIndex(lines 289-327), this mutation doesn't catch errors fromupdateVideoInAlgolia. While GraphQL will handle propagation, consider adding a try-catch to enrich errors with context (e.g., videoId) for better debugging.♻️ Optional error enrichment
+ try { await updateVideoInAlgolia(videoId) - return true + } catch (err) { + logger?.error( + { err, videoId }, + 'Failed to update video in Algolia' + ) + throw new GraphQLError( + `Failed to update video ${videoId} in Algolia: ${getErrorString(err)}` + ) + } + return true
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
**/*.{ts,tsx,js,jsx}: Use early returns whenever possible to make the code more readable.
Use descriptive variable and function/const names.
Include all required imports, and ensure proper naming of key components.
Files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
Define a type if possible.
Files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
🧠 Learnings (10)
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Preserve existing contracts in components like `VideoBlock` which depend on the full provider stack, video.js, and mux metadata so autoplay, subtitles, and analytics remain intact.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : Apollo hooks should use generated types alongside colocated documents. Reference the pattern of `useVideoChildren` (`apps/watch/src/libs/useVideoChildren/useVideoChildren.ts`) for data fetching.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-12-19T19:18:43.790Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/resources/AGENTS.md:0-0
Timestamp: 2025-12-19T19:18:43.790Z
Learning: Apollo hooks should use generated types alongside colocated documents. `useVideoChildren` (`apps/resources/src/libs/useVideoChildren/useVideoChildren.ts`) is the reference pattern
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-11-11T23:22:02.196Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 8156
File: apis/api-journeys-modern/src/lib/google/googleAuth.ts:0-0
Timestamp: 2025-11-11T23:22:02.196Z
Learning: In apis/api-journeys-modern, use the validated `env` object from `../../env` instead of accessing `process.env` directly for environment variables that are defined in env.ts (e.g., GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET). This eliminates the need for runtime validation checks since Zod validates them at application startup.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-04-23T18:26:44.096Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 6358
File: apis/api-journeys/db/seeds/playwrightUserAccess.ts:16-53
Timestamp: 2025-04-23T18:26:44.096Z
Learning: For seeding scripts in the JesusFilm/core repository, environment variables should be validated and the code should throw an error if required variables are missing rather than silently continuing with fallbacks or filtering.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-12-19T04:58:24.460Z
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/src/**/*.{ts,tsx} : REST-like endpoints should use SWR hooks paired with zod guards for response validation; parse responses before returning them to callers.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-05-22T02:57:46.179Z
Learnt from: Kneesal
Repo: JesusFilm/core PR: 6734
File: apps/journeys-admin/src/components/TermsAndConditions/TermsAndConditions.tsx:58-71
Timestamp: 2025-05-22T02:57:46.179Z
Learning: The team prefers to avoid try/catch blocks when working with Apollo Client mutations in favor of Apollo's built-in error handling mechanisms (checking the returned errors property).
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-07-10T22:50:12.252Z
Learnt from: tataihono
Repo: JesusFilm/core PR: 7153
File: apis/api-journeys-modern/src/schema/journey/simple/getSimpleJourney.ts:13-21
Timestamp: 2025-07-10T22:50:12.252Z
Learning: Prisma's `findUnique` method returns `null` when no record is found, rather than throwing an error. The "not found" case should be handled by checking for null, not with try-catch blocks.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-09-29T23:03:36.840Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7629
File: apis/api-journeys-modern/src/schema/event/utils.ts:43-60
Timestamp: 2025-09-29T23:03:36.840Z
Learning: In the JesusFilm/core repository, do not recommend using Prisma's `upsert` operation for `JourneyVisitor` creation in `apis/api-journeys-modern/src/schema/event/utils.ts` as it is not race condition safe for this use case. The current `findUnique` then `create` pattern is the preferred approach.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
📚 Learning: 2025-08-18T17:23:02.876Z
Learnt from: tanflem
Repo: JesusFilm/core PR: 7464
File: apis/api-media/src/workers/processVideoUploads/service/service.ts:300-303
Timestamp: 2025-08-18T17:23:02.876Z
Learning: In the Video GraphQL schema, the slug field is defined as nullable: false with a resolver that returns slug ?? '', meaning it will never be null but could be an empty string if the underlying data is null/undefined.
Applied to files:
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: build (22)
- GitHub Check: lint (22)
🔇 Additional comments (3)
apis/api-media/src/schema/video/videoAlgolia/videoAlgolia.ts (3)
14-28: LGTM: Comprehensive error conversion.The fallback chain handles Error objects, strings, JSON serialization, and finally String() conversion effectively.
30-79: LGTM: Well-structured GraphQL types.The type definitions correctly expose the necessary fields with appropriate nullability constraints.
271-331: LGTM: Excellent error handling and parallel execution.The use of
Promise.allSettledfor parallel updates combined with detailed failure reporting (including preview limiting) makes this robust and debuggable.
…-backend-video-managment-algolia-troubleshooting
…t-algolia-troubleshooting
…roubleshooting' of https://github.com/JesusFilm/core into tannerfleming/vmt-189-backend-video-managment-algolia-troubleshooting
Summary by CodeRabbit
New Features
Removed
Tests
✏️ Tip: You can customize this high-level summary in your review settings.