mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-09 19:22:51 +00:00
Compare commits
107 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3048a12d8 | ||
|
|
e14993114f | ||
|
|
4237f6ad60 | ||
|
|
e7c1000bc4 | ||
|
|
e0adb2332e | ||
|
|
e5696b23e7 | ||
|
|
659d0974f7 | ||
|
|
e8304eeeb4 | ||
|
|
dca9d26c66 | ||
|
|
852e0f5373 | ||
|
|
26dd531d24 | ||
|
|
52bdf93356 | ||
|
|
7509610145 | ||
|
|
972cdf392d | ||
|
|
4f758f7d0c | ||
|
|
980e899807 | ||
|
|
d1c5bb9595 | ||
|
|
dc9c0f528f | ||
|
|
66d64e0858 | ||
|
|
06339786c2 | ||
|
|
8ed68481fa | ||
|
|
e26042957c | ||
|
|
7553620a5d | ||
|
|
322c001e70 | ||
|
|
830e249ac4 | ||
|
|
8c9df3ea9a | ||
|
|
f85768d32e | ||
|
|
580ace368f | ||
|
|
522be6643a | ||
|
|
8784309ddb | ||
|
|
3d8f996690 | ||
|
|
36a4bfcbbc | ||
|
|
db347bf324 | ||
|
|
7a2e0f20d1 | ||
|
|
b2d18da82a | ||
|
|
fae7395cf0 | ||
|
|
0745b1af72 | ||
|
|
a2b2cefe8e | ||
|
|
04b21a7c5d | ||
|
|
ca7626db17 | ||
|
|
e8d492a18a | ||
|
|
aa294c4e29 | ||
|
|
369bb906c1 | ||
|
|
aa38fef293 | ||
|
|
ded8e7dfd5 | ||
|
|
d47897c7e8 | ||
|
|
9ab5280b2e | ||
|
|
596788f3a1 | ||
|
|
70271a4849 | ||
|
|
98ab64403f | ||
|
|
3d1bb6ef13 | ||
|
|
d5f39517e8 | ||
|
|
dfe35d71a3 | ||
|
|
cdaa83122f | ||
|
|
937919f1a7 | ||
|
|
3249300dac | ||
|
|
5acf49fd52 | ||
|
|
07b5ad1618 | ||
|
|
d56c3d11a8 | ||
|
|
83f00f40bf | ||
|
|
782ee3758a | ||
|
|
8a28d6fa86 | ||
|
|
ed53c6595e | ||
|
|
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 | ||
|
|
3d9d28c60c | ||
|
|
913c5691da | ||
|
|
03cdbc6f9b | ||
|
|
9f886a8968 | ||
|
|
e80afe2c93 | ||
|
|
6b10cc86d8 | ||
|
|
1aedd6332f | ||
|
|
790c8bbc3f | ||
|
|
e934017a65 | ||
|
|
88dbedd932 | ||
|
|
8b1b3444fd | ||
|
|
d5f3d71a41 | ||
|
|
cbcf9c9adb |
@@ -5,6 +5,7 @@ before_script:
|
|||||||
|
|
||||||
stages:
|
stages:
|
||||||
- build
|
- build
|
||||||
|
- review
|
||||||
- test
|
- test
|
||||||
- audit
|
- audit
|
||||||
- deploy
|
- deploy
|
||||||
@@ -21,6 +22,46 @@ build:
|
|||||||
- lib
|
- lib
|
||||||
expire_in: 1 week
|
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:
|
audit:
|
||||||
stage: audit
|
stage: audit
|
||||||
script:
|
script:
|
||||||
@@ -47,6 +88,21 @@ test:
|
|||||||
- report
|
- report
|
||||||
- coverage
|
- 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:
|
package:
|
||||||
dependencies:
|
dependencies:
|
||||||
- build
|
- build
|
||||||
|
|||||||
5
.mailmap
Normal file
5
.mailmap
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <git@killinger.co>
|
||||||
|
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinge@hrz.uni-frankfurt.de>
|
||||||
|
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinger@hrz.uni-frankfurt.de>
|
||||||
|
Wieland Schöbl <wulkanat@gmail.com> wulkanat@gmail.com <wulkanat@gmail.com>
|
||||||
|
Wieland Schöbl <wulkanat@gmail.com> Wieland Schöbl <wieland.schoebl@campus.tu-berlin.de>
|
||||||
179
CHANGELOG.md
179
CHANGELOG.md
@@ -1,3 +1,182 @@
|
|||||||
|
# [0.62.0](https://gitlab.com/openstapps/core/compare/v0.61.0...v0.62.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add missing lastPublished to SCCreativeWork ([e0adb23](https://gitlab.com/openstapps/core/commit/e0adb2332ec24ce388c4c008b51b7aa941948532))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.61.0](https://gitlab.com/openstapps/core/compare/v0.60.0...v0.61.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.60.0](https://gitlab.com/openstapps/core/compare/v0.59.0...v0.60.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.59.0](https://gitlab.com/openstapps/core/compare/v0.58.0...v0.59.0) (2022-01-20)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.58.0](https://gitlab.com/openstapps/core/compare/v0.57.0...v0.58.0) (2022-01-18)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.57.0](https://gitlab.com/openstapps/core/compare/v0.56.0...v0.57.0) (2022-01-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* extend config to describe auth providers ([7553620](https://gitlab.com/openstapps/core/commit/7553620a5d330ebfb66461afeab700e36bd37165))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.56.0](https://gitlab.com/openstapps/core/compare/v0.55.0...v0.56.0) (2021-12-17)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.55.0](https://gitlab.com/openstapps/core/compare/v0.54.0...v0.55.0) (2021-12-15)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [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)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add about config ([aa294c4](https://gitlab.com/openstapps/core/commit/aa294c4e29e9191bef6d79487b0b321fbc34f6fb))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.51.0](https://gitlab.com/openstapps/core/compare/v0.50.0...v0.51.0) (2021-09-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add physicalobject to book categories ([ded8e7d](https://gitlab.com/openstapps/core/commit/ded8e7dfd51094c02a86e1383a4e94c069c10e64))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.50.0](https://gitlab.com/openstapps/core/compare/v0.49.5...v0.50.0) (2021-09-01)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.49.5](https://gitlab.com/openstapps/core/compare/v0.49.3...v0.49.5) (2021-08-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* test resources from hds2 ([dfe35d7](https://gitlab.com/openstapps/core/commit/dfe35d71a38c35064726365f99714abff3b30ba6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.49.3](https://gitlab.com/openstapps/core/compare/v0.49.2...v0.49.3) (2021-08-18)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.49.2](https://gitlab.com/openstapps/core/compare/v0.49.1...v0.49.2) (2021-08-17)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.49.1](https://gitlab.com/openstapps/core/compare/v0.49.0...v0.49.1) (2021-08-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* documentation generation ([8a28d6f](https://gitlab.com/openstapps/core/commit/8a28d6fa8657d778d6ae0d38cda7da3531d6478c))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.49.0](https://gitlab.com/openstapps/core/compare/v0.48.0...v0.49.0) (2021-08-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add elasticsearch mappings to build ([21eeecd](https://gitlab.com/openstapps/core/commit/21eeecd5ee0d68a4faa93bb70d2187ce35807b01))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.42.0](https://gitlab.com/openstapps/core/compare/v0.41.0...v0.42.0) (2021-02-16)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.41.0](https://gitlab.com/openstapps/core/compare/v0.40.0...v0.41.0) (2021-02-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add date, numeric range filter to SCSearchFilter ([8510f11](https://gitlab.com/openstapps/core/commit/8510f11d7b4c62a6b239a70f47fe07e8cc86ab63))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [0.40.0](https://gitlab.com/openstapps/core/compare/v0.39.0...v0.40.0) (2021-02-05)
|
# [0.40.0](https://gitlab.com/openstapps/core/compare/v0.39.0...v0.40.0) (2021-02-05)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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` |
|
| `@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 | |
|
| `@text` | string field is interpreted as text | |
|
||||||
| `@date` | string field is interpreted as a date field | |
|
| `@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 | |
|
| `@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]` |
|
| `@inheritTags` | inherit all tags from another field | `[SCThingType]::[field]` |
|
||||||
|
|
||||||
|
|||||||
4698
package-lock.json
generated
4698
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
55
package.json
55
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/core",
|
"name": "@openstapps/core",
|
||||||
"version": "0.41.0",
|
"version": "0.63.0",
|
||||||
"description": "StAppsCore - Generalized model of data",
|
"description": "StAppsCore - Generalized model of data",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Model",
|
"Model",
|
||||||
@@ -14,17 +14,19 @@
|
|||||||
"main": "./lib/index.js",
|
"main": "./lib/index.js",
|
||||||
"types": "./lib/index.d.ts",
|
"types": "./lib/index.d.ts",
|
||||||
"scripts": {
|
"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'",
|
"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",
|
"check-configuration": "openstapps-configuration",
|
||||||
"compile": "rimraf lib && tsc",
|
"compile": "rimraf lib && tsc",
|
||||||
"documentation": "typedoc --name \"@openstapps/core\" --includeDeclarations --mode modules --out docs --readme README.md --listInvalidSymbolLinks lib",
|
"documentation": "typedoc --name \"@openstapps/core\" --includeVersion --out docs --readme README.md --listInvalidSymbolLinks src",
|
||||||
"pack": "openstapps-core-tools pack",
|
"pack": "openstapps-core-tools pack",
|
||||||
"postversion": "npm run changelog",
|
"postversion": "npm run changelog",
|
||||||
"prepublishOnly": "npm ci && npm run build",
|
"prepublishOnly": "npm ci && npm run build",
|
||||||
"preversion": "npm run prepublishOnly",
|
"preversion": "npm run prepublishOnly",
|
||||||
"push": "git push && git push origin \"v$npm_package_version\"",
|
"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",
|
"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'",
|
"test": "nyc mocha --require ts-node/register --recursive 'test/*.spec.ts'",
|
||||||
"tslint": "tslint -p tsconfig.json -c tslint.json 'src/**/*.ts'"
|
"tslint": "tslint -p tsconfig.json -c tslint.json 'src/**/*.ts'"
|
||||||
},
|
},
|
||||||
@@ -32,44 +34,51 @@
|
|||||||
"contributors": [
|
"contributors": [
|
||||||
"Andreas Lehmann",
|
"Andreas Lehmann",
|
||||||
"Anselm Stordeur <anselmstordeur@gmail.com>",
|
"Anselm Stordeur <anselmstordeur@gmail.com>",
|
||||||
|
"Axel Nieder-Vahrenholz",
|
||||||
"Benjamin Jöckel",
|
"Benjamin Jöckel",
|
||||||
"Imran Hossain",
|
"Frank Nagel",
|
||||||
"Jovan Krunić <jovan.krunic@gmail.com>",
|
"Jovan Krunić <jovan.krunic@gmail.com>",
|
||||||
"Michel Jonathan Schmitz",
|
"Michel Jonathan Schmitz",
|
||||||
"Rainer Killinger <mail-openstapps@killinger.co>",
|
"Rainer Killinger <mail-openstapps@killinger.co>",
|
||||||
|
"Roman Klopsch",
|
||||||
"Sebastian Lange",
|
"Sebastian Lange",
|
||||||
"Wieland Schöbl",
|
"Wieland Schöbl"
|
||||||
"Roman Klopsch"
|
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openstapps/core-tools": "0.16.0",
|
"@openstapps/core-tools": "0.28.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.6",
|
"@types/json-schema": "7.0.9",
|
||||||
"@types/node": "10.17.44",
|
"@types/node": "14.18.3",
|
||||||
"fast-clone": "1.5.13",
|
"fast-clone": "1.5.13",
|
||||||
"http-status-codes": "2.1.4",
|
"fast-deep-equal": "3.1.3",
|
||||||
|
"http-status-codes": "2.2.0",
|
||||||
"json-patch": "0.7.0",
|
"json-patch": "0.7.0",
|
||||||
"json-schema": "0.2.5",
|
"json-schema": "0.4.0",
|
||||||
"ts-optchain": "0.1.8"
|
"ts-optchain": "0.1.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@openstapps/configuration": "0.25.0",
|
"@openstapps/configuration": "0.29.0",
|
||||||
"@openstapps/logger": "0.5.0",
|
"@openstapps/es-mapping-generator": "0.0.4",
|
||||||
"@testdeck/mocha": "0.1.2",
|
"@openstapps/logger": "0.8.0",
|
||||||
"@types/chai": "4.2.14",
|
"@testdeck/mocha": "0.2.0",
|
||||||
"@types/rimraf": "3.0.0",
|
"@types/chai": "4.3.0",
|
||||||
"chai": "4.2.0",
|
"@types/lodash": "4.14.178",
|
||||||
|
"@types/mocha": "9.0.0",
|
||||||
|
"@types/rimraf": "3.0.2",
|
||||||
|
"chai": "4.3.4",
|
||||||
"conditional-type-checks": "1.0.5",
|
"conditional-type-checks": "1.0.5",
|
||||||
"conventional-changelog-cli": "2.1.0",
|
"conventional-changelog-cli": "2.2.2",
|
||||||
"mocha": "8.2.0",
|
"lodash": "4.17.21",
|
||||||
|
"mocha": "9.1.4",
|
||||||
"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",
|
||||||
"ts-node": "9.0.0",
|
"surge": "0.23.1",
|
||||||
|
"ts-node": "10.4.0",
|
||||||
"tslint": "6.1.3",
|
"tslint": "6.1.3",
|
||||||
"typedoc": "0.18.0",
|
"typedoc": "0.21.6",
|
||||||
"typescript": "3.8.3"
|
"typescript": "4.3.5"
|
||||||
},
|
},
|
||||||
"nyc": {
|
"nyc": {
|
||||||
"all": true,
|
"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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -15,7 +15,9 @@
|
|||||||
// tslint:disable-next-line:no-implicit-dependencies
|
// tslint:disable-next-line:no-implicit-dependencies
|
||||||
import {Polygon} from 'geojson';
|
import {Polygon} from 'geojson';
|
||||||
import {SCTranslations} from '../general/i18n';
|
import {SCTranslations} from '../general/i18n';
|
||||||
import {SCSetting} from '../things/setting';
|
import {SCMap} from '../general/map';
|
||||||
|
import {SCLanguageSetting, SCSetting, SCUserGroupSetting} from '../things/setting';
|
||||||
|
import {SCFeatureConfiguration} from './feature';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An app configuration menu item
|
* An app configuration menu item
|
||||||
@@ -80,15 +82,22 @@ export interface SCAppConfigurationMenuCategory {
|
|||||||
* An app configuration
|
* An app configuration
|
||||||
*/
|
*/
|
||||||
export interface SCAppConfiguration {
|
export interface SCAppConfiguration {
|
||||||
|
/**
|
||||||
|
* The about page
|
||||||
|
*
|
||||||
|
* Mapping route -> page config
|
||||||
|
*/
|
||||||
|
aboutPages: SCMap<SCAboutPage>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Polygon that encapsulates the main campus
|
* Polygon that encapsulates the main campus
|
||||||
*/
|
*/
|
||||||
campusPolygon: Polygon;
|
campusPolygon: Polygon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of features to en- or disable
|
* Maps of enabled features (plugins and external services)
|
||||||
*/
|
*/
|
||||||
features: SCAppConfigurationFeature;
|
features: SCFeatureConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A URL where images are available
|
* A URL where images are available
|
||||||
@@ -112,8 +121,9 @@ export interface SCAppConfiguration {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of available settings in the app
|
* 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
|
* Map of store URLs
|
||||||
@@ -126,16 +136,6 @@ export interface SCAppConfiguration {
|
|||||||
url?: string;
|
url?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Map of features
|
|
||||||
*/
|
|
||||||
export interface SCAppConfigurationFeature {
|
|
||||||
/**
|
|
||||||
* Whether or not widgets are enabled
|
|
||||||
*/
|
|
||||||
widgets: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URLs of published apps
|
* URLs of published apps
|
||||||
*/
|
*/
|
||||||
@@ -173,3 +173,147 @@ export interface SCAppConfigurationMenuCategoryTranslationName {
|
|||||||
*/
|
*/
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum SCAboutPageContentType {
|
||||||
|
SECTION = 'section',
|
||||||
|
ROUTER_LINK = 'router link',
|
||||||
|
TABLE = 'table',
|
||||||
|
MARKDOWN = 'markdown',
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SCAboutPageTranslationTitle {
|
||||||
|
/**
|
||||||
|
* Translation of the title
|
||||||
|
*/
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SCAboutPageTranslationValue {
|
||||||
|
/**
|
||||||
|
* Translation of the value
|
||||||
|
*/
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A (mostly) self-contained section, akin to markdown `# Title`
|
||||||
|
*/
|
||||||
|
export interface SCAboutPageSection {
|
||||||
|
/**
|
||||||
|
* If the section should be contained in a card
|
||||||
|
*/
|
||||||
|
card?: true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The content of the section
|
||||||
|
*/
|
||||||
|
content: SCAboutPageContent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The title of the section
|
||||||
|
*/
|
||||||
|
title: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translations
|
||||||
|
*/
|
||||||
|
translations: SCTranslations<SCAboutPageTranslationTitle>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type
|
||||||
|
*/
|
||||||
|
type: SCAboutPageContentType.SECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A router link that can lead to a new page
|
||||||
|
*
|
||||||
|
* For external links, prefer markdown `[destination](link)`
|
||||||
|
*/
|
||||||
|
export interface SCAboutPageRouterLink {
|
||||||
|
/**
|
||||||
|
* Icon of the destination
|
||||||
|
*/
|
||||||
|
icon?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Router link
|
||||||
|
*/
|
||||||
|
link: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Title of the destination
|
||||||
|
*/
|
||||||
|
title: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translations
|
||||||
|
*/
|
||||||
|
translations: SCTranslations<SCAboutPageTranslationTitle>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type
|
||||||
|
*/
|
||||||
|
type: SCAboutPageContentType.ROUTER_LINK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple table element
|
||||||
|
*/
|
||||||
|
export interface SCAboutPageTable {
|
||||||
|
/**
|
||||||
|
* Rows of the table
|
||||||
|
*/
|
||||||
|
rows: SCAboutPageContent[][];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type
|
||||||
|
*/
|
||||||
|
type: SCAboutPageContentType.TABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A markdown element
|
||||||
|
*/
|
||||||
|
export interface SCAboutPageMarkdown {
|
||||||
|
/**
|
||||||
|
* Translations
|
||||||
|
*/
|
||||||
|
translations: SCTranslations<SCAboutPageTranslationValue>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type
|
||||||
|
*/
|
||||||
|
type: SCAboutPageContentType.MARKDOWN;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value (Markdown)
|
||||||
|
*/
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type SCAboutPageContent =
|
||||||
|
| SCAboutPageMarkdown
|
||||||
|
| SCAboutPageTable
|
||||||
|
| SCAboutPageSection
|
||||||
|
| SCAboutPageRouterLink;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Root of the about page
|
||||||
|
*/
|
||||||
|
export interface SCAboutPage {
|
||||||
|
/**
|
||||||
|
* Content of the page
|
||||||
|
*/
|
||||||
|
content: SCAboutPageContent[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Header (title) of the page
|
||||||
|
*/
|
||||||
|
title: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translations
|
||||||
|
*/
|
||||||
|
translations: SCTranslations<SCAboutPageTranslationTitle>;
|
||||||
|
}
|
||||||
|
|||||||
96
src/config/authorization.ts
Normal file
96
src/config/authorization.ts
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* 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 {SCUserConfigurationMap} from './user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supported authorization provider types
|
||||||
|
*
|
||||||
|
* @see https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1
|
||||||
|
* @see https://github.com/gbv/paia
|
||||||
|
*/
|
||||||
|
export type SCAuthorizationProviderType = 'default' | 'paia' ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider complete configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProvider {
|
||||||
|
/**
|
||||||
|
* An authorization provider client configuration
|
||||||
|
*/
|
||||||
|
client: SCAuthorizationProviderClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider endpoints configuration
|
||||||
|
*/
|
||||||
|
endpoints: SCAuthorizationProviderEndpoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider client configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProviderClient {
|
||||||
|
/**
|
||||||
|
* Client ID
|
||||||
|
*/
|
||||||
|
clientId: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scopes to request
|
||||||
|
*/
|
||||||
|
scopes: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main url to reach authorization provider
|
||||||
|
*/
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider endpoints configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProviderEndpoints {
|
||||||
|
/**
|
||||||
|
* URL to start authentication flow
|
||||||
|
*/
|
||||||
|
authorization: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to end current session
|
||||||
|
*/
|
||||||
|
endSession?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping of how to create SCUser from userinfo endpoint response (using JSONPath syntax)
|
||||||
|
*
|
||||||
|
* @see https://www.npmjs.com/package/jsonpath
|
||||||
|
*/
|
||||||
|
mapping: SCUserConfigurationMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to revoke a token
|
||||||
|
*/
|
||||||
|
revoke?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to get access Token
|
||||||
|
*/
|
||||||
|
token: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to general user info endpoint
|
||||||
|
*/
|
||||||
|
userinfo: string;
|
||||||
|
}
|
||||||
49
src/config/feature.ts
Normal file
49
src/config/feature.ts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* 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 {SCMap} from '../general/map';
|
||||||
|
import {SCAuthorizationProviderType} from './authorization';
|
||||||
|
|
||||||
|
export interface SCFeatureConfiguration {
|
||||||
|
/**
|
||||||
|
* Map of extern services mapped by their name (statically)
|
||||||
|
*/
|
||||||
|
extern?: SCMap<SCFeatureConfigurationExtern>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of plugins registered with the backend mapped by their name.
|
||||||
|
*/
|
||||||
|
plugins?: SCMap<SCFeatureConfigurationPlugin>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface SCFeatureConfigurationPlugin {
|
||||||
|
/**
|
||||||
|
* URL path registered with the backend
|
||||||
|
*/
|
||||||
|
urlPath: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SCFeatureConfigurationExtern {
|
||||||
|
/**
|
||||||
|
* Key of authorization provider available in SCConfigFile
|
||||||
|
*/
|
||||||
|
authProvider?: SCAuthorizationProviderType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL of extern service
|
||||||
|
*/
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
import {SCLicensePlate} from '../general/namespaces';
|
import {SCLicensePlate} from '../general/namespaces';
|
||||||
import {SCAppConfiguration} from './app';
|
import {SCAppConfiguration} from './app';
|
||||||
|
import {SCAuthorizationProvider, SCAuthorizationProviderType} from './authorization';
|
||||||
import {SCBackendConfiguration, SCBackendInternalConfiguration} from './backend';
|
import {SCBackendConfiguration, SCBackendInternalConfiguration} from './backend';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +28,11 @@ export interface SCConfigFile {
|
|||||||
*/
|
*/
|
||||||
app: SCAppConfiguration;
|
app: SCAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration for the supported authorization providers
|
||||||
|
*/
|
||||||
|
auth: { [key in SCAuthorizationProviderType]?: SCAuthorizationProvider; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration for the backend that is visible to clients
|
* Configuration for the backend that is visible to clients
|
||||||
*/
|
*/
|
||||||
|
|||||||
64
src/config/user.ts
Normal file
64
src/config/user.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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User configuration keys mapped to string type while including their requiredness
|
||||||
|
*/
|
||||||
|
export type SCUserConfigurationMap = { [K in keyof SCUserConfigurationOptional]?: string } & { [K in keyof SCUserConfigurationRequired]: string };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configuration
|
||||||
|
*/
|
||||||
|
export type SCUserConfiguration = SCUserConfigurationRequired & SCUserConfigurationOptional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configurations required properties
|
||||||
|
*/
|
||||||
|
interface SCUserConfigurationRequired {
|
||||||
|
/**
|
||||||
|
* ID given to the user
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* The complete name of the user combining all the parts of the name into one
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configurations optional properties
|
||||||
|
*/
|
||||||
|
interface SCUserConfigurationOptional {
|
||||||
|
/**
|
||||||
|
* User's e-mail
|
||||||
|
*/
|
||||||
|
email?: string;
|
||||||
|
/**
|
||||||
|
* User's family name
|
||||||
|
*/
|
||||||
|
familyName?: string;
|
||||||
|
/**
|
||||||
|
* User's given name
|
||||||
|
*/
|
||||||
|
givenName?: string;
|
||||||
|
/**
|
||||||
|
* Role assigned to the user
|
||||||
|
*/
|
||||||
|
role?: string;
|
||||||
|
/**
|
||||||
|
* Student ID given to the user
|
||||||
|
*/
|
||||||
|
studentId?: string;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
41
src/meta.ts
41
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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -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';
|
||||||
@@ -27,8 +28,14 @@ import {SCFavorite, SCFavoriteMeta, SCFavoriteWithoutReferences} from './things/
|
|||||||
import {SCFloor, SCFloorMeta, SCFloorWithoutReferences} from './things/floor';
|
import {SCFloor, SCFloorMeta, SCFloorWithoutReferences} from './things/floor';
|
||||||
import {SCMessage, SCMessageMeta, SCMessageWithoutReferences} from './things/message';
|
import {SCMessage, SCMessageMeta, SCMessageWithoutReferences} from './things/message';
|
||||||
import {SCOrganization, SCOrganizationMeta, SCOrganizationWithoutReferences} from './things/organization';
|
import {SCOrganization, SCOrganizationMeta, SCOrganizationWithoutReferences} from './things/organization';
|
||||||
|
import {SCPeriodical, SCPeriodicalMeta, SCPeriodicalWithoutReferences} from './things/periodical';
|
||||||
import {SCPerson, SCPersonMeta, SCPersonWithoutReferences} from './things/person';
|
import {SCPerson, SCPersonMeta, SCPersonWithoutReferences} from './things/person';
|
||||||
import {SCPointOfInterest, SCPointOfInterestMeta, SCPointOfInterestWithoutReferences} from './things/point-of-interest';
|
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 {SCRoom, SCRoomMeta, SCRoomWithoutReferences} from './things/room';
|
||||||
import {SCSemester, SCSemesterMeta, SCSemesterWithoutReferences} from './things/semester';
|
import {SCSemester, SCSemesterMeta, SCSemesterWithoutReferences} from './things/semester';
|
||||||
import {SCSetting, SCSettingMeta, SCSettingWithoutReferences} from './things/setting';
|
import {SCSetting, SCSettingMeta, SCSettingWithoutReferences} from './things/setting';
|
||||||
@@ -45,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,
|
||||||
@@ -59,8 +67,10 @@ export const SCClasses: { [K in SCThingType]: object } = {
|
|||||||
'floor': SCFloorMeta,
|
'floor': SCFloorMeta,
|
||||||
'message': SCMessageMeta,
|
'message': SCMessageMeta,
|
||||||
'organization': SCOrganizationMeta,
|
'organization': SCOrganizationMeta,
|
||||||
|
'periodical': SCPeriodicalMeta,
|
||||||
'person': SCPersonMeta,
|
'person': SCPersonMeta,
|
||||||
'point of interest': SCPointOfInterestMeta,
|
'point of interest': SCPointOfInterestMeta,
|
||||||
|
'publication event': SCPublicationEventMeta,
|
||||||
'room': SCRoomMeta,
|
'room': SCRoomMeta,
|
||||||
'semester': SCSemesterMeta,
|
'semester': SCSemesterMeta,
|
||||||
'setting': SCSettingMeta,
|
'setting': SCSettingMeta,
|
||||||
@@ -72,25 +82,26 @@ export const SCClasses: { [K in SCThingType]: object } = {
|
|||||||
'video': SCVideoMeta,
|
'video': SCVideoMeta,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SCThingsWithoutDiff =
|
export type SCIndexableThings =
|
||||||
SCAcademicEvent
|
SCAssessment
|
||||||
|
| SCAcademicEvent
|
||||||
| SCArticle
|
| SCArticle
|
||||||
| SCBook
|
| SCBook
|
||||||
| SCBuilding
|
| SCBuilding
|
||||||
| SCCatalog
|
| SCCatalog
|
||||||
| SCContactPoint
|
| SCContactPoint
|
||||||
| SCCourseOfStudies
|
| SCCourseOfStudy
|
||||||
| SCDateSeries
|
| SCDateSeries
|
||||||
| SCDish
|
| SCDish
|
||||||
| SCFavorite
|
|
||||||
| SCFloor
|
| SCFloor
|
||||||
| SCMessage
|
| SCMessage
|
||||||
| SCOrganization
|
| SCOrganization
|
||||||
|
| SCPeriodical
|
||||||
| SCPerson
|
| SCPerson
|
||||||
| SCPointOfInterest
|
| SCPointOfInterest
|
||||||
|
| SCPublicationEvent
|
||||||
| SCRoom
|
| SCRoom
|
||||||
| SCSemester
|
| SCSemester
|
||||||
| SCSetting
|
|
||||||
| SCSportCourse
|
| SCSportCourse
|
||||||
| SCStudyModule
|
| SCStudyModule
|
||||||
| SCTicket
|
| SCTicket
|
||||||
@@ -102,8 +113,8 @@ export type SCThingsWithoutDiff =
|
|||||||
* An object that exists in the StAppsCore
|
* An object that exists in the StAppsCore
|
||||||
*/
|
*/
|
||||||
export type SCThings =
|
export type SCThings =
|
||||||
SCThingsWithoutDiff
|
SCIndexableThings
|
||||||
| SCDiff;
|
| SCDiff | SCFavorite | SCSetting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A field of a thing
|
* A field of a thing
|
||||||
@@ -114,13 +125,14 @@ 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 SCAssessment ? SCAssessmentWithoutReferences :
|
||||||
THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences :
|
THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences :
|
||||||
THING extends SCArticle ? SCArticleWithoutReferences :
|
THING extends SCArticle ? SCArticleWithoutReferences :
|
||||||
THING extends SCBook ? SCBookWithoutReferences :
|
THING extends SCBook ? SCBookWithoutReferences :
|
||||||
THING extends SCBuilding ? SCBuildingWithoutReferences :
|
THING extends SCBuilding ? SCBuildingWithoutReferences :
|
||||||
THING extends SCCatalog ? SCCatalogWithoutReferences :
|
THING extends SCCatalog ? SCCatalogWithoutReferences :
|
||||||
THING extends SCContactPoint ? SCContactPointWithoutReferences :
|
THING extends SCContactPoint ? SCContactPointWithoutReferences :
|
||||||
THING extends SCCourseOfStudies ? SCCourseOfStudiesWithoutReferences :
|
THING extends SCCourseOfStudy ? SCCourseOfStudyWithoutReferences :
|
||||||
THING extends SCDateSeries ? SCDateSeriesWithoutReferences :
|
THING extends SCDateSeries ? SCDateSeriesWithoutReferences :
|
||||||
THING extends SCDiff ? SCDiffWithoutReferences :
|
THING extends SCDiff ? SCDiffWithoutReferences :
|
||||||
THING extends SCDish ? SCDishWithoutReferences :
|
THING extends SCDish ? SCDishWithoutReferences :
|
||||||
@@ -128,8 +140,10 @@ export type SCAssociatedThingWithoutReferences<THING extends SCThings> =
|
|||||||
THING extends SCFloor ? SCFloorWithoutReferences :
|
THING extends SCFloor ? SCFloorWithoutReferences :
|
||||||
THING extends SCMessage ? SCMessageWithoutReferences :
|
THING extends SCMessage ? SCMessageWithoutReferences :
|
||||||
THING extends SCOrganization ? SCOrganizationWithoutReferences :
|
THING extends SCOrganization ? SCOrganizationWithoutReferences :
|
||||||
|
THING extends SCPeriodical ? SCPeriodicalWithoutReferences :
|
||||||
THING extends SCPerson ? SCPersonWithoutReferences :
|
THING extends SCPerson ? SCPersonWithoutReferences :
|
||||||
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
|
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
|
||||||
|
THING extends SCPublicationEvent ? SCPublicationEventWithoutReferences :
|
||||||
THING extends SCRoom ? SCRoomWithoutReferences :
|
THING extends SCRoom ? SCRoomWithoutReferences :
|
||||||
THING extends SCSemester ? SCSemesterWithoutReferences :
|
THING extends SCSemester ? SCSemesterWithoutReferences :
|
||||||
THING extends SCSetting ? SCSettingWithoutReferences :
|
THING extends SCSetting ? SCSettingWithoutReferences :
|
||||||
@@ -145,13 +159,14 @@ export type SCAssociatedThingWithoutReferences<THING extends SCThings> =
|
|||||||
* 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 SCAssessmentWithoutReferences ? SCAssessment :
|
||||||
THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent :
|
THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent :
|
||||||
THING extends SCArticleWithoutReferences ? SCArticle :
|
THING extends SCArticleWithoutReferences ? SCArticle :
|
||||||
THING extends SCBookWithoutReferences ? SCBook :
|
THING extends SCBookWithoutReferences ? SCBook :
|
||||||
THING extends SCBuildingWithoutReferences ? SCBuilding :
|
THING extends SCBuildingWithoutReferences ? SCBuilding :
|
||||||
THING extends SCCatalogWithoutReferences ? SCCatalog :
|
THING extends SCCatalogWithoutReferences ? SCCatalog :
|
||||||
THING extends SCContactPointWithoutReferences ? SCContactPoint :
|
THING extends SCContactPointWithoutReferences ? SCContactPoint :
|
||||||
THING extends SCCourseOfStudiesWithoutReferences ? SCCourseOfStudies :
|
THING extends SCCourseOfStudyWithoutReferences ? SCCourseOfStudy :
|
||||||
THING extends SCDateSeriesWithoutReferences ? SCDateSeries :
|
THING extends SCDateSeriesWithoutReferences ? SCDateSeries :
|
||||||
THING extends SCDiffWithoutReferences ? SCDiff :
|
THING extends SCDiffWithoutReferences ? SCDiff :
|
||||||
THING extends SCDishWithoutReferences ? SCDish :
|
THING extends SCDishWithoutReferences ? SCDish :
|
||||||
@@ -159,8 +174,10 @@ export type SCAssociatedThing<THING extends SCThings> =
|
|||||||
THING extends SCFloorWithoutReferences ? SCFloor :
|
THING extends SCFloorWithoutReferences ? SCFloor :
|
||||||
THING extends SCMessageWithoutReferences ? SCMessage :
|
THING extends SCMessageWithoutReferences ? SCMessage :
|
||||||
THING extends SCOrganizationWithoutReferences ? SCOrganization :
|
THING extends SCOrganizationWithoutReferences ? SCOrganization :
|
||||||
|
THING extends SCPeriodicalWithoutReferences ? SCPeriodical :
|
||||||
THING extends SCPersonWithoutReferences ? SCPerson :
|
THING extends SCPersonWithoutReferences ? SCPerson :
|
||||||
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
|
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
|
||||||
|
THING extends SCPublicationEventWithoutReferences ? SCPublicationEvent :
|
||||||
THING extends SCRoomWithoutReferences ? SCRoom :
|
THING extends SCRoomWithoutReferences ? SCRoom :
|
||||||
THING extends SCSemesterWithoutReferences ? SCSemester :
|
THING extends SCSemesterWithoutReferences ? SCSemester :
|
||||||
THING extends SCSettingWithoutReferences ? SCSetting :
|
THING extends SCSettingWithoutReferences ? SCSetting :
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {BAD_GATEWAY} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned, when an internal server error occurred
|
* An error that is returned, when an internal server error occurred
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCInternalServerErrorResponse extends SCError {
|
export class SCInternalServerErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +34,7 @@ export class SCInternalServerErrorResponse extends SCError {
|
|||||||
* and the internal server error should be displayed to the client
|
* and the internal server error should be displayed to the client
|
||||||
*/
|
*/
|
||||||
constructor(err?: Error, stack = false) {
|
constructor(err?: Error, stack = false) {
|
||||||
super('InternalServerError', 'Internal server error', BAD_GATEWAY, stack);
|
super('InternalServerError', 'Internal server error', StatusCodes.BAD_GATEWAY, stack);
|
||||||
|
|
||||||
if (stack) {
|
if (stack) {
|
||||||
this.additionalData = err;
|
this.additionalData = err;
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {METHOD_NOT_ALLOWED} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned, when the used HTTP method is not allowed on the requested route
|
* An error that is returned, when the used HTTP method is not allowed on the requested route
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCMethodNotAllowedErrorResponse extends SCError {
|
export class SCMethodNotAllowedErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +27,6 @@ export class SCMethodNotAllowedErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(stack?: boolean) {
|
constructor(stack?: boolean) {
|
||||||
super('MethodNotAllowedError', 'HTTP method is not allowed on this route', METHOD_NOT_ALLOWED, stack);
|
super('MethodNotAllowedError', 'HTTP method is not allowed on this route', StatusCodes.METHOD_NOT_ALLOWED, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {NOT_FOUND} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned when the requested route or resource was not found
|
* An error that is returned when the requested route or resource was not found
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCNotFoundErrorResponse extends SCError {
|
export class SCNotFoundErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +27,6 @@ export class SCNotFoundErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(stack?: boolean) {
|
constructor(stack?: boolean) {
|
||||||
super('NotFoundError', 'Resource not found', NOT_FOUND, stack);
|
super('NotFoundError', 'Resource not found', StatusCodes.NOT_FOUND, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,14 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {NOT_ACCEPTABLE} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
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
|
* An error that is returned when the request is in the right format, but contains parameters that are invalid or not
|
||||||
* acceptable.
|
* acceptable.
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCParametersNotAcceptable extends SCError {
|
export class SCParametersNotAcceptable extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +29,6 @@ export class SCParametersNotAcceptable extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(message: string, stack?: boolean) {
|
constructor(message: string, stack?: boolean) {
|
||||||
super('ParametersNotAcceptable', message, NOT_ACCEPTABLE, stack);
|
super('ParametersNotAcceptable', message, StatusCodes.NOT_ACCEPTABLE, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {CONFLICT} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
import {SCPluginMetaData} from '../routes/plugin-register';
|
import {SCPluginMetaData} from '../routes/plugin-register';
|
||||||
|
|
||||||
@@ -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
|
* 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.
|
* running at the same time.
|
||||||
* This usually indicates that there is more than one instance a plugin running.
|
* This usually indicates that there is more than one instance a plugin running.
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCPluginAlreadyRegisteredErrorResponse extends SCError {
|
export class SCPluginAlreadyRegisteredErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -36,7 +38,7 @@ export class SCPluginAlreadyRegisteredErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(message: string, plugin: SCPluginMetaData, stack = false) {
|
constructor(message: string, plugin: SCPluginMetaData, stack = false) {
|
||||||
super('SCPluginAlreadyRegisteredError', message, CONFLICT, stack);
|
super('SCPluginAlreadyRegisteredError', message, StatusCodes.CONFLICT, stack);
|
||||||
if (stack) {
|
if (stack) {
|
||||||
this.additionalData = plugin;
|
this.additionalData = plugin;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {INTERNAL_SERVER_ERROR} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned whenever there is an unexpected error while creating a plugin
|
* An error that is returned whenever there is an unexpected error while creating a plugin
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCPluginRegisteringFailedErrorResponse extends SCError {
|
export class SCPluginRegisteringFailedErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -26,6 +28,6 @@ export class SCPluginRegisteringFailedErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(message: string, stack?: boolean) {
|
constructor(message: string, stack?: boolean) {
|
||||||
super('PluginRegisteringFailedError', message, INTERNAL_SERVER_ERROR, stack);
|
super('PluginRegisteringFailedError', message, StatusCodes.INTERNAL_SERVER_ERROR, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {REQUEST_TOO_LONG} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned, when the request body is too large.
|
* An error that is returned, when the request body is too large.
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCRequestBodyTooLargeErrorResponse extends SCError {
|
export class SCRequestBodyTooLargeErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +27,6 @@ export class SCRequestBodyTooLargeErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(stack?: boolean) {
|
constructor(stack?: boolean) {
|
||||||
super('RequestBodyTooLargeError', 'The request body is too large.', REQUEST_TOO_LONG, stack);
|
super('RequestBodyTooLargeError', 'The request body is too large.', StatusCodes.REQUEST_TOO_LONG, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {BAD_REQUEST} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned whenever there is a syntax error
|
* An error that is returned whenever there is a syntax error
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCSyntaxErrorResponse extends SCError {
|
export class SCSyntaxErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -26,6 +28,6 @@ export class SCSyntaxErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(message: string, stack?: boolean) {
|
constructor(message: string, stack?: boolean) {
|
||||||
super('SyntaxError', message, BAD_REQUEST, stack);
|
super('SyntaxError', message, StatusCodes.BAD_REQUEST, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {TOO_MANY_REQUESTS} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned, when to many request are submitted at once
|
* An error that is returned, when to many request are submitted at once
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCTooManyRequestsErrorResponse extends SCError {
|
export class SCTooManyRequestsErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -28,7 +30,7 @@ export class SCTooManyRequestsErrorResponse extends SCError {
|
|||||||
super(
|
super(
|
||||||
'TooManyRequestsError',
|
'TooManyRequestsError',
|
||||||
'Too many requests. You can not submit more than 5 queries an once',
|
'Too many requests. You can not submit more than 5 queries an once',
|
||||||
TOO_MANY_REQUESTS,
|
StatusCodes.TOO_MANY_REQUESTS,
|
||||||
stack,
|
stack,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {UNSUPPORTED_MEDIA_TYPE} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned when the content type of the request is not supported
|
* An error that is returned when the content type of the request is not supported
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCUnsupportedMediaTypeErrorResponse extends SCError {
|
export class SCUnsupportedMediaTypeErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -25,6 +27,6 @@ export class SCUnsupportedMediaTypeErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(stack?: boolean) {
|
constructor(stack?: boolean) {
|
||||||
super('UnsupportedMediaTypeError', 'Unsupported media type', UNSUPPORTED_MEDIA_TYPE, stack);
|
super('UnsupportedMediaTypeError', 'Unsupported media type', StatusCodes.UNSUPPORTED_MEDIA_TYPE, stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,14 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {ValidationError} from '@openstapps/core-tools/lib/common';
|
import {ValidationError} from '@openstapps/core-tools/lib/types/validator';
|
||||||
import {BAD_REQUEST} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCError} from '../error';
|
import {SCError} from '../error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An error that is returned when the validation of a request fails
|
* An error that is returned when the validation of a request fails
|
||||||
|
*
|
||||||
|
* @validatable
|
||||||
*/
|
*/
|
||||||
export class SCValidationErrorResponse extends SCError {
|
export class SCValidationErrorResponse extends SCError {
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +34,7 @@ export class SCValidationErrorResponse extends SCError {
|
|||||||
* @param stack Set to true if a stack trace should be created
|
* @param stack Set to true if a stack trace should be created
|
||||||
*/
|
*/
|
||||||
constructor(errors: ValidationError[], stack?: boolean) {
|
constructor(errors: ValidationError[], stack?: boolean) {
|
||||||
super('ValidationError', 'Validation of request failed', BAD_REQUEST, stack);
|
super('ValidationError', 'Validation of request failed', StatusCodes.BAD_REQUEST, stack);
|
||||||
this.additionalData = errors;
|
this.additionalData = errors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ export interface SCRoute {
|
|||||||
statusCodeSuccess: number;
|
statusCodeSuccess: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URL fragment of the route
|
* URL path of the route
|
||||||
*/
|
*/
|
||||||
urlFragment: string;
|
urlPath: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,16 +112,16 @@ export abstract class SCAbstractRoute implements SCRoute {
|
|||||||
*/
|
*/
|
||||||
statusCodeSuccess = 200;
|
statusCodeSuccess = 200;
|
||||||
/**
|
/**
|
||||||
* @see SCRoute.urlFragment
|
* @see SCRoute.urlPath
|
||||||
*/
|
*/
|
||||||
urlFragment = '/';
|
urlPath = '/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get "compiled" URL fragment
|
* Get "compiled" URL path
|
||||||
*
|
*
|
||||||
* @param parameters Parameters to compile URL fragment with
|
* @param parameters Parameters to compile URL path with
|
||||||
*/
|
*/
|
||||||
public getUrlFragment(parameters: SCMap<string> = {}): string {
|
public getUrlPath(parameters: SCMap<string> = {}): string {
|
||||||
let obligatoryParameters: string[] = [];
|
let obligatoryParameters: string[] = [];
|
||||||
|
|
||||||
if (typeof this.obligatoryParameters === 'object') {
|
if (typeof this.obligatoryParameters === 'object') {
|
||||||
@@ -132,7 +132,7 @@ export abstract class SCAbstractRoute implements SCRoute {
|
|||||||
throw new Error('Extraneous parameters provided.');
|
throw new Error('Extraneous parameters provided.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.urlFragment
|
return this.urlPath
|
||||||
.split('/')
|
.split('/')
|
||||||
.map((part) => {
|
.map((part) => {
|
||||||
if (part.indexOf(':') !== 0) {
|
if (part.indexOf(':') !== 0) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCUuid} from '../../general/uuid';
|
import {SCUuid} from '../../general/uuid';
|
||||||
import {SCAcademicPriceGroup, SCThingThatCanBeOfferedOffer} from '../../things/abstract/thing-that-can-be-offered';
|
import {SCAcademicPriceGroup, SCThingThatCanBeOfferedOffer} from '../../things/abstract/thing-that-can-be-offered';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
@@ -88,7 +88,7 @@ export class SCBookAvailabilityRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCBookAvailabilityRequest';
|
this.requestBodyName = 'SCBookAvailabilityRequest';
|
||||||
this.responseBodyName = 'SCBookAvailabilityResponse';
|
this.responseBodyName = 'SCBookAvailabilityResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/bookAvailability';
|
this.urlPath = '/bookAvailability';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {CREATED} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCThings} from '../../meta';
|
import {SCThings} from '../../meta';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -59,7 +59,7 @@ export class SCBulkAddRoute extends SCAbstractRoute {
|
|||||||
};
|
};
|
||||||
this.requestBodyName = 'SCBulkAddRequest';
|
this.requestBodyName = 'SCBulkAddRequest';
|
||||||
this.responseBodyName = 'SCBulkAddResponse';
|
this.responseBodyName = 'SCBulkAddResponse';
|
||||||
this.statusCodeSuccess = CREATED;
|
this.statusCodeSuccess = StatusCodes.CREATED;
|
||||||
this.urlFragment = '/bulk/:UID';
|
this.urlPath = '/bulk/:UID';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {NO_CONTENT} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
import {SCNotFoundErrorResponse} from '../errors/not-found';
|
import {SCNotFoundErrorResponse} from '../errors/not-found';
|
||||||
@@ -59,7 +59,7 @@ export class SCBulkDoneRoute extends SCAbstractRoute {
|
|||||||
};
|
};
|
||||||
this.requestBodyName = 'SCBulkDoneRequest';
|
this.requestBodyName = 'SCBulkDoneRequest';
|
||||||
this.responseBodyName = 'SCBulkDoneResponse';
|
this.responseBodyName = 'SCBulkDoneResponse';
|
||||||
this.statusCodeSuccess = NO_CONTENT;
|
this.statusCodeSuccess = StatusCodes.NO_CONTENT;
|
||||||
this.urlFragment = '/bulk/:UID/done';
|
this.urlPath = '/bulk/:UID/done';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCISO8601Date} from '../../general/time';
|
import {SCISO8601Date} from '../../general/time';
|
||||||
import {SCUuid} from '../../general/uuid';
|
import {SCUuid} from '../../general/uuid';
|
||||||
import {SCThingType} from '../../things/abstract/thing';
|
import {SCThingType} from '../../things/abstract/thing';
|
||||||
@@ -98,7 +98,7 @@ export class SCBulkRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCBulkRequest';
|
this.requestBodyName = 'SCBulkRequest';
|
||||||
this.responseBodyName = 'SCBulkResponse';
|
this.responseBodyName = 'SCBulkResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/bulk';
|
this.urlPath = '/bulk';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {NO_CONTENT} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCMessage} from '../../things/message';
|
import {SCMessage} from '../../things/message';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -59,8 +59,8 @@ export class SCFeedbackRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCFeedbackRequest';
|
this.requestBodyName = 'SCFeedbackRequest';
|
||||||
this.responseBodyName = 'SCFeedbackResponse';
|
this.responseBodyName = 'SCFeedbackResponse';
|
||||||
this.statusCodeSuccess = NO_CONTENT;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/feedback';
|
this.urlPath = '/feedback';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,9 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCAppConfiguration} from '../../config/app';
|
import {SCAppConfiguration} from '../../config/app';
|
||||||
|
import {SCAuthorizationProvider, SCAuthorizationProviderType} from '../../config/authorization';
|
||||||
import {SCBackendConfiguration} from '../../config/backend';
|
import {SCBackendConfiguration} from '../../config/backend';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -42,6 +43,11 @@ export interface SCIndexResponse {
|
|||||||
*/
|
*/
|
||||||
app: SCAppConfiguration;
|
app: SCAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see SCAuthorizationProvider
|
||||||
|
*/
|
||||||
|
auth: { [key in SCAuthorizationProviderType]?: SCAuthorizationProvider; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see SCBackendConfiguration
|
* @see SCBackendConfiguration
|
||||||
*/
|
*/
|
||||||
@@ -65,7 +71,7 @@ export class SCIndexRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCIndexRequest';
|
this.requestBodyName = 'SCIndexRequest';
|
||||||
this.responseBodyName = 'SCIndexResponse';
|
this.responseBodyName = 'SCIndexResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/';
|
this.urlPath = '/';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {JSONSchema7} from 'json-schema';
|
import {JSONSchema7} from 'json-schema';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -122,7 +122,7 @@ export class SCPluginRegisterRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCPluginRegisterRequest';
|
this.requestBodyName = 'SCPluginRegisterRequest';
|
||||||
this.responseBodyName = 'SCPluginRegisterResponse';
|
this.responseBodyName = 'SCPluginRegisterResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/plugin/register';
|
this.urlPath = '/plugin/register';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCMap} from '../../general/map';
|
import {SCMap} from '../../general/map';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -63,7 +63,7 @@ export class SCMultiSearchRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCMultiSearchRequest';
|
this.requestBodyName = 'SCMultiSearchRequest';
|
||||||
this.responseBodyName = 'SCMultiSearchResponse';
|
this.responseBodyName = 'SCMultiSearchResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/search/multi';
|
this.urlPath = '/search/multi';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
import {SCRequestBodyTooLargeErrorResponse} from '../errors/request-body-too-large';
|
import {SCRequestBodyTooLargeErrorResponse} from '../errors/request-body-too-large';
|
||||||
@@ -56,7 +56,7 @@ export class SCSearchRoute extends SCAbstractRoute {
|
|||||||
this.method = SCRouteHttpVerbs.POST;
|
this.method = SCRouteHttpVerbs.POST;
|
||||||
this.requestBodyName = 'SCSearchRequest';
|
this.requestBodyName = 'SCSearchRequest';
|
||||||
this.responseBodyName = 'SCSearchResponse';
|
this.responseBodyName = 'SCSearchResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/search';
|
this.urlPath = '/search';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {OK} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCThings} from '../../meta';
|
import {SCThings} from '../../meta';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -55,12 +55,12 @@ export class SCThingUpdateRoute extends SCAbstractRoute {
|
|||||||
];
|
];
|
||||||
this.method = SCRouteHttpVerbs.PUT;
|
this.method = SCRouteHttpVerbs.PUT;
|
||||||
this.obligatoryParameters = {
|
this.obligatoryParameters = {
|
||||||
TYPE: 'SCThingTypes',
|
TYPE: 'SCThingType',
|
||||||
UID: 'SCUuid',
|
UID: 'SCUuid',
|
||||||
};
|
};
|
||||||
this.requestBodyName = 'SCThingUpdateRequest';
|
this.requestBodyName = 'SCThingUpdateRequest';
|
||||||
this.responseBodyName = 'SCThingUpdateResponse';
|
this.responseBodyName = 'SCThingUpdateResponse';
|
||||||
this.statusCodeSuccess = OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/:TYPE/:UID';
|
this.urlPath = '/:TYPE/:UID';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {SCMap} from '../../general/map';
|
|||||||
import {SCSearchAvailabilityFilter} from './filters/availability';
|
import {SCSearchAvailabilityFilter} from './filters/availability';
|
||||||
import {SCSearchBooleanFilter} from './filters/boolean';
|
import {SCSearchBooleanFilter} from './filters/boolean';
|
||||||
import {SCSearchDistanceFilter} from './filters/distance';
|
import {SCSearchDistanceFilter} from './filters/distance';
|
||||||
|
import {SCGeoFilter} from './filters/geo';
|
||||||
import {SCSearchDateRangeFilter, SCSearchNumericRangeFilter} from './filters/range';
|
import {SCSearchDateRangeFilter, SCSearchNumericRangeFilter} from './filters/range';
|
||||||
import {SCSearchValueFilter} from './filters/value';
|
import {SCSearchValueFilter} from './filters/value';
|
||||||
|
|
||||||
@@ -31,7 +32,8 @@ export type SCSearchFilterType =
|
|||||||
| 'distance'
|
| 'distance'
|
||||||
| 'value'
|
| 'value'
|
||||||
| 'date range'
|
| 'date range'
|
||||||
| 'numeric range';
|
| 'numeric range'
|
||||||
|
| 'geo';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Structure of a filter instruction
|
* Structure of a filter instruction
|
||||||
@@ -62,4 +64,5 @@ export type SCSearchFilter =
|
|||||||
| SCSearchDistanceFilter
|
| SCSearchDistanceFilter
|
||||||
| SCSearchValueFilter
|
| SCSearchValueFilter
|
||||||
| SCSearchNumericRangeFilter
|
| 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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -33,17 +33,17 @@ export interface SCSearchAvailabilityFilter extends SCSearchAbstractFilter<SCAva
|
|||||||
*/
|
*/
|
||||||
export interface SCAvailabilityFilterArguments extends SCSearchAbstractFilterArguments {
|
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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -85,6 +85,15 @@ export interface SCRangeFilterArguments<T> extends SCSearchAbstractFilterArgumen
|
|||||||
* Field where the filter will be applied
|
* Field where the filter will be applied
|
||||||
*/
|
*/
|
||||||
field: SCThingsField;
|
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> {
|
export interface Bounds<T> {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export interface SCValueFilterArguments extends SCSearchAbstractFilterArguments
|
|||||||
field: SCThingsField;
|
field: SCThingsField;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value to filter. Value has to match the field exactly.
|
* Value to filter. One or more values has to match the field exactly.
|
||||||
*/
|
*/
|
||||||
value: string;
|
value: string | string[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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' ;
|
|
||||||
|
|||||||
@@ -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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -12,15 +12,15 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {SCLanguage, SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
import {SCLanguageCode, SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
||||||
import {SCISO8601Date} from '../../general/time';
|
import {SCISO8601Date} from '../../general/time';
|
||||||
import {SCOrganizationWithoutReferences} from '../organization';
|
import {SCOrganizationWithoutReferences} from '../organization';
|
||||||
import {SCPersonWithoutReferences} from '../person';
|
import {SCPersonWithoutReferences} from '../person';
|
||||||
|
import {SCPublicationEventWithoutReferences} from '../publication-event';
|
||||||
import {SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
import {SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
||||||
import {
|
import {
|
||||||
SCAcademicPriceGroup,
|
SCAcademicPriceGroup,
|
||||||
SCThingThatCanBeOffered,
|
SCThingThatCanBeOffered, SCThingThatCanBeOfferedMeta,
|
||||||
SCThingThatCanBeOfferedMeta,
|
|
||||||
SCThingThatCanBeOfferedTranslatableProperties,
|
SCThingThatCanBeOfferedTranslatableProperties,
|
||||||
SCThingThatCanBeOfferedWithoutReferences,
|
SCThingThatCanBeOfferedWithoutReferences,
|
||||||
} from './thing-that-can-be-offered';
|
} from './thing-that-can-be-offered';
|
||||||
@@ -30,17 +30,37 @@ import {
|
|||||||
*/
|
*/
|
||||||
export interface SCCreativeWorkWithoutReferences
|
export interface SCCreativeWorkWithoutReferences
|
||||||
extends SCThingWithoutReferences, SCThingThatCanBeOfferedWithoutReferences {
|
extends SCThingWithoutReferences, SCThingThatCanBeOfferedWithoutReferences {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Languages this creative work is available in
|
||||||
|
*/
|
||||||
|
availableLanguages?: SCLanguageCode[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Date the creative work was published
|
* Date the creative work was published
|
||||||
*
|
|
||||||
* @filterable
|
|
||||||
*/
|
*/
|
||||||
datePublished?: SCISO8601Date;
|
datePublished?: SCISO8601Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of languages this creative work is written/recorded/... in
|
* Edition of a creative work (e.g. the book edition or edition of an article)
|
||||||
|
*
|
||||||
|
* @keyword
|
||||||
*/
|
*/
|
||||||
inLanguages?: SCLanguage[];
|
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
|
||||||
|
*
|
||||||
|
* @filterable
|
||||||
|
*/
|
||||||
|
inLanguage?: SCLanguageCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keywords of the creative work
|
* Keywords of the creative work
|
||||||
@@ -51,6 +71,13 @@ export interface SCCreativeWorkWithoutReferences
|
|||||||
*/
|
*/
|
||||||
keywords?: string[];
|
keywords?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date (in text form) the creative work was most recently
|
||||||
|
*
|
||||||
|
* @keyword
|
||||||
|
*/
|
||||||
|
lastPublished?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated fields of the creative work
|
* Translated fields of the creative work
|
||||||
*/
|
*/
|
||||||
@@ -67,11 +94,26 @@ export interface SCCreativeWork
|
|||||||
*/
|
*/
|
||||||
authors?: SCPersonWithoutReferences[];
|
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
|
* List of publishers of the creative work
|
||||||
*/
|
*/
|
||||||
publishers?: Array<SCPersonWithoutReferences | SCOrganizationWithoutReferences>;
|
publishers?: Array<SCPersonWithoutReferences | SCOrganizationWithoutReferences>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A text representing on organization on whose behalf the creator was working
|
||||||
|
*/
|
||||||
|
sourceOrganization?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated fields of the creative work
|
* Translated fields of the creative work
|
||||||
*/
|
*/
|
||||||
@@ -103,20 +145,36 @@ export class SCCreativeWorkMeta
|
|||||||
de: {
|
de: {
|
||||||
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de,
|
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de,
|
||||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.de,
|
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.de,
|
||||||
authors: 'Authoren',
|
name: 'Titel',
|
||||||
|
authors: 'beteiligte Personen',
|
||||||
|
availableLanguages: 'verfügbare Übersetzungen',
|
||||||
datePublished: 'Veröffentlichungsdatum',
|
datePublished: 'Veröffentlichungsdatum',
|
||||||
inLanguages: 'verfügbare Übersetzungen',
|
edition: 'Ausgabe',
|
||||||
|
firstPublished: 'erste Veröffentlichung',
|
||||||
|
inLanguage: 'Inhaltssprache',
|
||||||
|
isPartOf: 'erschienen in',
|
||||||
keywords: 'Schlagwörter',
|
keywords: 'Schlagwörter',
|
||||||
|
lastPublished: 'aktuellste Veröffentlichung',
|
||||||
publishers: 'Verleger',
|
publishers: 'Verleger',
|
||||||
|
publications: 'Veröffentlichungen',
|
||||||
|
sourceOrganization: 'Körperschaft',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en,
|
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en,
|
||||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.en,
|
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.en,
|
||||||
authors: 'authors',
|
name: 'title',
|
||||||
|
authors: 'involved persons',
|
||||||
|
availableLanguages: 'available languages',
|
||||||
datePublished: 'release date',
|
datePublished: 'release date',
|
||||||
inLanguages: 'available Languages',
|
edition: 'edition',
|
||||||
|
firstPublished: 'first published',
|
||||||
|
inLanguage: 'content language',
|
||||||
|
isPartOf: 'published in',
|
||||||
keywords: 'keywords',
|
keywords: 'keywords',
|
||||||
|
lastPublished: 'last published',
|
||||||
publishers: 'publishers',
|
publishers: 'publishers',
|
||||||
|
publications: 'publications',
|
||||||
|
sourceOrganization: 'corporation',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -126,7 +184,7 @@ export class SCCreativeWorkMeta
|
|||||||
fieldValueTranslations = {
|
fieldValueTranslations = {
|
||||||
de: {
|
de: {
|
||||||
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de,
|
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de,
|
||||||
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.en,
|
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.de,
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.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
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
import {SCIndexableThings} from '../../meta';
|
||||||
import {SCThing, SCThingUserOrigin, SCThingWithoutReferences} from './thing';
|
import {SCThing, SCThingUserOrigin, SCThingWithoutReferences} from './thing';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,18 +20,17 @@ import {SCThing, SCThingUserOrigin, SCThingWithoutReferences} from './thing';
|
|||||||
*/
|
*/
|
||||||
export interface SCSaveableThingWithoutReferences
|
export interface SCSaveableThingWithoutReferences
|
||||||
extends SCThingWithoutReferences {
|
extends SCThingWithoutReferences {
|
||||||
// noop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An encapsulation of the data (e.g. a thing) that is saved, which provides additional information.
|
* 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 {
|
extends SCSaveableThingWithoutReferences, SCThing {
|
||||||
/**
|
/**
|
||||||
* The contained data
|
* The contained data
|
||||||
*/
|
*/
|
||||||
data: T;
|
data: SCIndexableThings;
|
||||||
/**
|
/**
|
||||||
* Type of the origin
|
* 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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -13,10 +13,10 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
||||||
import {SCISO8601Date} from '../../general/time';
|
|
||||||
import {SCOrganizationWithoutReferences} from '../organization';
|
import {SCOrganizationWithoutReferences} from '../organization';
|
||||||
import {SCPersonWithoutReferences} from '../person';
|
import {SCPersonWithoutReferences} from '../person';
|
||||||
import {SCInPlace} from './place';
|
import {SCInPlace} from './place';
|
||||||
|
import {SCISO8601DateRange} from './range';
|
||||||
import {SCThing, SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
import {SCThing, SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,19 +100,14 @@ export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup>
|
|||||||
availability: SCThingThatCanBeOfferedAvailability;
|
availability: SCThingThatCanBeOfferedAvailability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time when the thing becomes unavailable as an SCISO8601Date formatted string.
|
* The time when the thing is available.
|
||||||
*/
|
*/
|
||||||
availabilityEnds?: SCISO8601Date;
|
availabilityRange?: SCISO8601DateRange;
|
||||||
|
|
||||||
/**
|
|
||||||
* The time when the thing becomes available as an SCISO8601Date formatted string.
|
|
||||||
*/
|
|
||||||
availabilityStarts?: SCISO8601Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
|
||||||
|
import {SCMap} from '../../general/map';
|
||||||
import {SCISO8601Date} from '../../general/time';
|
import {SCISO8601Date} from '../../general/time';
|
||||||
import {SCUuid} from '../../general/uuid';
|
import {SCUuid} from '../../general/uuid';
|
||||||
import {SCOrganizationWithoutReferences} from '../organization';
|
import {SCOrganizationWithoutReferences} from '../organization';
|
||||||
@@ -22,13 +23,15 @@ 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',
|
||||||
|
Periodical = 'periodical',
|
||||||
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',
|
||||||
@@ -38,6 +41,7 @@ export enum SCThingType {
|
|||||||
Organization = 'organization',
|
Organization = 'organization',
|
||||||
Person = 'person',
|
Person = 'person',
|
||||||
PointOfInterest = 'point of interest',
|
PointOfInterest = 'point of interest',
|
||||||
|
PublicationEvent = 'publication event',
|
||||||
Room = 'room',
|
Room = 'room',
|
||||||
Semester = 'semester',
|
Semester = 'semester',
|
||||||
Setting = 'setting',
|
Setting = 'setting',
|
||||||
@@ -60,6 +64,7 @@ export interface SCThingWithoutReferences {
|
|||||||
* @keyword
|
* @keyword
|
||||||
*/
|
*/
|
||||||
alternateNames?: string[];
|
alternateNames?: string[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of the thing
|
* Description of the thing
|
||||||
*
|
*
|
||||||
@@ -67,12 +72,21 @@ export interface SCThingWithoutReferences {
|
|||||||
* @text
|
* @text
|
||||||
*/
|
*/
|
||||||
description?: string;
|
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
|
* URL of an image of the thing
|
||||||
*
|
*
|
||||||
* @keyword
|
* @keyword
|
||||||
*/
|
*/
|
||||||
image?: string;
|
image?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the thing
|
* Name of the thing
|
||||||
*
|
*
|
||||||
@@ -82,12 +96,21 @@ export interface SCThingWithoutReferences {
|
|||||||
* @text
|
* @text
|
||||||
*/
|
*/
|
||||||
name: string;
|
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
|
* Translations of specific values of the object
|
||||||
*
|
*
|
||||||
* Take precedence over "main" value for selected languages.
|
* Take precedence over "main" value for selected languages.
|
||||||
*/
|
*/
|
||||||
translations?: SCTranslations<SCThingTranslatableProperties>;
|
translations?: SCTranslations<SCThingTranslatableProperties>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of the thing
|
* Type of the thing
|
||||||
*
|
*
|
||||||
@@ -96,16 +119,11 @@ export interface SCThingWithoutReferences {
|
|||||||
* @aggregatable global
|
* @aggregatable global
|
||||||
*/
|
*/
|
||||||
type: SCThingType;
|
type: SCThingType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Universally unique identifier of the thing
|
* Universally unique identifier of the thing
|
||||||
*/
|
*/
|
||||||
uid: SCUuid;
|
uid: SCUuid;
|
||||||
/**
|
|
||||||
* URL of the thing
|
|
||||||
*
|
|
||||||
* @filterable
|
|
||||||
*/
|
|
||||||
url?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -252,7 +270,7 @@ export interface SCThingTranslatablePropertyOrigin {
|
|||||||
*/
|
*/
|
||||||
export class SCThingMeta implements SCMetaTranslations<SCThing> {
|
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>();
|
protected static _instance = new Map<string, unknown>();
|
||||||
|
|
||||||
@@ -263,24 +281,26 @@ export class SCThingMeta implements SCMetaTranslations<SCThing> {
|
|||||||
de: {
|
de: {
|
||||||
alternateNames: 'alternative Namen',
|
alternateNames: 'alternative Namen',
|
||||||
description: 'Beschreibung',
|
description: 'Beschreibung',
|
||||||
|
identifiers: 'Alternative Identifikation',
|
||||||
image: 'Bild',
|
image: 'Bild',
|
||||||
name: 'Name',
|
name: 'Name',
|
||||||
origin: 'Ursprung',
|
origin: 'Ursprung',
|
||||||
|
sameAs: 'ursprünglicher Link',
|
||||||
translations: 'Übersetzungen',
|
translations: 'Übersetzungen',
|
||||||
type: 'Typ',
|
type: 'Typ',
|
||||||
uid: 'Identifikation',
|
uid: 'Identifikation',
|
||||||
url: 'URL',
|
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
alternateNames: 'alternate names',
|
alternateNames: 'alternate names',
|
||||||
description: 'description',
|
description: 'description',
|
||||||
|
identifiers: 'alternative identification',
|
||||||
image: 'image',
|
image: 'image',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
origin: 'origin',
|
origin: 'origin',
|
||||||
|
sameAs: 'original link',
|
||||||
translations: 'translations',
|
translations: 'translations',
|
||||||
type: 'type',
|
type: 'type',
|
||||||
uid: 'identification',
|
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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -21,12 +21,19 @@ import {
|
|||||||
} from './abstract/creative-work';
|
} from './abstract/creative-work';
|
||||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||||
import {
|
import {
|
||||||
SCThingWithCategories,
|
|
||||||
SCThingWithCategoriesSpecificValues,
|
SCThingWithCategoriesSpecificValues,
|
||||||
SCThingWithCategoriesTranslatableProperties,
|
SCThingWithCategoriesTranslatableProperties,
|
||||||
SCThingWithCategoriesWithoutReferences,
|
SCThingWithCategoriesWithoutReferences,
|
||||||
SCThingWithCategoriesWithoutReferencesMeta,
|
SCThingWithCategoriesWithoutReferencesMeta,
|
||||||
} from './abstract/thing-with-categories';
|
} from './abstract/thing-with-categories';
|
||||||
|
import {SCPeriodicalWithoutReferences} from './periodical';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Categories of an article
|
||||||
|
*/
|
||||||
|
export type SCArticleCategories = 'unipedia'
|
||||||
|
| 'article'
|
||||||
|
| 'eArticle';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An article without references
|
* An article without references
|
||||||
@@ -39,7 +46,12 @@ export interface SCArticleWithoutReferences
|
|||||||
*
|
*
|
||||||
* @text
|
* @text
|
||||||
*/
|
*/
|
||||||
articleBody: string;
|
articleBody?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Categories of an article
|
||||||
|
*/
|
||||||
|
categories: SCArticleCategories[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated fields of an article
|
* Translated fields of an article
|
||||||
@@ -59,8 +71,16 @@ export interface SCArticleWithoutReferences
|
|||||||
* @indexable
|
* @indexable
|
||||||
*/
|
*/
|
||||||
export interface SCArticle
|
export interface SCArticle
|
||||||
extends SCCreativeWork, SCArticleWithoutReferences,
|
extends SCCreativeWork, SCArticleWithoutReferences {
|
||||||
SCThingWithCategories<SCArticleCategories, SCThingWithCategoriesSpecificValues> {
|
/**
|
||||||
|
* 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
|
* Translated fields of an article
|
||||||
*/
|
*/
|
||||||
@@ -73,12 +93,7 @@ export interface SCArticle
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Categories of articles
|
* Translatable properties of an article
|
||||||
*/
|
|
||||||
export type SCArticleCategories = 'unipedia';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Translatable properties of creative works
|
|
||||||
*/
|
*/
|
||||||
export interface SCArticleTranslatableProperties
|
export interface SCArticleTranslatableProperties
|
||||||
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
||||||
@@ -104,6 +119,8 @@ export class SCArticleMeta
|
|||||||
.de,
|
.de,
|
||||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||||
|
categories: 'Format',
|
||||||
|
reference: 'Referenz',
|
||||||
articleBody: 'Artikelinhalt',
|
articleBody: 'Artikelinhalt',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
@@ -111,6 +128,8 @@ export class SCArticleMeta
|
|||||||
.en,
|
.en,
|
||||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
||||||
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||||
|
categories: 'format',
|
||||||
|
reference: 'reference',
|
||||||
articleBody: 'article body',
|
articleBody: 'article body',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -122,19 +141,22 @@ export class SCArticleMeta
|
|||||||
de: {
|
de: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||||
.fieldValueTranslations.de,
|
.fieldValueTranslations.de,
|
||||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
|
||||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de,
|
|
||||||
categories: {
|
categories: {
|
||||||
'unipedia': 'Unipedia',
|
article: 'Artikel',
|
||||||
|
eArticle: 'E-Aufsatz',
|
||||||
|
unipedia: 'Unipedia',
|
||||||
},
|
},
|
||||||
type: 'Artikel',
|
type: 'Artikel',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||||
.fieldValueTranslations.en,
|
.fieldValueTranslations.en,
|
||||||
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories,
|
|
||||||
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en,
|
|
||||||
type: SCThingType.Article,
|
type: SCThingType.Article,
|
||||||
|
categories: {
|
||||||
|
article: 'article',
|
||||||
|
eArticle: 'E-Article',
|
||||||
|
unipedia: 'unipedia',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
162
src/things/assessment.ts
Normal file
162
src/things/assessment.ts
Normal 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,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -20,29 +20,53 @@ import {
|
|||||||
SCCreativeWorkWithoutReferences,
|
SCCreativeWorkWithoutReferences,
|
||||||
} from './abstract/creative-work';
|
} from './abstract/creative-work';
|
||||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||||
import {SCThingWithCategoriesTranslatableProperties} from './abstract/thing-with-categories';
|
import {
|
||||||
import {SCPersonWithoutReferences} from './person';
|
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'
|
||||||
|
| 'physicalobject'
|
||||||
|
| 'retro'
|
||||||
|
| 'sensorimage'
|
||||||
|
| 'unknown'
|
||||||
|
| 'video';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A book without references
|
* A book without references
|
||||||
*/
|
*/
|
||||||
export interface SCBookWithoutReferences
|
export interface SCBookWithoutReferences
|
||||||
extends SCCreativeWorkWithoutReferences {
|
extends SCCreativeWorkWithoutReferences,
|
||||||
|
SCThingWithCategoriesWithoutReferences<SCBookCategories, SCThingWithCategoriesSpecificValues> {
|
||||||
/**
|
/**
|
||||||
* Edition of a book
|
* Categories of a book
|
||||||
*
|
|
||||||
* @filterable
|
|
||||||
* @keyword
|
|
||||||
*/
|
*/
|
||||||
bookEdition?: string;
|
categories: SCBookCategories[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ISBN of a book
|
* ISBNs of a book
|
||||||
*
|
*
|
||||||
* @filterable
|
* @filterable
|
||||||
* @keyword
|
* @keyword
|
||||||
*/
|
*/
|
||||||
isbn?: string;
|
ISBNs?: string[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of pages of a book
|
* Number of pages of a book
|
||||||
@@ -70,11 +94,6 @@ export interface SCBookWithoutReferences
|
|||||||
*/
|
*/
|
||||||
export interface SCBook
|
export interface SCBook
|
||||||
extends SCCreativeWork, SCBookWithoutReferences {
|
extends SCCreativeWork, SCBookWithoutReferences {
|
||||||
/**
|
|
||||||
* Authors of the creative work
|
|
||||||
*/
|
|
||||||
authors: SCPersonWithoutReferences[];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated properties of a book
|
* Translated properties of a book
|
||||||
*/
|
*/
|
||||||
@@ -91,12 +110,6 @@ export interface SCBook
|
|||||||
*/
|
*/
|
||||||
export interface SCBookTranslatableFields
|
export interface SCBookTranslatableFields
|
||||||
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties {
|
||||||
/**
|
|
||||||
* Translation of an edition of a book
|
|
||||||
*
|
|
||||||
* @keyword
|
|
||||||
*/
|
|
||||||
bookEdition?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -108,17 +121,19 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
|
|||||||
*/
|
*/
|
||||||
fieldTranslations = {
|
fieldTranslations = {
|
||||||
de: {
|
de: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.de,
|
||||||
.de,
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||||
bookEdition: 'Buchausgabe',
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||||
isbn: 'ISBN',
|
categories: 'Format',
|
||||||
numberOfPages: 'Seitenzahl',
|
ISBNs: 'ISBN',
|
||||||
|
numberOfPages: 'Seitenanzahl',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations.en,
|
||||||
.en,
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||||
bookEdition: 'book edition',
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||||
isbn: 'ISBN',
|
categories: 'format',
|
||||||
|
ISBNs: 'ISBN',
|
||||||
numberOfPages: 'number of pages',
|
numberOfPages: 'number of pages',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -130,12 +145,56 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
|
|||||||
de: {
|
de: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||||
.fieldValueTranslations.de,
|
.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',
|
type: 'Buch',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||||
.fieldValueTranslations.en,
|
.fieldValueTranslations.en,
|
||||||
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBookCategories,
|
||||||
|
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en,
|
||||||
type: SCThingType.Book,
|
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.
|
* Needed for keeping order in catalog inheritance array.
|
||||||
*
|
*
|
||||||
|
* @filterable
|
||||||
* @integer
|
* @integer
|
||||||
*/
|
*/
|
||||||
level: number;
|
level: number;
|
||||||
|
|||||||
@@ -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' ;
|
||||||
@@ -65,9 +65,9 @@ export interface SCDateSeriesWithoutReferences
|
|||||||
/**
|
/**
|
||||||
* Frequency of the date series
|
* Frequency of the date series
|
||||||
*
|
*
|
||||||
* @keyword
|
* @filterable
|
||||||
*/
|
*/
|
||||||
frequency: string;
|
repeatFrequency?: SCISO8601Duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated properties
|
* Translated properties
|
||||||
@@ -131,7 +131,7 @@ export class SCDateSeriesMeta
|
|||||||
duration: 'Dauer',
|
duration: 'Dauer',
|
||||||
event: 'Event',
|
event: 'Event',
|
||||||
exceptions: 'Ausnahmen',
|
exceptions: 'Ausnahmen',
|
||||||
frequency: 'Frequenz',
|
repeatFrequency: 'Frequenz',
|
||||||
performers: 'Vortragende',
|
performers: 'Vortragende',
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
@@ -143,7 +143,7 @@ export class SCDateSeriesMeta
|
|||||||
duration: 'duration',
|
duration: 'duration',
|
||||||
event: 'event',
|
event: 'event',
|
||||||
exceptions: 'exceptions',
|
exceptions: 'exceptions',
|
||||||
frequency: 'frequency',
|
repeatFrequency: 'frequency',
|
||||||
performers: 'performers',
|
performers: 'performers',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -174,8 +174,4 @@ export class SCDateSeriesMeta
|
|||||||
*/
|
*/
|
||||||
export interface SCDateSeriesTranslatableProperties
|
export interface SCDateSeriesTranslatableProperties
|
||||||
extends SCThingThatCanBeOfferedTranslatableProperties {
|
extends SCThingThatCanBeOfferedTranslatableProperties {
|
||||||
/**
|
|
||||||
* @see SCDateSeriesWithoutReferences.frequency
|
|
||||||
*/
|
|
||||||
frequency?: string;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
import * as jsonpatch from 'json-patch';
|
import * as jsonpatch from 'json-patch';
|
||||||
import {SCMetaTranslations} from '../general/i18n';
|
import {SCMetaTranslations} from '../general/i18n';
|
||||||
import {SCISO8601Date} from '../general/time';
|
import {SCISO8601Date} from '../general/time';
|
||||||
import {SCThingsWithoutDiff} from '../meta';
|
import {SCIndexableThings} from '../meta';
|
||||||
import {SCThing, SCThingMeta, SCThingType, SCThingWithoutReferences} from './abstract/thing';
|
import {SCThing, SCThingMeta, SCThingType, SCThingWithoutReferences} from './abstract/thing';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,14 +48,13 @@ export interface SCDiffWithoutReferences
|
|||||||
* A diff
|
* A diff
|
||||||
*
|
*
|
||||||
* @validatable
|
* @validatable
|
||||||
* @indexable
|
|
||||||
*/
|
*/
|
||||||
export interface SCDiff
|
export interface SCDiff
|
||||||
extends SCDiffWithoutReferences, SCThing {
|
extends SCDiffWithoutReferences, SCThing {
|
||||||
/**
|
/**
|
||||||
* Original object the diff was generated on
|
* Original object the diff was generated on
|
||||||
*/
|
*/
|
||||||
object: SCThingsWithoutDiff;
|
object: SCIndexableThings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of a diff
|
* 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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -14,45 +14,24 @@
|
|||||||
*/
|
*/
|
||||||
import {SCSaveableThing, SCSaveableThingWithoutReferences} from './abstract/saveable-thing';
|
import {SCSaveableThing, SCSaveableThingWithoutReferences} from './abstract/saveable-thing';
|
||||||
import {SCThingMeta, SCThingType} from './abstract/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
|
* A favorite without references
|
||||||
*/
|
*/
|
||||||
export interface SCFavoriteWithoutReferences
|
export interface SCFavoriteWithoutReferences
|
||||||
extends SCSaveableThingWithoutReferences {
|
extends SCSaveableThingWithoutReferences {
|
||||||
// noop
|
/**
|
||||||
|
* Type of a favorite
|
||||||
|
*/
|
||||||
|
type: SCThingType.Favorite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A favorite
|
* A favorite
|
||||||
*
|
*
|
||||||
* @validatable
|
* @validatable
|
||||||
* @indexable
|
|
||||||
*/
|
*/
|
||||||
export interface SCFavorite
|
export interface SCFavorite extends SCSaveableThing {
|
||||||
extends SCSaveableThing<SCFavoriteDataTypes>, SCFavoriteWithoutReferences {
|
|
||||||
/**
|
/**
|
||||||
* Type of a favorite
|
* 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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -22,13 +22,24 @@ import {
|
|||||||
} from './abstract/creative-work';
|
} from './abstract/creative-work';
|
||||||
import {SCThingMeta, SCThingType} from './abstract/thing';
|
import {SCThingMeta, SCThingType} from './abstract/thing';
|
||||||
import {SCThingThatCanBeOfferedTranslatableProperties} from './abstract/thing-that-can-be-offered';
|
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';
|
import {SCOrganizationWithoutReferences} from './organization';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Categories of a message
|
||||||
|
*/
|
||||||
|
export type SCMessageCategories = 'news';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A message without references
|
* A message without references
|
||||||
*/
|
*/
|
||||||
export interface SCMessageWithoutReferences
|
export interface SCMessageWithoutReferences
|
||||||
extends SCCreativeWorkWithoutReferences {
|
extends SCCreativeWorkWithoutReferences,
|
||||||
|
SCThingWithCategoriesWithoutReferences<SCMessageCategories, SCThingWithCategoriesSpecificValues> {
|
||||||
/**
|
/**
|
||||||
* Organizational unit for which the message is intended
|
* Organizational unit for which the message is intended
|
||||||
*/
|
*/
|
||||||
@@ -39,7 +50,12 @@ export interface SCMessageWithoutReferences
|
|||||||
*
|
*
|
||||||
* @filterable
|
* @filterable
|
||||||
*/
|
*/
|
||||||
audiences: SCMessageAudience[];
|
audiences: SCUserGroup[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Categories of a message
|
||||||
|
*/
|
||||||
|
categories: SCMessageCategories[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the message was created
|
* When the message was created
|
||||||
@@ -90,14 +106,6 @@ export interface SCMessage
|
|||||||
type: SCThingType.Message;
|
type: SCThingType.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Audiences for messages
|
|
||||||
*/
|
|
||||||
export type SCMessageAudience =
|
|
||||||
'students'
|
|
||||||
| 'employees'
|
|
||||||
| 'guests';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translatable properties of a message
|
* Translatable properties of a message
|
||||||
*/
|
*/
|
||||||
@@ -124,6 +132,8 @@ export class SCMessageMeta
|
|||||||
de: {
|
de: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||||
.de,
|
.de,
|
||||||
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCMessageCategories,
|
||||||
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.de,
|
||||||
audienceOrganizations: 'Zielgruppenorganisationen',
|
audienceOrganizations: 'Zielgruppenorganisationen',
|
||||||
audiences: 'Zielgruppen',
|
audiences: 'Zielgruppen',
|
||||||
dateCreated: 'Erstellungsdatum',
|
dateCreated: 'Erstellungsdatum',
|
||||||
@@ -133,6 +143,8 @@ export class SCMessageMeta
|
|||||||
en: {
|
en: {
|
||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations
|
||||||
.en,
|
.en,
|
||||||
|
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCMessageCategories,
|
||||||
|
SCThingWithCategoriesSpecificValues>().fieldTranslations.en,
|
||||||
audienceOrganizations: 'audience organizations',
|
audienceOrganizations: 'audience organizations',
|
||||||
audiences: 'audiences',
|
audiences: 'audiences',
|
||||||
dateCreated: 'date created',
|
dateCreated: 'date created',
|
||||||
@@ -149,9 +161,12 @@ export class SCMessageMeta
|
|||||||
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>()
|
||||||
.fieldValueTranslations.de,
|
.fieldValueTranslations.de,
|
||||||
audiences: {
|
audiences: {
|
||||||
'employees': 'Angestellte',
|
employees: 'Angestellte',
|
||||||
'guests': 'Gäste',
|
guests: 'Gäste',
|
||||||
'students': 'Studenten',
|
students: 'Studenten',
|
||||||
|
},
|
||||||
|
categories: {
|
||||||
|
news: 'Neuigkeiten',
|
||||||
},
|
},
|
||||||
type: 'Nachricht',
|
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
|
* @filterable
|
||||||
* @keyword
|
* @keyword
|
||||||
*/
|
*/
|
||||||
familyName: string;
|
familyName?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The private fax number of the person.
|
* The private fax number of the person.
|
||||||
@@ -80,7 +80,7 @@ export interface SCPersonWithoutReferences
|
|||||||
* @filterable
|
* @filterable
|
||||||
* @keyword
|
* @keyword
|
||||||
*/
|
*/
|
||||||
givenName: string;
|
givenName?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Honorific prefix of the person.
|
* 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
|
* 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
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
* Software Foundation, version 3.
|
* Software Foundation, version 3.
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* 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 {SCThing, SCThingMeta, SCThingType} from './abstract/thing';
|
||||||
import {
|
import {
|
||||||
SCThingWithCategories,
|
SCThingWithCategories,
|
||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
SCThingWithCategoriesWithoutReferences,
|
SCThingWithCategoriesWithoutReferences,
|
||||||
SCThingWithCategoriesWithoutReferencesMeta,
|
SCThingWithCategoriesWithoutReferencesMeta,
|
||||||
} from './abstract/thing-with-categories';
|
} from './abstract/thing-with-categories';
|
||||||
|
import {SCUserGroup} from './abstract/user-groups';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A setting without references
|
* A setting without references
|
||||||
@@ -83,7 +84,6 @@ export enum SCSettingInputType {
|
|||||||
* A setting with references
|
* A setting with references
|
||||||
*
|
*
|
||||||
* @validatable
|
* @validatable
|
||||||
* @indexable
|
|
||||||
*/
|
*/
|
||||||
export interface SCSetting
|
export interface SCSetting
|
||||||
extends SCSettingWithoutReferences, SCThing,
|
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[];
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,8 +13,9 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import clone = require('fast-clone');
|
import clone = require('fast-clone');
|
||||||
|
import equal = require('fast-deep-equal/es6');
|
||||||
import {Defined, TSOCType} from 'ts-optchain';
|
import {Defined, TSOCType} from 'ts-optchain';
|
||||||
import {SCTranslations} from './general/i18n';
|
import {SCLanguageCode} from './general/i18n';
|
||||||
import {isThing} from './guards';
|
import {isThing} from './guards';
|
||||||
import {SCClasses} from './meta';
|
import {SCClasses} from './meta';
|
||||||
import {SCThing, SCThingType} from './things/abstract/thing';
|
import {SCThing, SCThingType} from './things/abstract/thing';
|
||||||
@@ -27,13 +28,32 @@ const standardCacheSize = 200;
|
|||||||
*/
|
*/
|
||||||
export class SCThingTranslator {
|
export class SCThingTranslator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for language property
|
||||||
|
*/
|
||||||
|
get language(): SCLanguageCode {
|
||||||
|
return this._language;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for language property. Also flushes translation cache
|
||||||
|
*
|
||||||
|
* @param language The language the translator instance will use from now on
|
||||||
|
*/
|
||||||
|
set language(language: SCLanguageCode) {
|
||||||
|
if (language !== this._language) {
|
||||||
|
this.cache.flush();
|
||||||
|
}
|
||||||
|
this._language = language;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property representing the translators target language
|
* Property representing the translators target language
|
||||||
*/
|
*/
|
||||||
private _language: keyof SCTranslations<SCThing>;
|
private _language: SCLanguageCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property representing the translators base language
|
* LRU cache containing already translated SCThings
|
||||||
* This means every translation is given for this language
|
|
||||||
*/
|
*/
|
||||||
private readonly cache: LRUCache<SCThing>;
|
private readonly cache: LRUCache<SCThing>;
|
||||||
|
|
||||||
@@ -42,36 +62,23 @@ export class SCThingTranslator {
|
|||||||
*/
|
*/
|
||||||
private readonly metaClasses: typeof SCClasses;
|
private readonly metaClasses: typeof SCClasses;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LRU cache containing SCThings translations have been provided for
|
||||||
|
*/
|
||||||
|
private readonly sourceCache: LRUCache<SCThing>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @example
|
* @example
|
||||||
* // returns translator instance for german
|
* // returns translator instance for german
|
||||||
* new SCThingTranslator('de');
|
* new SCThingTranslator('de');
|
||||||
*/
|
*/
|
||||||
constructor(language: keyof SCTranslations<SCThing>, cacheCapacity: number = standardCacheSize) {
|
constructor(language: SCLanguageCode, cacheCapacity: number = standardCacheSize) {
|
||||||
this.cache = new LRUCache(cacheCapacity);
|
this.cache = new LRUCache(cacheCapacity);
|
||||||
|
this.sourceCache = new LRUCache(cacheCapacity);
|
||||||
this._language = language;
|
this._language = language;
|
||||||
this.metaClasses = SCClasses;
|
this.metaClasses = SCClasses;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter for language property
|
|
||||||
*/
|
|
||||||
get language(): keyof SCTranslations<SCThing> {
|
|
||||||
return this._language;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter for language property. Also flushes translation cache
|
|
||||||
*
|
|
||||||
* @param language The language the translator instance will use from now on
|
|
||||||
*/
|
|
||||||
set language(language: keyof SCTranslations<SCThing>) {
|
|
||||||
if (language !== this._language) {
|
|
||||||
this.cache.flush();
|
|
||||||
}
|
|
||||||
this._language = language;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get field value translation recursively
|
* Get field value translation recursively
|
||||||
*
|
*
|
||||||
@@ -101,8 +108,8 @@ export class SCThingTranslator {
|
|||||||
* @param language The language the thing property values are translated to
|
* @param language The language the thing property values are translated to
|
||||||
* @returns The thing with all known meta values translated
|
* @returns The thing with all known meta values translated
|
||||||
*/
|
*/
|
||||||
private getAllMetaFieldTranslations<T extends SCThing>(thingType: SCThingType,
|
private getAllMetaFieldTranslations(thingType: SCThingType,
|
||||||
language: keyof SCTranslations<T>): object | undefined {
|
language: SCLanguageCode): object | undefined {
|
||||||
const fieldTranslations = {};
|
const fieldTranslations = {};
|
||||||
const metaClass = this.getMetaClassInstance(thingType);
|
const metaClass = this.getMetaClassInstance(thingType);
|
||||||
if (typeof metaClass === 'undefined') {
|
if (typeof metaClass === 'undefined') {
|
||||||
@@ -151,7 +158,7 @@ export class SCThingTranslator {
|
|||||||
* @returns The thing with translated meta field values
|
* @returns The thing with translated meta field values
|
||||||
*/
|
*/
|
||||||
private replaceAvailableMetaFieldValueTranslations(instance: any,
|
private replaceAvailableMetaFieldValueTranslations(instance: any,
|
||||||
language: keyof SCTranslations<any>): any {
|
language: SCLanguageCode): any {
|
||||||
const metaClass = this.getMetaClassInstance(instance.type);
|
const metaClass = this.getMetaClassInstance(instance.type);
|
||||||
if (typeof metaClass === 'undefined') {
|
if (typeof metaClass === 'undefined') {
|
||||||
return instance;
|
return instance;
|
||||||
@@ -181,6 +188,60 @@ export class SCThingTranslator {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively translates the given object in-place
|
||||||
|
* Translated values overwrite current values (destructive)
|
||||||
|
*
|
||||||
|
* @param instance The thing / object that will be translated
|
||||||
|
* @returns The thing translated
|
||||||
|
*/
|
||||||
|
private translateThingInPlaceDestructively<T>(instance: T): T {
|
||||||
|
const targetLanguage = this.language;
|
||||||
|
|
||||||
|
let nextInstance = instance as any;
|
||||||
|
// Recursively call this function on all nested SCThings, arrays and objects
|
||||||
|
Object.keys(nextInstance)
|
||||||
|
.forEach((key) => {
|
||||||
|
if (
|
||||||
|
isThing(nextInstance[key]) ||
|
||||||
|
nextInstance[key] instanceof Array ||
|
||||||
|
nextInstance[key] instanceof Object) {
|
||||||
|
nextInstance[key] = this.translateThingInPlaceDestructively(nextInstance[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spread variable translations given by the connector into thing
|
||||||
|
if (typeof nextInstance.translations?.[targetLanguage] !== 'undefined') {
|
||||||
|
nextInstance = {...nextInstance, ...nextInstance.translations![targetLanguage]} as T;
|
||||||
|
}
|
||||||
|
// Spread known translations from meta classes into (partly) translated thing
|
||||||
|
this.replaceAvailableMetaFieldValueTranslations(nextInstance, targetLanguage);
|
||||||
|
|
||||||
|
return nextInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively translates the given object in-place
|
||||||
|
* Translated values overwrite current values (destructive)
|
||||||
|
*
|
||||||
|
* @param instance The thing / object that will be translated
|
||||||
|
* @returns The thing translated
|
||||||
|
*/
|
||||||
|
public translate<T extends SCThing>(thing: T): T {
|
||||||
|
if (equal(this.sourceCache.get(thing), thing)) {
|
||||||
|
const cachedInstance = this.cache.get(thing);
|
||||||
|
if (typeof cachedInstance !== 'undefined') {
|
||||||
|
return cachedInstance as T;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const translatedInstance = this.translateThingInPlaceDestructively(clone(thing));
|
||||||
|
delete translatedInstance.translations;
|
||||||
|
this.cache.putObject(translatedInstance);
|
||||||
|
this.sourceCache.putObject(thing);
|
||||||
|
|
||||||
|
return translatedInstance as T;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get field value translation recursively
|
* Get field value translation recursively
|
||||||
* @example
|
* @example
|
||||||
@@ -191,21 +252,24 @@ export class SCThingTranslator {
|
|||||||
* dishTranslatedAccess.offers[0].inPlace.categories[1]();
|
* dishTranslatedAccess.offers[0].inPlace.categories[1]();
|
||||||
* // undoing the TSOCType<T>
|
* // undoing the TSOCType<T>
|
||||||
* const dishAsBefore: SCDish = dishTranslatedAccess()!;
|
* const dishAsBefore: SCDish = dishTranslatedAccess()!;
|
||||||
* @param data Top level object that gets passed through the recursion
|
* @param thing Top level object that gets passed through the recursion
|
||||||
* @returns an TSOCType<T> object allowing for access to translations or a translated value(s)
|
* @returns an TSOCType<T> object allowing for access to translations or a translated value(s)
|
||||||
*/
|
*/
|
||||||
public translate<T extends SCThing>(data: T): TSOCType<T> {
|
public translatedAccess<T extends SCThing>(thing: T): TSOCType<T> {
|
||||||
return new Proxy(
|
return new Proxy(
|
||||||
((defaultValue?: Defined<T>) => (data == null ? defaultValue : data)) as TSOCType<T>,
|
((defaultValue?: Defined<T>) => (thing == null ? defaultValue : thing)) as TSOCType<T>,
|
||||||
{
|
{
|
||||||
get: (target, key) => {
|
get: (target, key) => {
|
||||||
const obj: any = target();
|
const obj: any = target();
|
||||||
const objTranslatedFromCache = this.cache.get(data);
|
if (equal(this.sourceCache.get(thing), thing)) {
|
||||||
|
const objTranslatedFromCache = this.cache.get(thing);
|
||||||
if (typeof objTranslatedFromCache !== 'undefined') {
|
if (typeof objTranslatedFromCache !== 'undefined') {
|
||||||
return this.deeptranslate((objTranslatedFromCache as any)[key]);
|
return this.deeptranslate((objTranslatedFromCache as any)[key]);
|
||||||
}
|
}
|
||||||
const objTranslated = this.translateWholeThingDestructively(clone(obj));
|
}
|
||||||
|
const objTranslated = this.translateThingInPlaceDestructively(clone(obj));
|
||||||
this.cache.putObject(objTranslated);
|
this.cache.putObject(objTranslated);
|
||||||
|
this.sourceCache.putObject(thing);
|
||||||
|
|
||||||
return this.deeptranslate(objTranslated[key]);
|
return this.deeptranslate(objTranslated[key]);
|
||||||
},
|
},
|
||||||
@@ -217,71 +281,33 @@ 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
|
||||||
* @param language The language all property names will be translated to
|
|
||||||
* @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
|
||||||
*/
|
*/
|
||||||
public translatedPropertyNames<T extends SCThing>(type: SCThingType,
|
public translatedPropertyNames<T extends SCThing>(type: SCThingType): T | undefined {
|
||||||
language?: keyof SCTranslations<T>): T | undefined {
|
return this.getAllMetaFieldTranslations(type, this.language) as T;
|
||||||
return this.getAllMetaFieldTranslations(type, language ?? this.language) as T;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a SCThingType and a corresponding property name it returns the known property value translation
|
* Given a SCThingType and a corresponding property name it returns the known property value translation
|
||||||
* Access pattern to the meta object containing the translation can be thought of as type.field[key] with key being optional
|
* Access pattern to the meta object containing the translation can be thought of as type.field[key] with key being optional
|
||||||
* @example
|
* @example
|
||||||
* const translatedMetaDish = translator.translatedPropertyNames(SCThingType.Dish, 'categories', 'main dish');
|
* const singleValueTranslation = translator.translatedPropertyValue(SCThingType.Dish, 'categories', 'main dish');
|
||||||
* @param type The type for whose property values a translation is required
|
* @param type The type for whose property values a translation is required
|
||||||
* @param field The property for which a translation is required
|
* @param field The property for which a translation is required
|
||||||
* @param key If specified tries to access the field with this key
|
* @param key If specified tries to access the field with this key
|
||||||
* @param language The language all property names will be translated to
|
|
||||||
* @returns Known translation for the property
|
* @returns Known translation for the property
|
||||||
*/
|
*/
|
||||||
public translatedPropertyValue<T extends unknown>(type: SCThingType,
|
public translatedPropertyValue(type: SCThingType,
|
||||||
field: string,
|
field: string,
|
||||||
key?: string,
|
key?: string): string | undefined {
|
||||||
language?: keyof SCTranslations<T>): string | undefined {
|
const fieldValueTranslations = this.getMetaClassInstance(type).fieldValueTranslations[this.language] ??
|
||||||
const fieldTranslation = this.getMetaClassInstance(type).fieldValueTranslations[language ?? this.language]?.[field];
|
this.getMetaClassInstance(type).fieldValueTranslations.en;
|
||||||
|
const fieldTranslation = fieldValueTranslations?.[field];
|
||||||
|
|
||||||
return fieldTranslation?.[key ?? ''] ?? key ?? fieldTranslation;
|
return fieldTranslation?.[key ?? ''] ?? key ?? fieldTranslation;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively translates the given object in-place
|
|
||||||
* Translated values overwrite current values (destructive)
|
|
||||||
*
|
|
||||||
* @param instance The thing / object that will be translated
|
|
||||||
* @param language The language the thing / object is translated to
|
|
||||||
* @returns The thing translated
|
|
||||||
*/
|
|
||||||
public translateWholeThingDestructively(instance: any,
|
|
||||||
language?: keyof SCTranslations<any>): any {
|
|
||||||
const targetLanguage = (typeof language !== 'undefined') ? language : this.language;
|
|
||||||
let nextInstance = instance;
|
|
||||||
// Recursively call this function on all nested SCThings, arrays and objects
|
|
||||||
Object.keys(nextInstance)
|
|
||||||
.forEach((key) => {
|
|
||||||
if (
|
|
||||||
isThing((nextInstance as any)[key]) ||
|
|
||||||
nextInstance[key] instanceof Array ||
|
|
||||||
nextInstance[key] instanceof Object) {
|
|
||||||
nextInstance[key] = this.translateWholeThingDestructively(nextInstance[key], targetLanguage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spread variable translations given by the connector into thing
|
|
||||||
if (typeof nextInstance.translations !== 'undefined') {
|
|
||||||
if (typeof nextInstance.translations![targetLanguage] !== 'undefined') {
|
|
||||||
nextInstance = {...nextInstance, ...nextInstance.translations![targetLanguage]} as typeof instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Spread known translations from meta classes into (partly) translated thing
|
|
||||||
this.replaceAvailableMetaFieldValueTranslations(nextInstance, targetLanguage);
|
|
||||||
|
|
||||||
return nextInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
44
test/compat.spec.ts
Normal file
44
test/compat.spec.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* 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 {lightweightProjectFromPath} from '@openstapps/core-tools/lib/easy-ast/easy-ast';
|
||||||
|
import {LightweightProject} from '@openstapps/core-tools/lib/easy-ast/types/lightweight-project';
|
||||||
|
import {expect} from 'chai';
|
||||||
|
import {reduce} from 'lodash';
|
||||||
|
|
||||||
|
process.on('unhandledRejection', (err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Mapping Compatibility', () => {
|
||||||
|
let project: LightweightProject;
|
||||||
|
|
||||||
|
before(function () {
|
||||||
|
this.timeout(15000);
|
||||||
|
this.slow(10000);
|
||||||
|
|
||||||
|
project = lightweightProjectFromPath('src');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('non-exported definitions should not have duplicate names across files', () => {
|
||||||
|
reduce(project, (result, file) => reduce(file, (result2, _, key) => {
|
||||||
|
expect(result2[key]).to.be.undefined;
|
||||||
|
return {
|
||||||
|
[key]: true,
|
||||||
|
...result2,
|
||||||
|
};
|
||||||
|
}, result), {} as Record<string, boolean>);
|
||||||
|
});
|
||||||
|
});
|
||||||
140
test/features.spec.ts
Normal file
140
test/features.spec.ts
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 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 {isLightweightClass, isLightweightEnum, isUnionType} from '@openstapps/core-tools/lib/easy-ast/ast-util';
|
||||||
|
import {LightweightAliasDefinition} from '@openstapps/core-tools/lib/easy-ast/types/lightweight-alias-definition';
|
||||||
|
import {LightweightProjectWithIndex} from '@openstapps/core-tools/lib/easy-ast/types/lightweight-project';
|
||||||
|
import {LightweightType} from '@openstapps/core-tools/lib/easy-ast/types/lightweight-type';
|
||||||
|
import {LightweightClassDefinition} from '@openstapps/core-tools/src/easy-ast/types/lightweight-class-definition';
|
||||||
|
import {LightweightDefinition} from '@openstapps/core-tools/src/easy-ast/types/lightweight-definition';
|
||||||
|
import {LightweightProperty} from '@openstapps/core-tools/src/easy-ast/types/lightweight-property';
|
||||||
|
import {expect} from 'chai';
|
||||||
|
import {assign, chain, clone, flatMap, isNil, reduce, reject, some} from 'lodash';
|
||||||
|
|
||||||
|
process.on('unhandledRejection', (err) => {
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Features', () => {
|
||||||
|
let project: LightweightProjectWithIndex;
|
||||||
|
let thingNames: string[];
|
||||||
|
let things: LightweightClassDefinition[];
|
||||||
|
let thingsWithoutReferences: LightweightClassDefinition[];
|
||||||
|
|
||||||
|
before(function () {
|
||||||
|
this.timeout(15000);
|
||||||
|
this.slow(10000);
|
||||||
|
|
||||||
|
project = new LightweightProjectWithIndex('src');
|
||||||
|
|
||||||
|
const thingsReflection = project.definitions['SCIndexableThings'] as LightweightAliasDefinition;
|
||||||
|
expect(isLightweightEnum(thingsReflection)).to.be.true;
|
||||||
|
expect(isUnionType(thingsReflection.type!)).to.be.true;
|
||||||
|
|
||||||
|
thingsReflection.type!.specificationTypes!.push({
|
||||||
|
flags: 524_288,
|
||||||
|
referenceName: 'SCDiff',
|
||||||
|
});
|
||||||
|
|
||||||
|
// tslint:disable-next-line:no-unused-expression
|
||||||
|
expect(thingsReflection.type?.specificationTypes?.every(it => typeof it.referenceName !== 'undefined')).to.be.true;
|
||||||
|
thingNames = thingsReflection.type?.specificationTypes?.map(type => type.referenceName!) ?? [];
|
||||||
|
things = thingNames
|
||||||
|
.map(it => project.definitions[it])
|
||||||
|
.filter(isLightweightClass);
|
||||||
|
thingsWithoutReferences = thingNames
|
||||||
|
.map(it => project.definitions[`${it}WithoutReferences`])
|
||||||
|
.filter(isLightweightClass);
|
||||||
|
});
|
||||||
|
|
||||||
|
const inheritedProperties = function (classLike: LightweightClassDefinition):
|
||||||
|
Record<string, LightweightProperty> | undefined {
|
||||||
|
return reduce(
|
||||||
|
[...(classLike.implementedDefinitions ?? []), ...(classLike.extendedDefinitions ?? [])],
|
||||||
|
(obj, extension) => {
|
||||||
|
const object = project.definitions[extension.referenceName ?? ''];
|
||||||
|
|
||||||
|
return assign(obj, isLightweightClass(object)
|
||||||
|
? inheritedProperties(object)
|
||||||
|
: obj);
|
||||||
|
},
|
||||||
|
clone(classLike.properties)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
it('should have an origin', () => {
|
||||||
|
for (const thing of things) {
|
||||||
|
expect(inheritedProperties(thing)?.['origin']).not.to.be.undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not have duplicate names', () => {
|
||||||
|
reduce(project.files, (fileResult, file) =>
|
||||||
|
reduce(file, (definitionResult, definition: LightweightDefinition) => {
|
||||||
|
expect(definitionResult[definition.name]).to.be.undefined;
|
||||||
|
definitionResult[definition.name] = true; // something that's not undefined
|
||||||
|
|
||||||
|
return definitionResult;
|
||||||
|
}, fileResult), {} as Record<string, true>);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not have properties referencing SCThing', () => {
|
||||||
|
const allPropertyReferenceNames: (property: LightweightProperty) => string[] = property => reject([
|
||||||
|
property.type.referenceName!,
|
||||||
|
...flatMap(property.properties, allPropertyReferenceNames),
|
||||||
|
], isNil);
|
||||||
|
|
||||||
|
const typeHasSCThingReferences: (type?: LightweightType) => boolean = type => type?.referenceName
|
||||||
|
? hasSCThingReferences(project.definitions[type.referenceName])
|
||||||
|
: some(type?.specificationTypes, typeHasSCThingReferences);
|
||||||
|
|
||||||
|
const hasSCThingReferences: (definition?: LightweightDefinition) => boolean = definition =>
|
||||||
|
isLightweightClass(definition)
|
||||||
|
? chain(inheritedProperties(definition))
|
||||||
|
.flatMap(it => flatMap(it.properties, allPropertyReferenceNames))
|
||||||
|
.map(it => project.definitions[it] as LightweightDefinition)
|
||||||
|
.some(it => it.name === 'SCThing' || hasSCThingReferences(it))
|
||||||
|
.value()
|
||||||
|
: definition ? typeHasSCThingReferences(definition.type) : false;
|
||||||
|
|
||||||
|
for (const thing of things) {
|
||||||
|
expect(hasSCThingReferences(thing)).to.be.false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function extendsSCThing(definition?: LightweightDefinition): boolean {
|
||||||
|
return isLightweightClass(definition)
|
||||||
|
? chain([
|
||||||
|
...(definition as LightweightClassDefinition).extendedDefinitions ?? [],
|
||||||
|
...(definition as LightweightClassDefinition).implementedDefinitions ?? [],
|
||||||
|
])
|
||||||
|
.map(it => it.referenceName)
|
||||||
|
.reject(isNil)
|
||||||
|
.some(it => it === 'SCThing' || extendsSCThing(project.definitions[it!]))
|
||||||
|
.value()
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should extend SCThing if it is an SCThing', () => {
|
||||||
|
for (const thing of things) {
|
||||||
|
expect(extendsSCThing(thing)).to.be.true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not extend SCThing if it is an SCThingWithoutReferences', () => {
|
||||||
|
for (const thingWithoutReferences of thingsWithoutReferences) {
|
||||||
|
expect(extendsSCThing(thingWithoutReferences)).to.be.false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -116,8 +116,10 @@ export class GuardsSpec {
|
|||||||
@test
|
@test
|
||||||
public isSearchResponse() {
|
public isSearchResponse() {
|
||||||
const notASearchResponse = {...GuardsSpec.searchResponse};
|
const notASearchResponse = {...GuardsSpec.searchResponse};
|
||||||
|
// @ts-ignore
|
||||||
delete notASearchResponse.pagination;
|
delete notASearchResponse.pagination;
|
||||||
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
||||||
|
// @ts-ignore
|
||||||
delete notASearchResponse.data;
|
delete notASearchResponse.data;
|
||||||
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
expect(isSearchResponse(notASearchResponse)).to.be.equal(false);
|
||||||
expect(isSearchResponse(null)).to.be.equal(false);
|
expect(isSearchResponse(null)).to.be.equal(false);
|
||||||
|
|||||||
36
test/resources/Assessment.1.json
Normal file
36
test/resources/Assessment.1.json
Normal 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"
|
||||||
|
}
|
||||||
51
test/resources/Assessment.2.json
Normal file
51
test/resources/Assessment.2.json
Normal 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"
|
||||||
|
}
|
||||||
@@ -21,6 +21,9 @@
|
|||||||
"audiences": [
|
"audiences": [
|
||||||
"students"
|
"students"
|
||||||
],
|
],
|
||||||
|
"categories": [
|
||||||
|
"news"
|
||||||
|
],
|
||||||
"sequenceIndex": 1010,
|
"sequenceIndex": 1010,
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
"audiences": [
|
"audiences": [
|
||||||
"students"
|
"students"
|
||||||
],
|
],
|
||||||
|
"categories": [
|
||||||
|
"news"
|
||||||
|
],
|
||||||
"sequenceIndex": 1020,
|
"sequenceIndex": 1020,
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
|
|||||||
@@ -6,17 +6,67 @@
|
|||||||
"uid": "3af3ccaa-f066-5eff-9a3d-a70567f3d70d",
|
"uid": "3af3ccaa-f066-5eff-9a3d-a70567f3d70d",
|
||||||
"data": {
|
"data": {
|
||||||
"type": "academic event",
|
"type": "academic event",
|
||||||
"description": "Grundlagen, algebraische Grundbegriffe, Vektorräume, lineare Abbildungen und Gleichungen, Determinanten",
|
"description": "Fortsetzung der Algebra I: Galoistheorie mit Anwendungen, ausgewählte Spezialthemen.",
|
||||||
"uid": "b17eb963-42b5-5861-adce-2b7b2607ef0a",
|
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf2b9",
|
||||||
"name": "Lineare Algebra I für Mathematiker",
|
"name": "Algebra II",
|
||||||
"categories": [
|
"categories": [
|
||||||
"lecture"
|
"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": [
|
"majors": [
|
||||||
"Wirtschaftsmathematik BSc",
|
"Mathematik D",
|
||||||
"Technomathematik BSc",
|
"Mathematik L2",
|
||||||
"Mathematik BSc"
|
"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": {
|
"origin": {
|
||||||
"created": "2018-09-11T12:30:00Z",
|
"created": "2018-09-11T12:30:00Z",
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": {
|
"arguments": {
|
||||||
"fromField": "availabilityStarts",
|
"scope": "d",
|
||||||
"toField": "availabilityEnds",
|
"field": "availabilityRange",
|
||||||
"time": "2018-01-15T04:13:00+00:00"
|
"time": "2018-01-15T04:13:00+00:00"
|
||||||
},
|
},
|
||||||
"type": "availability"
|
"type": "availability"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"categories": [
|
"categories": [
|
||||||
"unipedia"
|
"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",
|
"name": "Abkürzungen",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Abkürzungen",
|
"Abkürzungen",
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
"categories": [
|
"categories": [
|
||||||
"unipedia"
|
"unipedia"
|
||||||
],
|
],
|
||||||
"url": "https://www.mydesk.tu-berlin.de/wiki/ag_ziethen",
|
"sameAs": "https://www.mydesk.tu-berlin.de/wiki/ag_ziethen",
|
||||||
"name": "AG Ziethen",
|
"name": "AG Ziethen",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Bologna",
|
"Bologna",
|
||||||
36
test/resources/indexable/Article.3.json
Normal file
36
test/resources/indexable/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://hds2.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/indexable/Article.4.json
Normal file
36
test/resources/indexable/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://hds2.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"
|
||||||
|
}
|
||||||
@@ -21,15 +21,15 @@
|
|||||||
"name": "Symposion Publishing"
|
"name": "Symposion Publishing"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inLanguages": [
|
"inLanguage": "de",
|
||||||
{
|
"edition": "2., überarb. u. erw. Aufl.",
|
||||||
"name": "german",
|
"ISBNs": [
|
||||||
"code": "de"
|
"3936608776"
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"bookEdition": "2., überarb. u. erw. Aufl.",
|
|
||||||
"isbn": "3936608776",
|
|
||||||
"numberOfPages": 537,
|
"numberOfPages": 537,
|
||||||
|
"categories": [
|
||||||
|
"book"
|
||||||
|
],
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "Dummy",
|
"name": "Dummy",
|
||||||
@@ -4,6 +4,9 @@
|
|||||||
"type": "book",
|
"type": "book",
|
||||||
"uid": "db47f7f4-7699-5a37-afcc-24beaa998d36",
|
"uid": "db47f7f4-7699-5a37-afcc-24beaa998d36",
|
||||||
"name": "Minimal Book",
|
"name": "Minimal Book",
|
||||||
|
"categories": [
|
||||||
|
"ebook"
|
||||||
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"type": "person",
|
"type": "person",
|
||||||
@@ -14,7 +17,9 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"datePublished": "2007-08-01",
|
"datePublished": "2007-08-01",
|
||||||
"isbn": "3936608776",
|
"ISBNs": [
|
||||||
|
"3936608776"
|
||||||
|
],
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "Dummy",
|
"name": "Dummy",
|
||||||
41
test/resources/indexable/Book.3.json
Normal file
41
test/resources/indexable/Book.3.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"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]",
|
||||||
|
"lastPublished": "2000 Q1",
|
||||||
|
"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://hds2.hebis.de/ubffm/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"schema": "SCBook"
|
||||||
|
}
|
||||||
43
test/resources/indexable/Book.4.json
Normal file
43
test/resources/indexable/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": "6333427c-0725-5398-9a04-11604680dae3",
|
||||||
|
"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://hds2.hebis.de/ubffm/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"schema": "SCBook"
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"frequency": "once",
|
"repeatFrequency": "P1W",
|
||||||
"dates": [
|
"dates": [
|
||||||
"2016-04-15T17:00:00+00:00"
|
"2016-04-15T17:00:00+00:00"
|
||||||
],
|
],
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
"name": "EMH 225",
|
"name": "EMH 225",
|
||||||
"floorName": "2"
|
"floorName": "2"
|
||||||
},
|
},
|
||||||
"frequency": "once",
|
|
||||||
"dates": [
|
"dates": [
|
||||||
"2016-04-12T11:00:00+00:00"
|
"2016-04-12T11:00:00+00:00"
|
||||||
],
|
],
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
"name": "EMH 225",
|
"name": "EMH 225",
|
||||||
"floorName": "2"
|
"floorName": "2"
|
||||||
},
|
},
|
||||||
"frequency": "once",
|
|
||||||
"dates": [
|
"dates": [
|
||||||
"2016-04-12T11:00:00+00:00"
|
"2016-04-12T11:00:00+00:00"
|
||||||
],
|
],
|
||||||
@@ -43,8 +42,10 @@
|
|||||||
"offers": [
|
"offers": [
|
||||||
{
|
{
|
||||||
"availability": "in stock",
|
"availability": "in stock",
|
||||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
"availabilityRange": {
|
||||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
"gte": "2017-01-30T00:00:00.000Z",
|
||||||
|
"lte": "2017-01-30T23:59:59.999Z"
|
||||||
|
},
|
||||||
"prices": {
|
"prices": {
|
||||||
"default": 6.5,
|
"default": 6.5,
|
||||||
"student": 5,
|
"student": 5,
|
||||||
@@ -19,8 +19,10 @@
|
|||||||
"offers": [
|
"offers": [
|
||||||
{
|
{
|
||||||
"availability": "in stock",
|
"availability": "in stock",
|
||||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
"availabilityRange": {
|
||||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
"gte": "2017-01-30T00:00:00.000Z",
|
||||||
|
"lte": "2017-01-30T23:59:59.999Z"
|
||||||
|
},
|
||||||
"prices": {
|
"prices": {
|
||||||
"default": 4.85,
|
"default": 4.85,
|
||||||
"student": 2.85,
|
"student": 2.85,
|
||||||
@@ -20,8 +20,10 @@
|
|||||||
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
|
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
|
||||||
},
|
},
|
||||||
"availability": "in stock",
|
"availability": "in stock",
|
||||||
"availabilityStarts": "2017-01-30T00:00:00.000Z",
|
"availabilityRange": {
|
||||||
"availabilityEnds": "2017-01-30T23:59:59.999Z",
|
"gte": "2017-01-30T00:00:00.000Z",
|
||||||
|
"lte": "2017-01-30T23:59:59.999Z"
|
||||||
|
},
|
||||||
"inPlace": {
|
"inPlace": {
|
||||||
"geo": {
|
"geo": {
|
||||||
"point": {
|
"point": {
|
||||||
@@ -11,9 +11,11 @@
|
|||||||
],
|
],
|
||||||
"offers": [
|
"offers": [
|
||||||
{
|
{
|
||||||
"availabilityEnds": "2017-03-27T23:59:59.000Z",
|
|
||||||
"availabilityStarts": "2017-03-27T00:00:00.000Z",
|
|
||||||
"availability": "in stock",
|
"availability": "in stock",
|
||||||
|
"availabilityRange": {
|
||||||
|
"gte": "2017-03-27T00:00:00.000Z",
|
||||||
|
"lte": "2017-03-27T23:59:59.000Z"
|
||||||
|
},
|
||||||
"inPlace": {
|
"inPlace": {
|
||||||
"type": "room",
|
"type": "room",
|
||||||
"name": "Cafeteria LEVEL",
|
"name": "Cafeteria LEVEL",
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
"audiences": [
|
"audiences": [
|
||||||
"students"
|
"students"
|
||||||
],
|
],
|
||||||
|
"categories": [
|
||||||
|
"news"
|
||||||
|
],
|
||||||
"sequenceIndex": 1001,
|
"sequenceIndex": 1001,
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"errorNames": [
|
"errorNames": [
|
||||||
"enum"
|
"const"
|
||||||
],
|
],
|
||||||
"instance": {
|
"instance": {
|
||||||
"type": "invalid-value-in-schema",
|
"type": "invalid-value-in-schema",
|
||||||
@@ -11,6 +11,9 @@
|
|||||||
"audiences": [
|
"audiences": [
|
||||||
"students"
|
"students"
|
||||||
],
|
],
|
||||||
|
"categories": [
|
||||||
|
"news"
|
||||||
|
],
|
||||||
"sequenceIndex": 1004,
|
"sequenceIndex": 1004,
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
@@ -5,13 +5,16 @@
|
|||||||
"instance": {
|
"instance": {
|
||||||
"type": "message",
|
"type": "message",
|
||||||
"invalid-non-existing-key-in-schema": 1,
|
"invalid-non-existing-key-in-schema": 1,
|
||||||
"uid": "4706ef24-b631-5c20-91d1-3c627decca5a",
|
"uid": "4706ef24-b631-5c20-91d1-3c627deccf5a",
|
||||||
"image": "https://backend/res/img/message_small.png",
|
"image": "https://backend/res/img/message_small.png",
|
||||||
"name": "Lösung für das Problem des Zurücksetzens der StApps-App gefunden",
|
"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)*",
|
"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": [
|
"audiences": [
|
||||||
"students"
|
"students"
|
||||||
],
|
],
|
||||||
|
"categories": [
|
||||||
|
"news"
|
||||||
|
],
|
||||||
"audienceOrganizations": [{
|
"audienceOrganizations": [{
|
||||||
"name": "TU Berlin",
|
"name": "TU Berlin",
|
||||||
"type": "organization",
|
"type": "organization",
|
||||||
28
test/resources/indexable/Message.4.json
Normal file
28
test/resources/indexable/Message.4.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"errorNames": [
|
||||||
|
"required"
|
||||||
|
],
|
||||||
|
"instance": {
|
||||||
|
"type": "message",
|
||||||
|
"invalid-non-existing-key-in-schema": 1,
|
||||||
|
"uid": "4706ef24-b631-5c20-91d1-3c627deccfff",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user