@kth/om-kursen-ladok-client 2.0.5 → 2.1.0

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.
Files changed (100) hide show
  1. package/dist/attributVardenConstants.js +1 -0
  2. package/dist/attributVardenConstants.js.map +1 -1
  3. package/dist/cache.d.ts +17 -0
  4. package/dist/cache.js +54 -0
  5. package/dist/cache.js.map +1 -0
  6. package/dist/createApiClient.js +5 -30
  7. package/dist/createApiClient.js.map +1 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.js +2 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/{mapProgramInstans.d.ts → mapProgrammeVersion.d.ts} +7 -4
  12. package/dist/{mapProgramInstans.js → mapProgrammeVersion.js} +16 -6
  13. package/dist/mapProgrammeVersion.js.map +1 -0
  14. package/dist/programme/createProgrammeApi.d.ts +3 -0
  15. package/dist/programme/createProgrammeApi.js +53 -0
  16. package/dist/programme/createProgrammeApi.js.map +1 -0
  17. package/dist/programme/types.d.ts +19 -0
  18. package/dist/programme/types.js +3 -0
  19. package/dist/programme/types.js.map +1 -0
  20. package/dist/programme/utbildningsTypIdConstants.d.ts +4 -0
  21. package/dist/programme/utbildningsTypIdConstants.js +13 -0
  22. package/dist/programme/utbildningsTypIdConstants.js.map +1 -0
  23. package/dist/programme/utils/programmeDegreeMapping.d.ts +10 -0
  24. package/dist/programme/utils/programmeDegreeMapping.js +55 -0
  25. package/dist/programme/utils/programmeDegreeMapping.js.map +1 -0
  26. package/dist/programme/utils/programmeVersionUtil.d.ts +9 -0
  27. package/dist/programme/utils/programmeVersionUtil.js +27 -0
  28. package/dist/programme/utils/programmeVersionUtil.js.map +1 -0
  29. package/dist/search/createSearchApi.js +26 -78
  30. package/dist/search/createSearchApi.js.map +1 -1
  31. package/dist/search/searchService.d.ts +24 -0
  32. package/dist/search/searchService.js +80 -0
  33. package/dist/search/searchService.js.map +1 -0
  34. package/dist/search/types.d.ts +15 -0
  35. package/dist/search/utils/educationalTypeUtils.d.ts +12 -0
  36. package/dist/search/utils/educationalTypeUtils.js +28 -1
  37. package/dist/search/utils/educationalTypeUtils.js.map +1 -1
  38. package/dist/search/utils/searchUtils.d.ts +23 -1
  39. package/dist/search/utils/searchUtils.js +53 -30
  40. package/dist/search/utils/searchUtils.js.map +1 -1
  41. package/dist/supportApis/coursesByOrgUtil.d.ts +32 -0
  42. package/dist/supportApis/coursesByOrgUtil.js +55 -0
  43. package/dist/supportApis/coursesByOrgUtil.js.map +1 -0
  44. package/dist/supportApis/createSupportApis.d.ts +10 -11
  45. package/dist/supportApis/createSupportApis.js +10 -114
  46. package/dist/supportApis/createSupportApis.js.map +1 -1
  47. package/dist/supportApis/organisationService.d.ts +12 -0
  48. package/dist/supportApis/organisationService.js +42 -0
  49. package/dist/supportApis/organisationService.js.map +1 -0
  50. package/dist/supportApis/searchSupportUtil.d.ts +13 -0
  51. package/dist/supportApis/searchSupportUtil.js +68 -0
  52. package/dist/supportApis/searchSupportUtil.js.map +1 -0
  53. package/dist/supportApis/supportService.d.ts +18 -0
  54. package/dist/supportApis/supportService.js +121 -0
  55. package/dist/supportApis/supportService.js.map +1 -0
  56. package/dist/supportApis/supportUtils.d.ts +60 -0
  57. package/dist/supportApis/supportUtils.js +116 -0
  58. package/dist/supportApis/supportUtils.js.map +1 -0
  59. package/dist/supportApis/types.d.ts +12 -0
  60. package/dist/supportApis/types.js +3 -0
  61. package/dist/supportApis/types.js.map +1 -0
  62. package/dist/types/OmKursenLadokApiClient.d.ts +4 -2
  63. package/dist/utils/AcademicSemester.d.ts +43 -0
  64. package/dist/utils/AcademicSemester.js +82 -0
  65. package/dist/utils/AcademicSemester.js.map +1 -0
  66. package/dist/{search → utils}/SearchError.d.ts +8 -1
  67. package/dist/{search → utils}/SearchError.js +9 -0
  68. package/dist/utils/SearchError.js.map +1 -0
  69. package/dist/utils/collectionUtils.d.ts +4 -0
  70. package/dist/utils/collectionUtils.js +19 -0
  71. package/dist/utils/collectionUtils.js.map +1 -0
  72. package/dist/utils/creditsUtil.js +1 -0
  73. package/dist/utils/creditsUtil.js.map +1 -1
  74. package/dist/utils/errorUtils.d.ts +1 -1
  75. package/dist/utils/errorUtils.js +1 -1
  76. package/dist/utils/errorUtils.js.map +1 -1
  77. package/dist/{search/utils → utils}/getAllEntitiesByUseOfContinuation.d.ts +2 -1
  78. package/dist/{search/utils → utils}/getAllEntitiesByUseOfContinuation.js +5 -5
  79. package/dist/utils/getAllEntitiesByUseOfContinuation.js.map +1 -0
  80. package/dist/utils/index.d.ts +1 -0
  81. package/dist/utils/index.js +1 -0
  82. package/dist/utils/index.js.map +1 -1
  83. package/dist/utils/languageUtil.d.ts +12 -9
  84. package/dist/utils/languageUtil.js +14 -1
  85. package/dist/utils/languageUtil.js.map +1 -1
  86. package/dist/utils/mergeResponses.d.ts +3 -0
  87. package/dist/utils/mergeResponses.js +37 -0
  88. package/dist/utils/mergeResponses.js.map +1 -0
  89. package/dist/utils/periodUtil.d.ts +2 -2
  90. package/dist/utils/periodUtil.js.map +1 -1
  91. package/dist/utils/programUtil.d.ts +6 -11
  92. package/dist/utils/programUtil.js +21 -13
  93. package/dist/utils/programUtil.js.map +1 -1
  94. package/dist/utils/studyYearUtil.d.ts +2 -1
  95. package/dist/utils/studyYearUtil.js +11 -7
  96. package/dist/utils/studyYearUtil.js.map +1 -1
  97. package/package.json +3 -3
  98. package/dist/mapProgramInstans.js.map +0 -1
  99. package/dist/search/SearchError.js.map +0 -1
  100. package/dist/search/utils/getAllEntitiesByUseOfContinuation.js.map +0 -1
