Compare commits

...

7 Commits

Author SHA1 Message Date
Rainer Killinger
522be6643a 0.55.0 2021-12-15 13:15:10 +01:00
Rainer Killinger
8784309ddb refactor: update dependencies 2021-12-15 13:03:57 +01:00
Rainer Killinger
3d8f996690 refactor: make offer price property optional 2021-11-30 12:27:40 +01:00
Rainer Killinger
36a4bfcbbc docs: update changelog 2021-11-17 11:38:00 +01:00
Rainer Killinger
db347bf324 0.54.0 2021-11-17 11:37:56 +01:00
Rainer Killinger
7a2e0f20d1 feat: add SCAssessment 2021-11-16 10:56:28 +01:00
Jovan Krunić
b2d18da82a docs: update changelog 2021-10-19 16:09:46 +02:00
17 changed files with 1886 additions and 1649 deletions

View File

@@ -1,3 +1,16 @@
# [0.54.0](https://gitlab.com/openstapps/core/compare/v0.53.0...v0.54.0) (2021-11-17)
### Features
* add SCAssessment ([7a2e0f2](https://gitlab.com/openstapps/core/commit/7a2e0f20d1c64ab1deb7ab30bfb4bab4daaabd6d))
# [0.53.0](https://gitlab.com/openstapps/core/compare/v0.52.0...v0.53.0) (2021-10-19)
# [0.52.0](https://gitlab.com/openstapps/core/compare/v0.51.0...v0.52.0) (2021-09-28) # [0.52.0](https://gitlab.com/openstapps/core/compare/v0.51.0...v0.52.0) (2021-09-28)

2913
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@openstapps/core", "name": "@openstapps/core",
"version": "0.53.0", "version": "0.55.0",
"description": "StAppsCore - Generalized model of data", "description": "StAppsCore - Generalized model of data",
"keywords": [ "keywords": [
"Model", "Model",
@@ -45,37 +45,37 @@
"Wieland Schöbl" "Wieland Schöbl"
], ],
"dependencies": { "dependencies": {
"@openstapps/core-tools": "0.25.0", "@openstapps/core-tools": "0.27.0",
"@types/geojson": "1.0.6", "@types/geojson": "1.0.6",
"@types/json-patch": "0.0.30", "@types/json-patch": "0.0.30",
"@types/json-schema": "7.0.9", "@types/json-schema": "7.0.9",
"@types/node": "14.17.9", "@types/node": "14.18.0",
"fast-clone": "1.5.13", "fast-clone": "1.5.13",
"fast-deep-equal": "3.1.3", "fast-deep-equal": "3.1.3",
"http-status-codes": "2.1.4", "http-status-codes": "2.1.4",
"json-patch": "0.7.0", "json-patch": "0.7.0",
"json-schema": "0.3.0", "json-schema": "0.4.0",
"ts-optchain": "0.1.8" "ts-optchain": "0.1.8"
}, },
"devDependencies": { "devDependencies": {
"@openstapps/configuration": "0.27.0", "@openstapps/configuration": "0.29.0",
"@openstapps/es-mapping-generator": "0.0.3", "@openstapps/es-mapping-generator": "0.0.3",
"@openstapps/logger": "0.7.0", "@openstapps/logger": "0.8.0",
"@testdeck/mocha": "0.1.2", "@testdeck/mocha": "0.2.0",
"@types/lodash": "4.14.172", "@types/chai": "4.3.0",
"@types/chai": "4.2.21", "@types/lodash": "4.14.178",
"@types/rimraf": "3.0.1", "@types/mocha": "9.0.0",
"@types/mocha": "8.2.3", "@types/rimraf": "3.0.2",
"chai": "4.3.4", "chai": "4.3.4",
"conditional-type-checks": "1.0.5", "conditional-type-checks": "1.0.5",
"conventional-changelog-cli": "2.1.1", "conventional-changelog-cli": "2.1.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"mocha": "8.4.0", "mocha": "9.1.3",
"nyc": "15.1.0", "nyc": "15.1.0",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"source-map-support": "0.5.19", "source-map-support": "0.5.21",
"surge": "0.23.0", "surge": "0.23.0",
"ts-node": "9.1.1", "ts-node": "10.4.0",
"tslint": "6.1.3", "tslint": "6.1.3",
"typedoc": "0.21.6", "typedoc": "0.21.6",
"typescript": "4.3.5" "typescript": "4.3.5"

View File

@@ -16,7 +16,7 @@
/** /**
* An ISO8601 date * An ISO8601 date
* *
* @pattern ^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$ * @pattern ^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])(T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])([\.,][0-9]{0,7})?(Z|[+-](?:2[0-3]|[01][0-9])(:?[0-5][0-9])?)?)?$
* @see https://gist.github.com/philipashlock/8830168 * @see https://gist.github.com/philipashlock/8830168
* *
* @date * @date
@@ -37,6 +37,6 @@ export type SCISO8601Duration = string;
/** /**
* An ISO8601 time * An ISO8601 time
* *
* @pattern \d{2}:\d{2}(:\d{2})? * @pattern ^(2[0-3]|[01][0-9]):?([0-5][0-9]):?([0-5][0-9])$
*/ */
export type SCISO8601Time = string; export type SCISO8601Time = string;

View File

@@ -15,11 +15,12 @@
import {SCThingType} from './things/abstract/thing'; import {SCThingType} from './things/abstract/thing';
import {SCAcademicEvent, SCAcademicEventMeta, SCAcademicEventWithoutReferences} from './things/academic-event'; import {SCAcademicEvent, SCAcademicEventMeta, SCAcademicEventWithoutReferences} from './things/academic-event';
import {SCArticle, SCArticleMeta, SCArticleWithoutReferences} from './things/article'; import {SCArticle, SCArticleMeta, SCArticleWithoutReferences} from './things/article';
import {SCAssessment, SCAssessmentMeta, SCAssessmentWithoutReferences} from './things/assessment';
import {SCBook, SCBookMeta, SCBookWithoutReferences} from './things/book'; import {SCBook, SCBookMeta, SCBookWithoutReferences} from './things/book';
import {SCBuilding, SCBuildingMeta, SCBuildingWithoutReferences} from './things/building'; import {SCBuilding, SCBuildingMeta, SCBuildingWithoutReferences} from './things/building';
import {SCCatalog, SCCatalogMeta, SCCatalogWithoutReferences} from './things/catalog'; import {SCCatalog, SCCatalogMeta, SCCatalogWithoutReferences} from './things/catalog';
import {SCContactPoint, SCContactPointMeta, SCContactPointWithoutReferences} from './things/contact-point'; import {SCContactPoint, SCContactPointMeta, SCContactPointWithoutReferences} from './things/contact-point';
import {SCCourseOfStudies, SCCourseOfStudiesMeta, SCCourseOfStudiesWithoutReferences} from './things/course-of-studies'; import {SCCourseOfStudy, SCCourseOfStudyMeta, SCCourseOfStudyWithoutReferences} from './things/course-of-study';
import {SCDateSeries, SCDateSeriesMeta, SCDateSeriesWithoutReferences} from './things/date-series'; import {SCDateSeries, SCDateSeriesMeta, SCDateSeriesWithoutReferences} from './things/date-series';
import {SCDiff, SCDiffMeta, SCDiffWithoutReferences} from './things/diff'; import {SCDiff, SCDiffMeta, SCDiffWithoutReferences} from './things/diff';
import {SCDish, SCDishMeta, SCDishWithoutReferences} from './things/dish'; import {SCDish, SCDishMeta, SCDishWithoutReferences} from './things/dish';
@@ -51,13 +52,14 @@ import {SCVideo, SCVideoMeta, SCVideoWithoutReferences} from './things/video';
*/ */
export const SCClasses: { [K in SCThingType]: object } = { export const SCClasses: { [K in SCThingType]: object } = {
/* tslint:enable */ /* tslint:enable */
'assessment': SCAssessmentMeta,
'academic event': SCAcademicEventMeta, 'academic event': SCAcademicEventMeta,
'article': SCArticleMeta, 'article': SCArticleMeta,
'book': SCBookMeta, 'book': SCBookMeta,
'building': SCBuildingMeta, 'building': SCBuildingMeta,
'catalog': SCCatalogMeta, 'catalog': SCCatalogMeta,
'contact point': SCContactPointMeta, 'contact point': SCContactPointMeta,
'course of studies': SCCourseOfStudiesMeta, 'course of study': SCCourseOfStudyMeta,
'date series': SCDateSeriesMeta, 'date series': SCDateSeriesMeta,
'diff': SCDiffMeta, 'diff': SCDiffMeta,
'dish': SCDishMeta, 'dish': SCDishMeta,
@@ -81,13 +83,14 @@ export const SCClasses: { [K in SCThingType]: object } = {
}; };
export type SCIndexableThings = export type SCIndexableThings =
SCAcademicEvent SCAssessment
| SCAcademicEvent
| SCArticle | SCArticle
| SCBook | SCBook
| SCBuilding | SCBuilding
| SCCatalog | SCCatalog
| SCContactPoint | SCContactPoint
| SCCourseOfStudies | SCCourseOfStudy
| SCDateSeries | SCDateSeries
| SCDish | SCDish
| SCFloor | SCFloor
@@ -122,64 +125,66 @@ export type SCThingsField = keyof SCThings | string;
* Thing without references for a thing * Thing without references for a thing
*/ */
export type SCAssociatedThingWithoutReferences<THING extends SCThings> = export type SCAssociatedThingWithoutReferences<THING extends SCThings> =
THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences : THING extends SCAssessment ? SCAssessmentWithoutReferences :
THING extends SCArticle ? SCArticleWithoutReferences : THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences :
THING extends SCBook ? SCBookWithoutReferences : THING extends SCArticle ? SCArticleWithoutReferences :
THING extends SCBuilding ? SCBuildingWithoutReferences : THING extends SCBook ? SCBookWithoutReferences :
THING extends SCCatalog ? SCCatalogWithoutReferences : THING extends SCBuilding ? SCBuildingWithoutReferences :
THING extends SCContactPoint ? SCContactPointWithoutReferences : THING extends SCCatalog ? SCCatalogWithoutReferences :
THING extends SCCourseOfStudies ? SCCourseOfStudiesWithoutReferences : THING extends SCContactPoint ? SCContactPointWithoutReferences :
THING extends SCDateSeries ? SCDateSeriesWithoutReferences : THING extends SCCourseOfStudy ? SCCourseOfStudyWithoutReferences :
THING extends SCDiff ? SCDiffWithoutReferences : THING extends SCDateSeries ? SCDateSeriesWithoutReferences :
THING extends SCDish ? SCDishWithoutReferences : THING extends SCDiff ? SCDiffWithoutReferences :
THING extends SCFavorite ? SCFavoriteWithoutReferences : THING extends SCDish ? SCDishWithoutReferences :
THING extends SCFloor ? SCFloorWithoutReferences : THING extends SCFavorite ? SCFavoriteWithoutReferences :
THING extends SCMessage ? SCMessageWithoutReferences : THING extends SCFloor ? SCFloorWithoutReferences :
THING extends SCOrganization ? SCOrganizationWithoutReferences : THING extends SCMessage ? SCMessageWithoutReferences :
THING extends SCPeriodical ? SCPeriodicalWithoutReferences : THING extends SCOrganization ? SCOrganizationWithoutReferences :
THING extends SCPerson ? SCPersonWithoutReferences : THING extends SCPeriodical ? SCPeriodicalWithoutReferences :
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences : THING extends SCPerson ? SCPersonWithoutReferences :
THING extends SCPublicationEvent ? SCPublicationEventWithoutReferences : THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
THING extends SCRoom ? SCRoomWithoutReferences : THING extends SCPublicationEvent ? SCPublicationEventWithoutReferences :
THING extends SCSemester ? SCSemesterWithoutReferences : THING extends SCRoom ? SCRoomWithoutReferences :
THING extends SCSetting ? SCSettingWithoutReferences : THING extends SCSemester ? SCSemesterWithoutReferences :
THING extends SCSportCourse ? SCSportCourseWithoutReferences : THING extends SCSetting ? SCSettingWithoutReferences :
THING extends SCStudyModule ? SCStudyModuleWithoutReferences : THING extends SCSportCourse ? SCSportCourseWithoutReferences :
THING extends SCTicket ? SCTicketWithoutReferences : THING extends SCStudyModule ? SCStudyModuleWithoutReferences :
THING extends SCToDo ? SCToDoWithoutReferences : THING extends SCTicket ? SCTicketWithoutReferences :
THING extends SCTour ? SCTourWithoutReferences : THING extends SCToDo ? SCToDoWithoutReferences :
THING extends SCVideo ? SCVideoWithoutReferences : THING extends SCTour ? SCTourWithoutReferences :
never; THING extends SCVideo ? SCVideoWithoutReferences :
never;
/** /**
* Thing for a thing without references * Thing for a thing without references
*/ */
export type SCAssociatedThing<THING extends SCThings> = export type SCAssociatedThing<THING extends SCThings> =
THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent : THING extends SCAssessmentWithoutReferences ? SCAssessment :
THING extends SCArticleWithoutReferences ? SCArticle : THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent :
THING extends SCBookWithoutReferences ? SCBook : THING extends SCArticleWithoutReferences ? SCArticle :
THING extends SCBuildingWithoutReferences ? SCBuilding : THING extends SCBookWithoutReferences ? SCBook :
THING extends SCCatalogWithoutReferences ? SCCatalog : THING extends SCBuildingWithoutReferences ? SCBuilding :
THING extends SCContactPointWithoutReferences ? SCContactPoint : THING extends SCCatalogWithoutReferences ? SCCatalog :
THING extends SCCourseOfStudiesWithoutReferences ? SCCourseOfStudies : THING extends SCContactPointWithoutReferences ? SCContactPoint :
THING extends SCDateSeriesWithoutReferences ? SCDateSeries : THING extends SCCourseOfStudyWithoutReferences ? SCCourseOfStudy :
THING extends SCDiffWithoutReferences ? SCDiff : THING extends SCDateSeriesWithoutReferences ? SCDateSeries :
THING extends SCDishWithoutReferences ? SCDish : THING extends SCDiffWithoutReferences ? SCDiff :
THING extends SCFavoriteWithoutReferences ? SCFavorite : THING extends SCDishWithoutReferences ? SCDish :
THING extends SCFloorWithoutReferences ? SCFloor : THING extends SCFavoriteWithoutReferences ? SCFavorite :
THING extends SCMessageWithoutReferences ? SCMessage : THING extends SCFloorWithoutReferences ? SCFloor :
THING extends SCOrganizationWithoutReferences ? SCOrganization : THING extends SCMessageWithoutReferences ? SCMessage :
THING extends SCPeriodicalWithoutReferences ? SCPeriodical : THING extends SCOrganizationWithoutReferences ? SCOrganization :
THING extends SCPersonWithoutReferences ? SCPerson : THING extends SCPeriodicalWithoutReferences ? SCPeriodical :
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest : THING extends SCPersonWithoutReferences ? SCPerson :
THING extends SCPublicationEventWithoutReferences ? SCPublicationEvent : THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
THING extends SCRoomWithoutReferences ? SCRoom : THING extends SCPublicationEventWithoutReferences ? SCPublicationEvent :
THING extends SCSemesterWithoutReferences ? SCSemester : THING extends SCRoomWithoutReferences ? SCRoom :
THING extends SCSettingWithoutReferences ? SCSetting : THING extends SCSemesterWithoutReferences ? SCSemester :
THING extends SCSportCourseWithoutReferences ? SCSportCourse : THING extends SCSettingWithoutReferences ? SCSetting :
THING extends SCStudyModuleWithoutReferences ? SCStudyModule : THING extends SCSportCourseWithoutReferences ? SCSportCourse :
THING extends SCTicketWithoutReferences ? SCTicket : THING extends SCStudyModuleWithoutReferences ? SCStudyModule :
THING extends SCToDoWithoutReferences ? SCToDo : THING extends SCTicketWithoutReferences ? SCTicket :
THING extends SCTourWithoutReferences ? SCTour : THING extends SCToDoWithoutReferences ? SCToDo :
THING extends SCVideoWithoutReferences ? SCVideo : THING extends SCTourWithoutReferences ? SCTour :
never; THING extends SCVideoWithoutReferences ? SCVideo :
never;

View File

@@ -22,26 +22,25 @@ export interface SCAcademicDegreeWithoutReferences
extends SCThingWithoutReferences { extends SCThingWithoutReferences {
/** /**
* The achievable academic degree * The achievable academic degree
*
* @filterable
* @sortable ducet
*/ */
academicDegree: SCGermanAcademicDegree; academicDegree: string;
/** /**
* The achievable academic degree with academic field specification * The achievable academic degree with academic field specification
* (eg. Master of Science) * (eg. Master of Science)
* *
* @filterable
* @keyword
*/ */
academicDegreewithField: string; academicDegreewithField?: string;
/** /**
* The achievable academic degree with academic field specification * The achievable academic degree with academic field specification
* shorted (eg. M.Sc.). * shorted (eg. M.Sc.).
* *
* @filterable
* @keyword
*/ */
academicDegreewithFieldShort: string; academicDegreewithFieldShort?: string;
} }
/** /**
@@ -63,9 +62,9 @@ export class SCAcademicDegreeMeta
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de,
academicDegree: 'Hochschulgrad', academicDegree: 'Abschlussgrad',
academicDegreewithField: 'Abschlussbezeichnungen', academicDegreewithField: 'Abschlussbezeichnung',
academicDegreewithFieldShort: 'Abschlussbezeichnungen (kurz)', academicDegreewithFieldShort: 'Abschlussbezeichnung (kurz)',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en,
@@ -81,32 +80,9 @@ export class SCAcademicDegreeMeta
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de,
academicDegree: {
'bachelor': 'Bachelor',
'diploma': 'Diplom',
'doctor': 'Doktor',
'licentiate': 'Lizenziat',
'magister': 'Magister',
'master': 'Master',
'masterstudent': 'Meisterschüler',
'state examination': 'Staatsexamen',
},
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en,
}, },
}; };
} }
/**
* Types of (german) academic degrees
*/
export type SCGermanAcademicDegree =
'bachelor'
| 'diploma'
| 'doctor'
| 'licentiate'
| 'magister'
| 'master'
| 'master pupil'
| 'state examination' ;

View File

@@ -107,7 +107,7 @@ export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup>
/** /**
* List of prices that are distinct for specific groups * List of prices that are distinct for specific groups
*/ */
prices: T; prices?: T;
/** /**
* Provider of an offer * Provider of an offer

View File

@@ -23,6 +23,7 @@ import {SCPersonWithoutReferences} from '../person';
* Types a thing can be * Types a thing can be
*/ */
export enum SCThingType { export enum SCThingType {
Assessment = 'assessment',
AcademicEvent = 'academic event', AcademicEvent = 'academic event',
Article = 'article', Article = 'article',
Book = 'book', Book = 'book',
@@ -30,7 +31,7 @@ export enum SCThingType {
Building = 'building', Building = 'building',
Catalog = 'catalog', Catalog = 'catalog',
ContactPoint = 'contact point', ContactPoint = 'contact point',
CourseOfStudies = 'course of studies', CourseOfStudy = 'course of study',
DateSeries = 'date series', DateSeries = 'date series',
Diff = 'diff', Diff = 'diff',
Dish = 'dish', Dish = 'dish',

162
src/things/assessment.ts Normal file
View File

@@ -0,0 +1,162 @@
/*
* Copyright (C) 2019-2021 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCMetaTranslations, SCTranslations} from '../general/i18n';
import {SCISO8601Date} from '../general/time';
import {SCThing, SCThingMeta, SCThingType} from './abstract/thing';
import {SCThingWithCategories, SCThingWithCategoriesSpecificValues, SCThingWithCategoriesTranslatableProperties, SCThingWithCategoriesWithoutReferences, SCThingWithCategoriesWithoutReferencesMeta} from './abstract/thing-with-categories';
import {SCCourseOfStudyWithoutReferences} from './course-of-study';
/**
* Categories of assessments
*/
export type SCAssessmentCategories = 'university assessment';
/**
* An assessment without references
*
*/
export interface SCAssessmentWithoutReferences
extends SCThingWithCategoriesWithoutReferences<SCAssessmentCategories, SCThingWithCategoriesSpecificValues> {
/**
* Number of attempts
*
* @integer
*/
attempt?: number;
/**
* Date assessment was taken or graded
*/
date?: SCISO8601Date;
/**
* ECTS (credit-points)
*
* @float
*/
ects?: number;
/**
* Grade
*/
grade: string;
/**
* Current status
*/
status?: string;
/**
* Translated fields of an assessment
*/
translations?: SCTranslations<SCAssessmentTranslatableProperties>;
/**
* Type of an assessment
*/
type: SCThingType.Assessment;
}
/**
* An assessment
*
* @validatable
*/
export interface SCAssessment
extends SCAssessmentWithoutReferences, SCThing,
SCThingWithCategories<SCAssessmentCategories, SCThingWithCategoriesSpecificValues> {
/**
* Course of study the assessment was taken for
*/
courseOfStudy?: SCCourseOfStudyWithoutReferences;
/**
* An array of assessments from the 'level 0' (root) assessment to the direct parent
*/
superAssessments?: SCAssessmentWithoutReferences[];
/**
* Translated fields of an assessment
*/
translations?: SCTranslations<SCAssessmentTranslatableProperties>;
/**
* Type of an assessment
*/
type: SCThingType.Assessment;
}
export interface SCAssessmentTranslatableProperties
extends SCThingWithCategoriesTranslatableProperties {
/**
* @see SCAssessmentWithoutReferences.status
*/
status?: string;
}
/**
* Study module meta data
*/
export class SCAssessmentMeta
extends SCThingMeta
implements SCMetaTranslations<SCAssessment> {
/**
* Translations of fields
*/
fieldTranslations = {
de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAssessmentCategories,
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
attempt: 'Versuch',
courseOfStudy: 'Studiengang',
date: 'Datum',
ects: 'ECTS-Punkte',
grade: 'Note',
status: 'Status',
superAssessments: 'übergeordnete Prüfungen',
},
en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAssessmentCategories,
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
attempt: 'attempt',
courseOfStudy: 'course of study',
date: 'date',
ects: 'ECTS points',
grade: 'grade',
status: 'status',
superAssessments: 'parent assessments',
},
};
/**
* Translations of values of fields
*/
fieldValueTranslations = {
de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAssessmentCategories,
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de,
type: 'Prüfung',
},
en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAssessmentCategories,
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en,
type: SCThingType.Assessment,
},
};
}

View File

@@ -26,94 +26,90 @@ import {SCDateSeriesWithoutReferences} from './date-series';
import {SCOrganizationWithoutReferences} from './organization'; import {SCOrganizationWithoutReferences} from './organization';
/** /**
* A course of studies without references * A course of study without references
*/ */
export interface SCCourseOfStudiesWithoutReferences export interface SCCourseOfStudyWithoutReferences
extends SCAcademicDegreeWithoutReferences, SCThingThatCanBeOfferedWithoutReferences { extends SCAcademicDegreeWithoutReferences, SCThingThatCanBeOfferedWithoutReferences {
/** /**
* The main language in which the course of studies * The main language in which the course of study
* is beeing offered * is beeing offered
*/ */
mainLanguage: SCLanguage; mainLanguage?: SCLanguage;
/** /**
* Actual major of the course of studies (eg. physics) * The modes the course of study is offered in
* *
* @filterable * @filterable
* @keyword
*/ */
major: string; mode?: SCCourseOfStudyMode;
/** /**
* The modes the course of studies is offered in * The time modes the course of study is offered in
*
* @filterable
*/ */
mode: SCCourseOfStudiesMode; timeMode?: SCCourseOfStudyTimeMode;
/**
* The time modes the course of studies is offered in
*/
timeMode: SCCourseOfStudiesTimeMode;
/** /**
* Translated fields of a dish * Translated fields of a dish
*/ */
translations?: SCTranslations<SCCourseOfStudiesTranslatableProperties>; translations?: SCTranslations<SCCourseOfStudyTranslatableProperties>;
/** /**
* Type of the course of studies * Type of the course of study
*/ */
type: SCThingType.CourseOfStudies; type: SCThingType.CourseOfStudy;
} }
/** /**
* A course of studies * A course of study
* *
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCCourseOfStudies export interface SCCourseOfStudy
extends SCCourseOfStudiesWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup>, SCAcademicDegree { extends SCCourseOfStudyWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup>, SCAcademicDegree {
/** /**
* The department that manages the course of studies * The department that manages the course of study
*/ */
department: SCOrganizationWithoutReferences; department?: SCOrganizationWithoutReferences;
/** /**
* The secretary that administers requests and * The secretary that administers requests and
* questions concerning the course of studies * questions concerning the course of study
*/ */
secretary: SCOrganizationWithoutReferences; secretary?: SCOrganizationWithoutReferences;
/** /**
* Dates at which the course of studies is planned to start * Dates at which the course of study is planned to start
*/ */
startDates?: SCDateSeriesWithoutReferences[]; startDates?: SCDateSeriesWithoutReferences[];
/** /**
* Translated fields of a course of studies * Translated fields of a course of study
*/ */
translations?: SCTranslations<SCCourseOfStudiesTranslatableProperties>; translations?: SCTranslations<SCCourseOfStudyTranslatableProperties>;
/** /**
* Type of the course of studies * Type of the course of study
*/ */
type: SCThingType.CourseOfStudies; type: SCThingType.CourseOfStudy;
} }
/** /**
* Translatable properties of a course of studies * Translatable properties of a course of study
*/ */
export interface SCCourseOfStudiesTranslatableProperties export interface SCCourseOfStudyTranslatableProperties
extends SCThingThatCanBeOfferedTranslatableProperties { extends SCThingThatCanBeOfferedTranslatableProperties {
// noop // noop
} }
/** /**
* Meta information about a course of studies * Meta information about a course of study
*/ */
export class SCCourseOfStudiesMeta export class SCCourseOfStudyMeta
extends SCThingMeta extends SCThingMeta
implements SCMetaTranslations<SCCourseOfStudies> { implements SCMetaTranslations<SCCourseOfStudy> {
/** /**
* Translations of fields * Translations of fields
*/ */
@@ -125,7 +121,6 @@ export class SCCourseOfStudiesMeta
.fieldTranslations.de, .fieldTranslations.de,
department: 'Fachbereich', department: 'Fachbereich',
mainLanguage: 'Unterrichtssprache', mainLanguage: 'Unterrichtssprache',
major: 'Studienfach',
mode: 'Studiengangsart', mode: 'Studiengangsart',
secretary: 'Sekretariat', secretary: 'Sekretariat',
startDates: 'Startdatum', startDates: 'Startdatum',
@@ -138,7 +133,6 @@ export class SCCourseOfStudiesMeta
.fieldTranslations.de, .fieldTranslations.de,
department: 'department', department: 'department',
mainLanguage: 'main language', mainLanguage: 'main language',
major: 'major',
mode: 'mode', mode: 'mode',
secretary: 'secretary', secretary: 'secretary',
startDates: 'start dates', startDates: 'start dates',
@@ -167,30 +161,30 @@ export class SCCourseOfStudiesMeta
en: { en: {
...SCAcademicDegreeMeta.getInstance().fieldValueTranslations.en, ...SCAcademicDegreeMeta.getInstance().fieldValueTranslations.en,
modes: { modes: {
combination: 'combination course of studies', combination: 'combination course of study',
'double-degree': 'double degree course of studies', 'double-degree': 'double degree course of study',
dual: 'dual course of studies', dual: 'dual course of study',
standard: 'course of studies', standard: 'course of study',
}, },
timeMode: { timeMode: {
fulltime: 'full-time', fulltime: 'full-time',
parttime: 'part-time', parttime: 'part-time',
}, },
type: SCThingType.CourseOfStudies, type: SCThingType.CourseOfStudy,
}, },
}; };
} }
/** /**
* Types of (german) course of studies modes * Types of (german) course of study modes
*/ */
export type SCCourseOfStudiesMode = 'combination' export type SCCourseOfStudyMode = 'combination'
| 'dual' | 'dual'
| 'double-degree' | 'double-degree'
| 'standard' ; | 'standard' ;
/** /**
* Types of (german) course of studies time modes * Types of (german) course of study time modes
*/ */
export type SCCourseOfStudiesTimeMode = 'fulltime' export type SCCourseOfStudyTimeMode = 'fulltime'
| 'parttime' ; | 'parttime' ;

