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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musora-content-services",
3
- "version": "1.0.182",
3
+ "version": "1.0.184",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -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,{bypassStatuses:bypassStatusAndPublishedValidation, bypassPermissions: bypassStatusAndPublishedValidation, bypassPublishedDateRestriction: bypassStatusAndPublishedValidation} ).buildFilter();
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 nextPrev = await fetchByRailContentIds([nextId, previousId]);
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 {fetchAssignments, fetchCommentModContentData, fetchSanity} from "../src/services/sanity";
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);