@@ -11,30 +11,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.createSearchApi = void 0;
13
13
  const searchUtils_1 = require("./utils/searchUtils");
14
- const getAllEntitiesByUseOfContinuation_1 = require("./utils/getAllEntitiesByUseOfContinuation");
14
+ const getAllEntitiesByUseOfContinuation_1 = require("../utils/getAllEntitiesByUseOfContinuation");
15
15
  const mapSearchResult_1 = require("../mapSearchResult");
16
16
  const groupSearchResults_1 = require("../groupSearchResults");
17
17
  const errorUtils_1 = require("../utils/errorUtils");
18
- const mapCourse_1 = require("../mapCourse");
19
- const gradingScalesUtils_1 = require("../utils/gradingScalesUtils");
20
- const utils_1 = require("../utils");
21
18
  const mapCourseRoundSearchDTO_1 = require("./utils/mapCourseRoundSearchDTO");
22
- const mapCourseVersionDTO_1 = require("./utils/mapCourseVersionDTO");
23
- const typeChecking_1 = require("../utils/typeChecking");
24
- const createSupportApis_1 = require("../supportApis/createSupportApis");
25
- const getLatestCompletedCourseVersions_1 = require("./utils/getLatestCompletedCourseVersions");
19
+ const searchService_1 = require("./searchService");
20
+ const supportService_1 = require("../supportApis/supportService");
21
+ const SearchError_1 = require("../utils/SearchError");
26
22
  const createSearchApi = (ladokClient) => {
23
+ const searchService = new searchService_1.SearchService(ladokClient);
24
+ const supportService = new supportService_1.SupportService(ladokClient);
27
25
  return {
28
26
  searchCourses: (searchParams, language) => __awaiter(void 0, void 0, void 0, function* () {
29
27
  try {
30
28
  const cleanSearchParams = (0, searchUtils_1.validateAndCleanSearchParams)(searchParams);
31
- const departmentList = yield getDepartmentList(ladokClient, language);
29
+ const departmentList = yield supportService.getSchoolsWithDepartmentsForSearch(language);
32
30
  const { requestQuery, filterPeriod } = (0, searchUtils_1.prepareSearchRequestQueryForKursTillfallen)(cleanSearchParams, departmentList);
33
31
  const allCourses = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, requestQuery);
34
32
  const mappedCourses = allCourses.map(course => (0, mapSearchResult_1.mapKursTillfalleResult)(course, language));
35
33
  const groupedCourses = (0, groupSearchResults_1.groupSearchResults)(mappedCourses, filterPeriod);
36
34
  // TODO Remove this once we have a query parameter to filter for miljö courses
37
- const courseVersionsToShow = possiblyFilterByMiljo(groupedCourses, cleanSearchParams.onlyMHU);
35
+ const courseVersionsToShow = (0, searchUtils_1.possiblyFilterByMiljo)(groupedCourses, cleanSearchParams.onlyMHU);
38
36
  const courseRoundSearchDTOs = courseVersionsToShow.map(mapCourseRoundSearchDTO_1.mapCourseRoundSearchDTO);
39
37
  return { searchHits: courseRoundSearchDTOs };
40
38
  }
@@ -46,79 +44,29 @@ const createSearchApi = (ladokClient) => {
46
44
  };
47
45
  }
48
46
  }),
49
- searchCourseVersions: (searchParams, language) => __awaiter(void 0, void 0, void 0, function* () {
50
- try {
51
- const cleanSearchParams = (0, searchUtils_1.validateAndCleanSearchParams)(searchParams);
52
- const departmentList = yield getDepartmentList(ladokClient, language);
53
- const requestQueryForKursInstans = (0, searchUtils_1.prepareSearchRequestQueryForKursInstans)(cleanSearchParams, departmentList);
54
- const allCourseVersions = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokUtbildningsInstansSlim, requestQueryForKursInstans);
55
- const gradingScalesCodes = yield (0, gradingScalesUtils_1.getGradingScalesCodes)(ladokClient); // TODO: Use cached values
56
- const allMappedCourseVersions = allCourseVersions.map(courseVersion => (0, mapCourse_1.mapCourse)(courseVersion, language, gradingScalesCodes));
57
- const latestCourseVersions = findLatestCourseVersions(allMappedCourseVersions);
58
- const latestApprovedCourses = (0, getLatestCompletedCourseVersions_1.getLatestCompletedCourseVersions)(latestCourseVersions);
59
- // TODO Remove this once we have a query parameter to filter for miljö courses
60
- const courseVersionsToShow = possiblyFilterByMiljo(latestApprovedCourses, cleanSearchParams.onlyMHU);
61
- const courseVersionDTOs = courseVersionsToShow.map(mapCourseVersionDTO_1.mapCourseVersionDTO);
62
- return { searchHits: courseVersionDTOs };
63
- }
64
- catch (error) {
65
- const searchError = (0, errorUtils_1.toSearchError)(error);
47
+ searchCourseVersions: searchService.searchCourseVersions.bind(searchService),
48
+ getDepartmentWithCourseList: (departmentParams, language) => __awaiter(void 0, void 0, void 0, function* () {
49
+ const { department, courses } = yield searchService.getDepartmentWithCourseList(departmentParams, language);
50
+ if (!department) {
66
51
  return {
67
- searchHits: [],
68
- errorCode: searchError.errorCode,
52
+ departmentWithCourseList: {
53
+ departmentCode: '',
54
+ department: '',
55
+ courses: [],
56
+ },
57
+ errorCode: SearchError_1.SearchErrorCode.UNKNOWN_ERROR,
69
58
  };
70
59
  }
60
+ return {
61
+ departmentWithCourseList: {
62
+ departmentCode: department.code,
63
+ department: department.name,
64
+ courses,
65
+ },
66
+ errorCode: SearchError_1.SearchErrorCode.UNKNOWN_ERROR,
67
+ };
71
68
  }),
72
69
  };
73
70
  };
