mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2025-12-25 15:46:17 +00:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49ea2c59ab | ||
|
|
869fa831ea | ||
|
|
21eeecd5ee | ||
|
|
2dfb64bafd | ||
|
|
4ab8770fbc | ||
|
|
2cf1027796 | ||
|
|
3aed37ecb4 | ||
|
|
ddb26b8207 | ||
|
|
805c1f0937 | ||
|
|
5377d026f3 | ||
|
|
148fd77f4d | ||
|
|
4036bfd193 | ||
|
|
f4f372b9ad | ||
|
|
872c1f5fc3 | ||
|
|
4f2ca30dab | ||
|
|
882483ee24 | ||
|
|
c998166938 | ||
|
|
d61e33de39 | ||
|
|
07d6c4770a | ||
|
|
aab3e9fa6c | ||
|
|
4a4cd4e6d4 | ||
|
|
942cd11469 | ||
|
|
fe090c7387 | ||
|
|
f0782d8820 | ||
|
|
a2461d5904 | ||
|
|
d2e0069dc2 | ||
|
|
9c6972af78 | ||
|
|
56b03aa0b9 | ||
|
|
b517837671 | ||
|
|
6f03ede8bf | ||
|
|
952207ace1 |
@@ -5,6 +5,7 @@ before_script:
|
||||
|
||||
stages:
|
||||
- build
|
||||
- review
|
||||
- test
|
||||
- audit
|
||||
- deploy
|
||||
@@ -21,6 +22,46 @@ build:
|
||||
- lib
|
||||
expire_in: 1 week
|
||||
|
||||
build-ts-3.8.3:
|
||||
tags:
|
||||
- performance
|
||||
stage: build
|
||||
script:
|
||||
- npm uninstall typescript
|
||||
- npm install typescript@3.8.3
|
||||
- npm run build
|
||||
|
||||
docs_review:
|
||||
dependencies:
|
||||
- build
|
||||
stage: review
|
||||
script:
|
||||
- npm run documentation
|
||||
- ./node_modules/.bin/surge -p ./docs -d https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/
|
||||
when: manual
|
||||
environment:
|
||||
name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME
|
||||
url: https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/
|
||||
on_stop: stop_review
|
||||
except:
|
||||
- master
|
||||
- develop
|
||||
tags:
|
||||
- secrecy
|
||||
|
||||
stop_review:
|
||||
stage: review
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
script:
|
||||
- ./node_modules/.bin/surge teardown $CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh
|
||||
when: manual
|
||||
environment:
|
||||
name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME
|
||||
action: stop
|
||||
tags:
|
||||
- secrecy
|
||||
|
||||
audit:
|
||||
stage: audit
|
||||
script:
|
||||
@@ -47,6 +88,21 @@ test:
|
||||
- report
|
||||
- coverage
|
||||
|
||||
mapping:
|
||||
tags:
|
||||
- performance
|
||||
dependencies:
|
||||
- build
|
||||
stage: test
|
||||
services:
|
||||
- name: registry.gitlab.com/openstapps/database:master
|
||||
alias: elasticsearch
|
||||
script:
|
||||
- npm run mappings-integration
|
||||
artifacts:
|
||||
paths:
|
||||
- lib
|
||||
|
||||
package:
|
||||
dependencies:
|
||||
- build
|
||||
|
||||
50
CHANGELOG.md
50
CHANGELOG.md
@@ -1,3 +1,53 @@
|
||||
# [0.48.0](https://gitlab.com/openstapps/core/compare/v0.47.0...v0.48.0) (2021-07-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* correct parameter name of thing update route ([872c1f5](https://gitlab.com/openstapps/core/commit/872c1f5fc3884b6df6f5025287873d98b27dd6b1))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* support geo shape queries ([882483e](https://gitlab.com/openstapps/core/commit/882483ee2490938014904bc26687bd1648992ae6))
|
||||
|
||||
|
||||
|
||||
# [0.47.0](https://gitlab.com/openstapps/core/compare/v0.46.0...v0.47.0) (2021-06-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* set date-series frequency non translatable ([4a4cd4e](https://gitlab.com/openstapps/core/commit/4a4cd4e6d4b01ac34b5338dfcf4aeb959f54461d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* make SCDateSeries.frequency compliant with schema.org ([942cd11](https://gitlab.com/openstapps/core/commit/942cd1146966aa9e60321160489a6605877925e9))
|
||||
|
||||
|
||||
|
||||
# [0.46.0](https://gitlab.com/openstapps/core/compare/v0.45.0...v0.46.0) (2021-05-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* change range offer to use date range ([9c6972a](https://gitlab.com/openstapps/core/commit/9c6972af787678567409877b6bc9f9417e1374e2))
|
||||
|
||||
|
||||
|
||||
# [0.45.0](https://gitlab.com/openstapps/core/compare/v0.44.0...v0.45.0) (2021-04-26)
|
||||
|
||||
|
||||
|
||||
# [0.44.0](https://gitlab.com/openstapps/core/compare/v0.43.0...v0.44.0) (2021-04-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add support for multiple values in the value filter ([913c569](https://gitlab.com/openstapps/core/commit/913c5691da46ad2591fe14bcf7286f12b29ab5ee))
|
||||
|
||||
|
||||
|
||||
# [0.43.0](https://gitlab.com/openstapps/core/compare/v0.42.0...v0.43.0) (2021-04-07)
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ External dependencies can not be covered by the annotations. Documentation about
|
||||
| `@sortable` | field is sortable if the core schema is used to put data into a database/key-value store. Fields are always sortable through generic sort, even without annotation. | sort method to be used: `ducet`, `price`, `distance` |
|
||||
| `@text` | string field is interpreted as text | |
|
||||
| `@date` | string field is interpreted as a date field | |
|
||||
| `@validatable` | marks the type as validatable if the core schema is used to put data into a database/key-value store | |
|
||||
| `@validatable` | Marks the type for json schema generation, which can be checked at runtime. Any top-level type that is put into a database should always be marked as validatable. | |
|
||||
| `@filterable` | non-object/nested field is filterable if the core schema is used to put data into a database/key-value store | |
|
||||
| `@inheritTags` | inherit all tags from another field | `[SCThingType]::[field]` |
|
||||
|
||||
|
||||
1814
package-lock.json
generated
1814
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
26
package.json
26
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openstapps/core",
|
||||
"version": "0.44.0",
|
||||
"version": "0.49.0",
|
||||
"description": "StAppsCore - Generalized model of data",
|
||||
"keywords": [
|
||||
"Model",
|
||||
@@ -14,7 +14,7 @@
|
||||
"main": "./lib/index.js",
|
||||
"types": "./lib/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "npm run tslint && npm run compile && npm run pack && npm run schema",
|
||||
"build": "npm run tslint && npm run compile && npm run pack && npm run schema && npm run mappings",
|
||||
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && git commit -m 'docs: update changelog'",
|
||||
"check-configuration": "openstapps-configuration",
|
||||
"compile": "rimraf lib && tsc",
|
||||
@@ -25,6 +25,8 @@
|
||||
"preversion": "npm run prepublishOnly",
|
||||
"push": "git push && git push origin \"v$npm_package_version\"",
|
||||
"schema": "node --max-old-space-size=8192 --stack-size=10240 ./node_modules/.bin/openstapps-core-tools schema src lib/schema",
|
||||
"mappings": "mkdir lib/mappings && openstapps-es-mapping-generator mapping ../core/src -i minlength,pattern,see,tjs-format -m lib/mappings/mappings.json -a lib/mappings/aggregations.json",
|
||||
"mappings-integration": "openstapps-es-mapping-generator put-es-templates lib/mappings/mappings.json http://elasticsearch:9200/",
|
||||
"test": "nyc mocha --require ts-node/register --recursive 'test/*.spec.ts'",
|
||||
"tslint": "tslint -p tsconfig.json -c tslint.json 'src/**/*.ts'"
|
||||
},
|
||||
@@ -43,11 +45,11 @@
|
||||
"Wieland Schöbl"
|
||||
],
|
||||
"dependencies": {
|
||||
"@openstapps/core-tools": "0.19.0",
|
||||
"@openstapps/core-tools": "0.23.2",
|
||||
"@types/geojson": "1.0.6",
|
||||
"@types/json-patch": "0.0.30",
|
||||
"@types/json-schema": "7.0.7",
|
||||
"@types/node": "14.14.37",
|
||||
"@types/json-schema": "7.0.9",
|
||||
"@types/node": "14.17.9",
|
||||
"fast-clone": "1.5.13",
|
||||
"fast-deep-equal": "3.1.3",
|
||||
"http-status-codes": "2.1.4",
|
||||
@@ -57,21 +59,23 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@openstapps/configuration": "0.27.0",
|
||||
"@openstapps/logger": "0.6.0",
|
||||
"@openstapps/es-mapping-generator": "0.0.3",
|
||||
"@openstapps/logger": "0.7.0",
|
||||
"@testdeck/mocha": "0.1.2",
|
||||
"@types/chai": "4.2.16",
|
||||
"@types/rimraf": "3.0.0",
|
||||
"@types/chai": "4.2.21",
|
||||
"@types/rimraf": "3.0.1",
|
||||
"chai": "4.3.4",
|
||||
"conditional-type-checks": "1.0.5",
|
||||
"conventional-changelog-cli": "2.1.1",
|
||||
"mocha": "8.3.2",
|
||||
"mocha": "8.4.0",
|
||||
"nyc": "15.1.0",
|
||||
"rimraf": "3.0.2",
|
||||
"source-map-support": "0.5.19",
|
||||
"surge": "0.23.0",
|
||||
"ts-node": "9.1.1",
|
||||
"tslint": "6.1.3",
|
||||
"typedoc": "0.18.0",
|
||||
"typescript": "3.8.3"
|
||||
"typedoc": "0.21.5",
|
||||
"typescript": "4.3.5"
|
||||
},
|
||||
"nyc": {
|
||||
"all": true,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -15,7 +15,7 @@
|
||||
// tslint:disable-next-line:no-implicit-dependencies
|
||||
import {Polygon} from 'geojson';
|
||||
import {SCTranslations} from '../general/i18n';
|
||||
import {SCSetting} from '../things/setting';
|
||||
import {SCLanguageSetting, SCSetting, SCUserGroupSetting} from '../things/setting';
|
||||
|
||||
/**
|
||||
* An app configuration menu item
|
||||
@@ -112,8 +112,9 @@ export interface SCAppConfiguration {
|
||||
|
||||
/**
|
||||
* A list of available settings in the app
|
||||
* !Important! Use provided specific settings, for other settings use general SCSetting
|
||||
*/
|
||||
settings: SCSetting[];
|
||||
settings: Array<SCUserGroupSetting | SCLanguageSetting | SCSetting>;
|
||||
|
||||
/**
|
||||
* Map of store URLs
|
||||
|
||||
72
src/meta.ts
72
src/meta.ts
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -27,8 +27,14 @@ import {SCFavorite, SCFavoriteMeta, SCFavoriteWithoutReferences} from './things/
|
||||
import {SCFloor, SCFloorMeta, SCFloorWithoutReferences} from './things/floor';
|
||||
import {SCMessage, SCMessageMeta, SCMessageWithoutReferences} from './things/message';
|
||||
import {SCOrganization, SCOrganizationMeta, SCOrganizationWithoutReferences} from './things/organization';
|
||||
import {SCPeriodical, SCPeriodicalMeta, SCPeriodicalWithoutReferences} from './things/periodical';
|
||||
import {SCPerson, SCPersonMeta, SCPersonWithoutReferences} from './things/person';
|
||||
import {SCPointOfInterest, SCPointOfInterestMeta, SCPointOfInterestWithoutReferences} from './things/point-of-interest';
|
||||
import {
|
||||
SCPublicationEvent,
|
||||
SCPublicationEventMeta,
|
||||
SCPublicationEventWithoutReferences,
|
||||
} from './things/publication-event';
|
||||
import {SCRoom, SCRoomMeta, SCRoomWithoutReferences} from './things/room';
|
||||
import {SCSemester, SCSemesterMeta, SCSemesterWithoutReferences} from './things/semester';
|
||||
import {SCSetting, SCSettingMeta, SCSettingWithoutReferences} from './things/setting';
|
||||
@@ -59,8 +65,10 @@ export const SCClasses: { [K in SCThingType]: object } = {
|
||||
'floor': SCFloorMeta,
|
||||
'message': SCMessageMeta,
|
||||
'organization': SCOrganizationMeta,
|
||||
'periodical': SCPeriodicalMeta,
|
||||
'person': SCPersonMeta,
|
||||
'point of interest': SCPointOfInterestMeta,
|
||||
'publication event': SCPublicationEventMeta,
|
||||
'room': SCRoomMeta,
|
||||
'semester': SCSemesterMeta,
|
||||
'setting': SCSettingMeta,
|
||||
@@ -72,7 +80,7 @@ export const SCClasses: { [K in SCThingType]: object } = {
|
||||
'video': SCVideoMeta,
|
||||
};
|
||||
|
||||
export type SCThingsWithoutDiff =
|
||||
export type SCIndexableThings =
|
||||
SCAcademicEvent
|
||||
| SCArticle
|
||||
| SCBook
|
||||
@@ -82,15 +90,15 @@ export type SCThingsWithoutDiff =
|
||||
| SCCourseOfStudies
|
||||
| SCDateSeries
|
||||
| SCDish
|
||||
| SCFavorite
|
||||
| SCFloor
|
||||
| SCMessage
|
||||
| SCOrganization
|
||||
| SCPeriodical
|
||||
| SCPerson
|
||||
| SCPointOfInterest
|
||||
| SCPublicationEvent
|
||||
| SCRoom
|
||||
| SCSemester
|
||||
| SCSetting
|
||||
| SCSportCourse
|
||||
| SCStudyModule
|
||||
| SCTicket
|
||||
@@ -102,8 +110,8 @@ export type SCThingsWithoutDiff =
|
||||
* An object that exists in the StAppsCore
|
||||
*/
|
||||
export type SCThings =
|
||||
SCThingsWithoutDiff
|
||||
| SCDiff;
|
||||
SCIndexableThings
|
||||
| SCDiff | SCFavorite | SCSetting;
|
||||
|
||||
/**
|
||||
* A field of a thing
|
||||
@@ -128,18 +136,20 @@ export type SCAssociatedThingWithoutReferences<THING extends SCThings> =
|
||||
THING extends SCFloor ? SCFloorWithoutReferences :
|
||||
THING extends SCMessage ? SCMessageWithoutReferences :
|
||||
THING extends SCOrganization ? SCOrganizationWithoutReferences :
|
||||
THING extends SCPerson ? SCPersonWithoutReferences :
|
||||
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
|
||||
THING extends SCRoom ? SCRoomWithoutReferences :
|
||||
THING extends SCSemester ? SCSemesterWithoutReferences :
|
||||
THING extends SCSetting ? SCSettingWithoutReferences :
|
||||
THING extends SCSportCourse ? SCSportCourseWithoutReferences :
|
||||
THING extends SCStudyModule ? SCStudyModuleWithoutReferences :
|
||||
THING extends SCTicket ? SCTicketWithoutReferences :
|
||||
THING extends SCToDo ? SCToDoWithoutReferences :
|
||||
THING extends SCTour ? SCTourWithoutReferences :
|
||||
THING extends SCVideo ? SCVideoWithoutReferences :
|
||||
never;
|
||||
THING extends SCPeriodical ? SCPeriodicalWithoutReferences :
|
||||
THING extends SCPerson ? SCPersonWithoutReferences :
|
||||
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
|
||||
THING extends SCPublicationEvent ? SCPublicationEventWithoutReferences :
|
||||
THING extends SCRoom ? SCRoomWithoutReferences :
|
||||
THING extends SCSemester ? SCSemesterWithoutReferences :
|
||||
THING extends SCSetting ? SCSettingWithoutReferences :
|
||||
THING extends SCSportCourse ? SCSportCourseWithoutReferences :
|
||||
THING extends SCStudyModule ? SCStudyModuleWithoutReferences :
|
||||
THING extends SCTicket ? SCTicketWithoutReferences :
|
||||
THING extends SCToDo ? SCToDoWithoutReferences :
|
||||
THING extends SCTour ? SCTourWithoutReferences :
|
||||
THING extends SCVideo ? SCVideoWithoutReferences :
|
||||
never;
|
||||
|
||||
/**
|
||||
* Thing for a thing without references
|
||||
@@ -159,15 +169,17 @@ export type SCAssociatedThing<THING extends SCThings> =
|
||||
THING extends SCFloorWithoutReferences ? SCFloor :
|
||||
THING extends SCMessageWithoutReferences ? SCMessage :
|
||||
THING extends SCOrganizationWithoutReferences ? SCOrganization :
|
||||
THING extends SCPersonWithoutReferences ? SCPerson :
|
||||
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
|
||||
THING extends SCRoomWithoutReferences ? SCRoom :
|
||||
THING extends SCSemesterWithoutReferences ? SCSemester :
|
||||
THING extends SCSettingWithoutReferences ? SCSetting :
|
||||
THING extends SCSportCourseWithoutReferences ? SCSportCourse :
|
||||
THING extends SCStudyModuleWithoutReferences ? SCStudyModule :
|
||||
THING extends SCTicketWithoutReferences ? SCTicket :
|
||||
THING extends SCToDoWithoutReferences ? SCToDo :
|
||||
THING extends SCTourWithoutReferences ? SCTour :
|
||||
THING extends SCVideoWithoutReferences ? SCVideo :
|
||||
never;
|
||||
THING extends SCPeriodicalWithoutReferences ? SCPeriodical :
|
||||
THING extends SCPersonWithoutReferences ? SCPerson :
|
||||
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
|
||||
THING extends SCPublicationEventWithoutReferences ? SCPublicationEvent :
|
||||
THING extends SCRoomWithoutReferences ? SCRoom :
|
||||
THING extends SCSemesterWithoutReferences ? SCSemester :
|
||||
THING extends SCSettingWithoutReferences ? SCSetting :
|
||||
THING extends SCSportCourseWithoutReferences ? SCSportCourse :
|
||||
THING extends SCStudyModuleWithoutReferences ? SCStudyModule :
|
||||
THING extends SCTicketWithoutReferences ? SCTicket :
|
||||
THING extends SCToDoWithoutReferences ? SCToDo :
|
||||
THING extends SCTourWithoutReferences ? SCTour :
|
||||
THING extends SCVideoWithoutReferences ? SCVideo :
|
||||
never;
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned, when an internal server error occurred
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCInternalServerErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned, when the used HTTP method is not allowed on the requested route
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCMethodNotAllowedErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned when the requested route or resource was not found
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCNotFoundErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,8 @@ import {SCError} from '../error';
|
||||
/**
|
||||
* An error that is returned when the request is in the right format, but contains parameters that are invalid or not
|
||||
* acceptable.
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCParametersNotAcceptable extends SCError {
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,8 @@ import {SCPluginMetaData} from '../routes/plugin-register';
|
||||
* An error that is returned when a plugin with the same name is already registered, to prevent two copies of a plugin
|
||||
* running at the same time.
|
||||
* This usually indicates that there is more than one instance a plugin running.
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCPluginAlreadyRegisteredErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned whenever there is an unexpected error while creating a plugin
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCPluginRegisteringFailedErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned, when the request body is too large.
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCRequestBodyTooLargeErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned whenever there is a syntax error
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCSyntaxErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned, when to many request are submitted at once
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCTooManyRequestsErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned when the content type of the request is not supported
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCUnsupportedMediaTypeErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,8 @@ import {SCError} from '../error';
|
||||
|
||||
/**
|
||||
* An error that is returned when the validation of a request fails
|
||||
*
|
||||
* @validatable
|
||||
*/
|
||||
export class SCValidationErrorResponse extends SCError {
|
||||
/**
|
||||
|
||||
@@ -55,7 +55,7 @@ export class SCThingUpdateRoute extends SCAbstractRoute {
|
||||
];
|
||||
this.method = SCRouteHttpVerbs.PUT;
|
||||
this.obligatoryParameters = {
|
||||
TYPE: 'SCThingTypes',
|
||||
TYPE: 'SCThingType',
|
||||
UID: 'SCUuid',
|
||||
};
|
||||
this.requestBodyName = 'SCThingUpdateRequest';
|
||||
|
||||
@@ -19,6 +19,7 @@ import {SCMap} from '../../general/map';
|
||||
import {SCSearchAvailabilityFilter} from './filters/availability';
|
||||
import {SCSearchBooleanFilter} from './filters/boolean';
|
||||
import {SCSearchDistanceFilter} from './filters/distance';
|
||||
import {SCGeoFilter} from './filters/geo';
|
||||
import {SCSearchDateRangeFilter, SCSearchNumericRangeFilter} from './filters/range';
|
||||
import {SCSearchValueFilter} from './filters/value';
|
||||
|
||||
@@ -31,7 +32,8 @@ export type SCSearchFilterType =
|
||||
| 'distance'
|
||||
| 'value'
|
||||
| 'date range'
|
||||
| 'numeric range';
|
||||
| 'numeric range'
|
||||
| 'geo';
|
||||
|
||||
/**
|
||||
* Structure of a filter instruction
|
||||
@@ -62,4 +64,5 @@ export type SCSearchFilter =
|
||||
| SCSearchDistanceFilter
|
||||
| SCSearchValueFilter
|
||||
| SCSearchNumericRangeFilter
|
||||
| SCSearchDateRangeFilter;
|
||||
| SCSearchDateRangeFilter
|
||||
| SCGeoFilter;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -33,17 +33,17 @@ export interface SCSearchAvailabilityFilter extends SCSearchAbstractFilter<SCAva
|
||||
*/
|
||||
export interface SCAvailabilityFilterArguments extends SCSearchAbstractFilterArguments {
|
||||
/**
|
||||
* Field which marks the start of the availability
|
||||
* Field which marks availability range
|
||||
*/
|
||||
fromField: SCThingsField;
|
||||
field: SCThingsField;
|
||||
|
||||
/**
|
||||
* Time to check. Defaults to 'now'
|
||||
* If set, the provided time will apply to the full hour, day, week, etc.
|
||||
*/
|
||||
time?: SCISO8601Date | 'now';
|
||||
scope?: 's' | 'm' | 'H' | 'd' | 'w' | 'M' | 'y';
|
||||
|
||||
/**
|
||||
* Field which marks the end of the availability
|
||||
* Time to check. Defaults current time if not set
|
||||
*/
|
||||
toField: SCThingsField;
|
||||
time?: SCISO8601Date;
|
||||
}
|
||||
|
||||
55
src/protocol/search/filters/geo.ts
Normal file
55
src/protocol/search/filters/geo.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 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/>.
|
||||
*/
|
||||
// tslint:disable-next-line:no-implicit-dependencies
|
||||
import {Polygon} from 'geojson';
|
||||
import {SCThingsField} from '../../../meta';
|
||||
import {SCSearchAbstractFilter, SCSearchAbstractFilterArguments} from '../filter';
|
||||
|
||||
/**
|
||||
* A geo filter
|
||||
*
|
||||
* Filter for documents that are in relation to some geo data
|
||||
*/
|
||||
export interface SCGeoFilter extends SCSearchAbstractFilter<SCGeoFilterArguments> {
|
||||
/**
|
||||
* @see SCSearchAbstractFilter.type
|
||||
*/
|
||||
type: 'geo';
|
||||
}
|
||||
|
||||
/**
|
||||
* Arguments for filter instruction by geo data
|
||||
*/
|
||||
export interface SCGeoFilterArguments extends SCSearchAbstractFilterArguments {
|
||||
/**
|
||||
* Field on which to filter
|
||||
*/
|
||||
field: SCThingsField;
|
||||
|
||||
/**
|
||||
* Geo data to check up on
|
||||
*/
|
||||
shape: Polygon;
|
||||
|
||||
/**
|
||||
* Spatial relation between the provided shape and the shape of the field.
|
||||
*
|
||||
* intersects - both shapes intersect (default)
|
||||
* disjoint - both shapes don't intersect
|
||||
* within - the search shape contains the field shape
|
||||
* contains - the search shape is contained in the field shape
|
||||
*/
|
||||
spatialRelation?: 'intersects' | 'disjoint' | 'within' | 'contains';
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 StApps
|
||||
* Copyright (C) 2020-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.
|
||||
@@ -85,6 +85,15 @@ export interface SCRangeFilterArguments<T> extends SCSearchAbstractFilterArgumen
|
||||
* Field where the filter will be applied
|
||||
*/
|
||||
field: SCThingsField;
|
||||
|
||||
/**
|
||||
* Relation when searching on other range fields
|
||||
*
|
||||
* Intersects (Default): Both search and field range intersect
|
||||
* Within: Search range is within the field range
|
||||
* Contains: Search range contains the field range
|
||||
*/
|
||||
relation?: 'intersects' | 'within' | 'contains';
|
||||
}
|
||||
|
||||
export interface Bounds<T> {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -16,11 +16,11 @@ import {SCLanguageCode, SCMetaTranslations, SCTranslations} from '../../general/
|
||||
import {SCISO8601Date} from '../../general/time';
|
||||
import {SCOrganizationWithoutReferences} from '../organization';
|
||||
import {SCPersonWithoutReferences} from '../person';
|
||||
import {SCPublicationEventWithoutReferences} from '../publication-event';
|
||||
import {SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
||||
import {
|
||||
SCAcademicPriceGroup,
|
||||
SCThingThatCanBeOffered,
|
||||
SCThingThatCanBeOfferedMeta,
|
||||
SCThingThatCanBeOffered, SCThingThatCanBeOfferedMeta,
|
||||
SCThingThatCanBeOfferedTranslatableProperties,
|
||||
SCThingThatCanBeOfferedWithoutReferences,
|
||||
} from './thing-that-can-be-offered';
|
||||
@@ -38,11 +38,23 @@ export interface SCCreativeWorkWithoutReferences
|
||||
|
||||
/**
|
||||
* Date the creative work was published
|
||||
*
|
||||
* @filterable
|
||||
*/
|
||||
datePublished?: SCISO8601Date;
|
||||
|
||||
/**
|
||||
* Edition of a creative work (e.g. the book edition or edition of an article)
|
||||
*
|
||||
* @keyword
|
||||
*/
|
||||
edition?: string;
|
||||
|
||||
/**
|
||||
* Date (in text form) the creative work was published for the first time
|
||||
*
|
||||
* @keyword
|
||||
*/
|
||||
firstPublished?: string;
|
||||
|
||||
/**
|
||||
* Languages this creative work is written/recorded/... in
|
||||
*
|
||||
@@ -75,11 +87,26 @@ export interface SCCreativeWork
|
||||
*/
|
||||
authors?: SCPersonWithoutReferences[];
|
||||
|
||||
/**
|
||||
* A creative work to which the creative work belongs
|
||||
*/
|
||||
isPartOf?: SCCreativeWorkWithoutReferences;
|
||||
|
||||
/**
|
||||
* List of events at which the creative work was published
|
||||
*/
|
||||
publications?: SCPublicationEventWithoutReferences[];
|
||||
|
||||
/**
|
||||
* List of publishers of the creative work
|
||||
*/
|
||||
publishers?: Array<SCPersonWithoutReferences | SCOrganizationWithoutReferences>;
|
||||
|
||||
/**
|
||||
* A text representing on organization on whose behalf the creator was working
|
||||
*/
|
||||
sourceOrganization?: string;
|
||||
|
||||
/**
|
||||
* Translated fields of the creative work
|
||||
*/
|
||||
@@ -111,22 +138,36 @@ export class SCCreativeWorkMeta
|
||||
de: {
|
||||
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de,
|
||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.de,
|
||||
authors: 'Autoren',
|
||||
name: 'Titel',
|
||||
authors: 'beteiligte Personen',
|
||||
availableLanguages: 'verfügbare Übersetzungen',
|
||||
datePublished: 'Veröffentlichungsdatum',
|
||||
edition: 'Ausgabe',
|
||||
firstPublished: 'erste Veröffentlichung',
|
||||
inLanguage: 'Inhaltssprache',
|
||||
isPartOf: 'erschienen in',
|
||||
keywords: 'Schlagwörter',
|
||||
lastPublished: 'aktuellste Veröffentlichung',
|
||||
publishers: 'Verleger',
|
||||
publications: 'Veröffentlichungen',
|
||||
sourceOrganization: 'Körperschaft',
|
||||
},
|
||||
en: {
|
||||
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en,
|
||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.en,
|
||||
authors: 'authors',
|
||||
name: 'title',
|
||||
authors: 'involved persons',
|
||||
availableLanguages: 'available languages',
|
||||
datePublished: 'release date',
|
||||
edition: 'edition',
|
||||
firstPublished: 'first published',
|
||||
inLanguage: 'content language',
|
||||
isPartOf: 'published in',
|
||||
keywords: 'keywords',
|
||||
lastPublished: 'last published',
|
||||
publishers: 'publishers',
|
||||
publications: 'publications',
|
||||
sourceOrganization: 'corporation',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -136,7 +177,7 @@ export class SCCreativeWorkMeta
|
||||
fieldValueTranslations = {
|
||||
de: {
|
||||
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de,
|
||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.en,
|
||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.de,
|
||||
},
|
||||
en: {
|
||||
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en,
|
||||
|
||||
64
src/things/abstract/range.ts
Normal file
64
src/things/abstract/range.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 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 {SCISO8601Date} from '../../general/time';
|
||||
|
||||
/**
|
||||
* Date Range
|
||||
*
|
||||
* CAUTION: Changing the name requires changes in the core-tools premaps
|
||||
*/
|
||||
export type SCISO8601DateRange = SCRange<SCISO8601Date>;
|
||||
|
||||
/**
|
||||
* Generic range type
|
||||
*/
|
||||
export type SCRange<T> = {
|
||||
/**
|
||||
* Greater than value
|
||||
*/
|
||||
gt?: never;
|
||||
|
||||
/**
|
||||
* Greater or equal to value
|
||||
*/
|
||||
gte?: T;
|
||||
|
||||
/**
|
||||
* Greater than value
|
||||
*/
|
||||
lt?: never;
|
||||
|
||||
/**
|
||||
* Greater or equal to value
|
||||
*/
|
||||
lte?: T;
|
||||
} | {
|
||||
// tslint:disable:completed-docs
|
||||
gt?: T;
|
||||
gte?: never;
|
||||
lt?: T;
|
||||
lte?: never;
|
||||
} | {
|
||||
gt?: T;
|
||||
gte?: never;
|
||||
lt?: never;
|
||||
lte?: T;
|
||||
} | {
|
||||
gt?: never;
|
||||
gte?: T;
|
||||
lt?: T;
|
||||
lte?: never;
|
||||
// tslint:enable:completed-docs
|
||||
};
|
||||
@@ -12,6 +12,7 @@
|
||||
* 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 {SCIndexableThings} from '../../meta';
|
||||
import {SCThing, SCThingUserOrigin, SCThingWithoutReferences} from './thing';
|
||||
|
||||
/**
|
||||
@@ -19,18 +20,17 @@ import {SCThing, SCThingUserOrigin, SCThingWithoutReferences} from './thing';
|
||||
*/
|
||||
export interface SCSaveableThingWithoutReferences
|
||||
extends SCThingWithoutReferences {
|
||||
// noop
|
||||
}
|
||||
|
||||
/**
|
||||
* An encapsulation of the data (e.g. a thing) that is saved, which provides additional information.
|
||||
*/
|
||||
export interface SCSaveableThing<T extends SCThingWithoutReferences>
|
||||
export interface SCSaveableThing
|
||||
extends SCSaveableThingWithoutReferences, SCThing {
|
||||
/**
|
||||
* The contained data
|
||||
*/
|
||||
data: T;
|
||||
data: SCIndexableThings;
|
||||
/**
|
||||
* Type of the origin
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -13,10 +13,10 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
||||
import {SCISO8601Date} from '../../general/time';
|
||||
import {SCOrganizationWithoutReferences} from '../organization';
|
||||
import {SCPersonWithoutReferences} from '../person';
|
||||
import {SCInPlace} from './place';
|
||||
import {SCISO8601DateRange} from './range';
|
||||
import {SCThing, SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
||||
|
||||
/**
|
||||
@@ -100,14 +100,9 @@ export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup>
|
||||
availability: SCThingThatCanBeOfferedAvailability;
|
||||
|
||||
/**
|
||||
* The time when the thing becomes unavailable as an SCISO8601Date formatted string.
|
||||
* The time when the thing is available.
|
||||
*/
|
||||
availabilityEnds?: SCISO8601Date;
|
||||
|
||||
/**
|
||||
* The time when the thing becomes available as an SCISO8601Date formatted string.
|
||||
*/
|
||||
availabilityStarts?: SCISO8601Date;
|
||||
availabilityRange?: SCISO8601DateRange;
|
||||
|
||||
/**
|
||||
* List of prices that are distinct for specific groups
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
||||
import {SCMap} from '../../general/map';
|
||||
import {SCISO8601Date} from '../../general/time';
|
||||
import {SCUuid} from '../../general/uuid';
|
||||
import {SCOrganizationWithoutReferences} from '../organization';
|
||||
@@ -25,6 +26,7 @@ export enum SCThingType {
|
||||
AcademicEvent = 'academic event',
|
||||
Article = 'article',
|
||||
Book = 'book',
|
||||
Periodical = 'periodical',
|
||||
Building = 'building',
|
||||
Catalog = 'catalog',
|
||||
ContactPoint = 'contact point',
|
||||
@@ -38,6 +40,7 @@ export enum SCThingType {
|
||||
Organization = 'organization',
|
||||
Person = 'person',
|
||||
PointOfInterest = 'point of interest',
|
||||
PublicationEvent = 'publication event',
|
||||
Room = 'room',
|
||||
Semester = 'semester',
|
||||
Setting = 'setting',
|
||||
@@ -60,6 +63,7 @@ export interface SCThingWithoutReferences {
|
||||
* @keyword
|
||||
*/
|
||||
alternateNames?: string[];
|
||||
|
||||
/**
|
||||
* Description of the thing
|
||||
*
|
||||
@@ -67,12 +71,21 @@ export interface SCThingWithoutReferences {
|
||||
* @text
|
||||
*/
|
||||
description?: string;
|
||||
|
||||
/**
|
||||
* The identifier property represents any kind of additional identifier for any kind of SCThing
|
||||
*
|
||||
* E.g. GTIN codes, UUIDs, Database IDs etc.
|
||||
*/
|
||||
identifiers?: SCMap<string>;
|
||||
|
||||
/**
|
||||
* URL of an image of the thing
|
||||
*
|
||||
* @keyword
|
||||
*/
|
||||
image?: string;
|
||||
|
||||
/**
|
||||
* Name of the thing
|
||||
*
|
||||
@@ -82,12 +95,21 @@ export interface SCThingWithoutReferences {
|
||||
* @text
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* URL of a reference Web page that unambiguously indicates the item's identity
|
||||
*
|
||||
* E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website.
|
||||
*/
|
||||
sameAs?: string;
|
||||
|
||||
/**
|
||||
* Translations of specific values of the object
|
||||
*
|
||||
* Take precedence over "main" value for selected languages.
|
||||
*/
|
||||
translations?: SCTranslations<SCThingTranslatableProperties>;
|
||||
|
||||
/**
|
||||
* Type of the thing
|
||||
*
|
||||
@@ -96,16 +118,11 @@ export interface SCThingWithoutReferences {
|
||||
* @aggregatable global
|
||||
*/
|
||||
type: SCThingType;
|
||||
|
||||
/**
|
||||
* Universally unique identifier of the thing
|
||||
*/
|
||||
uid: SCUuid;
|
||||
/**
|
||||
* URL of the thing
|
||||
*
|
||||
* @filterable
|
||||
*/
|
||||
url?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -252,7 +269,7 @@ export interface SCThingTranslatablePropertyOrigin {
|
||||
*/
|
||||
export class SCThingMeta implements SCMetaTranslations<SCThing> {
|
||||
/**
|
||||
* Set type definiton for singleton instance
|
||||
* Set type definition for singleton instance
|
||||
*/
|
||||
protected static _instance = new Map<string, unknown>();
|
||||
|
||||
@@ -263,24 +280,26 @@ export class SCThingMeta implements SCMetaTranslations<SCThing> {
|
||||
de: {
|
||||
alternateNames: 'alternative Namen',
|
||||
description: 'Beschreibung',
|
||||
identifiers: 'Alternative Identifikation',
|
||||
image: 'Bild',
|
||||
name: 'Name',
|
||||
origin: 'Ursprung',
|
||||
sameAs: 'ursprünglicher Link',
|
||||
translations: 'Übersetzungen',
|
||||
type: 'Typ',
|
||||
uid: 'Identifikation',
|
||||
url: 'URL',
|
||||
},
|
||||
en: {
|
||||
alternateNames: 'alternate names',
|
||||
description: 'description',
|
||||
identifiers: 'alternative identification',
|
||||
image: 'image',
|
||||
name: 'name',
|
||||
origin: 'origin',
|
||||
sameAs: 'original link',
|
||||
translations: 'translations',
|
||||
type: 'type',
|
||||
uid: 'identification',
|
||||
url: 'URL',
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
21
src/things/abstract/user-groups.ts
Normal file
21
src/things/abstract/user-groups.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 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/>.
|
||||
*/
|
||||
/**
|
||||
* Types of data consumers
|
||||
*/
|
||||
export type SCUserGroup =
|
||||
'students'
|
||||
| 'employees'
|
||||
| 'guests';
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -21,25 +21,37 @@ import {
|
||||
} from './abstract/creative-work';
|
||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {
|
||||
SCThingWithCategories,
|
||||
SCThingWithCategoriesSpecificValues,
|
||||
SCThingWithCategoriesTranslatableProperties,
|
||||
SCThingWithCategoriesWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferencesMeta,
|
||||
} from './abstract/thing-with-categories';
|
||||
import {SCPeriodicalWithoutReferences} from './periodical';
|
||||
|
||||
/**
|
||||
* Categories of an article
|
||||
*/
|
||||
export type SCArticleCategories = 'unipedia'
|
||||
| 'article'
|
||||
| 'eArticle';
|
||||
|
||||
/**
|
||||
* An article without references
|
||||
*/
|
||||
export interface SCArticleWithoutReferences
|
||||
extends SCCreativeWorkWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferences<SCArticleCategories, SCThingWithCategoriesSpecificValues> {
|
||||
SCThingWithCategoriesWithoutReferences<SCArticleCategories, SCThingWithCategoriesSpecificValues> {
|
||||
/**
|
||||
* Article itself as markdown
|
||||
*
|
||||
* @text
|
||||
*/
|
||||
articleBody: string;
|
||||
articleBody?: string;
|
||||
|
||||
/**
|
||||
* Categories of an article
|
||||
*/
|
||||
categories: SCArticleCategories[];
|
||||
|
||||
/**
|
||||
* Translated fields of an article
|
||||
@@ -59,8 +71,16 @@ export interface SCArticleWithoutReferences
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCArticle
|
||||
extends SCCreativeWork, SCArticleWithoutReferences,
|
||||
SCThingWithCategories<SCArticleCategories, SCThingWithCategoriesSpecificValues> {
|
||||
extends SCCreativeWork, SCArticleWithoutReferences {
|
||||
/**
|
||||
* A periodical to which this article belongs
|
||||
*/
|
||||
isPartOf?: SCPeriodicalWithoutReferences;
|
||||
/**
|
||||
* Additional information about how to find the article inside of its "parent" (which is provided in 'isPartOf')
|
||||
* e.g. "40, 2011, S. 2-3"
|
||||
*/
|
||||
reference?: string;
|
||||
/**
|
||||
* Translated fields of an article
|
||||
*/
|
||||
@@ -73,12 +93,7 @@ export interface SCArticle
|
||||
}
|
||||
|
||||
/**
|
||||
* Categories of articles
|
||||
*/
|
||||
export type SCArticleCategories = 'unipedia';
|
||||
|
||||
/**
|
||||
* Translatable properties of creative works
|
||||
* Translatable properties of an article
|
||||
*/
|
||||
export interface SCArticleTranslatableProperties
|
||||
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
||||
@@ -103,14 +118,18 @@ export class SCArticleMeta
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||
categories: 'Format',
|
||||
reference: 'Referenz',
|
||||
articleBody: 'Artikelinhalt',
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||
categories: 'format',
|
||||
reference: 'reference',
|
||||
articleBody: 'article body',
|
||||
},
|
||||
};
|
||||
@@ -122,19 +141,22 @@ export class SCArticleMeta
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de,
|
||||
categories: {
|
||||
'unipedia': 'Unipedia',
|
||||
article: 'Artikel',
|
||||
eArticle: 'E-Aufsatz',
|
||||
unipedia: 'Unipedia',
|
||||
},
|
||||
type: 'Artikel',
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en,
|
||||
type: SCThingType.Article,
|
||||
categories: {
|
||||
article: 'article',
|
||||
eArticle: 'E-Article',
|
||||
unipedia: 'unipedia',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -20,29 +20,52 @@ import {
|
||||
SCCreativeWorkWithoutReferences,
|
||||
} from './abstract/creative-work';
|
||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {SCThingWithCategoriesTranslatableProperties} from './abstract/thing-with-categories';
|
||||
import {SCPersonWithoutReferences} from './person';
|
||||
import {
|
||||
SCThingWithCategoriesSpecificValues,
|
||||
SCThingWithCategoriesTranslatableProperties,
|
||||
SCThingWithCategoriesWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferencesMeta,
|
||||
} from './abstract/thing-with-categories';
|
||||
|
||||
/**
|
||||
* Categories of a book
|
||||
*/
|
||||
export type SCBookCategories = 'audio'
|
||||
| 'book'
|
||||
| 'cd'
|
||||
| 'dvd'
|
||||
| 'ePhoto'
|
||||
| 'ebook'
|
||||
| 'hierarchy'
|
||||
| 'kit'
|
||||
| 'manuscript'
|
||||
| 'map'
|
||||
| 'microfilm'
|
||||
| 'musicalscore'
|
||||
| 'photo'
|
||||
| 'retro'
|
||||
| 'sensorimage'
|
||||
| 'unknown'
|
||||
| 'video';
|
||||
|
||||
/**
|
||||
* A book without references
|
||||
*/
|
||||
export interface SCBookWithoutReferences
|
||||
extends SCCreativeWorkWithoutReferences {
|
||||
extends SCCreativeWorkWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferences<SCBookCategories, SCThingWithCategoriesSpecificValues> {
|
||||
/**
|
||||
* Edition of a book
|
||||
*
|
||||
* @filterable
|
||||
* @keyword
|
||||
* Categories of a book
|
||||
*/
|
||||
bookEdition?: string;
|
||||
categories: SCBookCategories[];
|
||||
|
||||
/**
|
||||
* ISBN of a book
|
||||
* ISBNs of a book
|
||||
*
|
||||
* @filterable
|
||||
* @keyword
|
||||
*/
|
||||
isbn?: string;
|
||||
ISBNs?: string[];
|
||||
|
||||
/**
|
||||
* Number of pages of a book
|
||||
@@ -70,11 +93,6 @@ export interface SCBookWithoutReferences
|
||||
*/
|
||||
export interface SCBook
|
||||
extends SCCreativeWork, SCBookWithoutReferences {
|
||||
/**
|
||||
* Authors of the creative work
|
||||
*/
|
||||
authors: SCPersonWithoutReferences[];
|
||||
|
||||
/**
|
||||
* Translated properties of a book
|
||||
*/
|
||||
@@ -91,12 +109,6 @@ export interface SCBook
|
||||
*/
|
||||
export interface SCBookTranslatableFields
|
||||
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
||||
/**
|
||||
* Translation of an edition of a book
|
||||
*
|
||||
* @keyword
|
||||
*/
|
||||
bookEdition?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,17 +120,19 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
|
||||
*/
|
||||
fieldTranslations = {
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.de,
|
||||
bookEdition: 'Buchausgabe',
|
||||
isbn: 'ISBN',
|
||||
numberOfPages: 'Seitenzahl',
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||
categories: 'Format',
|
||||
ISBNs: 'ISBN',
|
||||
numberOfPages: 'Seitenanzahl',
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.en,
|
||||
bookEdition: 'book edition',
|
||||
isbn: 'ISBN',
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||
categories: 'format',
|
||||
ISBNs: 'ISBN',
|
||||
numberOfPages: 'number of pages',
|
||||
},
|
||||
};
|
||||
@@ -130,12 +144,56 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de,
|
||||
categories: {
|
||||
audio: 'Tonträger',
|
||||
book: 'Buch',
|
||||
cd: 'CD',
|
||||
dvd: 'DVD',
|
||||
ePhoto: 'E-Photo',
|
||||
ebook: 'E-Book',
|
||||
hierarchy: 'mehrteiliges Werk',
|
||||
kit: 'Medienkombination',
|
||||
manuscript: 'Handschrift',
|
||||
map: 'Karte',
|
||||
microfilm: 'Mikrofilm, Mikrofiche',
|
||||
musicalscore: 'Noten',
|
||||
photo: 'Abbildung',
|
||||
physicalobject: 'Objekt',
|
||||
retro: 'Retro (Buch)',
|
||||
sensorimage: 'Blindenschrift',
|
||||
unknown: 'Unbekannt',
|
||||
video: 'Film',
|
||||
},
|
||||
type: 'Buch',
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en,
|
||||
type: SCThingType.Book,
|
||||
categories: {
|
||||
audio: 'audio material',
|
||||
book: 'book',
|
||||
cd: 'CD',
|
||||
dvd: 'DVD',
|
||||
ePhoto: 'E-Photo',
|
||||
ebook: 'E-Book',
|
||||
hierarchy: 'multipart item',
|
||||
kit: 'media combination',
|
||||
manuscript: 'manuscript',
|
||||
map: 'map',
|
||||
microfilm: 'microfilm, microfiche',
|
||||
musicalscore: 'sheet music',
|
||||
photo: 'illustration',
|
||||
physicalobject: 'object',
|
||||
retro: 'retro (book)',
|
||||
sensorimage: 'braille',
|
||||
unknown: 'unknown',
|
||||
video: 'film',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ export interface SCCatalogWithoutReferences
|
||||
*
|
||||
* Needed for keeping order in catalog inheritance array.
|
||||
*
|
||||
* @filterable
|
||||
* @integer
|
||||
*/
|
||||
level: number;
|
||||
|
||||
@@ -65,9 +65,9 @@ export interface SCDateSeriesWithoutReferences
|
||||
/**
|
||||
* Frequency of the date series
|
||||
*
|
||||
* @keyword
|
||||
* @filterable
|
||||
*/
|
||||
frequency: string;
|
||||
repeatFrequency?: SCISO8601Duration;
|
||||
|
||||
/**
|
||||
* Translated properties
|
||||
@@ -131,7 +131,7 @@ export class SCDateSeriesMeta
|
||||
duration: 'Dauer',
|
||||
event: 'Event',
|
||||
exceptions: 'Ausnahmen',
|
||||
frequency: 'Frequenz',
|
||||
repeatFrequency: 'Frequenz',
|
||||
performers: 'Vortragende',
|
||||
},
|
||||
en: {
|
||||
@@ -143,7 +143,7 @@ export class SCDateSeriesMeta
|
||||
duration: 'duration',
|
||||
event: 'event',
|
||||
exceptions: 'exceptions',
|
||||
frequency: 'frequency',
|
||||
repeatFrequency: 'frequency',
|
||||
performers: 'performers',
|
||||
},
|
||||
};
|
||||
@@ -174,8 +174,4 @@ export class SCDateSeriesMeta
|
||||
*/
|
||||
export interface SCDateSeriesTranslatableProperties
|
||||
extends SCThingThatCanBeOfferedTranslatableProperties {
|
||||
/**
|
||||
* @see SCDateSeriesWithoutReferences.frequency
|
||||
*/
|
||||
frequency?: string;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
import * as jsonpatch from 'json-patch';
|
||||
import {SCMetaTranslations} from '../general/i18n';
|
||||
import {SCISO8601Date} from '../general/time';
|
||||
import {SCThingsWithoutDiff} from '../meta';
|
||||
import {SCIndexableThings} from '../meta';
|
||||
import {SCThing, SCThingMeta, SCThingType, SCThingWithoutReferences} from './abstract/thing';
|
||||
|
||||
/**
|
||||
@@ -48,14 +48,13 @@ export interface SCDiffWithoutReferences
|
||||
* A diff
|
||||
*
|
||||
* @validatable
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCDiff
|
||||
extends SCDiffWithoutReferences, SCThing {
|
||||
/**
|
||||
* Original object the diff was generated on
|
||||
*/
|
||||
object: SCThingsWithoutDiff;
|
||||
object: SCIndexableThings;
|
||||
|
||||
/**
|
||||
* Type of a diff
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -14,45 +14,24 @@
|
||||
*/
|
||||
import {SCSaveableThing, SCSaveableThingWithoutReferences} from './abstract/saveable-thing';
|
||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {SCAcademicEventWithoutReferences} from './academic-event';
|
||||
import {SCArticleWithoutReferences} from './article';
|
||||
import {SCBookWithoutReferences} from './book';
|
||||
import {SCBuildingWithoutReferences} from './building';
|
||||
import {SCPersonWithoutReferences} from './person';
|
||||
import {SCPointOfInterestWithoutReferences} from './point-of-interest';
|
||||
import {SCRoomWithoutReferences} from './room';
|
||||
import {SCSportCourseWithoutReferences} from './sport-course';
|
||||
import {SCToDoWithoutReferences} from './todo';
|
||||
|
||||
/**
|
||||
* Types that can be made a favorite (added as a favorite)
|
||||
*/
|
||||
export type SCFavoriteDataTypes = SCAcademicEventWithoutReferences
|
||||
| SCArticleWithoutReferences
|
||||
| SCBookWithoutReferences
|
||||
| SCBuildingWithoutReferences
|
||||
| SCPersonWithoutReferences
|
||||
| SCPointOfInterestWithoutReferences
|
||||
| SCRoomWithoutReferences
|
||||
| SCSportCourseWithoutReferences
|
||||
| SCToDoWithoutReferences;
|
||||
|
||||
/**
|
||||
* A favorite without references
|
||||
*/
|
||||
export interface SCFavoriteWithoutReferences
|
||||
extends SCSaveableThingWithoutReferences {
|
||||
// noop
|
||||
/**
|
||||
* Type of a favorite
|
||||
*/
|
||||
type: SCThingType.Favorite;
|
||||
}
|
||||
|
||||
/**
|
||||
* A favorite
|
||||
*
|
||||
* @validatable
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCFavorite
|
||||
extends SCSaveableThing<SCFavoriteDataTypes>, SCFavoriteWithoutReferences {
|
||||
export interface SCFavorite extends SCSaveableThing {
|
||||
/**
|
||||
* Type of a favorite
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -22,13 +22,24 @@ import {
|
||||
} from './abstract/creative-work';
|
||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {SCThingThatCanBeOfferedTranslatableProperties} from './abstract/thing-that-can-be-offered';
|
||||
import {
|
||||
SCThingWithCategoriesSpecificValues,
|
||||
SCThingWithCategoriesWithoutReferences, SCThingWithCategoriesWithoutReferencesMeta,
|
||||
} from './abstract/thing-with-categories';
|
||||
import {SCUserGroup} from './abstract/user-groups';
|
||||
import {SCOrganizationWithoutReferences} from './organization';
|
||||
|
||||
/**
|
||||
* Categories of a message
|
||||
*/
|
||||
export type SCMessageCategories = 'news';
|
||||
|
||||
/**
|
||||
* A message without references
|
||||
*/
|
||||
export interface SCMessageWithoutReferences
|
||||
extends SCCreativeWorkWithoutReferences {
|
||||
extends SCCreativeWorkWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferences<SCMessageCategories, SCThingWithCategoriesSpecificValues> {
|
||||
/**
|
||||
* Organizational unit for which the message is intended
|
||||
*/
|
||||
@@ -39,7 +50,12 @@ export interface SCMessageWithoutReferences
|
||||
*
|
||||
* @filterable
|
||||
*/
|
||||
audiences: SCMessageAudience[];
|
||||
audiences: SCUserGroup[];
|
||||
|
||||
/**
|
||||
* Categories of a message
|
||||
*/
|
||||
categories: SCMessageCategories[];
|
||||
|
||||
/**
|
||||
* When the message was created
|
||||
@@ -90,14 +106,6 @@ export interface SCMessage
|
||||
type: SCThingType.Message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Audiences for messages
|
||||
*/
|
||||
export type SCMessageAudience =
|
||||
'students'
|
||||
| 'employees'
|
||||
| 'guests';
|
||||
|
||||
/**
|
||||
* Translatable properties of a message
|
||||
*/
|
||||
@@ -124,6 +132,8 @@ export class SCMessageMeta
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCMessageCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||
audienceOrganizations: 'Zielgruppenorganisationen',
|
||||
audiences: 'Zielgruppen',
|
||||
dateCreated: 'Erstellungsdatum',
|
||||
@@ -133,6 +143,8 @@ export class SCMessageMeta
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||
.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCMessageCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||
audienceOrganizations: 'audience organizations',
|
||||
audiences: 'audiences',
|
||||
dateCreated: 'date created',
|
||||
@@ -149,9 +161,12 @@ export class SCMessageMeta
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.de,
|
||||
audiences: {
|
||||
'employees': 'Angestellte',
|
||||
'guests': 'Gäste',
|
||||
'students': 'Studenten',
|
||||
employees: 'Angestellte',
|
||||
guests: 'Gäste',
|
||||
students: 'Studenten',
|
||||
},
|
||||
categories: {
|
||||
news: 'Neuigkeiten',
|
||||
},
|
||||
type: 'Nachricht',
|
||||
},
|
||||
|
||||
137
src/things/periodical.ts
Normal file
137
src/things/periodical.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (C) 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 {
|
||||
SCCreativeWork,
|
||||
SCCreativeWorkMeta,
|
||||
SCCreativeWorkTranslatableProperties,
|
||||
SCCreativeWorkWithoutReferences,
|
||||
} from './abstract/creative-work';
|
||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {
|
||||
SCThingWithCategoriesSpecificValues,
|
||||
SCThingWithCategoriesTranslatableProperties,
|
||||
SCThingWithCategoriesWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferencesMeta,
|
||||
} from './abstract/thing-with-categories';
|
||||
|
||||
/**
|
||||
* Categories of a periodical
|
||||
*/
|
||||
export type SCPeriodicalCategories = 'journal' | 'electronic';
|
||||
|
||||
/**
|
||||
* A periodical without references
|
||||
*/
|
||||
export interface SCPeriodicalWithoutReferences
|
||||
extends SCCreativeWorkWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferences<SCPeriodicalCategories, SCThingWithCategoriesSpecificValues> {
|
||||
/**
|
||||
* Categories of a periodical
|
||||
*/
|
||||
categories: SCPeriodicalCategories[];
|
||||
/**
|
||||
* A list of ISSNs of a periodical
|
||||
*
|
||||
* @filterable
|
||||
* @keyword
|
||||
*/
|
||||
ISSNs?: string[];
|
||||
|
||||
/**
|
||||
* Translated properties of a periodical
|
||||
*/
|
||||
translations?: SCTranslations<SCPeriodicalTranslatableFields>;
|
||||
|
||||
/**
|
||||
* Type of a periodical
|
||||
*/
|
||||
type: SCThingType.Periodical;
|
||||
}
|
||||
|
||||
/**
|
||||
* A publication published at regular intervals (e.g. a magazine or newspaper)
|
||||
*
|
||||
* @validatable
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCPeriodical
|
||||
extends SCCreativeWork, SCPeriodicalWithoutReferences {
|
||||
/**
|
||||
* Translated properties of a periodical
|
||||
*/
|
||||
translations?: SCTranslations<SCPeriodicalTranslatableFields>;
|
||||
|
||||
/**
|
||||
* Type of a periodical
|
||||
*/
|
||||
type: SCThingType.Periodical;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translatable properties of a periodical
|
||||
*/
|
||||
export interface SCPeriodicalTranslatableFields
|
||||
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
||||
}
|
||||
|
||||
/**
|
||||
* Meta information about a periodical
|
||||
*/
|
||||
export class SCPeriodicalMeta extends SCThingMeta implements SCMetaTranslations<SCPeriodical> {
|
||||
/**
|
||||
* Translations of fields
|
||||
*/
|
||||
fieldTranslations = {
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.de,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPeriodicalCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||
categories: 'Format',
|
||||
ISSNs: 'ISSN',
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.en,
|
||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPeriodicalCategories,
|
||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||
categories: 'format',
|
||||
ISSNs: 'ISSN',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Translations of values of fields
|
||||
*/
|
||||
fieldValueTranslations = {
|
||||
de: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.de,
|
||||
type: 'Periodikum',
|
||||
categories: {
|
||||
electronic: 'E-Journal',
|
||||
journal: 'Zeitschrift',
|
||||
},
|
||||
},
|
||||
en: {
|
||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||
.fieldValueTranslations.en,
|
||||
type: 'periodical',
|
||||
categories: {
|
||||
electronic: 'E-Journal',
|
||||
journal: 'journal',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -57,7 +57,7 @@ export interface SCPersonWithoutReferences
|
||||
* @filterable
|
||||
* @keyword
|
||||
*/
|
||||
familyName: string;
|
||||
familyName?: string;
|
||||
|
||||
/**
|
||||
* The private fax number of the person.
|
||||
@@ -80,7 +80,7 @@ export interface SCPersonWithoutReferences
|
||||
* @filterable
|
||||
* @keyword
|
||||
*/
|
||||
givenName: string;
|
||||
givenName?: string;
|
||||
|
||||
/**
|
||||
* Honorific prefix of the person.
|
||||
|
||||
105
src/things/publication-event.ts
Normal file
105
src/things/publication-event.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 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 {SCEvent, SCEventMeta, SCEventWithoutReferences} from './abstract/event';
|
||||
import {SCThingMeta, SCThingTranslatableProperties, SCThingType} from './abstract/thing';
|
||||
|
||||
/**
|
||||
* An publication event without references
|
||||
*/
|
||||
export interface SCPublicationEventWithoutReferences
|
||||
extends SCEventWithoutReferences {
|
||||
/**
|
||||
* All the locations related to the event (e.g. where a creative work was published)
|
||||
*/
|
||||
locations?: string[];
|
||||
|
||||
/**
|
||||
* An organization (or a person) that is publishing at the event
|
||||
*/
|
||||
publisher?: string;
|
||||
|
||||
/**
|
||||
* Translated fields of an publication event
|
||||
*/
|
||||
translations?: SCTranslations<SCPublicationEventTranslatableProperties>;
|
||||
|
||||
/**
|
||||
* Type of an publication event
|
||||
*/
|
||||
type: SCThingType.PublicationEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* An publication event
|
||||
*
|
||||
* @validatable
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCPublicationEvent
|
||||
extends SCEvent, SCPublicationEventWithoutReferences {
|
||||
/**
|
||||
* Translated fields of an publication event
|
||||
*/
|
||||
translations?: SCTranslations<SCPublicationEventTranslatableProperties>;
|
||||
|
||||
/**
|
||||
* Type of an publication event
|
||||
*/
|
||||
type: SCThingType.PublicationEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translatable properties of an publication event
|
||||
*/
|
||||
export interface SCPublicationEventTranslatableProperties extends SCThingTranslatableProperties {
|
||||
}
|
||||
|
||||
/**
|
||||
* Meta information about publication events
|
||||
*/
|
||||
export class SCPublicationEventMeta
|
||||
extends SCThingMeta
|
||||
implements SCMetaTranslations<SCPublicationEvent> {
|
||||
/**
|
||||
* Translations of fields
|
||||
*/
|
||||
fieldTranslations = {
|
||||
de: {
|
||||
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.de,
|
||||
locations: 'Erscheinungsorte',
|
||||
publisher: 'Verlag',
|
||||
},
|
||||
en: {
|
||||
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.en,
|
||||
locations: 'places of publication',
|
||||
publisher: 'publisher',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Translations of values of fields
|
||||
*/
|
||||
fieldValueTranslations = {
|
||||
de: {
|
||||
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.de,
|
||||
type: 'Veröffentlichung',
|
||||
},
|
||||
en: {
|
||||
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.en,
|
||||
type: 'publication event',
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019 StApps
|
||||
* 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.
|
||||
@@ -12,7 +12,7 @@
|
||||
* 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 {SCLanguageCode, SCMetaTranslations, SCTranslations} from '../general/i18n';
|
||||
import {SCThing, SCThingMeta, SCThingType} from './abstract/thing';
|
||||
import {
|
||||
SCThingWithCategories,
|
||||
@@ -21,6 +21,7 @@ import {
|
||||
SCThingWithCategoriesWithoutReferences,
|
||||
SCThingWithCategoriesWithoutReferencesMeta,
|
||||
} from './abstract/thing-with-categories';
|
||||
import {SCUserGroup} from './abstract/user-groups';
|
||||
|
||||
/**
|
||||
* A setting without references
|
||||
@@ -83,7 +84,6 @@ export enum SCSettingInputType {
|
||||
* A setting with references
|
||||
*
|
||||
* @validatable
|
||||
* @indexable
|
||||
*/
|
||||
export interface SCSetting
|
||||
extends SCSettingWithoutReferences, SCThing,
|
||||
@@ -177,3 +177,55 @@ export class SCSettingMeta extends SCThingMeta implements SCMetaTranslations<SCS
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* A user group setting
|
||||
*/
|
||||
export interface SCUserGroupSetting extends SCSetting {
|
||||
/**
|
||||
* Exact categories of the setting
|
||||
*/
|
||||
categories: ['profile'];
|
||||
/**
|
||||
* The default value of the setting
|
||||
*/
|
||||
defaultValue: SCUserGroup;
|
||||
/**
|
||||
* Specific name of the setting
|
||||
*/
|
||||
name: 'group';
|
||||
/**
|
||||
* Chosen value of the setting
|
||||
*/
|
||||
value?: SCUserGroup;
|
||||
/**
|
||||
* The possible values of the setting
|
||||
*/
|
||||
values: SCUserGroup[];
|
||||
}
|
||||
|
||||
/**
|
||||
* A language setting
|
||||
*/
|
||||
export interface SCLanguageSetting extends SCSetting {
|
||||
/**
|
||||
* Exact categories of the setting
|
||||
*/
|
||||
categories: ['profile'];
|
||||
/**
|
||||
* The default value of the setting
|
||||
*/
|
||||
defaultValue: SCLanguageCode;
|
||||
/**
|
||||
* Specific name of the setting
|
||||
*/
|
||||
name: 'language';
|
||||
/**
|
||||
* Chosen value of the setting
|
||||
*/
|
||||
value?: SCLanguageCode;
|
||||
/**
|
||||
* The possible values of the setting
|
||||
*/
|
||||
values: SCLanguageCode[];
|
||||
}
|
||||
|
||||
@@ -116,8 +116,10 @@ export class GuardsSpec {
|
||||
@test
|
||||
public isSearchResponse() {
|
||||
const notASearchResponse = {...GuardsSpec.searchResponse};
|
||||
// @ts-ignore
|
||||
delete notASearchResponse.pagination;
|
||||
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
||||
// @ts-ignore
|
||||
delete notASearchResponse.data;
|
||||
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
||||
expect(isSearchResponse(null)).to.be.equal(false);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"categories": [
|
||||
"unipedia"
|
||||
],
|
||||
"url": "https://www.mydesk.tu-berlin.de/wiki/abk%C3%BCrzungen",
|
||||
"sameAs": "https://www.mydesk.tu-berlin.de/wiki/abk%C3%BCrzungen",
|
||||
"name": "Abkürzungen",
|
||||
"keywords": [
|
||||
"Abkürzungen",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"categories": [
|
||||
"unipedia"
|
||||
],
|
||||
"url": "https://www.mydesk.tu-berlin.de/wiki/ag_ziethen",
|
||||
"sameAs": "https://www.mydesk.tu-berlin.de/wiki/ag_ziethen",
|
||||
"name": "AG Ziethen",
|
||||
"keywords": [
|
||||
"Bologna",
|
||||
|
||||
36
test/resources/Article.3.json
Normal file
36
test/resources/Article.3.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "article",
|
||||
"uid": "d541eda5-1542-59b2-969e-7dbbee0bd2a8",
|
||||
"name": "Mozart und Frankfurt am Main : drei Generationen Mozart in Frankfurt am Main",
|
||||
"description": "Ill.",
|
||||
"categories": [
|
||||
"article"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"type": "person",
|
||||
"uid": "56d46c9b-8ede-52ae-a40f-6800cff577e5",
|
||||
"name": "Greve, Clemens"
|
||||
}
|
||||
],
|
||||
"firstPublished": "2008",
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB198305427",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB198305427",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
},
|
||||
"isPartOf": {
|
||||
"uid": "bc5e5399-a24c-5c01-9c1b-0c8b83272087",
|
||||
"name": "Archiv für Frankfurts Geschichte und Kunst",
|
||||
"type": "periodical",
|
||||
"categories": []
|
||||
},
|
||||
"reference": "Band 71 (2008), Seite 27-40"
|
||||
},
|
||||
"schema": "SCArticle"
|
||||
}
|
||||
36
test/resources/Article.4.json
Normal file
36
test/resources/Article.4.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "article",
|
||||
"uid": "554a4a89-df73-5197-ac85-c8a5a3a9c5b0",
|
||||
"name": "Ursula Janik : [Markthändlerin]",
|
||||
"description": "Ill.",
|
||||
"categories": [
|
||||
"article"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"type": "person",
|
||||
"uid": "c6e44e1f-f76c-53f8-a18f-47fa54ae0e90",
|
||||
"name": "Fröhlich, Ute B."
|
||||
}
|
||||
],
|
||||
"firstPublished": "2002",
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB107025590",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB107025590",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
},
|
||||
"isPartOf": {
|
||||
"uid": "f84c1851-042e-542f-ba7a-158b32dfb82f",
|
||||
"name": "Frankfurter Allgemeine. R, Rhein-Main-Zeitung",
|
||||
"type": "periodical",
|
||||
"categories": []
|
||||
},
|
||||
"reference": "Heft 190 (17. 8 2002), Seite 62"
|
||||
},
|
||||
"schema": "SCArticle"
|
||||
}
|
||||
@@ -22,9 +22,14 @@
|
||||
}
|
||||
],
|
||||
"inLanguage": "de",
|
||||
"bookEdition": "2., überarb. u. erw. Aufl.",
|
||||
"isbn": "3936608776",
|
||||
"edition": "2., überarb. u. erw. Aufl.",
|
||||
"ISBNs": [
|
||||
"3936608776"
|
||||
],
|
||||
"numberOfPages": 537,
|
||||
"categories": [
|
||||
"book"
|
||||
],
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "Dummy",
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
"type": "book",
|
||||
"uid": "db47f7f4-7699-5a37-afcc-24beaa998d36",
|
||||
"name": "Minimal Book",
|
||||
"categories": [
|
||||
"ebook"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"type": "person",
|
||||
@@ -14,7 +17,9 @@
|
||||
}
|
||||
],
|
||||
"datePublished": "2007-08-01",
|
||||
"isbn": "3936608776",
|
||||
"ISBNs": [
|
||||
"3936608776"
|
||||
],
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "Dummy",
|
||||
|
||||
40
test/resources/Book.3.json
Normal file
40
test/resources/Book.3.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "book",
|
||||
"uid": "188cb2bd-724d-543d-97ac-9aa1dda68cb7",
|
||||
"name": "Frauen im Ingenieurberuf : FIB ; 1. Gesamtdeutsches Symposium VDI-FIB 17. - 18. November 1990, Bad Homburg ; 1. überregionales Treffen VDI-FIB 11. - 12. November 1989, Düsseldorf",
|
||||
"description": "47 S. : Ill., Kt.",
|
||||
"categories": [
|
||||
"book"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"uid": "a276588c-ecee-5d2e-8b9c-73cb902bc165",
|
||||
"name": "Saatweber, Jutta (Hrsg.)",
|
||||
"type": "person"
|
||||
}
|
||||
],
|
||||
"firstPublished": "[ca. 1991]",
|
||||
"publications": [
|
||||
{
|
||||
"uid": "603a6574-8910-588a-9e83-cd26e6988c74",
|
||||
"type": "publication event",
|
||||
"locations": [
|
||||
"Frankfurt/M"
|
||||
],
|
||||
"publisher": "VDI",
|
||||
"name": "VDI"
|
||||
}
|
||||
],
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB022992618",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB022992618",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
}
|
||||
},
|
||||
"schema": "SCBook"
|
||||
}
|
||||
43
test/resources/Book.4.json
Normal file
43
test/resources/Book.4.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "book",
|
||||
"uid": "f6ee5744-a441-595d-9dae-a9f579c0660f",
|
||||
"name": "Kant",
|
||||
"description": "176 S.",
|
||||
"categories": [
|
||||
"book"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"uid": "7e198ecf-966a-5f99-8a45-266243583023",
|
||||
"name": "Thouard, Denis",
|
||||
"type": "person"
|
||||
}
|
||||
],
|
||||
"firstPublished": "2001",
|
||||
"publications": [
|
||||
{
|
||||
"uid": "603a6574-8910-588a-9e83-cd26e6988c74",
|
||||
"type": "publication event",
|
||||
"locations": [
|
||||
"Paris"
|
||||
],
|
||||
"publisher": "Belles Lettres",
|
||||
"name": "Belles Lettres"
|
||||
}
|
||||
],
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB102248788",
|
||||
"ISBNs": [
|
||||
"2251760385"
|
||||
],
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB102248788",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
}
|
||||
},
|
||||
"schema": "SCBook"
|
||||
}
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"frequency": "once",
|
||||
"repeatFrequency": "P1W",
|
||||
"dates": [
|
||||
"2016-04-15T17:00:00+00:00"
|
||||
],
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
"name": "EMH 225",
|
||||
"floorName": "2"
|
||||
},
|
||||
"frequency": "once",
|
||||
"dates": [
|
||||
"2016-04-12T11:00:00+00:00"
|
||||
],
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
"name": "EMH 225",
|
||||
"floorName": "2"
|
||||
},
|
||||
"frequency": "once",
|
||||
"dates": [
|
||||
"2016-04-12T11:00:00+00:00"
|
||||
],
|
||||
@@ -43,8 +42,10 @@
|
||||
"offers": [
|
||||
{
|
||||
"availability": "in stock",
|
||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
||||
"availabilityRange": {
|
||||
"gte": "2017-01-30T00:00:00.000Z",
|
||||
"lte": "2017-01-30T23:59:59.999Z"
|
||||
},
|
||||
"prices": {
|
||||
"default": 6.5,
|
||||
"student": 5,
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
"audiences": [
|
||||
"students"
|
||||
],
|
||||
"categories": [
|
||||
"news"
|
||||
],
|
||||
"sequenceIndex": 1010,
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
"audiences": [
|
||||
"students"
|
||||
],
|
||||
"categories": [
|
||||
"news"
|
||||
],
|
||||
"sequenceIndex": 1020,
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
|
||||
@@ -19,8 +19,10 @@
|
||||
"offers": [
|
||||
{
|
||||
"availability": "in stock",
|
||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
||||
"availabilityRange": {
|
||||
"gte": "2017-01-30T00:00:00.000Z",
|
||||
"lte": "2017-01-30T23:59:59.999Z"
|
||||
},
|
||||
"prices": {
|
||||
"default": 4.85,
|
||||
"student": 2.85,
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
|
||||
},
|
||||
"availability": "in stock",
|
||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
||||
"availabilityRange": {
|
||||
"gte": "2017-01-30T00:00:00.000Z",
|
||||
"lte": "2017-01-30T23:59:59.999Z"
|
||||
},
|
||||
"inPlace": {
|
||||
"geo": {
|
||||
"point": {
|
||||
|
||||
@@ -11,9 +11,11 @@
|
||||
],
|
||||
"offers": [
|
||||
{
|
||||
"availabilityEnds": "2017-03-27T23:59:59.000Z",
|
||||
"availabilityStarts": "2017-03-27T00:00:00.000Z",
|
||||
"availability": "in stock",
|
||||
"availabilityRange": {
|
||||
"gte": "2017-03-27T00:00:00.000Z",
|
||||
"lte": "2017-03-27T23:59:59.000Z"
|
||||
},
|
||||
"inPlace": {
|
||||
"type": "room",
|
||||
"name": "Cafeteria LEVEL",
|
||||
|
||||
@@ -6,17 +6,67 @@
|
||||
"uid": "3af3ccaa-f066-5eff-9a3d-a70567f3d70d",
|
||||
"data": {
|
||||
"type": "academic event",
|
||||
"description": "Grundlagen, algebraische Grundbegriffe, Vektorräume, lineare Abbildungen und Gleichungen, Determinanten",
|
||||
"uid": "b17eb963-42b5-5861-adce-2b7b2607ef0a",
|
||||
"name": "Lineare Algebra I für Mathematiker",
|
||||
"description": "Fortsetzung der Algebra I: Galoistheorie mit Anwendungen, ausgewählte Spezialthemen.",
|
||||
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf2b9",
|
||||
"name": "Algebra II",
|
||||
"categories": [
|
||||
"lecture"
|
||||
],
|
||||
"academicTerms": [
|
||||
{
|
||||
"uid": "aacd5611-b5be-54ce-b39f-c52f7e9a631d",
|
||||
"type": "semester",
|
||||
"name": "Sommersemester 2018",
|
||||
"acronym": "SS 2018",
|
||||
"alternateNames": [
|
||||
"SoSe 2018"
|
||||
],
|
||||
"startDate": "2018-04-01",
|
||||
"endDate": "2018-09-30",
|
||||
"eventsStartDate": "2018-04-09",
|
||||
"eventsEndDate": "2018-07-13"
|
||||
}
|
||||
],
|
||||
"performers": [
|
||||
{
|
||||
"type": "person",
|
||||
"uid": "7f8ce700-2679-51a5-86b5-3dfba85a33ff",
|
||||
"givenName": "Peter",
|
||||
"familyName": "Bürgisser",
|
||||
"gender": "male",
|
||||
"honorificPrefix": "Prof. Dr.",
|
||||
"name": "Peter Bürgisser"
|
||||
}
|
||||
],
|
||||
"majors": [
|
||||
"Wirtschaftsmathematik BSc",
|
||||
"Technomathematik BSc",
|
||||
"Mathematik BSc"
|
||||
]
|
||||
"Mathematik D",
|
||||
"Mathematik L2",
|
||||
"Mathematik StRGym",
|
||||
"Mathematik StRBeruf",
|
||||
"Mathematik BSc",
|
||||
"Mathematik MSc"
|
||||
],
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "Dummy",
|
||||
"type": "remote",
|
||||
"maintainer": {
|
||||
"type": "organization",
|
||||
"name": "tubIT",
|
||||
"uid": "25f76840-db89-5da2-a8a2-75992f637613"
|
||||
},
|
||||
"modified": "2018-09-01T10:00:00Z",
|
||||
"originalId": "foo bar",
|
||||
"responsibleEntity": {
|
||||
"type": "person",
|
||||
"uid": "7f8ce700-2679-51a5-86b5-3dfba85a33ff",
|
||||
"givenName": "Peter",
|
||||
"familyName": "Bürgisser",
|
||||
"gender": "male",
|
||||
"honorificPrefix": "Prof. Dr.",
|
||||
"name": "Peter Bürgisser"
|
||||
}
|
||||
}
|
||||
},
|
||||
"origin": {
|
||||
"created": "2018-09-11T12:30:00Z",
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
"audiences": [
|
||||
"students"
|
||||
],
|
||||
"categories": [
|
||||
"news"
|
||||
],
|
||||
"sequenceIndex": 1001,
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
"audiences": [
|
||||
"students"
|
||||
],
|
||||
"categories": [
|
||||
"news"
|
||||
],
|
||||
"sequenceIndex": 1004,
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
|
||||
35
test/resources/Periodical.1.json
Normal file
35
test/resources/Periodical.1.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "periodical",
|
||||
"uid": "d921479e-4d35-5cd1-b64a-939cbe40a5b0",
|
||||
"name": "London magazine : a review of literature and the arts",
|
||||
"categories": [
|
||||
"journal"
|
||||
],
|
||||
"firstPublished": "1954",
|
||||
"publications": [
|
||||
{
|
||||
"uid": "603a6574-8910-588a-9e83-cd26e6988c74",
|
||||
"type": "publication event",
|
||||
"locations": [
|
||||
"London"
|
||||
],
|
||||
"publisher": "London Magazine",
|
||||
"name": "London Magazine"
|
||||
}
|
||||
],
|
||||
"ISSNs": [
|
||||
"0024-6085"
|
||||
],
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB046847146",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB046847146",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
}
|
||||
},
|
||||
"schema": "SCPeriodical"
|
||||
}
|
||||
32
test/resources/Periodical.2.json
Normal file
32
test/resources/Periodical.2.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"errorNames": [],
|
||||
"instance": {
|
||||
"type": "periodical",
|
||||
"uid": "c8d7a4f7-88ac-5da3-86c7-32b93d16f00a",
|
||||
"name": "[Frankfurter Allgemeine \/ R F A Z FAZ Republik Heroes], Frankfurter Allgemeine : Zeitung für Deutschland, R. Rhein-Main-Zeitung : Zeitung für Frankfurt",
|
||||
"categories": [
|
||||
"journal"
|
||||
],
|
||||
"firstPublished": "1988",
|
||||
"publications": [
|
||||
{
|
||||
"uid": "64829217-9eea-532f-8730-7e609efffbca",
|
||||
"type": "publication event",
|
||||
"locations": [
|
||||
"Frankfurt, M."
|
||||
],
|
||||
"publisher": "Frankfurter Allg. Zeitung",
|
||||
"name": "Frankfurter Allg. Zeitung"
|
||||
}
|
||||
],
|
||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB048624853",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
"name": "HeBIS HDS",
|
||||
"originalId": "HEB048624853",
|
||||
"type": "remote",
|
||||
"url": "https://hds2test.hebis.de/ubffm/"
|
||||
}
|
||||
},
|
||||
"schema": "SCPeriodical"
|
||||
}
|
||||
@@ -22,8 +22,8 @@
|
||||
},
|
||||
{
|
||||
"arguments": {
|
||||
"fromField": "availabilityStarts",
|
||||
"toField": "availabilityEnds",
|
||||
"scope": "d",
|
||||
"field": "availabilityRange",
|
||||
"time": "2018-01-15T04:13:00+00:00"
|
||||
},
|
||||
"type": "availability"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"instance": {
|
||||
"type": "video",
|
||||
"uid": "e274cc82-f51c-566b-b8da-85763ff375e8",
|
||||
"url": "https://vimeo.com/1084537",
|
||||
"sameAs": "https://vimeo.com/1084537",
|
||||
"name": "Big Buck Bunny",
|
||||
"origin": {
|
||||
"indexed": "2018-09-11T12:30:00Z",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"instance": {
|
||||
"type": "video",
|
||||
"uid": "2def52c8-f901-5b30-96fc-ba570a038508",
|
||||
"url": "https://vimeo.com/1084537",
|
||||
"sameAs": "https://vimeo.com/1084537",
|
||||
"name": "Big Buck Bunny",
|
||||
"sources": [
|
||||
{
|
||||
|
||||
@@ -12,21 +12,55 @@
|
||||
* 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 {getProjectReflection} from '@openstapps/core-tools/lib/common';
|
||||
import {getTsconfigPath} from '@openstapps/core-tools/lib/common';
|
||||
import {validateFiles, writeReport} from '@openstapps/core-tools/lib/validate';
|
||||
import {Logger} from '@openstapps/logger';
|
||||
import {fail} from 'assert';
|
||||
import {expect} from 'chai';
|
||||
import {mkdirSync} from 'fs';
|
||||
import {mkdirSync, PathLike} from 'fs';
|
||||
import {slow, suite, test, timeout} from '@testdeck/mocha';
|
||||
import {join, resolve} from 'path';
|
||||
import {DeclarationReflection, ProjectReflection} from 'typedoc';
|
||||
import {ArrayType, IntrinsicType, ReferenceType, StringLiteralType, Type, UnionType} from 'typedoc/dist/lib/models';
|
||||
import {Application, DeclarationReflection, ProjectReflection, TSConfigReader} from 'typedoc';
|
||||
import {ArrayType, IntrinsicType, ReferenceType, LiteralType, Type, UnionType} from 'typedoc/dist/lib/models';
|
||||
|
||||
process.on('unhandledRejection', (err) => {
|
||||
throw err;
|
||||
});
|
||||
|
||||
/**
|
||||
* Get a project reflection from a path
|
||||
*
|
||||
* @param srcPath Path to get reflection from
|
||||
* @param excludeExternals Exclude external dependencies
|
||||
*/
|
||||
export function getProjectReflection(srcPath: PathLike, excludeExternals = true): ProjectReflection {
|
||||
Logger.info(`Generating project reflection for ${srcPath.toString()}.`);
|
||||
|
||||
const tsconfigPath = getTsconfigPath(srcPath.toString());
|
||||
let inputFilePath = srcPath;
|
||||
if (inputFilePath === tsconfigPath) {
|
||||
inputFilePath = join(tsconfigPath, 'src');
|
||||
}
|
||||
|
||||
// initialize new Typedoc application
|
||||
const app = new Application();
|
||||
app.options.addReader(new TSConfigReader());
|
||||
app.bootstrap({
|
||||
entryPoints: [inputFilePath.toString()],
|
||||
excludeExternals: excludeExternals,
|
||||
tsconfig: join(tsconfigPath, 'tsconfig.json'),
|
||||
});
|
||||
|
||||
// get project reflection from input files
|
||||
const result = app.convert();
|
||||
|
||||
if (typeof result === 'undefined') {
|
||||
throw new Error('Project reflection could not be generated.');
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if type is a union type
|
||||
*
|
||||
@@ -68,8 +102,8 @@ function isIntrinsicType(type: Type): type is IntrinsicType {
|
||||
*
|
||||
* @param type Type to check
|
||||
*/
|
||||
function isStringLiteralType(type: Type): type is StringLiteralType {
|
||||
return type.type === 'stringLiteral';
|
||||
function isLiteralType(type: Type): type is LiteralType {
|
||||
return type.type === 'literal';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,7 +136,7 @@ function getExtendedTypes(thingReflection: DeclarationReflection,
|
||||
return extendedTypes;
|
||||
}
|
||||
|
||||
@suite(timeout(10000), slow(5000))
|
||||
@suite(timeout(15000), slow(10000))
|
||||
export class SchemaSpec {
|
||||
static objects: { [name: string]: DeclarationReflection } = {};
|
||||
static reflection: ProjectReflection;
|
||||
@@ -121,7 +155,7 @@ export class SchemaSpec {
|
||||
}
|
||||
}
|
||||
|
||||
const thingsReflection = SchemaSpec.objects.SCThingsWithoutDiff;
|
||||
const thingsReflection = SchemaSpec.objects.SCIndexableThings;
|
||||
|
||||
// tslint:disable-next-line:no-unused-expression
|
||||
expect(thingsReflection).not.to.be.undefined;
|
||||
@@ -182,6 +216,22 @@ export class SchemaSpec {
|
||||
|
||||
@test
|
||||
'no property is an SCThing'() {
|
||||
const handleUnionType = (type: UnionType, thingName: string, property: DeclarationReflection) => {
|
||||
for (const nestedType of type.types) {
|
||||
if (isIntrinsicType(nestedType) || isLiteralType(nestedType)) {
|
||||
continue;
|
||||
} else if (isReferenceType(nestedType)) {
|
||||
expect(SchemaSpec.thingNames).not.to.contain(
|
||||
nestedType.name,
|
||||
`Union property '${property.name}' on type '${thingName}' contains type '${nestedType.name}'.`,
|
||||
);
|
||||
} else {
|
||||
// tslint:disable-next-line:max-line-length
|
||||
fail(`'${thingName}'#'${property.name}' union type '${nestedType.type}' is not handled by this test!`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const thingName of SchemaSpec.thingNames) {
|
||||
const thingReflection = SchemaSpec.objects[`${thingName}`];
|
||||
|
||||
@@ -199,8 +249,10 @@ export class SchemaSpec {
|
||||
} else if (isArrayType(type)) {
|
||||
const elementType = type.elementType;
|
||||
|
||||
if (isIntrinsicType(elementType)) {
|
||||
if (isIntrinsicType(elementType) || isLiteralType(elementType)) {
|
||||
continue;
|
||||
} else if (isUnionType(elementType)) {
|
||||
handleUnionType(elementType, thingName, property);
|
||||
} else if (isReferenceType(elementType)) {
|
||||
expect(SchemaSpec.thingNames).not.to.contain(
|
||||
elementType.name,
|
||||
@@ -230,19 +282,7 @@ export class SchemaSpec {
|
||||
}
|
||||
} while (isReferenceType(type));
|
||||
} else if (isUnionType(type)) {
|
||||
for (const nestedType of type.types) {
|
||||
if (isIntrinsicType(nestedType) || isStringLiteralType(nestedType)) {
|
||||
continue;
|
||||
} else if (isReferenceType(nestedType)) {
|
||||
expect(SchemaSpec.thingNames).not.to.contain(
|
||||
nestedType.name,
|
||||
`Union property '${property.name}' on type '${thingName}' contains type '${nestedType.name}'.`,
|
||||
);
|
||||
} else {
|
||||
// tslint:disable-next-line:max-line-length
|
||||
fail(`'${thingName}'#'${property.name}' union type '${nestedType.type}' is not handled by this test!`);
|
||||
}
|
||||
}
|
||||
handleUnionType(type, thingName, property);
|
||||
} else {
|
||||
// tslint:disable-next-line:max-line-length
|
||||
fail(`'${thingName}'#'${property.name}' with type '${type.type}' is not handled by this test!`);
|
||||
|
||||
@@ -39,6 +39,8 @@ import {SCTicket, SCTicketWithoutReferences} from '../src/things/ticket';
|
||||
import {SCToDo, SCToDoWithoutReferences} from '../src/things/todo';
|
||||
import {SCTour, SCTourWithoutReferences} from '../src/things/tour';
|
||||
import {SCVideo, SCVideoWithoutReferences} from '../src/things/video';
|
||||
import {SCPeriodical, SCPeriodicalWithoutReferences} from '../src/things/periodical';
|
||||
import {SCPublicationEvent, SCPublicationEventWithoutReferences} from '../src/things/publication-event';
|
||||
|
||||
// tslint:disable:no-any
|
||||
// tslint:disable:completed-docs
|
||||
@@ -226,6 +228,17 @@ assert<Has<SCOrganizationPropertyTypes, SCThing>>(false);
|
||||
assert<Extends<SCOrganizationWithoutReferences, SCThing>>(false);
|
||||
assert<Extends<SCOrganization, SCThing>>(true);
|
||||
|
||||
/**
|
||||
* Types of properties of SCPeriodical
|
||||
*/
|
||||
type SCPeriodicalPropertyTypes = PropertyTypesNested<SCPeriodical>;
|
||||
assert<NotHas<SCPeriodicalPropertyTypes, SCThingWithoutReferences>>(false);
|
||||
assert<Has<SCPeriodicalPropertyTypes, SCThingWithoutReferences>>(true);
|
||||
assert<NotHas<SCPeriodicalPropertyTypes, SCThing>>(true);
|
||||
assert<Has<SCPeriodicalPropertyTypes, SCThing>>(false);
|
||||
assert<Extends<SCPeriodicalWithoutReferences, SCThing>>(false);
|
||||
assert<Extends<SCPeriodical, SCThing>>(true);
|
||||
|
||||
/**
|
||||
* Types of properties of SCPerson
|
||||
*/
|
||||
@@ -248,6 +261,17 @@ assert<Has<SCPointOfInterestPropertyTypes, SCThing>>(false);
|
||||
assert<Extends<SCPointOfInterestWithoutReferences, SCThing>>(false);
|
||||
assert<Extends<SCPointOfInterest, SCThing>>(true);
|
||||
|
||||
/**
|
||||
* Types of properties of SCPublicationEvent
|
||||
*/
|
||||
type SCPublicationEventPropertyTypes = PropertyTypesNested<SCPublicationEvent>;
|
||||
assert<NotHas<SCPublicationEventPropertyTypes, SCThingWithoutReferences>>(false);
|
||||
assert<Has<SCPublicationEventPropertyTypes, SCThingWithoutReferences>>(true);
|
||||
assert<NotHas<SCPublicationEventPropertyTypes, SCThing>>(true);
|
||||
assert<Has<SCPublicationEventPropertyTypes, SCThing>>(false);
|
||||
assert<Extends<SCPublicationEventWithoutReferences, SCThing>>(false);
|
||||
assert<Extends<SCPublicationEvent, SCThing>>(true);
|
||||
|
||||
/**
|
||||
* Types of properties of SCRoom
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user