musora-content-services 1.0.182 → 1.0.184
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/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/src/services/sanity.js +25 -13
- package/test/sanityQueryService.test.js +17 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
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
|
+
### [1.0.184](https://github.com/railroadmedia/musora-content-services/compare/v1.0.183...v1.0.184) (2024-11-25)
|
|
6
|
+
|
|
7
|
+
### [1.0.183](https://github.com/railroadmedia/musora-content-services/compare/v1.0.182...v1.0.183) (2024-11-25)
|
|
8
|
+
|
|
5
9
|
### [1.0.182](https://github.com/railroadmedia/musora-content-services/compare/v1.0.181...v1.0.182) (2024-11-25)
|
|
6
10
|
|
|
7
11
|
### [1.0.181](https://github.com/railroadmedia/musora-content-services/compare/v1.0.180...v1.0.181) (2024-11-25)
|
package/package.json
CHANGED
package/src/services/sanity.js
CHANGED
|
@@ -499,7 +499,8 @@ export async function fetchAll(brand, type, {
|
|
|
499
499
|
progressIds,
|
|
500
500
|
useDefaultFields,
|
|
501
501
|
customFields,
|
|
502
|
-
progress
|
|
502
|
+
progress
|
|
503
|
+
});
|
|
503
504
|
if (customResults) {
|
|
504
505
|
return customResults;
|
|
505
506
|
}
|
|
@@ -579,7 +580,11 @@ export async function fetchAll(brand, type, {
|
|
|
579
580
|
entityFieldsString = fieldsString;
|
|
580
581
|
}
|
|
581
582
|
|
|
582
|
-
const filterWithRestrictions = await new FilterBuilder(filter,{
|
|
583
|
+
const filterWithRestrictions = await new FilterBuilder(filter, {
|
|
584
|
+
bypassStatuses: bypassStatusAndPublishedValidation,
|
|
585
|
+
bypassPermissions: bypassStatusAndPublishedValidation,
|
|
586
|
+
bypassPublishedDateRestriction: bypassStatusAndPublishedValidation
|
|
587
|
+
}).buildFilter();
|
|
583
588
|
query = buildEntityAndTotalQuery(
|
|
584
589
|
filterWithRestrictions,
|
|
585
590
|
entityFieldsString,
|
|
@@ -624,7 +629,7 @@ async function handleCustomFetchAll(brand, type, {
|
|
|
624
629
|
if (type === 'challenge') {
|
|
625
630
|
if (groupBy === 'completed') {
|
|
626
631
|
return fetchCompletedChallenges(brand, page, limit);
|
|
627
|
-
} else if(groupBy === 'owned') {
|
|
632
|
+
} else if (groupBy === 'owned') {
|
|
628
633
|
return fetchOwnedChallenges(brand, page, limit);
|
|
629
634
|
}
|
|
630
635
|
}
|
|
@@ -909,7 +914,10 @@ export async function fetchMethodPreviousNextLesson(railcontentId, methodId) {
|
|
|
909
914
|
const index = sortedChildren.indexOf(Number(railcontentId));
|
|
910
915
|
let nextId = sortedChildren[index + 1];
|
|
911
916
|
let previousId = sortedChildren[index - 1];
|
|
912
|
-
let
|
|
917
|
+
let ids = [];
|
|
918
|
+
if (nextId) ids.push(nextId);
|
|
919
|
+
if (previousId) ids.push(previousId);
|
|
920
|
+
let nextPrev = await fetchByRailContentIds(ids);
|
|
913
921
|
const nextLesson = nextPrev.find((elem) => {
|
|
914
922
|
return elem['id'] === nextId
|
|
915
923
|
});
|
|
@@ -996,7 +1004,7 @@ export async function fetchNextPreviousLesson(railcontentId) {
|
|
|
996
1004
|
* .catch(error => console.error(error));
|
|
997
1005
|
*/
|
|
998
1006
|
export async function fetchLessonContent(railContentId) {
|
|
999
|
-
const filterParams = {isSingle:true};
|
|
1007
|
+
const filterParams = {isSingle: true};
|
|
1000
1008
|
// Format changes made to the `fields` object may also need to be reflected in Musora-web-platform SanityGateway.php $fields object
|
|
1001
1009
|
// Currently only for challenges and challenge lessons
|
|
1002
1010
|
// If you're unsure, message Adrian, or just add them.
|
|
@@ -1635,6 +1643,7 @@ export async function fetchSanity(query,
|
|
|
1635
1643
|
]);
|
|
1636
1644
|
const response = promisesResult[0];
|
|
1637
1645
|
const userPermissions = promisesResult[1]?.permissions;
|
|
1646
|
+
const isAdmin = promisesResult[1]?.isAdmin;
|
|
1638
1647
|
|
|
1639
1648
|
if (!response.ok) {
|
|
1640
1649
|
throw new Error(`Sanity API error: ${response.status} - ${response.statusText}`);
|
|
@@ -1645,7 +1654,7 @@ export async function fetchSanity(query,
|
|
|
1645
1654
|
console.log("fetchSanity Results:", result);
|
|
1646
1655
|
}
|
|
1647
1656
|
let results = isList ? result.result : result.result[0];
|
|
1648
|
-
results = processNeedAccess ? await needsAccessDecorator(results, userPermissions) : results;
|
|
1657
|
+
results = processNeedAccess ? await needsAccessDecorator(results, userPermissions, isAdmin) : results;
|
|
1649
1658
|
return customPostProcess ? customPostProcess(results) : results;
|
|
1650
1659
|
} else {
|
|
1651
1660
|
throw new Error('No results found');
|
|
@@ -1656,38 +1665,41 @@ export async function fetchSanity(query,
|
|
|
1656
1665
|
}
|
|
1657
1666
|
}
|
|
1658
1667
|
|
|
1659
|
-
function needsAccessDecorator(results, userPermissions) {
|
|
1668
|
+
function needsAccessDecorator(results, userPermissions, isAdmin) {
|
|
1660
1669
|
if (globalConfig.sanityConfig.useDummyRailContentMethods) return results;
|
|
1661
1670
|
|
|
1662
1671
|
userPermissions = new Set(userPermissions);
|
|
1663
1672
|
|
|
1664
1673
|
if (Array.isArray(results)) {
|
|
1665
1674
|
results.forEach((result) => {
|
|
1666
|
-
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions);
|
|
1675
|
+
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions, isAdmin);
|
|
1667
1676
|
});
|
|
1668
1677
|
} else if (results.entity && Array.isArray(results.entity)) {
|
|
1669
1678
|
// Group By
|
|
1670
1679
|
results.entity.forEach((result) => {
|
|
1671
1680
|
if (result.lessons) {
|
|
1672
1681
|
result.lessons.forEach((lesson) => {
|
|
1673
|
-
lesson['need_access'] = doesUserNeedAccessToContent(lesson, userPermissions); // Updated to check lesson access
|
|
1682
|
+
lesson['need_access'] = doesUserNeedAccessToContent(lesson, userPermissions, isAdmin); // Updated to check lesson access
|
|
1674
1683
|
});
|
|
1675
1684
|
} else {
|
|
1676
|
-
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions);
|
|
1685
|
+
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions, isAdmin);
|
|
1677
1686
|
}
|
|
1678
1687
|
});
|
|
1679
1688
|
} else if (results.related_lessons && Array.isArray(results.related_lessons)) {
|
|
1680
1689
|
results.related_lessons.forEach((result) => {
|
|
1681
|
-
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions);
|
|
1690
|
+
result['need_access'] = doesUserNeedAccessToContent(result, userPermissions, isAdmin);
|
|
1682
1691
|
})
|
|
1683
1692
|
} else {
|
|
1684
|
-
results['need_access'] = doesUserNeedAccessToContent(results, userPermissions);
|
|
1693
|
+
results['need_access'] = doesUserNeedAccessToContent(results, userPermissions, isAdmin);
|
|
1685
1694
|
}
|
|
1686
1695
|
|
|
1687
1696
|
return results;
|
|
1688
1697
|
}
|
|
1689
1698
|
|
|
1690
|
-
function doesUserNeedAccessToContent(result, userPermissions) {
|
|
1699
|
+
function doesUserNeedAccessToContent(result, userPermissions, isAdmin) {
|
|
1700
|
+
if (isAdmin ?? false) {
|
|
1701
|
+
return false;
|
|
1702
|
+
}
|
|
1691
1703
|
const permissions = new Set(result?.permission_id ?? []);
|
|
1692
1704
|
if (permissions.size === 0) {
|
|
1693
1705
|
return false;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import {getFieldsForContentType} from "../src/contentTypeConfig";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
fetchAssignments,
|
|
4
|
+
fetchCommentModContentData,
|
|
5
|
+
fetchMethodPreviousNextLesson,
|
|
6
|
+
fetchSanity
|
|
7
|
+
} from "../src/services/sanity";
|
|
3
8
|
import {log} from './log.js';
|
|
4
9
|
import {initializeTestService} from "./initializeTests";
|
|
5
10
|
import {dataContext} from "../src/services/contentProgress";
|
|
@@ -555,6 +560,17 @@ describe('Sanity Queries', function () {
|
|
|
555
560
|
expect(response.nextLesson.sort).toBeGreaterThanOrEqual(document.sort);
|
|
556
561
|
});
|
|
557
562
|
|
|
563
|
+
test('fetchMethodNextPreviousLesson-Last', async () => {
|
|
564
|
+
const id = 396234;
|
|
565
|
+
const methodId = 396229;
|
|
566
|
+
const response = await fetchMethodPreviousNextLesson(id, methodId);
|
|
567
|
+
log(response);
|
|
568
|
+
expect(response.prevLesson).toBeDefined();
|
|
569
|
+
expect(response.prevLesson.id).toBe(396233);
|
|
570
|
+
expect(response.prevLesson.type).toBe('course-part');
|
|
571
|
+
expect(response.nextLesson).not.toBeDefined();
|
|
572
|
+
});
|
|
573
|
+
|
|
558
574
|
test('fetchNextPreviousLesson-Method-Lesson', async () => {
|
|
559
575
|
const id = 241265;
|
|
560
576
|
const response = await fetchNextPreviousLesson(id);
|