74
71
  exports.createSearchApi = createSearchApi;
75
- // TODO Remove this once we have a query parameter to filter for miljö courses
76
- /**
77
- * If onlyMHU is true, this function filters the courses to only include those that have the flag isMiljo set to true.
78
- * @param courses
79
- * @param onlyMHU
80
- * @returns
81
- */
82
- const possiblyFilterByMiljo = (courses, onlyMHU = false) => {
83
- if (!onlyMHU)
84
- return courses;
85
- return courses.filter(course => course.isMiljo);
86
- };
87
- // TODO Benni: refactor or remove this function if it is not needed anymore (basically a failsafe)
88
- /**
89
- * This function takes an array of courseVersions, groups them by their kod, and finds the latest version of each course.
90
- * It returns an array of distinct courses (based on kod).
91
- * This should not be needed anymore since we are using the "senasteversion" in the search.
92
- * @param courseVersions
93
- * @returns
94
- */
95
- const findLatestCourseVersions = (courseVersions) => {
96
- const coursesGroupedByKurskod = new Map();
97
- for (const course of courseVersions) {
98
- if (!coursesGroupedByKurskod.has(course.kod)) {
99
- coursesGroupedByKurskod.set(course.kod, []);
100
- }
101
- coursesGroupedByKurskod.get(course.kod).push(course);
102
- }
103
- const courseVersionsGroupedByKurskodArray = Array.from(coursesGroupedByKurskod.entries()).map(([, value]) => value);
104
- const latestDefinedCourses = courseVersionsGroupedByKurskodArray
105
- .map(courses => (0, utils_1.findLatestVersion)(courses))
106
- .filter(typeChecking_1.isDefined);
107
- return latestDefinedCourses;
108
- };
109
- /**
110
- * This function retrieves a list of SchoolWithDepartments from ladok
111
- * @param ladokClient
112
- * @param language
113
- * @returns
114
- */
115
- const getDepartmentList = (ladokClient, language) => __awaiter(void 0, void 0, void 0, function* () {
116
- const supportAPI = (0, createSupportApis_1.createSupportApi)(ladokClient);
117
- const [currentDepartmentList, deprecatedDepartmentList] = yield Promise.all([
118
- supportAPI.createDepartmentList(language),
119
- supportAPI.createDepartmentList(language, true),
120
- ]);
121
- const departmentList = [...currentDepartmentList, ...deprecatedDepartmentList];
122
- return departmentList;
123
- });
124
72
  //# sourceMappingURL=createSearchApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSearchApi.js","sourceRoot":"","sources":["../../src/search/createSearchApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSearchApi.js","sourceRoot":"","sources":["../../src/search/createSearchApi.ts"],"names":[],"mappings":";;;;;;;;;;;;AAMA,qDAI4B;AAC5B,kGAA8F;AAC9F,wDAA2D;AAC3D,8DAA0D;AAC1D,oDAAmD;AACnD,6EAAyE;AACzE,mDAA+C;AAC/C,kEAA8D;AAC9D,sDAAsD;AAE/C,MAAM,eAAe,GAAG,CAAC,WAAsC,EAAa,EAAE;IACnF,MAAM,aAAa,GAAG,IAAI,6BAAa,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,WAAW,CAAC,CAAA;IACtD,OAAO;QACL,aAAa,EAAE,CAAO,YAAY,EAAE,QAAQ,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACH,MAAM,iBAAiB,GAAG,IAAA,0CAA4B,EAAC,YAAY,CAAC,CAAA;gBAEpE,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,kCAAkC,CAAC,QAAQ,CAAC,CAAA;gBAExF,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAA,wDAA0C,EAC/E,iBAAiB,EACjB,cAAc,CACf,CAAA;gBAED,MAAM,UAAU,GAAG,MAAM,IAAA,qEAAiC,EAGxD,WAAW,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAA;gBAEjD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,wCAAsB,EAAC,MAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;gBAEzF,MAAM,cAAc,GAAG,IAAA,uCAAkB,EAAC,aAAa,EAAE,YAAY,CAAC,CAAA;gBAEtE,8EAA8E;gBAC9E,MAAM,oBAAoB,GAAG,IAAA,mCAAqB,EAAC,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAA;gBAE7F,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,GAAG,CAAC,iDAAuB,CAAC,CAAA;gBAE/E,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAA;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,IAAA,0BAAa,EAAC,KAAK,CAAC,CAAA;gBACxC,OAAO;oBACL,UAAU,EAAE,EAAE;oBACd,SAAS,EAAE,WAAW,CAAC,SAAS;iBACjC,CAAA;YACH,CAAC;QACH,CAAC,CAAA;QACD,oBAAoB,EAAE,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;QAC5E,2BAA2B,EAAE,CAAO,gBAAgB,EAAE,QAAQ,EAAE,EAAE;YAChE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;YAE3G,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO;oBACL,wBAAwB,EAAE;wBACxB,cAAc,EAAE,EAAE;wBAClB,UAAU,EAAE,EAAE;wBACd,OAAO,EAAE,EAAE;qBACZ;oBACD,SAAS,EAAE,6BAAe,CAAC,aAAa;iBACzC,CAAA;YACH,CAAC;YAED,OAAO;gBACL,wBAAwB,EAAE;oBACxB,cAAc,EAAE,UAAU,CAAC,IAAI;oBAC/B,UAAU,EAAE,UAAU,CAAC,IAAI;oBAC3B,OAAO;iBACR;gBACD,SAAS,EAAE,6BAAe,CAAC,aAAa;aACzC,CAAA;QACH,CAAC,CAAA;KACF,CAAA;AACH,CAAC,CAAA;AA/DY,QAAA,eAAe,mBA+D3B"}
