@studyportals/fawkes 6.0.1-9 → 7.0.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 (68) hide show
  1. package/dist/src/presenters/DegreePresenter.d.ts +1 -0
  2. package/dist/src/presenters/DegreePresenter.js +28 -1
  3. package/dist/src/presenters/EducationalFormPresenter.js +14 -1
  4. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.d.ts +6 -0
  5. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.js +6 -0
  6. package/dist/src/programmes/BaseProgrammeRule.d.ts +10 -0
  7. package/dist/src/programmes/BaseProgrammeRule.js +5 -0
  8. package/dist/src/programmes/IProgrammeRule.d.ts +5 -0
  9. package/dist/src/programmes/IProgrammeRule.js +1 -0
  10. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +7 -0
  11. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +21 -0
  12. package/dist/src/programmes/policies/Area.js +10 -8
  13. package/dist/src/programmes/policies/Attendance.js +7 -5
  14. package/dist/src/programmes/policies/AttendanceDegree.js +11 -9
  15. package/dist/src/programmes/policies/Continent.js +7 -5
  16. package/dist/src/programmes/policies/ContinentTuitionFee.js +11 -9
  17. package/dist/src/programmes/policies/Country.js +7 -5
  18. package/dist/src/programmes/policies/CountryAttendance.js +11 -9
  19. package/dist/src/programmes/policies/CountryAttendanceDegree.js +13 -11
  20. package/dist/src/programmes/policies/CountryDegree.js +11 -9
  21. package/dist/src/programmes/policies/CountryDuration.js +11 -9
  22. package/dist/src/programmes/policies/CountryDurationDegree.js +13 -11
  23. package/dist/src/programmes/policies/CountryEducationalForm.js +11 -9
  24. package/dist/src/programmes/policies/CountryFormat.js +11 -9
  25. package/dist/src/programmes/policies/CountryTuitionFee.js +11 -9
  26. package/dist/src/programmes/policies/Discipline.js +7 -5
  27. package/dist/src/programmes/policies/DisciplineArea.js +12 -10
  28. package/dist/src/programmes/policies/DisciplineAttendance.js +11 -9
  29. package/dist/src/programmes/policies/DisciplineContinent.js +11 -9
  30. package/dist/src/programmes/policies/DisciplineCountry.js +11 -9
  31. package/dist/src/programmes/policies/DisciplineCountryDegree.js +13 -11
  32. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +13 -11
  33. package/dist/src/programmes/policies/DisciplineDegree.js +11 -9
  34. package/dist/src/programmes/policies/DisciplineDuration.js +11 -9
  35. package/dist/src/programmes/policies/DisciplineEducationalForm.js +11 -9
  36. package/dist/src/programmes/policies/DisciplineFormat.js +11 -9
  37. package/dist/src/programmes/policies/DisciplineTuitionFee.js +11 -9
  38. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +13 -11
  39. package/dist/src/programmes/policies/SpecialProgrammes.js +7 -5
  40. package/dist/src/programmes/policies/TuitionFee.js +4 -6
  41. package/dist/src/programmes/rules/AffordableTuitionFeeRule.d.ts +2 -2
  42. package/dist/src/programmes/rules/AffordableTuitionFeeRule.js +2 -2
  43. package/dist/src/programmes/rules/AtLeastSevenResultsRule.d.ts +5 -3
  44. package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +6 -2
  45. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.d.ts +2 -2
  46. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +2 -1
  47. package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +2 -2
  48. package/dist/src/programmes/rules/IndexableDegreeRule.js +2 -1
  49. package/dist/src/programmes/rules/IndexableDurationRule.d.ts +2 -2
  50. package/dist/src/programmes/rules/IndexableDurationRule.js +2 -1
  51. package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +2 -2
  52. package/dist/src/programmes/rules/IndexableEducationalFormRule.js +2 -1
  53. package/dist/src/programmes/rules/IndexablePageNumberRule.d.ts +2 -2
  54. package/dist/src/programmes/rules/IndexablePageNumberRule.js +2 -1
  55. package/dist/src/programmes/rules/MbaDegreeRule.d.ts +2 -2
  56. package/dist/src/programmes/rules/MbaDegreeRule.js +2 -2
  57. package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +2 -2
  58. package/dist/src/programmes/rules/MbaOrMscDegreeRule.js +2 -1
  59. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.d.ts +2 -2
  60. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +3 -1
  61. package/dist/src/programmes/rules/OneYearDurationRule.d.ts +2 -2
  62. package/dist/src/programmes/rules/OneYearDurationRule.js +2 -2
  63. package/dist/src/programmes/rules/PartTimeFormatRule.d.ts +2 -2
  64. package/dist/src/programmes/rules/PartTimeFormatRule.js +2 -2
  65. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +0 -2
  66. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +1 -2
  67. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +2 -3
  68. package/package.json +3 -1