View File

@@ -281,7 +281,7 @@ export class SCThingTranslator {
* Given a SCThingType this function returns an object with the same basic structure as the corresponding SCThing * Given a SCThingType this function returns an object with the same basic structure as the corresponding SCThing
* All the values will be set to the known translations of the property/key name * All the values will be set to the known translations of the property/key name
* @example * @example
* const translatedMetaDish = translator.translatedPropertyNames<SCCourseOfStudies>(SCThingType.CourseOfStudies); * const translatedMetaDish = translator.translatedPropertyNames<SCCourseOfStudy>(SCThingType.CourseOfStudy);
* @param type The type whose property names will be translated * @param type The type whose property names will be translated
* @returns An object with the properties of the SCThingType where the values are the known property tranlations * @returns An object with the properties of the SCThingType where the values are the known property tranlations
*/ */

View File

@@ -0,0 +1,36 @@
{
"errorNames": [],
"instance": {
"attempt": 1,
"date": "2020-04-01",
"ects": 20,
"grade": "N/A",
"status": "ongoing",
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf404",
"name": "Introductory courses extreme math",
"categories": [
"university assessment"
],
"courseOfStudy": {
"academicDegree": "bachelor",
"academicDegreewithField": "Bachelor of Arts",
"academicDegreewithFieldShort": "B.A.",
"mainLanguage": {
"code": "de",
"name": "german"
},
"mode": "dual",
"name": "Astroturfing",
"timeMode": "parttime",
"type": "course of study",
"uid": "4c6f0a18-343d-5175-9fb1-62d28545c2aa"
},
"origin": {
"indexed": "2020-04-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
"type": "assessment"
},
"schema": "SCAssessment"
}

View File

@@ -0,0 +1,51 @@
{
"errorNames": [],
"instance": {
"attempt": 1,
"date": "2020-04-01",
"ects": 6,
"grade": "very much 1.0",
"status": "passed",
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf303",
"name": "Mathe 9001",
"categories": [
"university assessment"
],
"superAssessments": [
{
"attempt": 1,
"date": "2020-04-01",
"ects": 20,
"grade": "N/A",
"status": "ongoing",
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf404",
"name": "Introductory courses extreme math",
"categories": [
"university assessment"
],
"type": "assessment"
}
],
"courseOfStudy": {
"academicDegree": "bachelor",
"academicDegreewithField": "Bachelor of Arts",
"academicDegreewithFieldShort": "B.A.",
"mainLanguage": {
"code": "de",
"name": "german"
},
"mode": "dual",
"name": "Astroturfing",
"timeMode": "parttime",
"type": "course of study",
"uid": "4c6f0a18-343d-5175-9fb1-62d28545c2aa"
},
"origin": {
"indexed": "2020-04-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
"type": "assessment"
},
"schema": "SCAssessment"
}

View File

@@ -13,9 +13,8 @@
"code": "de", "code": "de",
"name": "german" "name": "german"
}, },
"major": "Astroturfing",
"mode": "dual", "mode": "dual",
"name": "Astroturfing Bachelor", "name": "Astroturfing",
"origin": { "origin": {
"indexed": "2018-09-11T12:30:00Z", "indexed": "2018-09-11T12:30:00Z",
"name": "Dummy", "name": "Dummy",
@@ -27,8 +26,8 @@
"uid": "b0f878fd-8fda-53b8-b065-a8d854c3d0d2" "uid": "b0f878fd-8fda-53b8-b065-a8d854c3d0d2"
}, },
"timeMode": "parttime", "timeMode": "parttime",
"type": "course of studies", "type": "course of study",
"uid": "4c6f0a18-343d-5175-9fb1-62d28545c2aa" "uid": "4c6f0a18-343d-5175-9fb1-62d28545c2aa"
}, },
"schema": "SCCourseOfStudies" "schema": "SCCourseOfStudy"
} }