@@ -0,0 +1,24 @@
1
+ import { LadokMellanlagerApiClient } from '@kth/ladok-mellanlager-client';
2
+ import { CourseVersionDTO, DepartmentParams, SearchParams } from './types';
3
+ import { Language } from '../utils';
4
+ import { OrganisationService } from '../supportApis/organisationService';
5
+ import { SupportService } from '../supportApis/supportService';
6
+ import { DepartmentFlat } from '../supportApis/types';
7
+ export declare class SearchService {
8
+ private ladokClient;
9
+ organisationService: OrganisationService;
10
+ supportService: SupportService;
11
+ constructor(ladokClient: LadokMellanlagerApiClient);
12
+ searchCourseVersions(searchParams: SearchParams, language: Language): Promise<{
13
+ searchHits: CourseVersionDTO[];
14
+ errorCode?: undefined;
15
+ } | {
16
+ searchHits: never[];
17
+ errorCode: import("../utils/SearchError").SearchErrorCode;
18
+ }>;
19
+ private searchLatestApprovedCourseVersions;
20
+ getDepartmentWithCourseList({ organisation, utbildningsniva: rawUtbildningsniva }: DepartmentParams, language: Language): Promise<{
21
+ department: DepartmentFlat | undefined;
22
+ courses: CourseVersionDTO[];
23
+ }>;
24
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SearchService = void 0;
13
+ const mapCourse_1 = require("../mapCourse");
14
+ const errorUtils_1 = require("../utils/errorUtils");
15
+ const gradingScalesUtils_1 = require("../utils/gradingScalesUtils");
16
+ const getAllEntitiesByUseOfContinuation_1 = require("../utils/getAllEntitiesByUseOfContinuation");
17
+ const getLatestCompletedCourseVersions_1 = require("./utils/getLatestCompletedCourseVersions");
18
+ const mapCourseVersionDTO_1 = require("./utils/mapCourseVersionDTO");
19
+ const searchUtils_1 = require("./utils/searchUtils");
20
+ const organisationService_1 = require("../supportApis/organisationService");
21
+ const supportService_1 = require("../supportApis/supportService");
22
+ const SearchError_1 = require("../utils/SearchError");
23
+ class SearchService {
24
+ constructor(ladokClient) {
25
+ this.ladokClient = ladokClient;
26
+ this.organisationService = new organisationService_1.OrganisationService(ladokClient);
27
+ this.supportService = new supportService_1.SupportService(ladokClient);
28
+ }
29
+ searchCourseVersions(searchParams, language) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ try {
32
+ const cleanSearchParams = (0, searchUtils_1.validateAndCleanSearchParams)(searchParams);
33
+ const departmentList = yield this.supportService.getSchoolsWithDepartmentsForSearch(language);
34
+ const requestQueryForKursInstans = (0, searchUtils_1.prepareSearchRequestQueryForKursInstans)(cleanSearchParams, departmentList);
35
+ const latestApprovedCourses = yield this.searchLatestApprovedCourseVersions(requestQueryForKursInstans, language);
36
+ // TODO Remove this once we have a query parameter to filter for miljö courses
37
+ const courseVersionsToShow = (0, searchUtils_1.possiblyFilterByMiljo)(latestApprovedCourses, cleanSearchParams.onlyMHU);
38
+ const courseVersionDTOs = courseVersionsToShow.map(mapCourseVersionDTO_1.mapCourseVersionDTO);
39
+ return { searchHits: courseVersionDTOs };
40
+ }
41
+ catch (error) {
42
+ const searchError = (0, errorUtils_1.toSearchError)(error);
43
+ return {
44
+ searchHits: [],
45
+ errorCode: searchError.errorCode,
46
+ };
47
+ }
48
+ });
49
+ }
50
+ searchLatestApprovedCourseVersions(requestQueryForKursInstans, language, continuationOptions) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ const allCourseVersions = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(this.ladokClient.sokUtbildningsInstansSlim, requestQueryForKursInstans, continuationOptions);
53
+ const gradingScalesCodes = yield (0, gradingScalesUtils_1.getGradingScalesCodes)(this.ladokClient); // TODO: Use cached values
54
+ const allMappedCourseVersions = allCourseVersions.map(courseVersion => (0, mapCourse_1.mapCourse)(courseVersion, language, gradingScalesCodes));
55
+ const latestCourseVersions = (0, searchUtils_1.findLatestCourseVersions)(allMappedCourseVersions);
56
+ return (0, getLatestCompletedCourseVersions_1.getLatestCompletedCourseVersions)(latestCourseVersions);
57
+ });
58
+ }
59
+ getDepartmentWithCourseList(_a, language_1) {
60
+ return __awaiter(this, arguments, void 0, function* ({ organisation, utbildningsniva: rawUtbildningsniva }, language) {
61
+ console.log(`Searching for courses in department: "${organisation}" with educational level: "${rawUtbildningsniva}"`);
62
+ if (!organisation) {
63
+ throw SearchError_1.SearchError.missingParameter(`Got: organsation: "${organisation}", utbildningsniva: "${rawUtbildningsniva}"`);
64
+ }
65
+ const schoolsWithDepartments = yield this.supportService.getSchoolsWithDepartmentsForSearch(language);
66
+ // This endpoint is not supposed to accept user input for department code or educational level,
67
+ // so we prepare the request query based on the departmentParams instead of cleaning them.
68
+ const requestQueryForKursInstans = (0, searchUtils_1.prepareSearchRequestQueryForDepartmentList)(schoolsWithDepartments, {
69
+ organisation,
70
+ rawUtbildningsniva,
71
+ });
72
+ const latestApprovedCourseVersions = yield this.searchLatestApprovedCourseVersions(requestQueryForKursInstans, language, { maxContinuationIterations: 10, maxSearchResultsToReturn: 1000 });
73
+ const courseVersionDTOs = latestApprovedCourseVersions.map(mapCourseVersionDTO_1.mapCourseVersionDTO);
74
+ const department = yield this.supportService.getDepartmentByCode(organisation, language);
75
+ return { department, courses: courseVersionDTOs };
76
+ });
77
+ }
78
+ }
79
+ exports.SearchService = SearchService;
80
+ //# sourceMappingURL=searchService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchService.js","sourceRoot":"","sources":["../../src/search/searchService.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@ import { Language } from '../utils';
3
3
  export type SearchApi = {
4
4
  searchCourses: (searchParams: SearchParams, language: Language) => Promise<SearchCourseResponse<CourseRoundSearchDTO>>;
5
5
  searchCourseVersions: (searchParams: SearchParams, language: Language) => Promise<SearchCourseResponse<CourseVersionDTO>>;
6
+ getDepartmentWithCourseList: (searchParams: DepartmentParams, language: Language) => Promise<DepartmentWithCourseListResponse>;
7
+ };
8
+ export type DepartmentWithCourseListResponse = {
9
+ departmentWithCourseList: DepartmentWithCourseList;
10
+ errorCode?: string;
6
11
  };