@@ -24,15 +24,17 @@ export class DisciplineAttendance extends ProgrammesBaseIndexabilityPolicy {
24
24
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
25
  const attendanceFragments = AttendancePresenter.getInstance().getFragments();
26
26
  const paths = [];
27
- for (const discipline of disciplineFragments) {
28
- for (const attendance of attendanceFragments) {
29
- const filterKeyValues = new Map([
30
- [FilterKey.DISCIPLINES, [discipline.id]],
31
- [FilterKey.DELIVERY_METHOD, [attendance.id]]
32
- ]);
33
- const result = await this.checkRulesForSitemap(filterKeyValues);
34
- if (result) {
35
- paths.push(`${attendance.path}/${discipline.path}`);
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const discipline of disciplineFragments) {
29
+ for (const attendance of attendanceFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.DISCIPLINES, [discipline.id]],
32
+ [FilterKey.DELIVERY_METHOD, [attendance.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${attendance.path}/${discipline.path}`, pageNumber));
37
+ }
36
38
  }
37
39
  }
38
40
  }
@@ -22,15 +22,17 @@ export class DisciplineContinent extends ProgrammesBaseIndexabilityPolicy {
22
22
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
23
23
  const continentFragments = ContinentPresenter.getInstance().getFragments();
24
24
  const paths = [];
25
- for (const discipline of disciplineFragments) {
26
- for (const continent of continentFragments) {
27
- const filterKeyValues = new Map([
28
- [FilterKey.DISCIPLINES, [discipline.id]],
29
- [FilterKey.CONTINENT, [continent.id]]
30
- ]);
31
- const result = await this.checkRulesForSitemap(filterKeyValues);
32
- if (result) {
33
- paths.push(`${discipline.path}/${continent.path}`);
25
+ for (const pageNumber of this.indexablePageNumbers) {
26
+ for (const discipline of disciplineFragments) {
27
+ for (const continent of continentFragments) {
28
+ const filterKeyValues = new Map([
29
+ [FilterKey.DISCIPLINES, [discipline.id]],
30
+ [FilterKey.CONTINENT, [continent.id]]
31
+ ]);
32
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
33
+ if (result) {
34
+ paths.push(this.getPathWithPageNumber(`${discipline.path}/${continent.path}`, pageNumber));
35
+ }
34
36
  }
35
37
  }
36
38
  }
@@ -22,15 +22,17 @@ export class DisciplineCountry extends ProgrammesBaseIndexabilityPolicy {
22
22
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
23
23
  const countryFragments = CountryPresenter.getInstance().getFragments();
24
24
  const paths = [];
25
- for (const discipline of disciplineFragments) {
26
- for (const country of countryFragments) {
27
- const filterKeyValues = new Map([
28
- [FilterKey.DISCIPLINES, [discipline.id]],
29
- [FilterKey.COUNTRY, [country.id]]
30
- ]);
31
- const result = await this.checkRulesForSitemap(filterKeyValues);
32
- if (result) {
33
- paths.push(`${discipline.path}/${country.path}`);
25
+ for (const pageNumber of this.indexablePageNumbers) {
26
+ for (const discipline of disciplineFragments) {
27
+ for (const country of countryFragments) {
28
+ const filterKeyValues = new Map([
29
+ [FilterKey.DISCIPLINES, [discipline.id]],
30
+ [FilterKey.COUNTRY, [country.id]]
31
+ ]);
32
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
33
+ if (result) {
34
+ paths.push(this.getPathWithPageNumber(`${discipline.path}/${country.path}`, pageNumber));
35
+ }
34
36
  }
35
37
  }
36
38
  }
@@ -28,17 +28,19 @@ export class DisciplineCountryDegree extends ProgrammesBaseIndexabilityPolicy {
28
28
  const countryFragments = CountryPresenter.getInstance().getFragments();
29
29
  const degreeFragments = DegreePresenter.getInstance().getFragments();
30
30
  const paths = [];
31
- for (const discipline of disciplineFragments) {
32
- for (const country of countryFragments) {
33
- for (const degree of degreeFragments) {
34
- const filterKeyValues = new Map([
35
- [FilterKey.DISCIPLINES, [discipline.id]],
36
- [FilterKey.COUNTRY, [country.id]],
37
- [FilterKey.DEGREE_TYPE, [degree.id]]
38
- ]);
39
- const result = await this.checkRulesForSitemap(filterKeyValues);
40
- if (result) {
41
- paths.push(`${degree.path}/${discipline.path}/${country.path}`);
31
+ for (const pageNumber of this.indexablePageNumbers) {
32
+ for (const discipline of disciplineFragments) {
33
+ for (const country of countryFragments) {
34
+ for (const degree of degreeFragments) {
35
+ const filterKeyValues = new Map([
36
+ [FilterKey.DISCIPLINES, [discipline.id]],
37
+ [FilterKey.COUNTRY, [country.id]],
38
+ [FilterKey.DEGREE_TYPE, [degree.id]]
39
+ ]);
40
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
41
+ if (result) {
42
+ paths.push(this.getPathWithPageNumber(`${degree.path}/${discipline.path}/${country.path}`, pageNumber));
43
+ }
42
44
  }
43
45
  }
44
46
  }
@@ -28,17 +28,19 @@ export class DisciplineCountryEducationalForm extends ProgrammesBaseIndexability
28
28
  const countryFragments = CountryPresenter.getInstance().getFragments();
29
29
  const educationalFormFragments = EducationalFormPresenter.getInstance().getFragments();
30
30
  const paths = [];
31
- for (const discipline of disciplineFragments) {
32
- for (const country of countryFragments) {
33
- for (const form of educationalFormFragments) {
34
- const filterKeyValues = new Map([
35
- [FilterKey.DISCIPLINES, [discipline.id]],
36
- [FilterKey.COUNTRY, [country.id]],
37
- [FilterKey.EDUCATIONAL_FORM, [form.id]]
38
- ]);
39
- const result = await this.checkRulesForSitemap(filterKeyValues);
40
- if (result) {
41
- paths.push(`${discipline.path}/${form.path}/${country.path}`);
31
+ for (const pageNumber of this.indexablePageNumbers) {
32
+ for (const discipline of disciplineFragments) {
33
+ for (const country of countryFragments) {
34
+ for (const form of educationalFormFragments) {
35
+ const filterKeyValues = new Map([
36
+ [FilterKey.DISCIPLINES, [discipline.id]],
37
+ [FilterKey.COUNTRY, [country.id]],
38
+ [FilterKey.EDUCATIONAL_FORM, [form.id]]
39
+ ]);
40
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
41
+ if (result) {
42
+ paths.push(this.getPathWithPageNumber(`${discipline.path}/${form.path}/${country.path}`, pageNumber));
43
+ }
42
44
  }
43
45
  }
44
46
  }
@@ -24,15 +24,17 @@ export class DisciplineDegree extends ProgrammesBaseIndexabilityPolicy {
24
24
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
25
  const degreeFragments = DegreePresenter.getInstance().getFragments();
26
26
  const paths = [];
27
- for (const discipline of disciplineFragments) {
28
- for (const degree of degreeFragments) {
29
- const filterKeyValues = new Map([
30
- [FilterKey.DISCIPLINES, [discipline.id]],
31
- [FilterKey.DEGREE_TYPE, [degree.id]]
32
- ]);
33
- const result = await this.checkRulesForSitemap(filterKeyValues);
34
- if (result) {
35
- paths.push(`${degree.path}/${discipline.path}`);
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const discipline of disciplineFragments) {
29
+ for (const degree of degreeFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.DISCIPLINES, [discipline.id]],
32
+ [FilterKey.DEGREE_TYPE, [degree.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${degree.path}/${discipline.path}`, pageNumber));
37
+ }
36
38
  }
37
39
  }
38
40
  }