View File

@@ -12,6 +12,9 @@
"audiences": [ "audiences": [
"students" "students"
], ],
"categories": [
"news"
],
"audienceOrganizations": [{ "audienceOrganizations": [{
"name": "TU Berlin", "name": "TU Berlin",
"type": "organization", "type": "organization",

View File

@@ -0,0 +1,28 @@
{
"errorNames": [
"required"
],
"instance": {
"type": "message",
"invalid-non-existing-key-in-schema": 1,
"uid": "4706ef24-b631-5c20-91d1-3c627decca5a",
"image": "https://backend/res/img/message_small.png",
"name": "Lösung für das Problem des Zurücksetzens der StApps-App gefunden",
"messageBody": "Wie bereits berichtet, klagten User über das Löschen ihres Stundenplans beim Update von Version 0.8.0 auf 0.8.1. Wir haben eine Lösung für das Problem gefunden und testen diese ausführlich bis zum Ende dieser Woche. Wenn alles glatt verläuft, dann kommt am Wochenende die fehlerbereinige Version 0.8.2 heraus.\n\n*(25.Okt 2016)*",
"audiences": [
"students"
],
"audienceOrganizations": [{
"name": "TU Berlin",
"type": "organization",
"uid": "4806ef14-b631-5c20-91d1-3c627decca5a"
}],
"sequenceIndex": 1005,
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
}
},
"schema": "SCMessage"
}

View File

@@ -16,11 +16,12 @@ import {assert, Has, IsAny, IsNever, NotHas} from 'conditional-type-checks';
import {SCThing, SCThingWithoutReferences} from '../src/things/abstract/thing'; import {SCThing, SCThingWithoutReferences} from '../src/things/abstract/thing';
import {SCAcademicEvent, SCAcademicEventWithoutReferences} from '../src/things/academic-event'; import {SCAcademicEvent, SCAcademicEventWithoutReferences} from '../src/things/academic-event';
import {SCArticle, SCArticleWithoutReferences} from '../src/things/article'; import {SCArticle, SCArticleWithoutReferences} from '../src/things/article';
import {SCAssessment, SCAssessmentWithoutReferences} from '../src/things/assessment';
import {SCBook, SCBookWithoutReferences} from '../src/things/book'; import {SCBook, SCBookWithoutReferences} from '../src/things/book';
import {SCBuilding, SCBuildingWithoutReferences} from '../src/things/building'; import {SCBuilding, SCBuildingWithoutReferences} from '../src/things/building';
import {SCCatalog, SCCatalogWithoutReferences} from '../src/things/catalog'; import {SCCatalog, SCCatalogWithoutReferences} from '../src/things/catalog';
import {SCContactPoint, SCContactPointWithoutReferences} from '../src/things/contact-point'; import {SCContactPoint, SCContactPointWithoutReferences} from '../src/things/contact-point';
import {SCCourseOfStudies, SCCourseOfStudiesWithoutReferences} from '../src/things/course-of-studies'; import {SCCourseOfStudy, SCCourseOfStudyWithoutReferences} from '../src/things/course-of-study';
import {SCDateSeries, SCDateSeriesWithoutReferences} from '../src/things/date-series'; import {SCDateSeries, SCDateSeriesWithoutReferences} from '../src/things/date-series';
import {SCDiff, SCDiffWithoutReferences} from '../src/things/diff'; import {SCDiff, SCDiffWithoutReferences} from '../src/things/diff';
import {SCDish, SCDishWithoutReferences} from '../src/things/dish'; import {SCDish, SCDishWithoutReferences} from '../src/things/dish';
@@ -107,6 +108,17 @@ assert<Has<SCArticlePropertyTypes, SCThing>>(false);
assert<Extends<SCArticleWithoutReferences, SCThing>>(false); assert<Extends<SCArticleWithoutReferences, SCThing>>(false);
assert<Extends<SCArticle, SCThing>>(true); assert<Extends<SCArticle, SCThing>>(true);
/**
* Types of properties of SCAssessment
*/
type SCAssessmentPropertyTypes = PropertyTypesNested<SCAssessment>;
assert<NotHas<SCAssessmentPropertyTypes, SCThingWithoutReferences>>(false);
assert<Has<SCAssessmentPropertyTypes, SCThingWithoutReferences>>(true);
assert<NotHas<SCAssessmentPropertyTypes, SCThing>>(true);
assert<Has<SCAssessmentPropertyTypes, SCThing>>(false);
assert<Extends<SCAssessmentWithoutReferences, SCThing>>(false);
assert<Extends<SCAssessment, SCThing>>(true);
/** /**
* Types of properties of SCBook * Types of properties of SCBook
*/ */
@@ -152,15 +164,15 @@ assert<Extends<SCCatalogWithoutReferences, SCThing>>(false);
assert<Extends<SCCatalog, SCThing>>(true); assert<Extends<SCCatalog, SCThing>>(true);
/** /**
* Types of properties of SCCourseOfStudies * Types of properties of SCCourseOfStudy
*/ */
type SCCourseOfStudiesPropertyTypes = PropertyTypesNested<SCCourseOfStudies>; type SCCourseOfStudyPropertyTypes = PropertyTypesNested<SCCourseOfStudy>;
assert<NotHas<SCCourseOfStudiesPropertyTypes, SCThingWithoutReferences>>(false); assert<NotHas<SCCourseOfStudyPropertyTypes, SCThingWithoutReferences>>(false);
assert<Has<SCCourseOfStudiesPropertyTypes, SCThingWithoutReferences>>(true); assert<Has<SCCourseOfStudyPropertyTypes, SCThingWithoutReferences>>(true);
assert<NotHas<SCCourseOfStudiesPropertyTypes, SCThing>>(true); assert<NotHas<SCCourseOfStudyPropertyTypes, SCThing>>(true);
assert<Has<SCCourseOfStudiesPropertyTypes, SCThing>>(false); assert<Has<SCCourseOfStudyPropertyTypes, SCThing>>(false);
assert<Extends<SCCourseOfStudiesWithoutReferences, SCThing>>(false); assert<Extends<SCCourseOfStudyWithoutReferences, SCThing>>(false);
assert<Extends<SCCourseOfStudies, SCThing>>(true); assert<Extends<SCCourseOfStudy, SCThing>>(true);
/** /**
* Types of properties of SCDateSeries * Types of properties of SCDateSeries