7
12
  export type SearchCourseResponse<T> = {
8
13
  searchHits: T[];
@@ -58,3 +63,13 @@ export type RequestQuery = {
58
63
  } | {
59
64
  terminkodStart: string;
60
65
  });
66
+ export type ContinuationOptions = {
67
+ maxSearchResultsToReturn?: number;
68
+ maxContinuationIterations?: number;
69
+ };
70
+ export type DepartmentWithCourseList = {
71
+ department: string;
72
+ departmentCode: string;
73
+ courses: CourseVersionDTO[];
74
+ };
75
+ export type DepartmentParams = Pick<SearchParams, 'utbildningsniva' | 'organisation'>;
@@ -9,3 +9,15 @@ export declare const getVersionUtbildningstyperForEducationalLevels: (educationa
9
9
  ID: number;
10
10
  Kod: string;
11
11
  }[];
12
+ /**
13
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypKoder.
14
+ * @param educationalLevels
15
+ * @returns
16
+ */
17
+ export declare const getUtbildningsnivaParameterForKursTillfalle: (educationalLevels: EducationalLevelCode[] | undefined) => string | undefined;
18
+ /**
19
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypIDn.
20
+ * @param educationalLevels
21
+ * @returns
22
+ */
23
+ export declare const getUtbildningsnivaParameterForKursInstans: (educationalLevels: EducationalLevelCode[] | undefined) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVersionUtbildningstyperForEducationalLevels = exports.getAllVersionUtbildningstyperIDs = void 0;
3
+ exports.getUtbildningsnivaParameterForKursInstans = exports.getUtbildningsnivaParameterForKursTillfalle = exports.getVersionUtbildningstyperForEducationalLevels = exports.getAllVersionUtbildningstyperIDs = void 0;
4
4
  const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
5
5
  const utbildningsTypIdConstants_1 = require("../utbildningsTypIdConstants");
6
6
  const getAllVersionUtbildningstyperIDs = () => {
@@ -33,4 +33,31 @@ const getVersionUtbildningstyperForEducationalLevels = (educationalLevels) => {
33
33
  });
34
34
  };
35
35
  exports.getVersionUtbildningstyperForEducationalLevels = getVersionUtbildningstyperForEducationalLevels;
36
+ /**
37
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypKoder.
38
+ * @param educationalLevels
39
+ * @returns
40
+ */
41
+ const getUtbildningsnivaParameterForKursTillfalle = (educationalLevels) => {
42
+ if (!educationalLevels)
43
+ return undefined;
44
+ return getCommaSeparatedEducationalTypesInFormat('Kod', educationalLevels);
45
+ };
46
+ exports.getUtbildningsnivaParameterForKursTillfalle = getUtbildningsnivaParameterForKursTillfalle;
47
+ /**
48
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypIDn.
49
+ * @param educationalLevels
50
+ * @returns
51
+ */
52
+ const getUtbildningsnivaParameterForKursInstans = (educationalLevels) => {
53
+ if (!educationalLevels)
54
+ return (0, exports.getAllVersionUtbildningstyperIDs)().join(',');
55
+ return getCommaSeparatedEducationalTypesInFormat('ID', educationalLevels);
56
+ };
57
+ exports.getUtbildningsnivaParameterForKursInstans = getUtbildningsnivaParameterForKursInstans;
58
+ const getCommaSeparatedEducationalTypesInFormat = (format, educationalLevels) => {
59
+ const selectedEducationalTypes = (0, exports.getVersionUtbildningstyperForEducationalLevels)(educationalLevels);
60
+ const selectedEducationalTypeIdentifiers = selectedEducationalTypes.map(item => item[format]);
61
+ return selectedEducationalTypeIdentifiers.join(',');
62
+ };
36
63
  //# sourceMappingURL=educationalTypeUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"educationalTypeUtils.js","sourceRoot":"","sources":["../../../src/search/utils/educationalTypeUtils.ts"],"names":[],"mappings":";;;AAAA,8EAAqE;AACrE,4EAMqC;AAE9B,MAAM,gCAAgC,GAAG,GAAa,EAAE;IAC7D,OAAO;QACL,GAAG,kEAAsC;QACzC,GAAG,4DAAgC;QACnC,GAAG,+DAAmC;QACtC,GAAG,gEAAoC;QACvC,GAAG,8DAAkC;KACtC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;AAC5C,CAAC,CAAA;AARY,QAAA,gCAAgC,oCAQ5C;AAED;;;;GAIG;AACI,MAAM,8CAA8C,GAAG,CAAC,iBAAyC,EAAE,EAAE;IAC1G,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,gDAAoB,CAAC,WAAW;gBACnC,OAAO,kEAAsC,CAAA;YAC/C,KAAK,gDAAoB,CAAC,KAAK;gBAC7B,OAAO,4DAAgC,CAAA;YACzC,KAAK,gDAAoB,CAAC,QAAQ;gBAChC,OAAO,+DAAmC,CAAA;YAC5C,KAAK,gDAAoB,CAAC,QAAQ;gBAChC,OAAO,gEAAoC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAbY,QAAA,8CAA8C,kDAa1D"}