@@ -24,15 +24,17 @@ export class DisciplineDuration extends ProgrammesBaseIndexabilityPolicy {
24
24
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
25
  const durationFragments = DurationPresenter.getInstance().getFragments();
26
26
  const paths = [];
27
- for (const discipline of disciplineFragments) {
28
- for (const duration of durationFragments) {
29
- const filterKeyValues = new Map([
30
- [FilterKey.DISCIPLINES, [discipline.id]],
31
- [FilterKey.DURATION, [duration.id]]
32
- ]);
33
- const result = await this.checkRulesForSitemap(filterKeyValues);
34
- if (result) {
35
- paths.push(`${duration.path}/${discipline.path}`);
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const discipline of disciplineFragments) {
29
+ for (const duration of durationFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.DISCIPLINES, [discipline.id]],
32
+ [FilterKey.DURATION, [duration.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${duration.path}/${discipline.path}`, pageNumber));
37
+ }
36
38
  }
37
39
  }
38
40
  }
@@ -25,15 +25,17 @@ export class DisciplineEducationalForm extends ProgrammesBaseIndexabilityPolicy
25
25
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
26
26
  const educationalFormFragments = EducationalFormPresenter.getInstance().getFragments();
27
27
  const paths = [];
28
- for (const discipline of disciplineFragments) {
29
- for (const form of educationalFormFragments) {
30
- const filterKeyValues = new Map([
31
- [FilterKey.DISCIPLINES, [discipline.id]],
32
- [FilterKey.EDUCATIONAL_FORM, [form.id]]
33
- ]);
34
- const result = await this.checkRulesForSitemap(filterKeyValues);
35
- if (result) {
36
- paths.push(`${discipline.path}/${form.path}`);
28
+ for (const pageNumber of this.indexablePageNumbers) {
29
+ for (const discipline of disciplineFragments) {
30
+ for (const form of educationalFormFragments) {
31
+ const filterKeyValues = new Map([
32
+ [FilterKey.DISCIPLINES, [discipline.id]],
33
+ [FilterKey.EDUCATIONAL_FORM, [form.id]]
34
+ ]);
35
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
36
+ if (result) {
37
+ paths.push(this.getPathWithPageNumber(`${discipline.path}/${form.path}`, pageNumber));
38
+ }
37
39
  }
38
40
  }
39
41
  }
@@ -24,15 +24,17 @@ export class DisciplineFormat extends ProgrammesBaseIndexabilityPolicy {
24
24
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
25
  const formatFragments = FormatPresenter.getInstance().getFragments();
26
26
  const paths = [];
27
- for (const discipline of disciplineFragments) {
28
- for (const format of formatFragments) {
29
- const filterKeyValues = new Map([
30
- [FilterKey.DISCIPLINES, [discipline.id]],
31
- [FilterKey.ATTENDANCE, [format.id]]
32
- ]);
33
- const result = await this.checkRulesForSitemap(filterKeyValues);
34
- if (result) {
35
- paths.push(`${format.path}/${discipline.path}`);
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const discipline of disciplineFragments) {
29
+ for (const format of formatFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.DISCIPLINES, [discipline.id]],
32
+ [FilterKey.ATTENDANCE, [format.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${format.path}/${discipline.path}`, pageNumber));
37
+ }
36
38
  }
37
39
  }
38
40
  }
