musora-content-services 2.122.0 → 2.122.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +3 -10
- package/.coderabbit.yaml +0 -0
- package/.editorconfig +0 -0
- package/.github/pull_request_template.md +0 -0
- package/.github/workflows/conventional-commits.yaml +0 -0
- package/.github/workflows/docs.js.yml +0 -0
- package/.github/workflows/node.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/CHANGELOG.md +10 -0
- package/CLAUDE.md +0 -0
- package/README.md +0 -0
- package/babel.config.cjs +0 -0
- package/jest.config.js +0 -0
- package/jsdoc.json +0 -0
- package/package.json +1 -1
- package/src/constants/award-assets.js +0 -0
- package/src/constants/membership-permissions.ts +0 -0
- package/src/contentTypeConfig.js +4 -3
- package/src/filterBuilder.js +0 -0
- package/src/index.d.ts +0 -0
- package/src/index.js +0 -0
- package/src/infrastructure/http/HttpClient.ts +0 -0
- package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
- package/src/infrastructure/http/index.ts +0 -0
- package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
- package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
- package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
- package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
- package/src/lib/ads/monoid.ts +0 -0
- package/src/lib/ads/semigroup.ts +0 -0
- package/src/lib/brands.ts +0 -0
- package/src/lib/lastUpdated.js +0 -0
- package/src/lib/sanity/filter.ts +0 -0
- package/src/lib/sanity/query.ts +0 -0
- package/src/services/api/types.js +0 -0
- package/src/services/api/types.ts +0 -0
- package/src/services/awards/award-callbacks.js +0 -0
- package/src/services/awards/award-query.js +0 -0
- package/src/services/awards/internal/.indexignore +0 -0
- package/src/services/awards/internal/award-definitions.js +0 -0
- package/src/services/awards/internal/award-events.js +0 -0
- package/src/services/awards/internal/award-manager.js +0 -0
- package/src/services/awards/internal/certificate-builder.js +0 -0
- package/src/services/awards/internal/completion-data-generator.js +0 -0
- package/src/services/awards/internal/content-progress-observer.js +0 -0
- package/src/services/awards/internal/image-utils.js +0 -0
- package/src/services/awards/internal/message-generator.js +0 -0
- package/src/services/awards/internal/types.js +0 -0
- package/src/services/awards/types.d.ts +0 -0
- package/src/services/awards/types.js +0 -0
- package/src/services/config.js +0 -0
- package/src/services/content/artist.ts +0 -0
- package/src/services/content/content.ts +0 -0
- package/src/services/content/genre.ts +0 -0
- package/src/services/content/instructor.ts +0 -0
- package/src/services/content-org/content-org.js +0 -0
- package/src/services/content-org/guided-courses.ts +0 -0
- package/src/services/content-org/learning-paths.ts +0 -0
- package/src/services/content-org/playlists-types.js +0 -0
- package/src/services/content-org/playlists.js +0 -0
- package/src/services/content.js +0 -0
- package/src/services/contentAggregator.js +0 -0
- package/src/services/contentLikes.js +0 -0
- package/src/services/contentProgress.js +20 -10
- package/src/services/dataContext.js +0 -0
- package/src/services/dateUtils.js +0 -0
- package/src/services/eventsAPI.js +0 -0
- package/src/services/forums/categories.ts +0 -0
- package/src/services/forums/forums.ts +0 -0
- package/src/services/forums/posts.ts +0 -0
- package/src/services/forums/threads.ts +0 -0
- package/src/services/forums/types.ts +0 -0
- package/src/services/gamification/awards.ts +0 -0
- package/src/services/gamification/gamification.js +0 -0
- package/src/services/imageSRCBuilder.js +0 -0
- package/src/services/imageSRCVerify.js +0 -0
- package/src/services/liveTesting.ts +0 -0
- package/src/services/permissions/PermissionsAdapter.ts +0 -0
- package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
- package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
- package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
- package/src/services/permissions/README.md +0 -0
- package/src/services/permissions/index.ts +0 -0
- package/src/services/progress-events.js +0 -0
- package/src/services/progress-row/base.js +7 -3
- package/src/services/progress-row/rows/.indexignore +0 -0
- package/src/services/progress-row/rows/content-card.js +0 -0
- package/src/services/progress-row/rows/method-card.js +1 -1
- package/src/services/progress-row/rows/playlist-card.js +0 -0
- package/src/services/railcontent.js +0 -0
- package/src/services/recommendations.js +0 -0
- package/src/services/reporting/README.md +0 -0
- package/src/services/reporting/reporting.ts +0 -0
- package/src/services/reporting/types.ts +0 -0
- package/src/services/sanity.js +1 -1
- package/src/services/sentry/.indexignore +0 -0
- package/src/services/sentry/index.ts +0 -0
- package/src/services/sync/.indexignore +0 -0
- package/src/services/sync/adapters/factory.ts +0 -0
- package/src/services/sync/adapters/lokijs.ts +0 -0
- package/src/services/sync/adapters/sqlite.ts +0 -0
- package/src/services/sync/context/index.ts +0 -0
- package/src/services/sync/context/providers/base.ts +0 -0
- package/src/services/sync/context/providers/connectivity.ts +0 -0
- package/src/services/sync/context/providers/durability.ts +0 -0
- package/src/services/sync/context/providers/index.ts +0 -0
- package/src/services/sync/context/providers/session.ts +0 -0
- package/src/services/sync/context/providers/tabs.ts +0 -0
- package/src/services/sync/context/providers/visibility.ts +0 -0
- package/src/services/sync/database/factory.ts +0 -0
- package/src/services/sync/effects/index.ts +0 -0
- package/src/services/sync/effects/logout-warning.ts +0 -0
- package/src/services/sync/errors/boundary.ts +0 -0
- package/src/services/sync/errors/index.ts +0 -0
- package/src/services/sync/errors/validators.ts +0 -0
- package/src/services/sync/fetch.ts +0 -0
- package/src/services/sync/index.ts +0 -0
- package/src/services/sync/manager.ts +0 -0
- package/src/services/sync/models/Base.ts +0 -0
- package/src/services/sync/models/ContentLike.ts +0 -0
- package/src/services/sync/models/ContentProgress.ts +0 -0
- package/src/services/sync/models/Practice.ts +0 -0
- package/src/services/sync/models/PracticeDayNote.ts +0 -0
- package/src/services/sync/models/UserAwardProgress.ts +0 -0
- package/src/services/sync/models/index.ts +0 -0
- package/src/services/sync/repositories/base.ts +2 -16
- package/src/services/sync/repositories/content-likes.ts +0 -0
- package/src/services/sync/repositories/content-progress.ts +7 -4
- package/src/services/sync/repositories/index.ts +0 -0
- package/src/services/sync/repositories/practice-day-notes.ts +0 -0
- package/src/services/sync/repositories/practices.ts +0 -0
- package/src/services/sync/repositories/user-award-progress.ts +0 -0
- package/src/services/sync/repository-proxy.ts +0 -0
- package/src/services/sync/resolver.ts +0 -0
- package/src/services/sync/retry.ts +0 -0
- package/src/services/sync/run-scope.ts +0 -0
- package/src/services/sync/schema/index.ts +0 -0
- package/src/services/sync/serializers/index.ts +0 -0
- package/src/services/sync/serializers/model.ts +0 -0
- package/src/services/sync/serializers/raw.ts +0 -0
- package/src/services/sync/store/index.ts +4 -2
- package/src/services/sync/store/push-coalescer.ts +0 -0
- package/src/services/sync/store-configs.ts +0 -0
- package/src/services/sync/strategies/base.ts +0 -0
- package/src/services/sync/strategies/index.ts +0 -0
- package/src/services/sync/strategies/initial.ts +0 -0
- package/src/services/sync/strategies/polling.ts +0 -0
- package/src/services/sync/telemetry/flood-prevention.ts +0 -0
- package/src/services/sync/telemetry/index.ts +0 -0
- package/src/services/sync/telemetry/sampling.ts +0 -0
- package/src/services/sync/utils/event-emitter.ts +0 -0
- package/src/services/sync/utils/index.ts +0 -0
- package/src/services/sync/utils/throttle.ts +0 -0
- package/src/services/sync/utils/timers.ts +0 -0
- package/src/services/types.js +0 -0
- package/src/services/urlBuilder.ts +0 -0
- package/src/services/user/chat.js +0 -0
- package/src/services/user/interests.js +0 -0
- package/src/services/user/management.js +0 -0
- package/src/services/user/memberships.ts +0 -0
- package/src/services/user/notifications.js +0 -0
- package/src/services/user/onboarding.ts +0 -0
- package/src/services/user/payments.ts +0 -0
- package/src/services/user/permissions.js +0 -0
- package/src/services/user/profile.js +0 -0
- package/src/services/user/sessions.js +0 -0
- package/src/services/user/types.d.ts +0 -0
- package/src/services/user/types.js +0 -0
- package/src/services/user/user-management-system.js +0 -0
- package/src/services/userActivity.js +0 -0
- package/test/HttpClient.test.js +0 -0
- package/test/awards/award-alacarte-observer.test.js +0 -0
- package/test/awards/award-auto-refresh.test.js +0 -0
- package/test/awards/award-calculations.test.js +0 -0
- package/test/awards/award-certificate-display.test.js +0 -0
- package/test/awards/award-collection-edge-cases.test.js +0 -0
- package/test/awards/award-collection-filtering.test.js +0 -0
- package/test/awards/award-completion-flow.test.js +0 -0
- package/test/awards/award-exclusion-handling.test.js +0 -0
- package/test/awards/award-multi-lesson.test.js +0 -0
- package/test/awards/award-observer-integration.test.js +0 -0
- package/test/awards/award-query-messages.test.js +0 -0
- package/test/awards/award-user-collection.test.js +0 -0
- package/test/awards/duplicate-prevention.test.js +0 -0
- package/test/awards/helpers/completion-mock.js +0 -0
- package/test/awards/helpers/index.js +0 -0
- package/test/awards/helpers/mock-setup.js +0 -0
- package/test/awards/helpers/progress-emitter.js +0 -0
- package/test/awards/message-generator.test.js +0 -0
- package/test/content.test.js +0 -0
- package/test/contentLikes.test.js +0 -0
- package/test/contentProgress.test.js +0 -0
- package/test/dataContext.test.js +0 -0
- package/test/forum.test.js +0 -0
- package/test/imageSRCBuilder.test.js +0 -0
- package/test/imageSRCVerify.test.js +0 -0
- package/test/initializeTests.js +0 -0
- package/test/learningPaths.test.js +0 -0
- package/test/lib/__snapshots__/filter.test.ts.snap +0 -0
- package/test/lib/filter.test.ts +0 -0
- package/test/lib/lastUpdated.test.js +0 -0
- package/test/lib/query.test.ts +0 -0
- package/test/live/contentProgressLive.test.js +0 -0
- package/test/live/railcontentLive.test.js +0 -0
- package/test/localStorageMock.js +0 -0
- package/test/log.js +0 -0
- package/test/mockData/award-definitions.js +0 -0
- package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
- package/test/mockData/mockData_progress_content.json +0 -0
- package/test/mockData/mockData_sanity_progress_content.json +0 -0
- package/test/mockData/mockData_user_practices.json +0 -0
- package/test/notifications.test.js +0 -0
- package/test/progressRows.test.js +0 -0
- package/test/sanityQueryService.test.js +0 -0
- package/test/streakMessage.test.js +0 -0
- package/test/sync/adapter.ts +0 -0
- package/test/sync/initialize-sync-manager.js +0 -0
- package/test/sync/models/award-database-integration.test.js +0 -0
- package/test/user/permissions.test.js +0 -0
- package/test/userActivity.test.js +0 -0
- package/tools/generate-index.cjs +0 -0
- package/.yarnrc.yml +0 -1
- package/check_content.js +0 -30
- package/check_content.mjs +0 -32
- package/test/logout.test.js +0 -199
- package/test/reporting.test.js +0 -132
- package/test_owned_navigate.js +0 -74
- package/tsconfig.json +0 -17
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"permissions": {
|
|
3
3
|
"allow": [
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"Bash(find:*)",
|
|
7
|
-
"Bash(sed:*)",
|
|
8
|
-
"Read(//app/**)",
|
|
9
|
-
"Bash(cat:*)",
|
|
10
|
-
"Bash(docker exec:*)",
|
|
11
|
-
"Bash(npm config:*)"
|
|
4
|
+
"Bash(rg:*)",
|
|
5
|
+
"Bash(npm run lint:*)"
|
|
12
6
|
],
|
|
13
|
-
"deny": []
|
|
14
|
-
"ask": []
|
|
7
|
+
"deny": []
|
|
15
8
|
}
|
|
16
9
|
}
|
package/.coderabbit.yaml
CHANGED
|
File without changes
|
package/.editorconfig
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/.prettierignore
CHANGED
|
File without changes
|
package/.prettierrc
CHANGED
|
File without changes
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [2.122.1](https://github.com/railroadmedia/musora-content-services/compare/v2.122.0...v2.122.1) (2026-01-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* handle global live streams ([#727](https://github.com/railroadmedia/musora-content-services/issues/727)) ([e0ed5f3](https://github.com/railroadmedia/musora-content-services/commit/e0ed5f398f61a2188beae56a05547494862a16b7))
|
|
11
|
+
* removes tentative progress call functionality ([#716](https://github.com/railroadmedia/musora-content-services/issues/716)) ([a167d3b](https://github.com/railroadmedia/musora-content-services/commit/a167d3b94c1d2ef6df9a7f76e4c4ea4c71f9bfb5))
|
|
12
|
+
* **T3PS-1562:** hide nonpinned method card ([#721](https://github.com/railroadmedia/musora-content-services/issues/721)) ([cc250ee](https://github.com/railroadmedia/musora-content-services/commit/cc250ee072cac976fc7389eb86e77eff1230b73a))
|
|
13
|
+
* **T3PS-1579:** fix reset bubbling ([#718](https://github.com/railroadmedia/musora-content-services/issues/718)) ([a9490a8](https://github.com/railroadmedia/musora-content-services/commit/a9490a85aeb4df947770a265543fa6782e30b436))
|
|
14
|
+
|
|
5
15
|
## [2.122.0](https://github.com/railroadmedia/musora-content-services/compare/v2.118.1...v2.122.0) (2026-01-22)
|
|
6
16
|
|
|
7
17
|
|
package/CLAUDE.md
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
File without changes
|
package/babel.config.cjs
CHANGED
|
File without changes
|
package/jest.config.js
CHANGED
|
File without changes
|
package/jsdoc.json
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
package/src/contentTypeConfig.js
CHANGED
|
@@ -145,6 +145,7 @@ export const liveFields = `
|
|
|
145
145
|
"thumbnail": thumbnail.asset->url,
|
|
146
146
|
${artistOrInstructorName()},
|
|
147
147
|
difficulty_string,
|
|
148
|
+
railcontent_id,
|
|
148
149
|
"instructors": ${instructorField},
|
|
149
150
|
'videoId': coalesce(live_event_stream_id, video.external_id)
|
|
150
151
|
`
|
|
@@ -647,9 +648,9 @@ export function getIntroVideoFields(type) {
|
|
|
647
648
|
`"id": railcontent_id`,
|
|
648
649
|
'title',
|
|
649
650
|
'brand',
|
|
650
|
-
`"instructor":
|
|
651
|
-
`
|
|
652
|
-
`
|
|
651
|
+
`"instructor": ${instructorField}`,
|
|
652
|
+
`difficulty`,
|
|
653
|
+
`difficulty_string`,
|
|
653
654
|
`"type": _type`,
|
|
654
655
|
'brand',
|
|
655
656
|
`"description": ${descriptionField}`,
|
package/src/filterBuilder.js
CHANGED
|
File without changes
|
package/src/index.d.ts
CHANGED
|
File without changes
|
package/src/index.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/lib/ads/monoid.ts
CHANGED
|
File without changes
|
package/src/lib/ads/semigroup.ts
CHANGED
|
File without changes
|
package/src/lib/brands.ts
CHANGED
|
File without changes
|
package/src/lib/lastUpdated.js
CHANGED
|
File without changes
|
package/src/lib/sanity/filter.ts
CHANGED
|
File without changes
|
package/src/lib/sanity/query.ts
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/config.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/content.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -531,9 +531,8 @@ async function saveContentProgress(contentId, collection, progress, currentSecon
|
|
|
531
531
|
}
|
|
532
532
|
}
|
|
533
533
|
|
|
534
|
-
if (Object.keys(bubbledProgresses).length
|
|
535
|
-
|
|
536
|
-
await db.contentProgress.recordProgressMany(bubbledProgresses, collection, {tentative: !isLP, skipPush: true, fromLearningPath})
|
|
534
|
+
if (Object.keys(bubbledProgresses).length > 0) {
|
|
535
|
+
await db.contentProgress.recordProgressMany(bubbledProgresses, collection, {skipPush: true, fromLearningPath})
|
|
537
536
|
}
|
|
538
537
|
|
|
539
538
|
if (isLP) {
|
|
@@ -567,8 +566,7 @@ async function setStartedOrCompletedStatus(contentId, collection, isCompleted, {
|
|
|
567
566
|
...trickleProgress(hierarchy, contentId, collection, progress),
|
|
568
567
|
...await bubbleProgress(hierarchy, contentId, collection)
|
|
569
568
|
}
|
|
570
|
-
|
|
571
|
-
await db.contentProgress.recordProgressMany(progresses, collection, {tentative: !isLP, skipPush: true})
|
|
569
|
+
await db.contentProgress.recordProgressMany(progresses, collection, {skipPush: true})
|
|
572
570
|
|
|
573
571
|
if (isLP) {
|
|
574
572
|
let exportProgresses = progresses
|
|
@@ -600,7 +598,7 @@ async function setStartedOrCompletedStatusMany(contentIds, collection, isComplet
|
|
|
600
598
|
}
|
|
601
599
|
|
|
602
600
|
const contents = Object.fromEntries(contentIds.map((id) => [id, progress]))
|
|
603
|
-
const response = await db.contentProgress.recordProgressMany(contents, collection, {
|
|
601
|
+
const response = await db.contentProgress.recordProgressMany(contents, collection, {skipPush: true})
|
|
604
602
|
|
|
605
603
|
// we assume this is used only for contents within the same hierarchy
|
|
606
604
|
const hierarchy = await getHierarchy(collection.id, collection)
|
|
@@ -613,8 +611,7 @@ async function setStartedOrCompletedStatusMany(contentIds, collection, isComplet
|
|
|
613
611
|
...(await bubbleProgress(hierarchy, contentId, collection)),
|
|
614
612
|
}
|
|
615
613
|
}
|
|
616
|
-
|
|
617
|
-
await db.contentProgress.recordProgressMany(progresses, collection, {tentative: !isLP, skipPush: true})
|
|
614
|
+
await db.contentProgress.recordProgressMany(progresses, collection, {skipPush: true})
|
|
618
615
|
|
|
619
616
|
if (isLP) {
|
|
620
617
|
let exportProgresses = progresses
|
|
@@ -647,8 +644,21 @@ async function resetStatus(contentId, collection = null, {skipPush = false} = {}
|
|
|
647
644
|
...trickleProgress(hierarchy, contentId, collection, progress),
|
|
648
645
|
...await bubbleProgress(hierarchy, contentId, collection)
|
|
649
646
|
}
|
|
650
|
-
//
|
|
651
|
-
|
|
647
|
+
// have to use different endpoints for erase vs record
|
|
648
|
+
const eraseProgresses = Object.fromEntries(
|
|
649
|
+
Object.entries(progresses).filter(([_, pct]) => pct === 0)
|
|
650
|
+
)
|
|
651
|
+
progresses = Object.fromEntries(
|
|
652
|
+
Object.entries(progresses).filter(([_, pct]) => pct > 0)
|
|
653
|
+
)
|
|
654
|
+
|
|
655
|
+
if (Object.keys(progresses).length > 0) {
|
|
656
|
+
await db.contentProgress.recordProgressMany(progresses, collection, {skipPush: true, fromLearningPath: isLP})
|
|
657
|
+
}
|
|
658
|
+
if (Object.keys(eraseProgresses).length > 0) {
|
|
659
|
+
const eraseIds = Object.keys(eraseProgresses).map(Number)
|
|
660
|
+
await db.contentProgress.eraseProgressMany(eraseIds, collection, {skipPush: true})
|
|
661
|
+
}
|
|
652
662
|
|
|
653
663
|
if (isLP) {
|
|
654
664
|
progresses[contentId] = progress
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -178,12 +178,16 @@ function sortCards(pinnedCard, contentCardMap, playlistCards, methodCard, limit)
|
|
|
178
178
|
combined.push(pinnedCard)
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
const progressList = Array.from(contentCardMap.values())
|
|
182
|
+
|
|
183
|
+
combined = [...combined, ...progressList, ...playlistCards]
|
|
184
|
+
|
|
185
|
+
// welcome card state will only show if pinned
|
|
186
|
+
if (methodCard.type !== 'method') {
|
|
182
187
|
combined.push(methodCard)
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
|
|
186
|
-
return mergeAndSortItems([...combined, ...progressList, ...playlistCards], limit)
|
|
190
|
+
return mergeAndSortItems(combined, limit)
|
|
187
191
|
}
|
|
188
192
|
|
|
189
193
|
function mergeAndSortItems(items, limit) {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/sanity.js
CHANGED
|
@@ -1192,7 +1192,7 @@ export async function fetchLiveEvent(brand, forcedContentId = null) {
|
|
|
1192
1192
|
forcedContentId !== null
|
|
1193
1193
|
? `railcontent_id == ${forcedContentId}`
|
|
1194
1194
|
: `status == 'scheduled'
|
|
1195
|
-
&& brand == '${brand}'
|
|
1195
|
+
&& (brand == '${brand}' || live_global_event == true)
|
|
1196
1196
|
&& defined(live_event_start_time)
|
|
1197
1197
|
&& live_event_start_time <= '${getSanityDate(startDateTemp, false)}'
|
|
1198
1198
|
&& live_event_end_time >= '${getSanityDate(endDateTemp, false)}'`
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -100,13 +100,6 @@ export default class SyncRepository<TModel extends BaseModel> {
|
|
|
100
100
|
)
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
protected async upsertOneTentative(id: RecordId, builder: (record: TModel) => void) {
|
|
104
|
-
return this.store.telemetry.trace(
|
|
105
|
-
{ name: `upsertOneTentative:${this.store.model.table}`, op: 'upsert', attributes: { ...this.context.session.toJSON() } },
|
|
106
|
-
(span) => this._respondToWrite(() => this.store.upsertOneTentative(id, builder, span), span)
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
103
|
protected async upsertSome(builders: Record<RecordId, (record: TModel) => void>, { skipPush = false } = {}) {
|
|
111
104
|
return this.store.telemetry.trace(
|
|
112
105
|
{ name: `upsertSome:${this.store.model.table}`, op: 'upsert', attributes: { ...this.context.session.toJSON() } },
|
|
@@ -114,13 +107,6 @@ export default class SyncRepository<TModel extends BaseModel> {
|
|
|
114
107
|
)
|
|
115
108
|
}
|
|
116
109
|
|
|
117
|
-
protected async upsertSomeTentative(builders: Record<RecordId, (record: TModel) => void>, { skipPush = false } = {}) {
|
|
118
|
-
return this.store.telemetry.trace(
|
|
119
|
-
{ name: `upsertSomeTentative:${this.store.model.table}`, op: 'upsert', attributes: { ...this.context.session.toJSON() } },
|
|
120
|
-
(span) => this._respondToWrite(() => this.store.upsertSomeTentative(builders, span, {skipPush}), span)
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
110
|
protected async deleteOne(id: RecordId, { skipPush = false } = {}) {
|
|
125
111
|
return this.store.telemetry.trace(
|
|
126
112
|
{ name: `delete:${this.store.model.table}`, op: 'delete', attributes: { ...this.context.session.toJSON() } },
|
|
@@ -128,10 +114,10 @@ export default class SyncRepository<TModel extends BaseModel> {
|
|
|
128
114
|
)
|
|
129
115
|
}
|
|
130
116
|
|
|
131
|
-
protected async deleteSome(ids: RecordId[]) {
|
|
117
|
+
protected async deleteSome(ids: RecordId[], { skipPush = false } = {}) {
|
|
132
118
|
return this.store.telemetry.trace(
|
|
133
119
|
{ name: `deleteSome:${this.store.model.table}`, op: 'delete', attributes: { ...this.context.session.toJSON() } },
|
|
134
|
-
(span) => this._respondToWriteIds(() => this.store.deleteSome(ids, span), span)
|
|
120
|
+
(span) => this._respondToWriteIds(() => this.store.deleteSome(ids, span, {skipPush}), span)
|
|
135
121
|
)
|
|
136
122
|
}
|
|
137
123
|
|
|
File without changes
|
|
@@ -187,7 +187,7 @@ export default class ProgressRepository extends SyncRepository<ContentProgress>
|
|
|
187
187
|
recordProgressMany(
|
|
188
188
|
contentProgresses: Record<string, number>, // Accept plain object
|
|
189
189
|
collection: CollectionParameter | null,
|
|
190
|
-
{
|
|
190
|
+
{ skipPush = false, fromLearningPath = false }: { skipPush?: boolean; fromLearningPath?: boolean } = {}
|
|
191
191
|
) {
|
|
192
192
|
if (collection?.type === COLLECTION_TYPE.LEARNING_PATH) {
|
|
193
193
|
fromLearningPath = true
|
|
@@ -209,9 +209,7 @@ export default class ProgressRepository extends SyncRepository<ContentProgress>
|
|
|
209
209
|
},
|
|
210
210
|
])
|
|
211
211
|
)
|
|
212
|
-
return
|
|
213
|
-
? this.upsertSomeTentative(data, { skipPush })
|
|
214
|
-
: this.upsertSome(data, { skipPush })
|
|
212
|
+
return this.upsertSome(data, { skipPush })
|
|
215
213
|
|
|
216
214
|
//todo add event emitting for bulk updates?
|
|
217
215
|
}
|
|
@@ -220,6 +218,11 @@ export default class ProgressRepository extends SyncRepository<ContentProgress>
|
|
|
220
218
|
return this.deleteOne(ProgressRepository.generateId(contentId, collection), { skipPush })
|
|
221
219
|
}
|
|
222
220
|
|
|
221
|
+
eraseProgressMany(contentIds: number[], collection: CollectionParameter | null, {skipPush = false} = {}) {
|
|
222
|
+
const ids = contentIds.map((id) => ProgressRepository.generateId(id, collection))
|
|
223
|
+
return this.deleteSome(ids, { skipPush })
|
|
224
|
+
}
|
|
225
|
+
|
|
223
226
|
private static generateId(
|
|
224
227
|
contentId: number,
|
|
225
228
|
collection: CollectionParameter | null
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -354,7 +354,7 @@ export default class SyncStore<TModel extends BaseModel = BaseModel> {
|
|
|
354
354
|
})
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
async deleteSome(ids: RecordId[], span?: Span) {
|
|
357
|
+
async deleteSome(ids: RecordId[], span?: Span, { skipPush = false } = {}) {
|
|
358
358
|
return this.runScope.abortable(async () => {
|
|
359
359
|
await this.telemeterizedWrite(span, async writer => {
|
|
360
360
|
const existing = await this.queryRecords(Q.where('id', Q.oneOf(ids)))
|
|
@@ -364,7 +364,9 @@ export default class SyncStore<TModel extends BaseModel = BaseModel> {
|
|
|
364
364
|
|
|
365
365
|
this.emit('deleted', ids)
|
|
366
366
|
|
|
367
|
-
|
|
367
|
+
if (!skipPush) {
|
|
368
|
+
this.pushUnsyncedWithRetry(span)
|
|
369
|
+
}
|
|
368
370
|
await this.ensurePersistence()
|
|
369
371
|
|
|
370
372
|
return ids
|