@kth/om-kursen-ladok-client 2.0.6 → 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.
- package/dist/attributVardenConstants.js +1 -0
- package/dist/attributVardenConstants.js.map +1 -1
- package/dist/cache.d.ts +17 -0
- package/dist/cache.js +54 -0
- package/dist/cache.js.map +1 -0
- package/dist/createApiClient.js +5 -30
- package/dist/createApiClient.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/{mapProgramInstans.d.ts → mapProgrammeVersion.d.ts} +7 -4
- package/dist/{mapProgramInstans.js → mapProgrammeVersion.js} +16 -6
- package/dist/mapProgrammeVersion.js.map +1 -0
- package/dist/programme/createProgrammeApi.d.ts +3 -0
- package/dist/programme/createProgrammeApi.js +53 -0
- package/dist/programme/createProgrammeApi.js.map +1 -0
- package/dist/programme/types.d.ts +19 -0
- package/dist/programme/types.js +3 -0
- package/dist/programme/types.js.map +1 -0
- package/dist/programme/utbildningsTypIdConstants.d.ts +4 -0
- package/dist/programme/utbildningsTypIdConstants.js +13 -0
- package/dist/programme/utbildningsTypIdConstants.js.map +1 -0
- package/dist/programme/utils/programmeDegreeMapping.d.ts +10 -0
- package/dist/programme/utils/programmeDegreeMapping.js +55 -0
- package/dist/programme/utils/programmeDegreeMapping.js.map +1 -0
- package/dist/programme/utils/programmeVersionUtil.d.ts +9 -0
- package/dist/programme/utils/programmeVersionUtil.js +27 -0
- package/dist/programme/utils/programmeVersionUtil.js.map +1 -0
- package/dist/search/createSearchApi.js +26 -78
- package/dist/search/createSearchApi.js.map +1 -1
- package/dist/search/searchService.d.ts +24 -0
- package/dist/search/searchService.js +80 -0
- package/dist/search/searchService.js.map +1 -0
- package/dist/search/types.d.ts +15 -0
- package/dist/search/utils/educationalTypeUtils.d.ts +12 -0
- package/dist/search/utils/educationalTypeUtils.js +28 -1
- package/dist/search/utils/educationalTypeUtils.js.map +1 -1
- package/dist/search/utils/searchUtils.d.ts +23 -1
- package/dist/search/utils/searchUtils.js +53 -30
- package/dist/search/utils/searchUtils.js.map +1 -1
- package/dist/supportApis/coursesByOrgUtil.d.ts +32 -0
- package/dist/supportApis/coursesByOrgUtil.js +55 -0
- package/dist/supportApis/coursesByOrgUtil.js.map +1 -0
- package/dist/supportApis/createSupportApis.d.ts +10 -11
- package/dist/supportApis/createSupportApis.js +10 -114
- package/dist/supportApis/createSupportApis.js.map +1 -1
- package/dist/supportApis/organisationService.d.ts +12 -0
- package/dist/supportApis/organisationService.js +42 -0
- package/dist/supportApis/organisationService.js.map +1 -0
- package/dist/supportApis/searchSupportUtil.d.ts +13 -0
- package/dist/supportApis/searchSupportUtil.js +68 -0
- package/dist/supportApis/searchSupportUtil.js.map +1 -0
- package/dist/supportApis/supportService.d.ts +18 -0
- package/dist/supportApis/supportService.js +121 -0
- package/dist/supportApis/supportService.js.map +1 -0
- package/dist/supportApis/supportUtils.d.ts +60 -0
- package/dist/supportApis/supportUtils.js +116 -0
- package/dist/supportApis/supportUtils.js.map +1 -0
- package/dist/supportApis/types.d.ts +12 -0
- package/dist/supportApis/types.js +3 -0
- package/dist/supportApis/types.js.map +1 -0
- package/dist/types/OmKursenLadokApiClient.d.ts +4 -2
- package/dist/utils/AcademicSemester.d.ts +43 -0
- package/dist/utils/AcademicSemester.js +82 -0
- package/dist/utils/AcademicSemester.js.map +1 -0
- package/dist/{search → utils}/SearchError.d.ts +8 -1
- package/dist/{search → utils}/SearchError.js +9 -0
- package/dist/utils/SearchError.js.map +1 -0
- package/dist/utils/collectionUtils.d.ts +4 -0
- package/dist/utils/collectionUtils.js +19 -0
- package/dist/utils/collectionUtils.js.map +1 -0
- package/dist/utils/creditsUtil.js +1 -0
- package/dist/utils/creditsUtil.js.map +1 -1
- package/dist/utils/errorUtils.d.ts +1 -1
- package/dist/utils/errorUtils.js +1 -1
- package/dist/utils/errorUtils.js.map +1 -1
- package/dist/{search/utils → utils}/getAllEntitiesByUseOfContinuation.d.ts +2 -1
- package/dist/{search/utils → utils}/getAllEntitiesByUseOfContinuation.js +5 -5
- package/dist/utils/getAllEntitiesByUseOfContinuation.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/languageUtil.d.ts +12 -9
- package/dist/utils/languageUtil.js +14 -1
- package/dist/utils/languageUtil.js.map +1 -1
- package/dist/utils/mergeResponses.d.ts +3 -0
- package/dist/utils/mergeResponses.js +37 -0
- package/dist/utils/mergeResponses.js.map +1 -0
- package/dist/utils/periodUtil.d.ts +2 -2
- package/dist/utils/periodUtil.js.map +1 -1
- package/dist/utils/programUtil.d.ts +6 -11
- package/dist/utils/programUtil.js +20 -12
- package/dist/utils/programUtil.js.map +1 -1
- package/package.json +3 -3
- package/dist/mapProgramInstans.js.map +0 -1
- package/dist/search/SearchError.js.map +0 -1
- 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("
|
|
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
|
|
23
|
-
const
|
|
24
|
-
const
|
|
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
|
|
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: (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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":";;;;;;;;;;;;
|
|
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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"}
|
package/dist/search/types.d.ts
CHANGED
|
@@ -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/
|
|
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("
|
|
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 : '*'
|
|
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":";;;AACA,
|
|
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
|
+
}>;
|