@@ -24,15 +24,17 @@ export class DisciplineTuitionFee extends ProgrammesBaseIndexabilityPolicy {
24
24
  const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
25
  const tuitionFeeFragments = TuitionFeePresenter.getInstance().getFragments();
26
26
  const paths = [];
27
- for (const discipline of disciplineFragments) {
28
- for (const tuitionFee of tuitionFeeFragments) {
29
- const filterKeyValues = new Map([
30
- [FilterKey.DISCIPLINES, [discipline.id]],
31
- [FilterKey.TUITION_FEE, [tuitionFee.id]]
32
- ]);
33
- const result = await this.checkRulesForSitemap(filterKeyValues);
34
- if (result) {
35
- paths.push(`${tuitionFee.path}/${discipline.path}`);
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const discipline of disciplineFragments) {
29
+ for (const tuitionFee of tuitionFeeFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.DISCIPLINES, [discipline.id]],
32
+ [FilterKey.TUITION_FEE, [tuitionFee.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${tuitionFee.path}/${discipline.path}`, pageNumber));
37
+ }
36
38
  }
37
39
  }
38
40
  }
@@ -29,17 +29,19 @@ export class DisciplineTuitionFeeAttendance extends ProgrammesBaseIndexabilityPo
29
29
  const attendanceFragments = AttendancePresenter.getInstance().getFragments();
30
30
  const tuitionFeeFragments = TuitionFeePresenter.getInstance().getFragments();
31
31
  const paths = [];
32
- for (const discipline of disciplineFragments) {
33
- for (const attendance of attendanceFragments) {
34
- for (const tuitionFee of tuitionFeeFragments) {
35
- const filterKeyValues = new Map([
36
- [FilterKey.DISCIPLINES, [discipline.id]],
37
- [FilterKey.DELIVERY_METHOD, [attendance.id]],
38
- [FilterKey.TUITION_FEE, [tuitionFee.id]]
39
- ]);
40
- const result = await this.checkRulesForSitemap(filterKeyValues);
41
- if (result) {
42
- paths.push(`${tuitionFee.path}/${attendance.path}/${discipline.path}`);
32
+ for (const pageNumber of this.indexablePageNumbers) {
33
+ for (const discipline of disciplineFragments) {
34
+ for (const attendance of attendanceFragments) {
35
+ for (const tuitionFee of tuitionFeeFragments) {
36
+ const filterKeyValues = new Map([
37
+ [FilterKey.DISCIPLINES, [discipline.id]],
38
+ [FilterKey.DELIVERY_METHOD, [attendance.id]],
39
+ [FilterKey.TUITION_FEE, [tuitionFee.id]]
40
+ ]);
41
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
42
+ if (result) {
43
+ paths.push(this.getPathWithPageNumber(`${tuitionFee.path}/${attendance.path}/${discipline.path}`, pageNumber));
44
+ }
43
45
  }
44
46
  }
45
47
  }
@@ -21,11 +21,13 @@ export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
21
21
  async generateUrls() {
22
22
  const specialProgrammeFragments = SpecialProgrammesPresenter.getInstance().getFragments();
23
23
  const paths = [];
24
- for (const specialProgramme of specialProgrammeFragments) {
25
- const filterKeyValues = new Map([[FilterKey.SPECIAL_PROGRAMMES, [specialProgramme.id]]]);
26
- const result = await this.checkRulesForSitemap(filterKeyValues);
27
- if (result) {
28
- paths.push(`${specialProgramme.path}`);
24
+ for (const pageNumber of this.indexablePageNumbers) {
25
+ for (const specialProgramme of specialProgrammeFragments) {
26
+ const filterKeyValues = new Map([[FilterKey.SPECIAL_PROGRAMMES, [specialProgramme.id]]]);
27
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
28
+ if (result) {
29
+ paths.push(this.getPathWithPageNumber(specialProgramme.path, pageNumber));
30
+ }
29
31
  }
30
32
  }
31
33
  return paths;
@@ -19,14 +19,12 @@ export class TuitionFee extends ProgrammesBaseIndexabilityPolicy {
19
19
  async generateUrls() {
20
20
  const tuitionFeeFragments = TuitionFeePresenter.getInstance().getFragments();
21
21
  const paths = [];
22
- for (const tuitionFee of tuitionFeeFragments) {
23
- const filterKeyValues = new Map([[FilterKey.TUITION_FEE, [tuitionFee.id]]]);
24
- const result = await this.checkRulesForSitemap(filterKeyValues);
25
- if (result) {
26
- paths.push(tuitionFee.path);
22
+ for (const pageNumber of this.indexablePageNumbers) {
23
+ for (const tuitionFee of tuitionFeeFragments) {
24
+ paths.push(this.getPathWithPageNumber(tuitionFee.path, pageNumber));
27
25
  }
28
26
  }
29
- return paths;
27
+ return Promise.resolve(paths);
30
28
  }
31
29
  get filterCombination() {
32
30
  return FilterCombinations.TUITION_FEE;
@@ -1,5 +1,5 @@
1
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
2
- export declare class AffordableTuitionFeeRule extends BaseFilterKeyValueRule {
1
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
2
+ export declare class AffordableTuitionFeeRule extends BaseProgrammeFilterKeyValueRule {
3
3
  constructor();
4
4
  getName(): string;
5
5
  getDescription(): string;
@@ -1,7 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { TuitionFeeFilterOptionValue } from '@studyportals/search-filters';
3
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
4
- export class AffordableTuitionFeeRule extends BaseFilterKeyValueRule {
3
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
4
+ export class AffordableTuitionFeeRule extends BaseProgrammeFilterKeyValueRule {
5
5
  constructor() {
6
6
  const filterKeyValues = new Map([
7
7
  [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
@@ -1,13 +1,15 @@
1
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
2
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
3
  import { ISearchApiClient } from '../../sitemap-generator/ISearchApiClient';
4
- import { IRule } from '../../common/IRule';
5
- export declare class AtLeastSevenResultsRule implements IRule {
4
+ import { IProgrammeRule } from '../IProgrammeRule';
5
+ export declare class AtLeastSevenResultsRule implements IProgrammeRule {
6
6
  private readonly minimumResultsCount;
7
+ private readonly maximumPageSize;
7
8
  private readonly searchApiClient?;
8
9
  constructor(searchApiClient?: ISearchApiClient);
9
10
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
10
- forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
11
+ forSitemapGeneratorWithPageNumber(filterKeyValues: FilterKeyValuesMap, pageNumber: number): Promise<boolean>;
12
+ forSitemapGenerator(): Promise<boolean>;
11
13
  getName(): string;
12
14
  getDescription(): string;
13
15
  }
@@ -1,6 +1,7 @@
1
1
  import { DependencyMissingError } from '../../errors/DependencyMissingError';
2
2
  export class AtLeastSevenResultsRule {
3
3
  minimumResultsCount = 7;
4
+ maximumPageSize = 20;
4
5
  searchApiClient;
5
6
  constructor(searchApiClient) {
6
7
  this.searchApiClient = searchApiClient;
@@ -10,12 +11,15 @@ export class AtLeastSevenResultsRule {
10
11
  const resultCount = applicationState.getNumberOfResults();
11
12
  return Promise.resolve(resultCount >= this.minimumResultsCount);
12
13
  }
13
- async forSitemapGenerator(filterKeyValues) {
14
+ async forSitemapGeneratorWithPageNumber(filterKeyValues, pageNumber) {
14
15
  if (!this.searchApiClient) {
15
16
  throw new DependencyMissingError('SearchApiClient');
16
17
  }
17
18
  const count = await this.searchApiClient.getProgrammeCount(filterKeyValues);
18
- return count >= this.minimumResultsCount;
19
+ return count >= (pageNumber - 1) * this.maximumPageSize + this.minimumResultsCount;
20
+ }
21
+ forSitemapGenerator() {
22
+ throw new Error('Method not implemented.');
19
23
  }
20
24
  getName() {
21
25
  return 'AtLeastSevenResultsRule';
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
3
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
4
- export declare class ErasmusOrJointSpecialProgrammesRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class ErasmusOrJointSpecialProgrammesRule extends BaseProgrammeRule {
5
5
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
7
7
  getName(): string;
@@ -1,6 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { SpecialProgrammesFilterOptionValue } from '@studyportals/search-filters';
3
- export class ErasmusOrJointSpecialProgrammesRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class ErasmusOrJointSpecialProgrammesRule extends BaseProgrammeRule {
4
5
  forSearch(dependencies) {
5
6
  const { seoInfoBase, filterState } = dependencies;
6
7
  const selectedSpecialProgramme = seoInfoBase.getFilterOptionValueBy(FilterKey.SPECIAL_PROGRAMMES, filterState);
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
3
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
4
- export declare class IndexableDegreeRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class IndexableDegreeRule extends BaseProgrammeRule {
5
5
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
7
7
  getName(): string;
@@ -1,6 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
- export class IndexableDegreeRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class IndexableDegreeRule extends BaseProgrammeRule {
4
5
  forSearch(dependencies) {
5
6
  const { seoInfoBase, filterState } = dependencies;
6
7
  const selectedDegree = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
3
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
4
- export declare class IndexableDurationRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class IndexableDurationRule extends BaseProgrammeRule {
5
5
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
7
7
  getName(): string;
@@ -1,6 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { DurationFilterOptionValue } from '@studyportals/search-filters';
3
- export class IndexableDurationRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class IndexableDurationRule extends BaseProgrammeRule {
4
5
  forSearch(dependencies) {
5
6
  const { seoInfoBase, filterState } = dependencies;
6
7
  const selectedDuration = seoInfoBase.getFilterOptionValueBy(FilterKey.DURATION, filterState);
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
3
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
4
- export declare class IndexableEducationalFormRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class IndexableEducationalFormRule extends BaseProgrammeRule {
5
5
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
7
7
  getName(): string;
@@ -1,6 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { EducationalFormFilterOptionValue } from '@studyportals/search-filters';
3
- export class IndexableEducationalFormRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class IndexableEducationalFormRule extends BaseProgrammeRule {
4
5
  forSearch(dependencies) {
5
6
  const { seoInfoBase, filterState } = dependencies;
6
7
  const selectedEducationalForm = seoInfoBase.getFilterOptionValueBy(FilterKey.EDUCATIONAL_FORM, filterState);
@@ -1,6 +1,6 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { IProgrammeSearchDependencies } from '../types/IProgrammeSearchDependencies';
3
- export declare class IndexablePageNumberRule implements IRule {
2
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
3
+ export declare class IndexablePageNumberRule extends BaseProgrammeRule {
4
4
  private readonly minimumPageNumber;
5
5
  forSearch(dependencies: IProgrammeSearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(): Promise<boolean>;
@@ -1,4 +1,5 @@
1
- export class IndexablePageNumberRule {
1
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
2
+ export class IndexablePageNumberRule extends BaseProgrammeRule {
2
3
  minimumPageNumber = 2;
3
4
  forSearch(dependencies) {
4
5
  const { applicationState } = dependencies;
@@ -1,5 +1,5 @@
1
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
2
- export declare class MbaDegreeRule extends BaseFilterKeyValueRule {
1
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
2
+ export declare class MbaDegreeRule extends BaseProgrammeFilterKeyValueRule {
3
3
  constructor();
4
4
  getName(): string;
5
5
  getDescription(): string;
@@ -1,7 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
4
- export class MbaDegreeRule extends BaseFilterKeyValueRule {
3
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
4
+ export class MbaDegreeRule extends BaseProgrammeFilterKeyValueRule {
5
5
  constructor() {
6
6
  const filterKeyValues = new Map([[FilterKey.DEGREE_TYPE, [DegreeTypeFilterOptionValue.MBA]]]);
7
7
  super(filterKeyValues);
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { ISearchDependencies } from '../../common/ISearchDependencies';
3
2
  import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
4
- export declare class MbaOrMscDegreeRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class MbaOrMscDegreeRule extends BaseProgrammeRule {
5
5
  forSearch(dependencies: ISearchDependencies): Promise<boolean>;
6
6
  forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
7
7
  getName(): string;
@@ -1,6 +1,7 @@
1
1
  import { FilterKey } from '@studyportals/search-filters';
2
2
  import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
- export class MbaOrMscDegreeRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class MbaOrMscDegreeRule extends BaseProgrammeRule {
4
5
  forSearch(dependencies) {
5
6
  const { seoInfoBase, filterState } = dependencies;
6
7
  const selectedDegree = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
@@ -1,7 +1,7 @@
1
- import { IRule } from '../../common/IRule';
2
1
  import { IProgrammeSearchDependencies } from '../types/IProgrammeSearchDependencies';
3
2
  import { PortalType } from '@studyportals/domain-client';
4
- export declare class NotDistanceLearningPortalRule implements IRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class NotDistanceLearningPortalRule extends BaseProgrammeRule {
5
5
  private readonly portalType;
6
6
  constructor(portalType?: PortalType);
7
7
  forSearch(dependencies: IProgrammeSearchDependencies): Promise<boolean>;
@@ -1,8 +1,10 @@
1
1
  import { PortalType } from '@studyportals/domain-client';
2
2
  import { DependencyMissingError } from '../../errors/DependencyMissingError';
3
- export class NotDistanceLearningPortalRule {
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class NotDistanceLearningPortalRule extends BaseProgrammeRule {
4
5
  portalType;
5
6
  constructor(portalType) {
7
+ super();
6
8
  this.portalType = portalType;
7
9
  }
8
10
  forSearch(dependencies) {