1
+ {"version":3,"file":"educationalTypeUtils.js","sourceRoot":"","sources":["../../../src/search/utils/educationalTypeUtils.ts"],"names":[],"mappings":";;;AAAA,8EAAqE;AACrE,4EAMqC;AAE9B,MAAM,gCAAgC,GAAG,GAAa,EAAE;IAC7D,OAAO;QACL,GAAG,kEAAsC;QACzC,GAAG,4DAAgC;QACnC,GAAG,+DAAmC;QACtC,GAAG,gEAAoC;QACvC,GAAG,8DAAkC;KACtC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;AAC5C,CAAC,CAAA;AARY,QAAA,gCAAgC,oCAQ5C;AAED;;;;GAIG;AACI,MAAM,8CAA8C,GAAG,CAAC,iBAAyC,EAAE,EAAE;IAC1G,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,gDAAoB,CAAC,WAAW;gBACnC,OAAO,kEAAsC,CAAA;YAC/C,KAAK,gDAAoB,CAAC,KAAK;gBAC7B,OAAO,4DAAgC,CAAA;YACzC,KAAK,gDAAoB,CAAC,QAAQ;gBAChC,OAAO,+DAAmC,CAAA;YAC5C,KAAK,gDAAoB,CAAC,QAAQ;gBAChC,OAAO,gEAAoC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAbY,QAAA,8CAA8C,kDAa1D;AAED;;;;GAIG;AACI,MAAM,2CAA2C,GAAG,CACzD,iBAAqD,EACjC,EAAE;IACtB,IAAI,CAAC,iBAAiB;QAAE,OAAO,SAAS,CAAA;IAExC,OAAO,yCAAyC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;AAC5E,CAAC,CAAA;AANY,QAAA,2CAA2C,+CAMvD;AAED;;;;GAIG;AACI,MAAM,yCAAyC,GAAG,CACvD,iBAAqD,EAC7C,EAAE;IACV,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAA,wCAAgC,GAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAE3E,OAAO,yCAAyC,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC3E,CAAC,CAAA;AANY,QAAA,yCAAyC,6CAMrD;AAED,MAAM,yCAAyC,GAAG,CAChD,MAAoB,EACpB,iBAAyC,EACjC,EAAE;IACV,MAAM,wBAAwB,GAAG,IAAA,sDAA8C,EAAC,iBAAiB,CAAC,CAAA;IAElG,MAAM,kCAAkC,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAE7F,OAAO,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACrD,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { SokUtbildningsInstansSlimQuery, SokUtbildningsTillfalleSlimQuery } from '@kth/ladok-mellanlager-client';
2
2
  import { CleanSearchParams, SearchParams } from '../types';
3
- import { SchoolWithDepartments } from '../../supportApis/createSupportApis';
3
+ import { SchoolWithDepartments } from '../../supportApis/types';
4
+ import { Course } from '../../mapCourse';
4
5
  /**
5
6
  * Validates and cleans the search parameters for the search API.
6
7
  * Throws an error if the searchParams are invalid.
@@ -16,3 +17,24 @@ export declare const prepareSearchRequestQueryForKursTillfallen: (searchParams:
16
17
  filterPeriod: boolean;
17
18
  };
18
19
  export declare const prepareSearchRequestQueryForKursInstans: (searchParams: CleanSearchParams, schoolsWithDepartments: SchoolWithDepartments[]) => NonNullable<SokUtbildningsInstansSlimQuery>;
20
+ export declare const prepareSearchRequestQueryForDepartmentList: (schoolsWithDepartments: SchoolWithDepartments[], { rawUtbildningsniva, organisation, }: {
21
+ organisation?: string;
22
+ rawUtbildningsniva: string[] | undefined;
23
+ }) => NonNullable<SokUtbildningsInstansSlimQuery>;
24
+ /**
25
+ * This function takes an array of courseVersions, groups them by their kod, and finds the latest version of each course.
26
+ * It returns an array of distinct courses (based on kod).
27
+ * This should not be needed anymore since we are using the "senasteversion" in the search.
28
+ * @param courseVersions
29
+ * @returns
30
+ */
31
+ export declare const findLatestCourseVersions: (courseVersions: Course[]) => Course[];
32
+ /**
33
+ * If onlyMHU is true, this function filters the courses to only include those that have the flag isMiljo set to true.
34
+ * @param courses
35
+ * @param onlyMHU
36
+ * @returns
37
+ */
38
+ export declare const possiblyFilterByMiljo: <T extends {
39
+ isMiljo?: boolean;
40
+ }>(courses: T[], onlyMHU?: boolean) => T[];
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareSearchRequestQueryForKursInstans = exports.prepareSearchRequestQueryForKursTillfallen = exports.validateAndCleanSearchParams = void 0;
4
- const SearchError_1 = require("../SearchError");
3
+ exports.possiblyFilterByMiljo = exports.findLatestCourseVersions = exports.prepareSearchRequestQueryForDepartmentList = exports.prepareSearchRequestQueryForKursInstans = exports.prepareSearchRequestQueryForKursTillfallen = exports.validateAndCleanSearchParams = void 0;
4
+ const SearchError_1 = require("../../utils/SearchError");
5
5
  const utils_1 = require("../../utils");
6
6
  const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
7
7
  const utbildningsTypIdConstants_1 = require("../utbildningsTypIdConstants");
8
8
  const attributVardenConstants_1 = require("../../attributVardenConstants");
9
- const educationalTypeUtils_1 = require("./educationalTypeUtils");
10
9
  const typeChecking_1 = require("../../utils/typeChecking");
11
10
  const queryConstants_1 = require("../../queryConstants");
11
+ const educationalTypeUtils_1 = require("./educationalTypeUtils");
12
12
  /**
13
13
  * Validates and cleans the search parameters for the search API.
14
14
  * Throws an error if the searchParams are invalid.
@@ -66,38 +66,13 @@ const DEFAULT_INSTANCE_QUERY_PARAMS = {
66
66
  };
67
67
  const prepareSearchRequestQueryForKursTillfallen = (searchParams, schoolsWithDepartments) => {
68
68
  const { kodEllerBenamning, organisation, sprak, startPeriod, utbildningsniva, avvecklad } = searchParams;
69
- const educationalTypes = getUtbildningsnivaParameterForKursTillfalle(utbildningsniva);
69
+ const educationalTypes = (0, educationalTypeUtils_1.getUtbildningsnivaParameterForKursTillfalle)(utbildningsniva);
70
70
  const organisationsFilter = getOrganisationsFilter(schoolsWithDepartments, organisation);
71
71
  const filterPeriod = !Boolean(startPeriod);
72
72
  const requestQuery = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*' }, getStartPeriodOrTerminkodStart(startPeriod)), (educationalTypes && { utbildningsniva: educationalTypes })), (organisationsFilter && { organisation: organisationsFilter })), (sprak && { sprak })), (avvecklad && { avvecklad })), DEFAULT_INSTANCE_QUERY_PARAMS), { utbildningstypid: utbildningsTypIdConstants_1.INSTANCE_UTBILDNINGSTYP_IDS });
73
73
  return { requestQuery, filterPeriod }; // TODO Benni this does two things, filterPeriod should probably be split out
74
74
  };
75
75
  exports.prepareSearchRequestQueryForKursTillfallen = prepareSearchRequestQueryForKursTillfallen;
76
- /**
77
- * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypKoder.
78
- * @param educationalLevels
79
- * @returns
80
- */
81
- const getUtbildningsnivaParameterForKursTillfalle = (educationalLevels) => {
82
- if (!educationalLevels)
83
- return undefined;
84
- return getCommaSeparatedEducationalTypesInFormat('Kod', educationalLevels);
85
- };
86
- /**
87
- * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypIDn.
88
- * @param educationalLevels
89
- * @returns
90
- */
91
- const getUtbildningsnivaParameterForKursInstans = (educationalLevels) => {
92
- if (!educationalLevels)
93
- return (0, educationalTypeUtils_1.getAllVersionUtbildningstyperIDs)().join(',');
94
- return getCommaSeparatedEducationalTypesInFormat('ID', educationalLevels);
95
- };
96
- const getCommaSeparatedEducationalTypesInFormat = (format, educationalLevels) => {
97
- const selectedEducationalTypes = (0, educationalTypeUtils_1.getVersionUtbildningstyperForEducationalLevels)(educationalLevels);
98
- const selectedEducationalTypeIdentifiers = selectedEducationalTypes.map(item => item[format]);
99
- return selectedEducationalTypeIdentifiers.join(',');
100
- };
101
76
  const getOrganisationsFilter = (organisationer, organisation) => {
102
77
  var _a, _b;
103
78
  if (organisation && (organisation === null || organisation === void 0 ? void 0 : organisation.length) === 1) {
@@ -109,9 +84,21 @@ const getOrganisationsFilter = (organisationer, organisation) => {
109
84
  const prepareSearchRequestQueryForKursInstans = (searchParams, schoolsWithDepartments) => {
110
85
  const { kodEllerBenamning, avvecklad, organisation, utbildningsniva } = searchParams;
111
86
  const organisationsFilter = getOrganisationsFilter(schoolsWithDepartments, organisation);
112
- return Object.assign(Object.assign(Object.assign({ kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*', antalTraffar: queryConstants_1.MAX_ANTAL_TRAFFAR }, (avvecklad && { avvecklad })), (organisationsFilter && { organisation: organisationsFilter })), { utbildningstypgrundtyp: 'KURS', utbildningstypid: getUtbildningsnivaParameterForKursInstans(utbildningsniva), instansAttributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_VERSIONS, senasteversion: 'true' });
87
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, minimalSearchRequestQueryForKursInstans(queryConstants_1.MAX_ANTAL_TRAFFAR, utbildningsniva)), { kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*' }), (avvecklad && { avvecklad })), (organisationsFilter && { organisation: organisationsFilter })), { instansAttributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_VERSIONS });
113
88
  };
114
89
  exports.prepareSearchRequestQueryForKursInstans = prepareSearchRequestQueryForKursInstans;
90
+ const minimalSearchRequestQueryForKursInstans = (antalTraffar, utbildningsniva) => ({
91
+ antalTraffar,
92
+ utbildningstypgrundtyp: 'KURS',
93
+ utbildningstypid: (0, educationalTypeUtils_1.getUtbildningsnivaParameterForKursInstans)(utbildningsniva),
94
+ senasteversion: 'true',
95
+ });
96
+ const prepareSearchRequestQueryForDepartmentList = (schoolsWithDepartments, { rawUtbildningsniva, organisation, }) => {
97
+ const organisationsFilter = getOrganisationsFilter(schoolsWithDepartments, organisation);
98
+ const utbildningsniva = rawUtbildningsniva ? cleanUtbildningsnivaParam(rawUtbildningsniva) : undefined;
99
+ return Object.assign(Object.assign({}, minimalSearchRequestQueryForKursInstans(queryConstants_1.MAX_ANTAL_TRAFFAR, utbildningsniva)), (organisationsFilter && { organisation: organisationsFilter }));
100
+ };
101
+ exports.prepareSearchRequestQueryForDepartmentList = prepareSearchRequestQueryForDepartmentList;
115
102
  /**
116
103
  * If startPeriod is defined, returns it as an object with startPeriod property and comma-separated values.
117
104
  * If not, returns an object with terminkodStart property and the default period.
@@ -133,4 +120,40 @@ const getDefaultPeriod = () => {
133
120
  const defaultPeriod = (0, utils_1.getPeriodCodeForDate)(now);
134
121
  return defaultPeriod;
135
122
  };
123
+ // TODO Benni: refactor or remove this function if it is not needed anymore (basically a failsafe)
124
+ /**
125
+ * This function takes an array of courseVersions, groups them by their kod, and finds the latest version of each course.
126
+ * It returns an array of distinct courses (based on kod).
127
+ * This should not be needed anymore since we are using the "senasteversion" in the search.
128
+ * @param courseVersions
129
+ * @returns
130
+ */
131
+ const findLatestCourseVersions = (courseVersions) => {
132
+ const coursesGroupedByKurskod = new Map();
133
+ for (const course of courseVersions) {
134
+ if (!coursesGroupedByKurskod.has(course.kod)) {
135
+ coursesGroupedByKurskod.set(course.kod, []);
136
+ }
137
+ coursesGroupedByKurskod.get(course.kod).push(course);
138
+ }
139
+ const courseVersionsGroupedByKurskodArray = Array.from(coursesGroupedByKurskod.entries()).map(([, value]) => value);
140
+ const latestDefinedCourses = courseVersionsGroupedByKurskodArray
141
+ .map(courses => (0, utils_1.findLatestVersion)(courses))
142
+ .filter(typeChecking_1.isDefined);
143
+ return latestDefinedCourses;
144
+ };
145
+ exports.findLatestCourseVersions = findLatestCourseVersions;
146
+ // TODO Remove this once we have a query parameter to filter for miljö courses
147
+ /**
148
+ * If onlyMHU is true, this function filters the courses to only include those that have the flag isMiljo set to true.
149
+ * @param courses
150
+ * @param onlyMHU
151
+ * @returns
152
+ */
153
+ const possiblyFilterByMiljo = (courses, onlyMHU = false) => {
154
+ if (!onlyMHU)
155
+ return courses;
156
+ return courses.filter(course => course.isMiljo);
157
+ };
158
+ exports.possiblyFilterByMiljo = possiblyFilterByMiljo;
136
159
  //# sourceMappingURL=searchUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"searchUtils.js","sourceRoot":"","sources":["../../../src/search/utils/searchUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchUtils.js","sourceRoot":"","sources":["../../../src/search/utils/searchUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Organisationskoppling } from '@kth/ladok-mellanlager-client/dist/types/endpoints/organisationskoppling';
2
+ import { Language } from '../utils';
3
+ import { Organisation } from '@kth/ladok-mellanlager-client/dist/types/endpoints/organisation';
4
+ import { SchoolWithDepartments } from './types';
5
+ /**
6
+ * Handles the retrieval and filtering of schools and their departments based on the presence of courses.
7
+ *
8
+ * This function takes lists of organisations and organisation connections, and returns two arrays:
9
+ * - `current`: Schools with departments that currently have at least one course (optionally including cancelled courses and/or only third cycle courses).
10
+ * - `deprecated`: Deprecated schools with departments that have at least one course.
11
+ *
12
+ * The filtering is performed by checking each department using the provided `hasAtLeastOneCourse` function.
13
+ *
14
+ * @param organisationer - Array of organisation objects representing schools and departments.
15
+ * @param organisationskopplingar - Array of organisation connection objects describing the hierarchy.
16
+ * @param language - The language to use for school and department names.
17
+ * @param onlyThirdCycle - If true, only include departments with third cycle (research level) courses. Defaults to false.
18
+ * @param includeDepartmentsWithCancelledCourses - If true, include departments that have cancelled courses. Defaults to false.
19
+ * @param hasAtLeastOneCourse - Async function to determine if a department has at least one course, given its code and filtering options.
20
+ * @returns A promise resolving to an object containing arrays of current and deprecated schools with their filtered departments.
21
+ */
22
+ export declare const handleSchools: ({ organisationer, organisationskopplingar, language, onlyThirdCycle, includeDepartmentsWithCancelledCourses, hasAtLeastOneCourse, }: {
23
+ organisationer: Organisation[];
24
+ organisationskopplingar: Organisationskoppling[];
25
+ language: Language;
26
+ onlyThirdCycle?: boolean;
27
+ includeDepartmentsWithCancelledCourses?: boolean;
28
+ hasAtLeastOneCourse: (departmentCode: string, includeCancelledCourses: boolean, onlyThirdCycle: boolean) => Promise<boolean>;
29
+ }) => Promise<{
30
+ current: SchoolWithDepartments[];
31
+ deprecated: SchoolWithDepartments[];
32
+ }>;