Compare commits

...

196 Commits

Author SHA1 Message Date
Rainer Killinger
02d7208d73 0.71.0 2022-10-11 16:57:50 +02:00
Rainer Killinger
75155a9a86 refactor: remodel app config menu categories 2022-10-11 11:41:21 +00:00
Jovan Krunić
dd138fd0be feat: add new book categories
Closes #147
2022-10-11 12:32:01 +02:00
Rainer Killinger
608429c139 docs: update changelog 2022-09-02 14:24:32 +02:00
Rainer Killinger
27ed3c11f1 0.70.0 2022-09-02 14:24:30 +02:00
Rainer Killinger
b183198029 feat: add auth provider to config menu items 2022-09-02 14:18:24 +02:00
Rainer Killinger
6e50b89b1a docs: update changelog 2022-08-17 16:16:49 +02:00
Rainer Killinger
62ab6384d3 0.69.0 2022-08-17 16:16:47 +02:00
Rainer Killinger
f864c64efa refactor: move to eslint 2022-08-17 16:09:45 +02:00
Rainer Killinger
c1dc7b4e8f ci: add cobertura coverage report 2022-08-17 14:04:50 +02:00
Rainer Killinger
a096d5be62 docs: update contributors list 2022-08-17 14:04:12 +02:00
openstappsbot
ed6358a0c8 refactor: update all 2022-08-17 14:00:49 +02:00
Rainer Killinger
7f22cbb54c docs: update changelog 2022-06-27 16:04:10 +02:00
Rainer Killinger
8b9bb45868 0.68.0 2022-06-27 16:04:08 +02:00
openstappsbot
77f1f0a5b8 refactor: update all 2022-06-27 15:56:36 +02:00
Rainer Killinger
1015fd24ac docs: update changelog 2022-05-31 16:13:54 +02:00
Rainer Killinger
618a9046bc 0.67.0 2022-05-31 16:13:51 +02:00
Rainer Killinger
c43e2b38e6 refactor: remove SCMetaTranslations singletons 2022-05-31 16:10:41 +02:00
Rainer Killinger
9d0ff36af5 refactor: untangle SCCreativeWork inheritance 2022-05-30 17:00:14 +02:00
Rainer Killinger
31bb7e89ea docs: update changelog 2022-05-27 16:54:09 +02:00
Rainer Killinger
942f04e250 0.66.1 2022-05-27 16:54:06 +02:00
Rainer Killinger
930b574618 refactor: update dependencies 2022-05-27 16:51:08 +02:00
Rainer Killinger
7b88be3a75 refactor: initalize meta classes in translator 2022-05-27 15:21:59 +02:00
Jovan Krunić
5277f7601c docs: update changelog 2022-05-11 13:54:54 +02:00
Jovan Krunić
5241a01b55 0.66.0 2022-05-11 13:54:52 +02:00
484be6a890 feat: add geo filter envelope support 2022-04-28 09:50:44 +02:00
Rainer Killinger
45e0f26391 docs: update changelog 2022-04-04 20:56:06 +02:00
Rainer Killinger
ead47aca19 0.65.1 2022-04-04 20:56:04 +02:00
Rainer Killinger
f9c2414000 docs: adjust typedoc option 'entryPointStrategy' 2022-04-04 20:55:16 +02:00
Rainer Killinger
523de51160 docs: update changelog 2022-04-04 20:47:21 +02:00
Rainer Killinger
d912c03eb0 0.65.0 2022-04-04 20:47:19 +02:00
Rainer Killinger
a638f5447b refactor: update dependencies 2022-04-04 20:42:01 +02:00
Rainer Killinger
cecf95aa46 docs: update changelog 2022-03-21 11:05:27 +01:00
Rainer Killinger
6fd8c5adf3 0.64.0 2022-03-21 11:05:25 +01:00
Rainer Killinger
db24b41d99 test: adjust HDS samples to production version 2022-03-21 11:00:11 +01:00
Rainer Killinger
b1fcd22ab2 refactor: update dependencies 2022-03-17 12:44:59 +01:00
Rainer Killinger
268588fb6f docs: update changelog 2022-01-24 14:47:04 +01:00
Rainer Killinger
d3048a12d8 0.63.0 2022-01-24 14:47:02 +01:00
Rainer Killinger
e14993114f fix: add auth object to index route 2022-01-24 14:45:17 +01:00
Rainer Killinger
4237f6ad60 docs: update changelog 2022-01-21 17:15:16 +01:00
Rainer Killinger
e7c1000bc4 0.62.0 2022-01-21 17:15:14 +01:00
Rainer Killinger
e0adb2332e fix: add missing lastPublished to SCCreativeWork 2022-01-21 17:14:16 +01:00
Rainer Killinger
e5696b23e7 docs: update changelog 2022-01-21 15:07:16 +01:00
Rainer Killinger
659d0974f7 0.61.0 2022-01-21 15:07:14 +01:00
Rainer Killinger
e8304eeeb4 refactor: remove unused auth provider properties 2022-01-21 15:06:11 +01:00
Rainer Killinger
dca9d26c66 docs: update changelog 2022-01-21 12:29:55 +01:00
Rainer Killinger
852e0f5373 0.60.0 2022-01-21 12:29:52 +01:00
Rainer Killinger
26dd531d24 refactor: split up SCUserConfiguration type 2022-01-21 12:22:13 +01:00
Rainer Killinger
52bdf93356 docs: update changelog 2022-01-20 14:20:17 +01:00
Rainer Killinger
7509610145 0.59.0 2022-01-20 14:20:15 +01:00
Rainer Killinger
972cdf392d refactor: make config auth provides be optional 2022-01-20 14:18:50 +01:00
Rainer Killinger
4f758f7d0c docs: update changelog 2022-01-18 15:13:06 +01:00
Rainer Killinger
980e899807 0.58.0 2022-01-18 15:13:04 +01:00
Rainer Killinger
d1c5bb9595 refactor: use SCMap for feature configurations 2022-01-18 15:12:05 +01:00
Rainer Killinger
dc9c0f528f docs: update changelog 2022-01-18 11:06:18 +01:00
Rainer Killinger
66d64e0858 0.57.0 2022-01-18 11:06:16 +01:00
Rainer Killinger
06339786c2 refactor: update dependencies 2022-01-18 11:01:01 +01:00
Rainer Killinger
8ed68481fa refactor: rename urlFragment in routes 2022-01-18 09:50:46 +01:00
Rainer Killinger
e26042957c refactor: remodel features in app config 2022-01-18 09:50:44 +01:00
Rainer Killinger
7553620a5d feat: extend config to describe auth providers 2022-01-18 09:50:00 +01:00
Rainer Killinger
322c001e70 docs: update changelog 2021-12-17 10:35:53 +01:00
Rainer Killinger
830e249ac4 0.56.0 2021-12-17 10:35:50 +01:00
Rainer Killinger
8c9df3ea9a test: adjust testing resources 2021-12-17 10:34:03 +01:00
Rainer Killinger
f85768d32e refactor: update dependencies 2021-12-17 10:33:20 +01:00
Rainer Killinger
580ace368f docs: update changelog 2021-12-15 13:15:12 +01:00
Rainer Killinger
522be6643a 0.55.0 2021-12-15 13:15:10 +01:00
Rainer Killinger
8784309ddb refactor: update dependencies 2021-12-15 13:03:57 +01:00
Rainer Killinger
3d8f996690 refactor: make offer price property optional 2021-11-30 12:27:40 +01:00
Rainer Killinger
36a4bfcbbc docs: update changelog 2021-11-17 11:38:00 +01:00
Rainer Killinger
db347bf324 0.54.0 2021-11-17 11:37:56 +01:00
Rainer Killinger
7a2e0f20d1 feat: add SCAssessment 2021-11-16 10:56:28 +01:00
Jovan Krunić
b2d18da82a docs: update changelog 2021-10-19 16:09:46 +02:00
Jovan Krunić
fae7395cf0 0.53.0 2021-10-19 16:09:45 +02:00
Jovan Krunić
0745b1af72 refactor: adjust http status of feedback route 2021-10-12 16:50:19 +02:00
Jovan Krunić
a2b2cefe8e refactor: adjust depricated use of http-status-codes 2021-10-12 16:48:42 +02:00
wulkanat@gmail.com
04b21a7c5d docs: update changelog 2021-09-28 16:02:23 +02:00
wulkanat@gmail.com
ca7626db17 0.52.0 2021-09-28 16:02:14 +02:00
Wieland Schöbl
e8d492a18a test: add test to make sure there are no duplicate names 2021-09-27 09:06:40 +00:00
Wieland Schöbl
aa294c4e29 feat: add about config 2021-09-23 12:40:50 +00:00
Jovan Krunić
369bb906c1 docs: update changelog 2021-09-10 14:15:06 +02:00
Jovan Krunić
aa38fef293 0.51.0 2021-09-10 14:15:05 +02:00
Jovan Krunić
ded8e7dfd5 fix: add physicalobject to book categories 2021-09-10 14:13:28 +02:00
Jovan Krunić
d47897c7e8 docs: update changelog 2021-09-01 13:56:46 +02:00
Jovan Krunić
9ab5280b2e 0.50.0 2021-09-01 13:56:44 +02:00
Wieland Schöbl
596788f3a1 test: migrate schema.spec.ts from TypeDoc to Easy AST 2021-09-01 11:40:32 +00:00
Rainer Killinger
70271a4849 docs: update changelog 2021-08-27 17:27:23 +02:00
Rainer Killinger
98ab64403f 0.49.5 2021-08-27 17:27:21 +02:00
Rainer Killinger
3d1bb6ef13 docs: update changelog 2021-08-27 17:25:06 +02:00
Rainer Killinger
d5f39517e8 0.49.4 2021-08-27 17:20:40 +02:00
Rainer Killinger
dfe35d71a3 fix: test resources from hds2 2021-08-27 17:19:25 +02:00
wulkanat@gmail.com
cdaa83122f docs: update changelog 2021-08-18 09:57:29 +02:00
wulkanat@gmail.com
937919f1a7 0.49.3 2021-08-18 09:57:22 +02:00
Wieland Schöbl
3249300dac refactor: move indexable test files to separate folder 2021-08-17 18:55:27 +02:00
wulkanat@gmail.com
5acf49fd52 docs: update changelog 2021-08-17 18:15:19 +02:00
wulkanat@gmail.com
07b5ad1618 0.49.2 2021-08-17 18:15:11 +02:00
Wieland Schöbl
d56c3d11a8 refactor: move indexable test files to separate folder 2021-08-17 17:51:53 +02:00
wulkanat@gmail.com
83f00f40bf docs: update changelog 2021-08-13 11:04:27 +02:00
wulkanat@gmail.com
782ee3758a 0.49.1 2021-08-13 11:04:20 +02:00
Wieland Schöbl
8a28d6fa86 fix: documentation generation 2021-08-13 08:41:54 +00:00
wulkanat@gmail.com
ed53c6595e docs: update changelog 2021-08-12 15:45:19 +02:00
wulkanat@gmail.com
49ea2c59ab 0.49.0 2021-08-12 15:45:12 +02:00
openstappsbot
869fa831ea refactor: update all 2021-08-12 13:10:08 +00:00
Wieland Schöbl
21eeecd5ee feat: add elasticsearch mappings to build
Add backwards compatibility check with typescript v3.8.3
2021-08-12 13:09:45 +00:00
Rainer Killinger
2dfb64bafd refactor: remodel entities for library search and results 2021-08-12 12:41:03 +00:00
Jovan Krunić
4ab8770fbc refactor: every indexable thing can be a favorite 2021-08-04 13:57:06 +00:00
Jovan Krunić
2cf1027796 ci: manual web docs for feature branches 2021-08-04 11:43:22 +02:00
openstappsbot
3aed37ecb4 refactor: update all 2021-08-02 13:06:03 +00:00
Jovan Krunić
ddb26b8207 ci: fix elasticsearch service (change runner)
Closes #135
2021-07-29 17:28:44 +02:00
Jovan Krunić
805c1f0937 refactor: specific settings for user group and language 2021-07-27 14:02:56 +02:00
Jovan Krunić
5377d026f3 refactor: define user groups in an extra file 2021-07-21 14:53:08 +02:00
Rainer Killinger
148fd77f4d docs: update changelog 2021-07-14 12:41:31 +02:00
Rainer Killinger
4036bfd193 0.48.0 2021-07-14 12:41:26 +02:00
Rainer Killinger
f4f372b9ad docs: adjust @validatable documentation 2021-07-14 11:16:56 +02:00
Rainer Killinger
872c1f5fc3 fix: correct parameter name of thing update route 2021-07-14 11:16:55 +02:00
Rainer Killinger
4f2ca30dab refactor: make resonse error types validatable 2021-07-14 11:16:55 +02:00
Wieland Schöbl
882483ee24 feat: support geo shape queries 2021-07-09 13:32:28 +00:00
openstappsbot
c998166938 refactor: update all 2021-06-23 13:11:10 +00:00
Rainer Killinger
d61e33de39 docs: update changelog 2021-06-15 10:48:03 +02:00
Rainer Killinger
07d6c4770a 0.47.0 2021-06-15 10:48:01 +02:00
openstappsbot
aab3e9fa6c refactor: update all 2021-06-15 10:46:58 +02:00
Rainer Killinger
4a4cd4e6d4 fix: set date-series frequency non translatable 2021-06-15 09:41:27 +02:00
Wieland Schöbl
942cd11469 feat: make SCDateSeries.frequency compliant with schema.org 2021-06-07 12:23:48 +02:00
Wieland Schöbl
fe090c7387 test: increase schema timeout 2021-05-12 18:03:09 +02:00
Wieland Schöbl
f0782d8820 test: add mapping test 2021-05-12 17:52:22 +02:00
Jovan Krunić
a2461d5904 docs: update changelog 2021-05-04 16:51:52 +02:00
Jovan Krunić
d2e0069dc2 0.46.0 2021-05-04 16:51:50 +02:00
Wieland Schöbl
9c6972af78 feat: change range offer to use date range
add date range type
change availability filter
2021-05-04 16:48:10 +02:00
Rainer Killinger
56b03aa0b9 docs: update changelog 2021-04-26 10:29:36 +02:00
Rainer Killinger
b517837671 0.45.0 2021-04-26 10:29:34 +02:00
Rainer Killinger
6f03ede8bf refactor: make SCCatalog level filterable 2021-04-13 16:11:44 +02:00
wulkanat@gmail.com
952207ace1 docs: update changelog 2021-04-12 15:06:12 +02:00
wulkanat@gmail.com
3d9d28c60c 0.44.0 2021-04-12 15:06:04 +02:00
Wieland Schöbl
913c5691da feat: add support for multiple values in the value filter 2021-04-08 08:06:38 +00:00
Rainer Killinger
03cdbc6f9b docs: update changelog 2021-04-07 13:34:33 +02:00
Rainer Killinger
9f886a8968 0.43.0 2021-04-07 13:34:29 +02:00
openstappsbot
e80afe2c93 refactor: update all 2021-04-06 16:12:49 +00:00
Rainer Killinger
6b10cc86d8 refactor: update @types/node for node version 14 2021-04-06 14:08:42 +02:00
openstappsbot
1aedd6332f refactor: update all 2021-03-29 04:15:38 +00:00
Rainer Killinger
790c8bbc3f docs: update changelog 2021-02-16 14:04:46 +01:00
Rainer Killinger
e934017a65 0.42.0 2021-02-16 14:04:40 +01:00
Rainer Killinger
88dbedd932 refactor: update dependenices 2021-02-15 10:57:25 +01:00
Rainer Killinger
8b1b3444fd refactor: align SCCreativeWork to schema.org spec 2021-02-15 10:37:43 +01:00
Rainer Killinger
d5f3d71a41 refactor: overhaul translator as mentioned in #118 2021-02-15 10:37:38 +01:00
wulkanat@gmail.com
cbcf9c9adb docs: update changelog 2021-02-08 14:59:21 +01:00
wulkanat@gmail.com
321e4f6f24 0.41.0 2021-02-08 14:59:14 +01:00
Wieland Schöbl
8510f11d7b fix: add date, numeric range filter to SCSearchFilter 2021-02-05 13:50:18 +01:00
wulkanat@gmail.com
68aa377fe2 docs: update changelog 2021-02-05 12:59:54 +01:00
wulkanat@gmail.com
29f2c77ecc 0.40.0 2021-02-05 12:59:47 +01:00
Wieland Schöbl
29bc00616e feat: add range filter, date sorting support 2021-02-02 15:07:49 +01:00
Rainer Killinger
02920af4a4 refactor: make SCDish additives translatable 2021-02-01 13:24:12 +00:00
Rainer Killinger
0c14b0f1a0 test: change SCSemester sample data acronym 2020-12-02 17:22:17 +01:00
Rainer Killinger
db0a239761 refactor: change SCSemester acronym pattern 2020-12-02 17:19:46 +01:00
Jovan Krunić
377f55bbbe docs: update changelog 2020-12-01 17:16:02 +01:00
Jovan Krunić
8d7a0e10c6 0.39.0 2020-12-01 17:16:01 +01:00
Rainer Killinger
4865f911d1 refactor: utilize null coalescing 2020-11-23 10:06:14 +01:00
Rainer Killinger
15ae5e0873 refactor: remove narrow property value translation 2020-11-23 10:06:14 +01:00
Rainer Killinger
a246bdea84 feat: extend property value translation retrival 2020-11-23 10:06:13 +01:00
Wieland Schöbl
8641bfc877 docs: add @inheritTags documentation 2020-11-11 11:40:36 +01:00
Michel Jonathan Schmitz
d34e66fbbc docs: update changelog 2020-11-02 09:06:11 +01:00
Michel Jonathan Schmitz
c6273a85d9 0.38.1 2020-11-02 08:57:41 +01:00
Michel Jonathan Schmitz
5558d29c2b ci: remove caching 2020-10-30 15:01:00 +01:00
Michel Jonathan Schmitz
69dfd1ae39 build: replace deprecated dependencies 2020-10-30 09:50:46 +01:00
Michel Jonathan Schmitz
4638bb3684 build: update dependencies 2020-10-30 09:50:46 +01:00
Michel Jonathan Schmitz
6c687c6004 docs: update changelog 2020-10-30 09:49:52 +01:00
Michel Jonathan Schmitz
0bf1301733 0.38.0 2020-10-30 09:46:46 +01:00
Wieland Schöbl
827ba47892 refactor: swap out jsonschema package for json-schema 2020-10-29 15:14:25 +01:00
wulkanat@gmail.com
d3b620a745 docs: update changelog 2020-09-23 06:09:23 +02:00
wulkanat@gmail.com
821834cfa0 0.37.0 2020-09-23 06:09:13 +02:00
Wieland Schöbl
c369c8520a fix: remove keyword tag from steps 2020-09-09 18:12:32 +02:00
Rainer Killinger
66075ef99b fix: remove redundant property declaration 2020-09-02 06:38:14 +00:00
Rainer Killinger
7a6333aa8f test: bump branch coverage limit 2020-08-31 13:52:41 +02:00
Rainer Killinger
e242a21e99 refactor: update dependencies, remove extraneous 2020-08-31 13:52:39 +02:00
Rainer Killinger
6fecd1e89d refactor: update ts-optchain dependency 2020-08-26 12:51:10 +02:00
Sebastian Lange
f6a93e668b docs: update changelog 2020-07-16 11:37:58 +02:00
Sebastian Lange
2f96bc8569 0.36.0 2020-07-16 11:37:56 +02:00
Rainer Killinger
9ce4026b1a build: lower npm audit vulnerabilities 2020-07-01 08:00:26 +00:00
Rainer Killinger
e434b2d26e test: add tests for translatedThingType function 2020-07-01 08:00:26 +00:00
Rainer Killinger
fe7f1a53ae feat: add function to get translated SCThingType 2020-07-01 08:00:26 +00:00
Frank Nagel
907d61b5d2 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:12:14 +02:00
Rainer Killinger
5fb9755841 docs: update changelog 2020-05-13 11:59:43 +02:00
Rainer Killinger
e5dd02eeca 0.35.0 2020-05-13 11:59:33 +02:00
Rainer Killinger
e7b4a426a9 test: adapt tests for translatedPropertyNames 2020-05-04 13:09:03 +02:00
Rainer Killinger
7dd74af305 refactor: simplify use of translatedPropertyNames 2020-05-04 13:08:56 +02:00
Rainer Killinger
4409101647 docs: update changelog 2020-04-21 13:40:19 +02:00
Rainer Killinger
3a141e6cf4 0.34.0 2020-04-21 13:40:11 +02:00
Rainer Killinger
8a20e3e873 build: update indirect dependencies 2020-04-14 11:06:27 +02:00
Rainer Killinger
e196303e64 refactor: state explicit type in isThing function 2020-04-14 11:05:09 +02:00
Rainer Killinger
70c1a3eaa3 feat: annotate SCThing uid and url as filterable 2020-04-14 11:03:49 +02:00
Axel Nieder-Vahrenholz
6060113df5 feat: Update src/things/book.ts - made ISBN optional 2020-04-06 09:58:51 +00:00
Rainer Killinger
39d5becb56 test: add all files with functions in coverage 2020-03-09 09:34:34 +00:00
Wieland Schöbl
f5e88569eb feat: add @sortable tags to certain translatable properties 2020-02-21 12:55:59 +01:00
Rainer Killinger
67041aa39d docs: update changelog 2020-02-11 14:39:12 +01:00
Rainer Killinger
18943612a8 0.33.0 2020-02-11 14:39:07 +01:00
Rainer Killinger
d167947e04 refactor: update dependencies 2020-02-11 13:06:03 +01:00
Rainer Killinger
2a0dc812d8 ci: saperate aduit jobs from test stage 2020-02-06 13:23:25 +01:00
Rainer Killinger
cdb8a6507d docs: update changelog 2020-02-04 16:15:26 +01:00
161 changed files with 9771 additions and 5592 deletions

2
.eslintignore Normal file
View File

@@ -0,0 +1,2 @@
resources
openapi

29
.eslintrc.json Normal file
View File

@@ -0,0 +1,29 @@
{
"extends": "@openstapps",
"rules": {
"@typescript-eslint/no-empty-interface": "off",
"jsdoc/check-tag-names": [
"error",
{
"definedTags": [
"internal",
"aggregatable",
"float",
"indexable",
"integer",
"keyword",
"sortable",
"text",
"date",
"validatable",
"filterable",
"inheritTags",
"minLength",
"pattern",
"typeparam",
"TJS-format"
]
}
]
}
}

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@ pids
*.pid *.pid
*.seed *.seed
*.pid.lock *.pid.lock
.DS_Store
# Directory for instrumented libs generated by jscoverage/JSCover # Directory for instrumented libs generated by jscoverage/JSCover
lib-cov lib-cov

View File

@@ -1,16 +1,13 @@
image: registry.gitlab.com/openstapps/projectmanagement/node image: registry.gitlab.com/openstapps/projectmanagement/node
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules
before_script: before_script:
- npm install - npm install
stages: stages:
- build - build
- review
- test - test
- audit
- deploy - deploy
- publish - publish
@@ -25,8 +22,48 @@ 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: test stage: audit
script: script:
- npm audit - npm audit
allow_failure: true allow_failure: true
@@ -34,9 +71,9 @@ audit:
- schedules - schedules
scheduled-audit: scheduled-audit:
stage: test stage: audit
script: script:
- npm audit - npm audit --audit-level=high
only: only:
- schedules - schedules
@@ -46,10 +83,30 @@ test:
stage: test stage: test
script: script:
- npm test - npm test
coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/'
artifacts: artifacts:
paths: paths:
- report - report
- coverage - coverage
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
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:

5
.mailmap Normal file
View 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>

View File

@@ -1,10 +1,317 @@
# [0.70.0](https://gitlab.com/openstapps/core/compare/v0.69.0...v0.70.0) (2022-09-02)
### Features
* add auth provider to config menu items ([b183198](https://gitlab.com/openstapps/core/commit/b18319802969d711373e70cca5921730345aa3e8))
# [0.69.0](https://gitlab.com/openstapps/core/compare/v0.68.0...v0.69.0) (2022-08-17)
# [0.68.0](https://gitlab.com/openstapps/core/compare/v0.67.0...v0.68.0) (2022-06-27)
# [0.67.0](https://gitlab.com/openstapps/core/compare/v0.66.1...v0.67.0) (2022-05-31)
## [0.66.1](https://gitlab.com/openstapps/core/compare/v0.66.0...v0.66.1) (2022-05-27)
# [0.66.0](https://gitlab.com/openstapps/core/compare/v0.65.1...v0.66.0) (2022-05-11)
### Features
* add geo filter envelope support ([484be6a](https://gitlab.com/openstapps/core/commit/484be6a890d743601efa5d40d33ea2c619f3126d))
## [0.65.1](https://gitlab.com/openstapps/core/compare/v0.65.0...v0.65.1) (2022-04-04)
# [0.65.0](https://gitlab.com/openstapps/core/compare/v0.64.0...v0.65.0) (2022-04-04)
# [0.64.0](https://gitlab.com/openstapps/core/compare/v0.63.0...v0.64.0) (2022-03-21)
# [0.63.0](https://gitlab.com/openstapps/core/compare/v0.62.0...v0.63.0) (2022-01-24)
### Bug Fixes
* add auth object to index route ([e149931](https://gitlab.com/openstapps/core/commit/e14993114f0ec370775010eee4ad0d302a0beebb))
# [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)
### Features
* add range filter, date sorting support ([29bc006](https://gitlab.com/openstapps/core/commit/29bc00616e87a8d346d8c304fab2e3818921c75e))
# [0.39.0](https://gitlab.com/openstapps/core/compare/v0.38.1...v0.39.0) (2020-12-01)
### Features
* extend property value translation retrival ([a246bde](https://gitlab.com/openstapps/core/commit/a246bdea84e0ca390be6ab38723d637626db87d2))
## [0.38.1](https://gitlab.com/openstapps/core/compare/v0.38.0...v0.38.1) (2020-11-02)
# [0.38.0](https://gitlab.com/openstapps/core/compare/v0.37.0...v0.38.0) (2020-10-30)
# [0.37.0](https://gitlab.com/openstapps/core/compare/v0.36.0...v0.37.0) (2020-09-23)
### Bug Fixes
* remove keyword tag from steps ([c369c85](https://gitlab.com/openstapps/core/commit/c369c8520a2eed169555a35a50ce745c08e1f9da))
* remove redundant property declaration ([66075ef](https://gitlab.com/openstapps/core/commit/66075ef99b95198a9cd5c0a396603e089221bcd9))
# [0.36.0](https://gitlab.com/openstapps/core/compare/v0.35.0...v0.36.0) (2020-07-16)
### Features
* add function to get translated SCThingType ([fe7f1a5](https://gitlab.com/openstapps/core/commit/fe7f1a53ae46e052e23f1b39851f1547b5a8dded))
# [0.35.0](https://gitlab.com/openstapps/core/compare/v0.34.0...v0.35.0) (2020-05-13)
# [0.34.0](https://gitlab.com/openstapps/core/compare/v0.33.0...v0.34.0) (2020-04-21)
### Features
* add [@sortable](https://gitlab.com/sortable) tags to certain translatable properties ([f5e8856](https://gitlab.com/openstapps/core/commit/f5e88569eb75578febbcde67259c0c14563e53fe))
* annotate SCThing uid and url as filterable ([70c1a3e](https://gitlab.com/openstapps/core/commit/70c1a3eaa3d1c88f4b86f0df86d0d362ad1f930c))
* Update src/things/book.ts - made ISBN optional ([6060113](https://gitlab.com/openstapps/core/commit/6060113df56b871bb5014a8a961974895e52158f))
# [0.33.0](https://gitlab.com/openstapps/core/compare/v0.32.0...v0.33.0) (2020-02-11)
# [0.32.0](https://gitlab.com/openstapps/core/compare/v0.31.0...v0.32.0) (2020-02-04)
### Features
* make SCContactPoint extend SCThing ([0d89b14](https://gitlab.com/openstapps/core/commit/0d89b1493293f83e9096615f653a6094519d59f2))
# [0.31.0](https://gitlab.com/openstapps/core/compare/v0.30.0...v0.31.0) (2019-11-14) # [0.31.0](https://gitlab.com/openstapps/core/compare/v0.30.0...v0.31.0) (2019-11-14)
### Bug Fixes ### Bug Fixes
* remove categories from custom translations ([9658f05](https://gitlab.com/openstapps/core/commit/9658f05)) * remove categories from custom translations ([9658f05](https://gitlab.com/openstapps/core/commit/9658f05d31366b3735da3aa548ef5ed0255d8054))
* translator can now handle enum translations ([abda5cf](https://gitlab.com/openstapps/core/commit/abda5cf)) * translator can now handle enum translations ([abda5cf](https://gitlab.com/openstapps/core/commit/abda5cf0caead37f085431e1e5a9771b79272ec6))
@@ -13,8 +320,8 @@
### Features ### Features
* add aggregatable tag for type field ([443cb74](https://gitlab.com/openstapps/core/commit/443cb74)) * add aggregatable tag for type field ([443cb74](https://gitlab.com/openstapps/core/commit/443cb748fba1575f5f1e16c550fd33eb7fa7901c))
* add new field sequenceIndex to message ([01f92ba](https://gitlab.com/openstapps/core/commit/01f92ba)) * add new field sequenceIndex to message ([01f92ba](https://gitlab.com/openstapps/core/commit/01f92baa985013bfe1c79fad60351fdaf44bd676))
@@ -23,7 +330,7 @@
### Features ### Features
* add mappingIgnoredTags property to SCBackend ([149f3ff](https://gitlab.com/openstapps/core/commit/149f3ff)) * add mappingIgnoredTags property to SCBackend ([149f3ff](https://gitlab.com/openstapps/core/commit/149f3ffff15dce27337665abba520d11bc3014dd))
@@ -32,7 +339,7 @@
### Features ### Features
* add onlyOnType field for SCFacet ([fba63db](https://gitlab.com/openstapps/core/commit/fba63db)) * add onlyOnType field for SCFacet ([fba63db](https://gitlab.com/openstapps/core/commit/fba63db137c52212113545be1062d760f0c4213f))
@@ -41,7 +348,7 @@
### Features ### Features
* add [@filterable](https://gitlab.com/filterable) tags ([fec3371](https://gitlab.com/openstapps/core/commit/fec3371)) * add [@filterable](https://gitlab.com/filterable) tags ([fec3371](https://gitlab.com/openstapps/core/commit/fec33715add996ae0a7125ad00ee043d288c6671))
@@ -50,12 +357,12 @@
### Bug Fixes ### Bug Fixes
* complete german translations ([bad15dc](https://gitlab.com/openstapps/core/commit/bad15dc)) * complete german translations ([bad15dc](https://gitlab.com/openstapps/core/commit/bad15dc8728954ee6ee23fa68c471647328830b9))
### Features ### Features
* add pluginRequestTimeout field to backend config ([88f579e](https://gitlab.com/openstapps/core/commit/88f579e)) * add pluginRequestTimeout field to backend config ([88f579e](https://gitlab.com/openstapps/core/commit/88f579e09bc5e7726dbc4fc788737ba49a0801cd))
@@ -64,7 +371,7 @@
### Bug Fixes ### Bug Fixes
* correct package job ([d4a8ef6](https://gitlab.com/openstapps/core/commit/d4a8ef6)) * correct package job ([d4a8ef6](https://gitlab.com/openstapps/core/commit/d4a8ef6a9ca69849f8b981804da45e4ba907f37b))
@@ -73,7 +380,7 @@
### Features ### Features
* add new field receivingOrganisations to message ([d781dd6](https://gitlab.com/openstapps/core/commit/d781dd6)) * add new field receivingOrganisations to message ([d781dd6](https://gitlab.com/openstapps/core/commit/d781dd6de5cc7572b9218df959247b93cb2db305))
@@ -82,12 +389,12 @@
### Bug Fixes ### Bug Fixes
* use correct generic for the distance filter ([f262a6b](https://gitlab.com/openstapps/core/commit/f262a6b)) * use correct generic for the distance filter ([f262a6b](https://gitlab.com/openstapps/core/commit/f262a6b8fa7a9d40234569ec490d5ef8e9437a75))
### Features ### Features
* add type maps from routes to requests and responses ([e1d4b2b](https://gitlab.com/openstapps/core/commit/e1d4b2b)), closes [#80](https://gitlab.com/openstapps/core/issues/80) * add type maps from routes to requests and responses ([e1d4b2b](https://gitlab.com/openstapps/core/commit/e1d4b2bc9de60a2332788c9a2264760d151c8813)), closes [#80](https://gitlab.com/openstapps/core/issues/80)
@@ -96,8 +403,8 @@
### Features ### Features
* add mapping type from response to request and vice versa ([c18e3c1](https://gitlab.com/openstapps/core/commit/c18e3c1)), closes [#80](https://gitlab.com/openstapps/core/issues/80) * add mapping type from response to request and vice versa ([c18e3c1](https://gitlab.com/openstapps/core/commit/c18e3c15f1940338b6872343f6b20dba6346f84b)), closes [#80](https://gitlab.com/openstapps/core/issues/80)
* support 404 (resource not found) error on plugin register route ([43851d2](https://gitlab.com/openstapps/core/commit/43851d2)) * support 404 (resource not found) error on plugin register route ([43851d2](https://gitlab.com/openstapps/core/commit/43851d2d358c4c342a80a863b059a6447c819c04))
@@ -110,8 +417,8 @@
### Features ### Features
* add ES annotations ([9c424b0](https://gitlab.com/openstapps/core/commit/9c424b0)) * add ES annotations ([9c424b0](https://gitlab.com/openstapps/core/commit/9c424b0f96da26d3aae9ffaadb2c640e7369ca7e))
* add static typed test for consistency ([ff1f554](https://gitlab.com/openstapps/core/commit/ff1f554)), closes [#71](https://gitlab.com/openstapps/core/issues/71) * add static typed test for consistency ([ff1f554](https://gitlab.com/openstapps/core/commit/ff1f554e0beacb5ce2f3308c8212e2b8e4d8cbb0)), closes [#71](https://gitlab.com/openstapps/core/issues/71)
@@ -120,8 +427,8 @@
### Bug Fixes ### Bug Fixes
* add translations for every SCThing ([f847a2a](https://gitlab.com/openstapps/core/commit/f847a2a)) * add translations for every SCThing ([f847a2a](https://gitlab.com/openstapps/core/commit/f847a2aa0cf576e2fd79197cdc7795638d929136))
* rename properties floor and message so that they are not identical to SCThingTypes ([78b64ba](https://gitlab.com/openstapps/core/commit/78b64ba)) * rename properties floor and message so that they are not identical to SCThingTypes ([78b64ba](https://gitlab.com/openstapps/core/commit/78b64bae08d9ca12badaedf921a24fa5ffe90552))
@@ -130,9 +437,9 @@
### Bug Fixes ### Bug Fixes
* add thing without references, split thing ([da0507e](https://gitlab.com/openstapps/core/commit/da0507e)), closes [#69](https://gitlab.com/openstapps/core/issues/69) * add thing without references, split thing ([da0507e](https://gitlab.com/openstapps/core/commit/da0507ee341af75cd15dddeeb3f4cbe08899434c)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
* adjust model to remove references from things without references ([ca72c20](https://gitlab.com/openstapps/core/commit/ca72c20)), closes [#69](https://gitlab.com/openstapps/core/issues/69) * adjust model to remove references from things without references ([ca72c20](https://gitlab.com/openstapps/core/commit/ca72c20bd098032745ed0eb6978902b6ff6feac5)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
* remove references from origins ([1d6a2b7](https://gitlab.com/openstapps/core/commit/1d6a2b7)), closes [#69](https://gitlab.com/openstapps/core/issues/69) * remove references from origins ([1d6a2b7](https://gitlab.com/openstapps/core/commit/1d6a2b7841e9c38e68c9e5c718377a9c04fe50d6)), closes [#69](https://gitlab.com/openstapps/core/issues/69)
@@ -141,7 +448,7 @@
### Features ### Features
* add study module interface ([d3790ad](https://gitlab.com/openstapps/core/commit/d3790ad)) * add study module interface ([d3790ad](https://gitlab.com/openstapps/core/commit/d3790adbd82417923d79b4a5a35c74fcaab3e050))
@@ -158,13 +465,13 @@
### Bug Fixes ### Bug Fixes
* change SCThingMeta getInstance() return value ([4986042](https://gitlab.com/openstapps/core/commit/4986042)) * change SCThingMeta getInstance() return value ([4986042](https://gitlab.com/openstapps/core/commit/4986042428e24a04b73fb03d71c01353588419a7))
* resolve issues with things that can be offered ([623ed61](https://gitlab.com/openstapps/core/commit/623ed61)), closes [#41](https://gitlab.com/openstapps/core/issues/41) * resolve issues with things that can be offered ([623ed61](https://gitlab.com/openstapps/core/commit/623ed613a9405b53a86a33c13d48bc49d48de1ce)), closes [#41](https://gitlab.com/openstapps/core/issues/41)
### Features ### Features
* provide context based search ([3242411](https://gitlab.com/openstapps/core/commit/3242411)) * provide context based search ([3242411](https://gitlab.com/openstapps/core/commit/324241176849b338bee9f5d1dcaf1109f47a8bb9))
@@ -173,7 +480,7 @@
### Features ### Features
* add model for plugin register route ([8188731](https://gitlab.com/openstapps/core/commit/8188731)) * add model for plugin register route ([8188731](https://gitlab.com/openstapps/core/commit/81887315f8c3038ec37c2197db8e193da835f6fc))
@@ -182,14 +489,14 @@
### Bug Fixes ### Bug Fixes
* correct isThing guard ([67868e9](https://gitlab.com/openstapps/core/commit/67868e9)) * correct isThing guard ([67868e9](https://gitlab.com/openstapps/core/commit/67868e9eb810de94ca0bb6e1298799ee3f550145))
* update tslint dependencies ([bbe4fca](https://gitlab.com/openstapps/core/commit/bbe4fca)) * update tslint dependencies ([bbe4fca](https://gitlab.com/openstapps/core/commit/bbe4fcac42c21c68b5c6aa6bcf9bbdecfdf84de7))
### Features ### Features
* add conditional "maps" for associated types ([c8bda2e](https://gitlab.com/openstapps/core/commit/c8bda2e)), closes [#50](https://gitlab.com/openstapps/core/issues/50) * add conditional "maps" for associated types ([c8bda2e](https://gitlab.com/openstapps/core/commit/c8bda2eae7f44ec4a284cc26fc85051a9a45e192)), closes [#50](https://gitlab.com/openstapps/core/issues/50)
* provide sample JSON files with the package ([5d1e79d](https://gitlab.com/openstapps/core/commit/5d1e79d)), closes [#46](https://gitlab.com/openstapps/core/issues/46) * provide sample JSON files with the package ([5d1e79d](https://gitlab.com/openstapps/core/commit/5d1e79d4879e6ce8f43d4cebb9d8c8500d5d16b7)), closes [#46](https://gitlab.com/openstapps/core/issues/46)
@@ -198,12 +505,12 @@
### Bug Fixes ### Bug Fixes
* add todo to SCThingsWithoutDiff and SCClasses ([9a49442](https://gitlab.com/openstapps/core/commit/9a49442)), closes [#39](https://gitlab.com/openstapps/core/issues/39) * add todo to SCThingsWithoutDiff and SCClasses ([9a49442](https://gitlab.com/openstapps/core/commit/9a49442902a9f49439083a9197bd9f0a231d007d)), closes [#39](https://gitlab.com/openstapps/core/issues/39)
### Features ### Features
* add SCThingTranslator class. move functionality accordingly ([90e3d22](https://gitlab.com/openstapps/core/commit/90e3d22)) * add SCThingTranslator class. move functionality accordingly ([90e3d22](https://gitlab.com/openstapps/core/commit/90e3d2239921bbfcea27b64aef9344ffee270b6d))
@@ -212,8 +519,8 @@
### Features ### Features
* add laboratory and computer as room categories ([a0ab72e](https://gitlab.com/openstapps/core/commit/a0ab72e)), closes [#33](https://gitlab.com/openstapps/core/issues/33) * add laboratory and computer as room categories ([a0ab72e](https://gitlab.com/openstapps/core/commit/a0ab72e597f6a14cfc0bd8935e1ef765b86b90f7)), closes [#33](https://gitlab.com/openstapps/core/issues/33)
* add maxRequestBodySize in backend configuration ([b5bd09e](https://gitlab.com/openstapps/core/commit/b5bd09e)) * add maxRequestBodySize in backend configuration ([b5bd09e](https://gitlab.com/openstapps/core/commit/b5bd09e40bfb49463815538ebaa44ff53b5d7b92))
@@ -222,7 +529,7 @@
### Features ### Features
* add model for requestBodyTooLargeError ([bc3a0f6](https://gitlab.com/openstapps/core/commit/bc3a0f6)) * add model for requestBodyTooLargeError ([bc3a0f6](https://gitlab.com/openstapps/core/commit/bc3a0f6d11cba836a55cbd5787d68cfe655b68a6))
@@ -235,7 +542,7 @@
### Features ### Features
* add config for maximum queries ([c7ab473](https://gitlab.com/openstapps/core/commit/c7ab473)) * add config for maximum queries ([c7ab473](https://gitlab.com/openstapps/core/commit/c7ab47397e2a33b1c460b9038cbf53fec148316d))
@@ -252,7 +559,7 @@
### Features ### Features
* add model for syntax error ([a3f9fcb](https://gitlab.com/openstapps/core/commit/a3f9fcb)) * add model for syntax error ([a3f9fcb](https://gitlab.com/openstapps/core/commit/a3f9fcbfb0c35206adabc95792de076518f604f7))
@@ -261,7 +568,7 @@
### Features ### Features
* add draft of todo ([2860a11](https://gitlab.com/openstapps/core/commit/2860a11)) * add draft of todo ([2860a11](https://gitlab.com/openstapps/core/commit/2860a11b618081ab88ecb1780a280cab37217a0e))
@@ -270,13 +577,13 @@
### Bug Fixes ### Bug Fixes
* set larger v8 stack size ([d3d08e7](https://gitlab.com/openstapps/core/commit/d3d08e7)) * set larger v8 stack size ([d3d08e7](https://gitlab.com/openstapps/core/commit/d3d08e7735808d4eae5aab4b263e36047c608679))
### Features ### Features
* add different origin types: remote and user ([13a4965](https://gitlab.com/openstapps/core/commit/13a4965)), closes [#12](https://gitlab.com/openstapps/core/issues/12) * add different origin types: remote and user ([13a4965](https://gitlab.com/openstapps/core/commit/13a49650c4498f6edbe17c9de3598e0180b866da)), closes [#12](https://gitlab.com/openstapps/core/issues/12)
* add saveable thing for saving user/client data ([a4f3fab](https://gitlab.com/openstapps/core/commit/a4f3fab)), closes [#12](https://gitlab.com/openstapps/core/issues/12) * add saveable thing for saving user/client data ([a4f3fab](https://gitlab.com/openstapps/core/commit/a4f3fab033ca18352c0119061f2d0e64252d4bbb)), closes [#12](https://gitlab.com/openstapps/core/issues/12)
@@ -285,7 +592,7 @@
### Features ### Features
* use tag [@validatable](https://gitlab.com/validatable) to mark schema types ([7f248ee](https://gitlab.com/openstapps/core/commit/7f248ee)) * use tag [@validatable](https://gitlab.com/validatable) to mark schema types ([7f248ee](https://gitlab.com/openstapps/core/commit/7f248eea13c732a95c4ee8e1bc91afeee52e8c2d))
@@ -294,9 +601,9 @@
### Features ### Features
* add base scheme for academic degrees ([85c8fc4](https://gitlab.com/openstapps/core/commit/85c8fc4)) * add base scheme for academic degrees ([85c8fc4](https://gitlab.com/openstapps/core/commit/85c8fc49c14b0ce45cf0cfdaf46c1ebe43b23ec7))
* add schema for course of studies ([2d4a76a](https://gitlab.com/openstapps/core/commit/2d4a76a)) * add schema for course of studies ([2d4a76a](https://gitlab.com/openstapps/core/commit/2d4a76a555603a395c81a7a92ce5d95ed04de9de))
* add tool to generate documentation for routes ([1a07df2](https://gitlab.com/openstapps/core/commit/1a07df2)) * add tool to generate documentation for routes ([1a07df2](https://gitlab.com/openstapps/core/commit/1a07df2d676895264f43b0138645d7c13f60c9db))
@@ -304,12 +611,12 @@
## [0.0.1](https://gitlab.com/openstapps/core/compare/2d770dd...v0.0.1) (2018-11-29) ## [0.0.1](https://gitlab.com/openstapps/core/compare/2d770dde4464dc4cf4cdc29927aa4e4382914148...v0.0.1) (2018-11-29)
### Features ### Features
* add core ([2d770dd](https://gitlab.com/openstapps/core/commit/2d770dd)) * add core ([2d770dd](https://gitlab.com/openstapps/core/commit/2d770dde4464dc4cf4cdc29927aa4e4382914148))

View File

@@ -35,16 +35,18 @@ node --require ts-node/register src/cli.ts routes PATH/TO/ROUTES.md
Annotations are used to add additional informations to fields, which are used to autogenerate mappings from the core objects. Annotations are used to add additional informations to fields, which are used to autogenerate mappings from the core objects.
External dependencies can not be covered by the annotations. Documentation about some of the annotations can be found in: [typedoc](https://typedoc.org/guides/doccomments/) External dependencies can not be covered by the annotations. Documentation about some of the annotations can be found in: [typedoc](https://typedoc.org/guides/doccomments/)
| annotation | description | parameters | | annotation | description | parameters |
|-------------------|-------------------------------------------|---------------| |-------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| `@aggregatable` | used for generating of aggregations of the field if the core schema is used to put data into a database/key-value store | whether the property is being used on the top type or across all types: `global` | | `@aggregatable` | used for generating of aggregations of the field if the core schema is used to put data into a database/key-value store | whether the property is being used on the top type or across all types: `global` |
| `@float` | number field is interpreted as float | | | `@float` | number field is interpreted as float | |
| `@indexable` | marks the type as indexable if the core schema is used to put data into a database/key-value store| | | `@indexable` | marks the type as indexable if the core schema is used to put data into a database/key-value store | |
| `@integer` | number field is interpreted as integer | | | `@integer` | number field is interpreted as integer | |
| `@keyword` | string field is interpreted as keyword | | | `@keyword` | string field is interpreted as keyword | |
| `@sortable` | field is sortable if the core schema is used to put data into a database/key-value store | 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 | |
| `@validatable` | marks the type as validatable if the core schema is used to put data into a database/key-value store | | | `@date` | string field is interpreted as a date field | |
| `@filterable` | non-object/nested field is filterable if the core schema is used to put data into a database/key-value store | | | `@validatable` | Marks the type for json schema generation, which can be checked at runtime. Any top-level type that is put into a database should always be marked as validatable. | |
| `@filterable` | non-object/nested field is filterable if the core schema is used to put data into a database/key-value store | |
| `@inheritTags` | inherit all tags from another field | `[SCThingType]::[field]` |
*Note: tags ignore casing, but for consistency they should use the variants proposed here.*

7659
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@openstapps/core", "name": "@openstapps/core",
"version": "0.32.0", "version": "0.71.0",
"description": "StAppsCore - Generalized model of data", "description": "StAppsCore - Generalized model of data",
"keywords": [ "keywords": [
"Model", "Model",
@@ -14,67 +14,83 @@
"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 lint && 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 --entryPointStrategy expand 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",
"test": "nyc mocha --require ts-node/register --require source-map-support/register --ui mocha-typescript test/*.spec.ts", "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",
"tslint": "tslint -p tsconfig.json -c tslint.json 'src/**/*.ts'" "mappings-integration": "openstapps-es-mapping-generator put-es-templates lib/mappings/mappings.json http://elasticsearch:9200/",
"test": "nyc mocha --recursive 'test/*.spec.ts'",
"lint": "eslint --ext .ts src/"
}, },
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>", "author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"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", "Rainer Killinger <mail-openstapps@killinger.co>",
"Roman Klopsch",
"Sebastian Lange", "Sebastian Lange",
"Wieland Schöbl", "Thea Schöbl"
"Roman Klopsch"
], ],
"dependencies": { "dependencies": {
"@openstapps/core-tools": "0.32.0",
"@types/geojson": "1.0.6", "@types/geojson": "1.0.6",
"@types/json-patch": "0.0.30", "@types/json-patch": "0.0.30",
"@types/node": "10.14.14", "@types/json-schema": "7.0.11",
"fast-clone": "1.5.13", "@types/node": "14.18.24",
"http-status-codes": "1.3.2", "fast-deep-equal": "3.1.3",
"http-status-codes": "2.2.0",
"json-patch": "0.7.0", "json-patch": "0.7.0",
"jsonschema": "1.2.4", "json-schema": "0.4.0",
"ts-optchain": "0.1.3" "rfdc": "1.3.0",
"ts-optchain": "0.1.8"
}, },
"devDependencies": { "devDependencies": {
"@krlwlfrt/async-pool": "0.1.0", "@openstapps/configuration": "0.33.0",
"@openstapps/configuration": "0.21.1", "@openstapps/es-mapping-generator": "0.3.0",
"@openstapps/core-tools": "0.8.0", "@openstapps/eslint-config": "1.1.0",
"@openstapps/logger": "0.4.0", "@openstapps/logger": "1.0.0",
"@types/chai": "4.1.7", "@testdeck/mocha": "0.2.0",
"@types/rimraf": "2.0.2", "@types/chai": "4.3.3",
"chai": "4.2.0", "@types/lodash": "4.14.182",
"commander": "2.20.0", "@types/mocha": "9.1.1",
"conditional-type-checks": "1.0.1", "@types/rimraf": "3.0.2",
"conventional-changelog-cli": "2.0.23", "@typescript-eslint/eslint-plugin": "5.33.1",
"mocha": "6.2.0", "@typescript-eslint/parser": "5.33.1",
"mocha-typescript": "1.1.17", "chai": "4.3.6",
"nyc": "14.1.1", "conditional-type-checks": "1.0.6",
"rimraf": "2.6.3", "conventional-changelog-cli": "2.2.2",
"source-map-support": "0.5.13", "eslint": "8.22.0",
"ts-node": "8.3.0", "eslint-config-prettier": "8.5.0",
"tslint": "5.18.0", "eslint-plugin-jsdoc": "39.3.6",
"typedoc": "0.14.2", "eslint-plugin-prettier": "4.2.1",
"typescript": "3.5.3" "eslint-plugin-unicorn": "43.0.2",
"lodash": "4.17.21",
"mocha": "10.0.0",
"nyc": "15.1.0",
"prettier": "2.7.1",
"rimraf": "3.0.2",
"source-map-support": "0.5.21",
"surge": "0.23.1",
"ts-node": "10.9.1",
"typedoc": "0.22.18",
"typescript": "4.4.4"
}, },
"nyc": { "nyc": {
"all": true, "all": true,
"branches": 85, "branches": 90,
"check-coverage": true, "check-coverage": true,
"exclude": [], "exclude": [],
"extension": [ "extension": [
@@ -84,12 +100,15 @@
"include": [ "include": [
"src/protocol/route.ts", "src/protocol/route.ts",
"src/things/abstract/thing.ts", "src/things/abstract/thing.ts",
"src/things/abstract/thing-that-can-be-offered.ts",
"src/things/abstract/thing-with-categories.ts",
"src/translator.ts", "src/translator.ts",
"src/guards.ts" "src/guards.ts"
], ],
"lines": 95, "lines": 95,
"per-file": true, "per-file": true,
"reporter": [ "reporter": [
"cobertura",
"html", "html",
"text-summary" "text-summary"
], ],

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,23 @@
* 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/>.
*/ */
// 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 {SCAuthorizationProviderType} from './authorization';
import {SCFeatureConfiguration} from './feature';
/** /**
* An app configuration menu item * An app configuration menu item
*/ */
export interface SCAppConfigurationMenuItem { export interface SCAppConfigurationMenuItem {
/**
* Key of authorization provider available in SCConfigFile
* Restricting and enabling the usage of this item
*/
authProvider?: SCAuthorizationProviderType;
/** /**
* Icon for the menu item * Icon for the menu item
*/ */
@@ -51,44 +59,47 @@ export interface SCAppConfigurationMenuCategory {
*/ */
icon: string; icon: string;
/**
* ID of the menu category
*/
id:
'main'
| 'meta'
| 'personal'
| 'external';
/** /**
* A list of items that belong to the category * A list of items that belong to the category
*/ */
items: SCAppConfigurationMenuItem[]; items: SCAppConfigurationMenuItem[];
/** /**
* Name of the category * Title of the category
*/ */
name: string; title: string;
/**
* Route inside the app
*/
route: string;
/** /**
* Translations for the menu category * Translations for the menu category
*/ */
translations: SCTranslations<SCAppConfigurationMenuCategoryTranslationName>; translations: SCTranslations<SCAppConfigurationMenuCategoryTranslationTitle>;
} }
/** /**
* 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 +123,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 +138,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
*/ */
@@ -167,9 +169,153 @@ export interface SCAppConfigurationMenuItemTranslationTitle {
/** /**
* Translatable property of a menu category * Translatable property of a menu category
*/ */
export interface SCAppConfigurationMenuCategoryTranslationName { export interface SCAppConfigurationMenuCategoryTranslationTitle {
/** /**
* Translation of the name of a menu category * Translation of the name of a menu category
*/ */
name: string; title: 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>;
} }

View File

@@ -0,0 +1,96 @@
/*
* Copyright (C) 2021-2022 Open 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;
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -95,29 +95,25 @@ export interface SCBackendConfigurationSortableField {
* A list of supported sorts on this field * A list of supported sorts on this field
*/ */
sortTypes: SCSearchSortType[]; sortTypes: SCSearchSortType[];
} }
/** /**
* Possible context names to be used by the search request * Possible context names to be used by the search request
*/ */
export type SCSearchContext = export type SCSearchContext = 'default' | 'dining' | 'place';
| 'default'
| 'dining'
| 'place';
/** /**
* A boosting configuration for one context * A boosting configuration for one context
*/ */
export type SCBackendConfigurationSearchBoostingContext = export type SCBackendConfigurationSearchBoostingContext = SCRestrictedMap<
SCRestrictedMap<SCSearchContext, SCSearchContext,
SCBackendConfigurationSearchBoostingType[]>; SCBackendConfigurationSearchBoostingType[]
>;
/** /**
* A boosting configuration for one SCType * A boosting configuration for one SCType
*/ */
export interface SCBackendConfigurationSearchBoostingType { export interface SCBackendConfigurationSearchBoostingType {
/** /**
* The factor of which the scores matching this type should be multiplied by * The factor of which the scores matching this type should be multiplied by
*/ */

48
src/config/feature.ts Normal file
View File

@@ -0,0 +1,48 @@
/*
* Copyright (C) 2022 Open 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;
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,19 +14,25 @@
*/ */
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';
/** /**
* A configuration file that configures app and backend * A configuration file that configures app and backend
*
* @validatable * @validatable
*/ */
export interface SCConfigFile { export interface SCConfigFile {
/** /**
* Configuration for the app that is visible to clients * Configuration for the app that is visible to clients
*/ */
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
*/ */

66
src/config/user.ts Normal file
View File

@@ -0,0 +1,66 @@
/*
* Copyright (C) 2021-2022 Open 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;
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -37,7 +37,7 @@ export interface SCLanguage {
* @see https://en.wikipedia.org/wiki/ISO_639-1 * @see https://en.wikipedia.org/wiki/ISO_639-1
*/ */
export type SCLanguageName = export type SCLanguageName =
'afar' | 'afar'
| 'abkhazian' | 'abkhazian'
| 'avestan' | 'avestan'
| 'afrikaans' | 'afrikaans'
@@ -229,7 +229,7 @@ export type SCLanguageName =
* @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes * @see https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
*/ */
export type SCLanguageCode = export type SCLanguageCode =
'aa' | 'aa'
| 'ab' | 'ab'
| 'ae' | 'ae'
| 'af' | 'af'
@@ -421,7 +421,7 @@ export type SCLanguageCode =
* @see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 * @see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
*/ */
export type SCNationality = export type SCNationality =
'Afghanistan' | 'Afghanistan'
| 'Åland Islands' | 'Åland Islands'
| 'Albania' | 'Albania'
| 'Algeria' | 'Algeria'
@@ -475,7 +475,7 @@ export type SCNationality =
| 'Congo (Democratic Republic of the)' | 'Congo (Democratic Republic of the)'
| 'Cook Islands' | 'Cook Islands'
| 'Costa Rica' | 'Costa Rica'
| 'Côte d\'Ivoire' | "Côte d'Ivoire"
| 'Croatia' | 'Croatia'
| 'Cuba' | 'Cuba'
| 'Curaçao' | 'Curaçao'
@@ -538,11 +538,11 @@ export type SCNationality =
| 'Kazakhstan' | 'Kazakhstan'
| 'Kenya' | 'Kenya'
| 'Kiribati' | 'Kiribati'
| 'Korea (Democratic People\'s Republic of)' | "Korea (Democratic People's Republic of)"
| 'Korea (Republic of)' | 'Korea (Republic of)'
| 'Kuwait' | 'Kuwait'
| 'Kyrgyzstan' | 'Kyrgyzstan'
| 'Lao People\'s Democratic Republic' | "Lao People's Democratic Republic"
| 'Latvia' | 'Latvia'
| 'Lebanon' | 'Lebanon'
| 'Lesotho' | 'Lesotho'
@@ -694,10 +694,11 @@ export interface SCTranslations<T> {
* (Source: https://stackoverflow.com/a/51365037) * (Source: https://stackoverflow.com/a/51365037)
*/ */
type RecursivePartial<T> = { type RecursivePartial<T> = {
[P in keyof T]-?: [P in keyof T]-?: T[P] extends Array<infer U>
T[P] extends Array<infer U> ? Array<RecursivePartial<U>> : ? Array<RecursivePartial<U>>
T[P] extends object ? RecursivePartial<T[P]> : : T[P] extends object
T[P]; ? RecursivePartial<T[P]>
: T[P];
}; };
/** /**

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -42,5 +42,5 @@ export type SCRestrictedMap<U extends string | number, T> = {
/** /**
* One value for each key * One value for each key
*/ */
[key in U]: T [key in U]: T;
}; };

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,17 +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/>.
*/ */
/* tslint:disable:max-line-length */
/** /**
* 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
*/ */
export type SCISO8601Date = string; export type SCISO8601Date = string;
/* tslint:enable */
/* tslint:disable:max-line-length */
/** /**
* An ISO8601 duration * An ISO8601 duration
* *
@@ -30,11 +28,10 @@ export type SCISO8601Date = string;
* @see https://gist.github.com/philipashlock/8830168 * @see https://gist.github.com/philipashlock/8830168
*/ */
export type SCISO8601Duration = string; export type SCISO8601Duration = string;
/* tslint:enable */
/** /**
* An ISO8601 time * An ISO8601 time
* *
* @pattern \d{2}:\d{2}(:\d{2})? * @pattern ^(2[0-3]|[01][0-9]):?([0-5][0-9]):?([0-5][0-9])$
*/ */
export type SCISO8601Time = string; export type SCISO8601Time = string;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,6 +15,7 @@
/** /**
* Universally unique identifier of the thing * Universally unique identifier of the thing
* *
* @filterable
* @pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ * @pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
* @see http://stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid * @see http://stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid
*/ */

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -16,7 +16,12 @@ import {SCTranslations} from './general/i18n';
import {SCBulkResponse} from './protocol/routes/bulk-request'; import {SCBulkResponse} from './protocol/routes/bulk-request';
import {SCSearchResponse} from './protocol/routes/search'; import {SCSearchResponse} from './protocol/routes/search';
import {SCMultiSearchResponse} from './protocol/routes/search-multi'; import {SCMultiSearchResponse} from './protocol/routes/search-multi';
import {SCThing, SCThingTranslatableProperties, SCThingType, SCThingWithoutReferences} from './things/abstract/thing'; import {
SCThing,
SCThingTranslatableProperties,
SCThingType,
SCThingWithoutReferences,
} from './things/abstract/thing';
/** /**
* Type guard to check if something is a SCThing * Type guard to check if something is a SCThing
@@ -32,16 +37,13 @@ export function isThing(something: unknown): something is SCThing {
return false; return false;
} }
// tslint:disable-next-line:completed-docs const type = (something as {type: unknown}).type;
const type = (something as { type: unknown; }).type;
if (typeof type !== 'string') { if (typeof type !== 'string') {
return false; return false;
} }
return Object return Object.values(SCThingType).includes(type as SCThingType);
.values(SCThingType)
.indexOf(type) >= 0;
} }
/** /**
@@ -49,9 +51,9 @@ export function isThing(something: unknown): something is SCThing {
* *
* @param thing Thing to check * @param thing Thing to check
*/ */
export function isThingWithTranslations(thing: SCThingWithoutReferences) export function isThingWithTranslations(
// tslint:disable-next-line:completed-docs thing: SCThingWithoutReferences,
: thing is SCThingWithoutReferences & { translations: SCTranslations<SCThingTranslatableProperties>; } { ): thing is SCThingWithoutReferences & {translations: SCTranslations<SCThingTranslatableProperties>} {
return typeof thing.translations !== 'undefined'; return typeof thing.translations !== 'undefined';
} }
@@ -65,29 +67,31 @@ export function isBulkResponse(something: unknown): something is SCBulkResponse
return false; return false;
} }
if (!('expiration' in something) if (
|| !('source' in something) !('expiration' in something) ||
|| !('state' in something) !('source' in something) ||
|| !('type' in something) !('state' in something) ||
|| !('uid' in something)) { !('type' in something) ||
!('uid' in something)
) {
return false; return false;
} }
const {expiration, source, state, type, uid} = something as { const {expiration, source, state, type, uid} = something as {
// tslint:disable:completed-docs
expiration: unknown; expiration: unknown;
source: unknown; source: unknown;
state: unknown; state: unknown;
type: unknown; type: unknown;
uid: unknown; uid: unknown;
// tslint:enable
}; };
return typeof expiration === 'string' return (
&& typeof source === 'string' typeof expiration === 'string' &&
&& typeof state === 'string' typeof source === 'string' &&
&& typeof type === 'string' typeof state === 'string' &&
&& typeof uid === 'string'; typeof type === 'string' &&
typeof uid === 'string'
);
} }
/** /**
@@ -99,16 +103,18 @@ export function isSearchResponse(something: unknown): something is SCSearchRespo
if (!(typeof something === 'object') || something === null) { if (!(typeof something === 'object') || something === null) {
return false; return false;
} }
const somethingObject = (something as { [key: string]: { [key: string]: string; }; }); const somethingObject = something as {[key: string]: {[key: string]: string}};
return Array.isArray(somethingObject.data) return (
&& Array.isArray(somethingObject.facets) Array.isArray(somethingObject.data) &&
&& typeof somethingObject.pagination !== 'undefined' Array.isArray(somethingObject.facets) &&
&& typeof somethingObject.pagination.count === 'number' typeof somethingObject.pagination !== 'undefined' &&
&& typeof somethingObject.pagination.offset === 'number' typeof somethingObject.pagination.count === 'number' &&
&& typeof somethingObject.pagination.total === 'number' typeof somethingObject.pagination.offset === 'number' &&
&& typeof somethingObject.stats !== 'undefined' typeof somethingObject.pagination.total === 'number' &&
&& typeof somethingObject.stats.time === 'number'; typeof somethingObject.stats !== 'undefined' &&
typeof somethingObject.stats.time === 'number'
);
} }
/** /**
@@ -117,10 +123,10 @@ export function isSearchResponse(something: unknown): something is SCSearchRespo
* @param something Something to check * @param something Something to check
*/ */
export function isMultiSearchResponse(something: unknown): something is SCMultiSearchResponse { export function isMultiSearchResponse(something: unknown): something is SCMultiSearchResponse {
const initialValue = Object.keys(something as { [key: string]: string; }).length > 0 ? true : false; const initialValue = Object.keys(something as {[key: string]: string}).length > 0 ? true : false;
return Object.keys(something as { [key: string]: string; }) // eslint-disable-next-line unicorn/no-array-reduce
.reduce((previousOnesAreSearchResponses, key) => { return Object.keys(something as {[key: string]: string}).reduce((previousOnesAreSearchResponses, key) => {
return previousOnesAreSearchResponses && isSearchResponse((something as { [key: string]: string; })[key]); return previousOnesAreSearchResponses && isSearchResponse((something as {[key: string]: string})[key]);
}, initialValue as boolean); }, initialValue as boolean);
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,13 +13,22 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
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 +36,18 @@ 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';
@@ -39,19 +58,18 @@ import {SCToDo, SCToDoMeta, SCToDoWithoutReferences} from './things/todo';
import {SCTour, SCTourMeta, SCTourWithoutReferences} from './things/tour'; import {SCTour, SCTourMeta, SCTourWithoutReferences} from './things/tour';
import {SCVideo, SCVideoMeta, SCVideoWithoutReferences} from './things/video'; import {SCVideo, SCVideoMeta, SCVideoWithoutReferences} from './things/video';
/* tslint:disable:variable-name */
/** /**
* A map of things, from type to meta data * A map of things, from type to meta data
*/ */
export const SCClasses: { [K in SCThingType]: object } = { export const SCClasses: {[K in SCThingType]: object} = {
/* 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 +77,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 +92,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
@@ -101,9 +122,7 @@ export type SCThingsWithoutDiff =
/** /**
* An object that exists in the StAppsCore * An object that exists in the StAppsCore
*/ */
export type SCThings = export type SCThings = SCIndexableThings | SCDiff | SCFavorite | SCSetting;
SCThingsWithoutDiff
| SCDiff;
/** /**
* A field of a thing * A field of a thing
@@ -113,61 +132,121 @@ 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
THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences : ? SCAssessmentWithoutReferences
THING extends SCArticle ? SCArticleWithoutReferences : : THING extends SCAcademicEvent
THING extends SCBook ? SCBookWithoutReferences : ? SCAcademicEventWithoutReferences
THING extends SCBuilding ? SCBuildingWithoutReferences : : THING extends SCArticle
THING extends SCCatalog ? SCCatalogWithoutReferences : ? SCArticleWithoutReferences
THING extends SCContactPoint ? SCContactPointWithoutReferences : : THING extends SCBook
THING extends SCCourseOfStudies ? SCCourseOfStudiesWithoutReferences : ? SCBookWithoutReferences
THING extends SCDateSeries ? SCDateSeriesWithoutReferences : : THING extends SCBuilding
THING extends SCDiff ? SCDiffWithoutReferences : ? SCBuildingWithoutReferences
THING extends SCDish ? SCDishWithoutReferences : : THING extends SCCatalog
THING extends SCFavorite ? SCFavoriteWithoutReferences : ? SCCatalogWithoutReferences
THING extends SCFloor ? SCFloorWithoutReferences : : THING extends SCContactPoint
THING extends SCMessage ? SCMessageWithoutReferences : ? SCContactPointWithoutReferences
THING extends SCOrganization ? SCOrganizationWithoutReferences : : THING extends SCCourseOfStudy
THING extends SCPerson ? SCPersonWithoutReferences : ? SCCourseOfStudyWithoutReferences
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences : : THING extends SCDateSeries
THING extends SCRoom ? SCRoomWithoutReferences : ? SCDateSeriesWithoutReferences
THING extends SCSemester ? SCSemesterWithoutReferences : : THING extends SCDiff
THING extends SCSetting ? SCSettingWithoutReferences : ? SCDiffWithoutReferences
THING extends SCSportCourse ? SCSportCourseWithoutReferences : : THING extends SCDish
THING extends SCStudyModule ? SCStudyModuleWithoutReferences : ? SCDishWithoutReferences
THING extends SCTicket ? SCTicketWithoutReferences : : THING extends SCFavorite
THING extends SCToDo ? SCToDoWithoutReferences : ? SCFavoriteWithoutReferences
THING extends SCTour ? SCTourWithoutReferences : : THING extends SCFloor
THING extends SCVideo ? SCVideoWithoutReferences : ? SCFloorWithoutReferences
never; : THING extends SCMessage
? SCMessageWithoutReferences
: THING extends SCOrganization
? SCOrganizationWithoutReferences
: THING extends SCPeriodical
? SCPeriodicalWithoutReferences
: THING extends SCPerson
? SCPersonWithoutReferences
: THING extends SCPointOfInterest
? SCPointOfInterestWithoutReferences
: THING extends SCPublicationEvent
? SCPublicationEventWithoutReferences
: THING extends SCRoom
? SCRoomWithoutReferences
: THING extends SCSemester
? SCSemesterWithoutReferences
: THING extends SCSetting
? SCSettingWithoutReferences
: THING extends SCSportCourse
? SCSportCourseWithoutReferences
: THING extends SCStudyModule
? SCStudyModuleWithoutReferences
: THING extends SCTicket
? SCTicketWithoutReferences
: THING extends SCToDo
? SCToDoWithoutReferences
: THING extends SCTour
? SCTourWithoutReferences
: THING extends SCVideo
? SCVideoWithoutReferences
: never;
/** /**
* Thing for a thing without references * Thing for a thing without references
*/ */
export type SCAssociatedThing<THING extends SCThings> = export type SCAssociatedThing<THING extends SCThings> = THING extends SCAssessmentWithoutReferences
THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent : ? SCAssessment
THING extends SCArticleWithoutReferences ? SCArticle : : THING extends SCAcademicEventWithoutReferences
THING extends SCBookWithoutReferences ? SCBook : ? SCAcademicEvent
THING extends SCBuildingWithoutReferences ? SCBuilding : : THING extends SCArticleWithoutReferences
THING extends SCCatalogWithoutReferences ? SCCatalog : ? SCArticle
THING extends SCContactPointWithoutReferences ? SCContactPoint : : THING extends SCBookWithoutReferences
THING extends SCCourseOfStudiesWithoutReferences ? SCCourseOfStudies : ? SCBook
THING extends SCDateSeriesWithoutReferences ? SCDateSeries : : THING extends SCBuildingWithoutReferences
THING extends SCDiffWithoutReferences ? SCDiff : ? SCBuilding
THING extends SCDishWithoutReferences ? SCDish : : THING extends SCCatalogWithoutReferences
THING extends SCFavoriteWithoutReferences ? SCFavorite : ? SCCatalog
THING extends SCFloorWithoutReferences ? SCFloor : : THING extends SCContactPointWithoutReferences
THING extends SCMessageWithoutReferences ? SCMessage : ? SCContactPoint
THING extends SCOrganizationWithoutReferences ? SCOrganization : : THING extends SCCourseOfStudyWithoutReferences
THING extends SCPersonWithoutReferences ? SCPerson : ? SCCourseOfStudy
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest : : THING extends SCDateSeriesWithoutReferences
THING extends SCRoomWithoutReferences ? SCRoom : ? SCDateSeries
THING extends SCSemesterWithoutReferences ? SCSemester : : THING extends SCDiffWithoutReferences
THING extends SCSettingWithoutReferences ? SCSetting : ? SCDiff
THING extends SCSportCourseWithoutReferences ? SCSportCourse : : THING extends SCDishWithoutReferences
THING extends SCStudyModuleWithoutReferences ? SCStudyModule : ? SCDish
THING extends SCTicketWithoutReferences ? SCTicket : : THING extends SCFavoriteWithoutReferences
THING extends SCToDoWithoutReferences ? SCToDo : ? SCFavorite
THING extends SCTourWithoutReferences ? SCTour : : THING extends SCFloorWithoutReferences
THING extends SCVideoWithoutReferences ? SCVideo : ? SCFloor
never; : THING extends SCMessageWithoutReferences
? SCMessage
: THING extends SCOrganizationWithoutReferences
? SCOrganization
: THING extends SCPeriodicalWithoutReferences
? SCPeriodical
: THING extends SCPersonWithoutReferences
? SCPerson
: THING extends SCPointOfInterestWithoutReferences
? SCPointOfInterest
: THING extends SCPublicationEventWithoutReferences
? SCPublicationEvent
: THING extends SCRoomWithoutReferences
? SCRoom
: THING extends SCSemesterWithoutReferences
? SCSemester
: THING extends SCSettingWithoutReferences
? SCSetting
: THING extends SCSportCourseWithoutReferences
? SCSportCourse
: THING extends SCStudyModuleWithoutReferences
? SCStudyModule
: THING extends SCTicketWithoutReferences
? SCTicket
: THING extends SCToDoWithoutReferences
? SCToDo
: THING extends SCTourWithoutReferences
? SCTour
: THING extends SCVideoWithoutReferences
? SCVideo
: never;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -50,7 +50,8 @@ export abstract class SCError implements SCErrorResponse {
constructor(public name: string, public message: string, public statusCode: number, stack = false) { constructor(public name: string, public message: string, public statusCode: number, stack = false) {
// generate stacktrace if needed // generate stacktrace if needed
if (stack) { if (stack) {
this.stack = (new Error()).stack; // eslint-disable-next-line unicorn/error-message
this.stack = new Error().stack;
} }
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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 {
/** /**
@@ -27,15 +29,15 @@ export class SCInternalServerErrorResponse extends SCError {
/** /**
* Create a SCInternalServerErrorResponse * Create a SCInternalServerErrorResponse
* *
* @param err Internal server error * @param error Internal server error
* @param stack Set to true if a stack trace should be created * @param stack Set to true if a stack trace should be created
* 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(error?: 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 = error;
} }
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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,11 @@ 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,
);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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,
); );
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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 {BAD_REQUEST} from 'http-status-codes'; import {ValidationError} from '@openstapps/core-tools/lib/types/validator';
import {ValidationError} from 'jsonschema'; 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;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -40,8 +40,8 @@ export enum SCRouteHttpVerbs {
/** /**
* The constructor of an error response * The constructor of an error response
*/ */
// tslint:disable-next-line:no-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
export type SCErrorResponseConstructor = new (...args: any[]) => SCErrorResponse; export type SCErrorResponseConstructor = new (...arguments_: any[]) => SCErrorResponse;
/** /**
* A description of a route * A description of a route
@@ -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;
} }
/** /**
@@ -91,37 +91,43 @@ export abstract class SCAbstractRoute implements SCRoute {
* @see SCRoute.errorNames * @see SCRoute.errorNames
*/ */
errorNames: SCErrorResponseConstructor[] = []; errorNames: SCErrorResponseConstructor[] = [];
/** /**
* @see SCRoute.method * @see SCRoute.method
*/ */
method: SCRouteHttpVerbs = SCRouteHttpVerbs.GET; method: SCRouteHttpVerbs = SCRouteHttpVerbs.GET;
/** /**
* @see SCRoute.obligatoryParameters * @see SCRoute.obligatoryParameters
*/ */
obligatoryParameters?: SCMap<string>; obligatoryParameters?: SCMap<string>;
/** /**
* @see SCRoute.requestBodyName * @see SCRoute.requestBodyName
*/ */
requestBodyName = 'any'; requestBodyName = 'any';
/** /**
* @see SCRoute.responseBodyName * @see SCRoute.responseBodyName
*/ */
responseBodyName = 'any'; responseBodyName = 'any';
/** /**
* @see SCRoute.statusCodeSuccess * @see SCRoute.statusCodeSuccess
*/ */
statusCodeSuccess = 200; statusCodeSuccess = 200;
/**
* @see SCRoute.urlFragment
*/
urlFragment = '/';
/** /**
* Get "compiled" URL fragment * @see SCRoute.urlPath
*
* @param parameters Parameters to compile URL fragment with
*/ */
public getUrlFragment(parameters: SCMap<string> = {}): string { urlPath = '/';
/**
* Get "compiled" URL path
*
* @param parameters Parameters to compile URL path with
*/
public getUrlPath(parameters: SCMap<string> = {}): string {
let obligatoryParameters: string[] = []; let obligatoryParameters: string[] = [];
if (typeof this.obligatoryParameters === 'object') { if (typeof this.obligatoryParameters === 'object') {
@@ -132,17 +138,17 @@ 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) {
return part; return part;
} }
const parameter = part.substr(1); const parameter = part.slice(1);
if (typeof parameters[parameter] === 'undefined') { if (typeof parameters[parameter] === 'undefined') {
throw new Error(`Parameter '${parameter}' not provided.`); throw new TypeError(`Parameter '${parameter}' not provided.`);
} }
return parameters[parameter]; return parameters[parameter];
@@ -155,7 +161,7 @@ export abstract class SCAbstractRoute implements SCRoute {
* Possible requests * Possible requests
*/ */
export type SCRequests = export type SCRequests =
SCBookAvailabilityRequest | SCBookAvailabilityRequest
| SCBulkRequest | SCBulkRequest
| SCBulkAddRequest | SCBulkAddRequest
| SCBulkDoneRequest | SCBulkDoneRequest
@@ -169,7 +175,7 @@ export type SCRequests =
* Possible responses * Possible responses
*/ */
export type SCResponses = export type SCResponses =
SCBookAvailabilityResponse | SCBookAvailabilityResponse
| SCBulkResponse | SCBulkResponse
| SCBulkAddResponse | SCBulkAddResponse
| SCBulkDoneResponse | SCBulkDoneResponse
@@ -182,59 +188,91 @@ export type SCResponses =
/** /**
* Associated response for a request * Associated response for a request
*/ */
export type SCAssociatedResponse<REQUEST> = export type SCAssociatedResponse<REQUEST> = REQUEST extends SCBookAvailabilityRequest
REQUEST extends SCBookAvailabilityRequest ? SCBookAvailabilityResponse : ? SCBookAvailabilityResponse
REQUEST extends SCBulkRequest ? SCBulkResponse : : REQUEST extends SCBulkRequest
REQUEST extends SCBulkAddRequest ? SCBulkAddResponse : ? SCBulkResponse
REQUEST extends SCBulkDoneRequest ? SCBulkDoneResponse : : REQUEST extends SCBulkAddRequest
REQUEST extends SCFeedbackRequest ? SCFeedbackResponse : ? SCBulkAddResponse
REQUEST extends SCIndexRequest ? SCIndexResponse : : REQUEST extends SCBulkDoneRequest
REQUEST extends SCMultiSearchRequest ? SCMultiSearchResponse : ? SCBulkDoneResponse
REQUEST extends SCSearchRequest ? SCSearchResponse : : REQUEST extends SCFeedbackRequest
REQUEST extends SCThingUpdateRequest ? SCThingUpdateResponse : ? SCFeedbackResponse
never; : REQUEST extends SCIndexRequest
? SCIndexResponse
: REQUEST extends SCMultiSearchRequest
? SCMultiSearchResponse
: REQUEST extends SCSearchRequest
? SCSearchResponse
: REQUEST extends SCThingUpdateRequest
? SCThingUpdateResponse
: never;
/** /**
* Associated request for a response * Associated request for a response
*/ */
export type SCAssociatedRequest<RESPONSE> = export type SCAssociatedRequest<RESPONSE> = RESPONSE extends SCBookAvailabilityResponse
RESPONSE extends SCBookAvailabilityResponse ? SCBookAvailabilityRequest : ? SCBookAvailabilityRequest
RESPONSE extends SCBulkResponse ? SCBulkRequest : : RESPONSE extends SCBulkResponse
RESPONSE extends SCBulkAddResponse ? SCBulkAddRequest : ? SCBulkRequest
RESPONSE extends SCBulkDoneResponse ? SCBulkDoneRequest : : RESPONSE extends SCBulkAddResponse
RESPONSE extends SCFeedbackResponse ? SCFeedbackRequest : ? SCBulkAddRequest
RESPONSE extends SCIndexResponse ? SCIndexRequest : : RESPONSE extends SCBulkDoneResponse
RESPONSE extends SCMultiSearchResponse ? SCMultiSearchRequest : ? SCBulkDoneRequest
RESPONSE extends SCSearchResponse ? SCSearchRequest : : RESPONSE extends SCFeedbackResponse
RESPONSE extends SCThingUpdateResponse ? SCThingUpdateRequest : ? SCFeedbackRequest
never; : RESPONSE extends SCIndexResponse
? SCIndexRequest
: RESPONSE extends SCMultiSearchResponse
? SCMultiSearchRequest
: RESPONSE extends SCSearchResponse
? SCSearchRequest
: RESPONSE extends SCThingUpdateResponse
? SCThingUpdateRequest
: never;
/** /**
* Associated request for a route * Associated request for a route
*/ */
export type SCAssignedRequest<ROUTE extends SCAbstractRoute> = export type SCAssignedRequest<ROUTE extends SCAbstractRoute> = ROUTE extends SCBookAvailabilityRoute
ROUTE extends SCBookAvailabilityRoute ? SCBookAvailabilityRequest : ? SCBookAvailabilityRequest
ROUTE extends SCBulkRoute ? SCBulkRequest : : ROUTE extends SCBulkRoute
ROUTE extends SCBulkAddRoute ? SCBulkAddRequest : ? SCBulkRequest
ROUTE extends SCBulkDoneRoute ? SCBulkDoneRequest : : ROUTE extends SCBulkAddRoute
ROUTE extends SCFeedbackRoute ? SCFeedbackRequest : ? SCBulkAddRequest
ROUTE extends SCIndexRoute ? SCIndexRequest : : ROUTE extends SCBulkDoneRoute
ROUTE extends SCMultiSearchRoute ? SCMultiSearchRequest : ? SCBulkDoneRequest
ROUTE extends SCSearchRoute ? SCSearchRequest : : ROUTE extends SCFeedbackRoute
ROUTE extends SCThingUpdateRoute ? SCThingUpdateRequest : ? SCFeedbackRequest
never; : ROUTE extends SCIndexRoute
? SCIndexRequest
: ROUTE extends SCMultiSearchRoute
? SCMultiSearchRequest
: ROUTE extends SCSearchRoute
? SCSearchRequest
: ROUTE extends SCThingUpdateRoute
? SCThingUpdateRequest
: never;
/** /**
* Associated response for a route * Associated response for a route
*/ */
export type SCAssignedResponse<ROUTE extends SCAbstractRoute> = export type SCAssignedResponse<ROUTE extends SCAbstractRoute> = ROUTE extends SCBookAvailabilityRoute
ROUTE extends SCBookAvailabilityRoute ? SCBookAvailabilityResponse : ? SCBookAvailabilityResponse
ROUTE extends SCBulkRoute ? SCBulkResponse : : ROUTE extends SCBulkRoute
ROUTE extends SCBulkAddRoute ? SCBulkAddResponse : ? SCBulkResponse
ROUTE extends SCBulkDoneRoute ? SCBulkDoneResponse : : ROUTE extends SCBulkAddRoute
ROUTE extends SCFeedbackRoute ? SCFeedbackResponse : ? SCBulkAddResponse
ROUTE extends SCIndexRoute ? SCIndexResponse : : ROUTE extends SCBulkDoneRoute
ROUTE extends SCMultiSearchRoute ? SCMultiSearchResponse : ? SCBulkDoneResponse
ROUTE extends SCSearchRoute ? SCSearchResponse : : ROUTE extends SCFeedbackRoute
ROUTE extends SCThingUpdateRoute ? SCThingUpdateResponse : ? SCFeedbackResponse
never; : ROUTE extends SCIndexRoute
? SCIndexResponse
: ROUTE extends SCMultiSearchRoute
? SCMultiSearchResponse
: ROUTE extends SCSearchRoute
? SCSearchResponse
: ROUTE extends SCThingUpdateRoute
? SCThingUpdateResponse
: never;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,9 +12,12 @@
* 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';
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';
@@ -88,7 +91,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -35,8 +35,7 @@ export type SCBulkAddRequest = SCThings;
* *
* @validatable * @validatable
*/ */
export interface SCBulkAddResponse { export interface SCBulkAddResponse {}
}
/** /**
* Route for indexing SC things in a bulk * Route for indexing SC things in a bulk
@@ -59,7 +58,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -27,16 +27,14 @@ import {SCAbstractRoute, SCRouteHttpVerbs} from '../route';
* *
* @validatable * @validatable
*/ */
export interface SCBulkDoneRequest { export interface SCBulkDoneRequest {}
}
/** /**
* Response to a request to change the state of a bulk to done * Response to a request to change the state of a bulk to done
* *
* @validatable * @validatable
*/ */
export interface SCBulkDoneResponse { export interface SCBulkDoneResponse {}
}
/** /**
* Route for closing bulks * Route for closing bulks
@@ -59,7 +57,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -31,8 +31,7 @@ import {SCAbstractRoute, SCRouteHttpVerbs} from '../route';
* *
* @validatable * @validatable
*/ */
export interface SCBulkRequest extends SCBulkParameters { export type SCBulkRequest = SCBulkParameters;
}
/** /**
* Parameters for a bulk * Parameters for a bulk
@@ -98,7 +97,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -39,8 +39,7 @@ export interface SCFeedbackRequest extends SCMessage {
* *
* @validatable * @validatable
*/ */
export interface SCFeedbackResponse { export interface SCFeedbackResponse {}
}
/** /**
* Route for feedback submission * Route for feedback submission
@@ -59,8 +58,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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';
@@ -28,8 +29,7 @@ import {SCAbstractRoute, SCRouteHttpVerbs} from '../route';
* *
* @validatable * @validatable
*/ */
export interface SCIndexRequest { export interface SCIndexRequest {}
}
/** /**
* A response to an index request * A response to an index request
@@ -42,6 +42,11 @@ export interface SCIndexResponse {
*/ */
app: SCAppConfiguration; app: SCAppConfiguration;
/**
* @see SCAuthorizationProvider
*/
auth: {[key in SCAuthorizationProviderType]?: SCAuthorizationProvider};
/** /**
* @see SCBackendConfiguration * @see SCBackendConfiguration
*/ */
@@ -65,7 +70,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 = '/';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,8 +12,8 @@
* 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 {Schema} from 'jsonschema'; 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';
import {SCNotFoundErrorResponse} from '../errors/not-found'; import {SCNotFoundErrorResponse} from '../errors/not-found';
@@ -78,12 +78,12 @@ export interface SCPluginMetaData {
/** /**
* How the requests of the plugin looks like, a JSON schema for validation * How the requests of the plugin looks like, a JSON schema for validation
*/ */
requestSchema: Schema; requestSchema: JSONSchema7;
/** /**
* How the responses of the plugin looks like, a JSON schema for validation * How the responses of the plugin looks like, a JSON schema for validation
*/ */
responseSchema: Schema; responseSchema: JSONSchema7;
/** /**
* The desired route, for example /feedback. * The desired route, for example /feedback.
@@ -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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -28,16 +28,14 @@ import {SCSearchResult} from '../search/result';
* *
* @validatable * @validatable
*/ */
export interface SCSearchRequest extends SCSearchQuery { export type SCSearchRequest = SCSearchQuery;
}
/** /**
* A search response * A search response
* *
* @validatable * @validatable
*/ */
export interface SCSearchResponse extends SCSearchResult { export type SCSearchResponse = SCSearchResult;
}
/** /**
* Route for searching things * Route for searching things
@@ -56,7 +54,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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 {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';
@@ -35,8 +35,7 @@ export type SCThingUpdateRequest = SCThings;
* *
* @validatable * @validatable
*/ */
export interface SCThingUpdateResponse { export interface SCThingUpdateResponse {}
}
/** /**
* Route for updating existing things * Route for updating existing things
@@ -55,12 +54,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';
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -19,16 +19,21 @@ 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 {SCSearchValueFilter} from './filters/value'; import {SCSearchValueFilter} from './filters/value';
/** /**
* Filter instruction types * Filter instruction types
*/ */
export type SCSearchFilterType = export type SCSearchFilterType =
'availability' | 'availability'
| 'boolean' | 'boolean'
| 'distance' | 'distance'
| 'value'; | 'value'
| 'date range'
| 'numeric range'
| 'geo';
/** /**
* Structure of a filter instruction * Structure of a filter instruction
@@ -54,7 +59,10 @@ export type SCSearchAbstractFilterArguments = SCMap<unknown>;
* Available filter instructions * Available filter instructions
*/ */
export type SCSearchFilter = export type SCSearchFilter =
SCSearchAvailabilityFilter | SCSearchAvailabilityFilter
| SCSearchBooleanFilter | SCSearchBooleanFilter
| SCSearchDistanceFilter | SCSearchDistanceFilter
| SCSearchValueFilter; | SCSearchValueFilter
| SCSearchNumericRangeFilter
| SCSearchDateRangeFilter
| SCGeoFilter;

View File

@@ -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;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,6 @@
* 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/>.
*/ */
// tslint:disable-next-line:no-implicit-dependencies
import {Position} from 'geojson'; import {Position} from 'geojson';
import {SCThingsField} from '../../../meta'; import {SCThingsField} from '../../../meta';
import {SCSearchAbstractFilter, SCSearchAbstractFilterArguments} from '../filter'; import {SCSearchAbstractFilter, SCSearchAbstractFilterArguments} from '../filter';

View File

@@ -0,0 +1,72 @@
/*
* Copyright (C) 2021-2022 Open 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 {Polygon, Position} 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';
}
/**
* A rectangular geo shape, representing the top-left and bottom-right corners
*
* This is an extension of the Geojson type
* http://geojson.org/geojson-spec.html
*/
export interface Envelope {
/**
* The top-left and bottom-right corners of the bounding box
*/
coordinates: [Position, Position];
/**
* The type of the geometry
*/
type: 'envelope';
}
/**
* 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 | Envelope;
/**
* 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';
}

View File

@@ -0,0 +1,122 @@
/*
* Copyright (C) 2020-2022 Open 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 {SCThingsField} from '../../../meta';
import {SCSearchAbstractFilter, SCSearchAbstractFilterArguments} from '../filter';
/**
* A date range filter
*
* Filter for documents with a date field that satisfies the given constraints
*
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html#_date_format_in_range_queries
*/
export interface SCSearchDateRangeFilter extends SCSearchAbstractFilter<SCDateRangeFilterArguments> {
/**
* @see SCSearchAbstractFilter.type
*/
type: 'date range';
}
/**
* A distance filter
*
* Filter for documents with a numeric field that satisfies the given constraints
*
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html#query-dsl-range-query
*/
export interface SCSearchNumericRangeFilter extends SCSearchAbstractFilter<SCNumericRangeFilterArguments> {
/**
* @see SCSearchAbstractFilter.type
*/
type: 'numeric range';
}
/**
* Additional arguments for date range filters
*
* Filter uses a plain string to allow for date math expressions
*
* @see https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/date-math-expressions.html
*/
export interface SCDateRangeFilterArguments extends SCRangeFilterArguments<string> {
/**
* Optional date format specifier
*
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html#_date_format_in_range_queries
*/
format?: string;
/**
* Optional timezone specifier
*
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html#_time_zone_in_range_queries
*/
timeZone?: string;
}
/**
* Additional arguments for numeric range filters
*/
export type SCNumericRangeFilterArguments = SCRangeFilterArguments<number>;
/**
* Additional arguments for range filters
*
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html#query-dsl-range-query
*/
export interface SCRangeFilterArguments<T> extends SCSearchAbstractFilterArguments {
/**
* Bounds of the range
*/
bounds: Bounds<T>;
/**
* Field where the filter will be applied
*/
field: SCThingsField;
/**
* Relation when searching on other range fields
*
* Intersects (Default): Both search and field range intersect
* Within: Search range is within the field range
* Contains: Search range contains the field range
*/
relation?: 'intersects' | 'within' | 'contains';
}
export interface Bounds<T> {
/**
* The lower bound
*/
lowerBound?: Bound<T>;
/**
* The upper bound
*/
upperBound?: Bound<T>;
}
export interface Bound<T> {
/**
* Limit of the bound
*/
limit: T;
/**
* Bound mode
*/
mode: 'inclusive' | 'exclusive';
}

View File

@@ -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[];
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -16,6 +16,7 @@ import {SCMap} from '../../general/map';
import {SCThingsField} from '../../meta'; import {SCThingsField} from '../../meta';
import {SCDistanceSort} from './sorts/distance'; import {SCDistanceSort} from './sorts/distance';
import {SCDucetSort} from './sorts/ducet'; import {SCDucetSort} from './sorts/ducet';
import {SCGenericSort} from './sorts/generic';
import {SCPriceSort} from './sorts/price'; import {SCPriceSort} from './sorts/price';
/** /**
@@ -51,9 +52,9 @@ export interface SCSearchAbstractSortArguments extends SCMap<unknown> {
/** /**
* Type of a sort instruction * Type of a sort instruction
*/ */
export type SCSearchSortType = 'distance' | 'price' | 'ducet'; export type SCSearchSortType = 'distance' | 'price' | 'ducet' | 'generic';
/** /**
* A sort instruction * A sort instruction
*/ */
export type SCSearchSort = SCDistanceSort | SCPriceSort | SCDucetSort; export type SCSearchSort = SCDistanceSort | SCPriceSort | SCDucetSort | SCGenericSort;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,6 @@
* 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/>.
*/ */
// tslint:disable-next-line:no-implicit-dependencies
import {Position} from 'geojson'; import {Position} from 'geojson';
import {SCSearchAbstractSort, SCSearchAbstractSortArguments} from '../sort'; import {SCSearchAbstractSort, SCSearchAbstractSortArguments} from '../sort';

View File

@@ -0,0 +1,25 @@
/*
* Copyright (C) 2020 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 {SCSearchAbstractSort, SCSearchAbstractSortArguments} from '../sort';
/**
* Sort instruction for generic sort such as date
*/
export interface SCGenericSort extends SCSearchAbstractSort<SCSearchAbstractSortArguments> {
/**
* @see SCSearchAbstractSort.type
*/
type: 'generic';
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -18,57 +18,53 @@ import {SCThing, SCThingMeta, SCThingWithoutReferences} from './thing';
/** /**
* An academic degree without references * An academic degree without references
*/ */
export interface SCAcademicDegreeWithoutReferences 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;
} }
/** /**
* An academic degree * An academic degree
*/ */
export interface SCAcademicDegree export interface SCAcademicDegree extends SCAcademicDegreeWithoutReferences, SCThing {
extends SCAcademicDegreeWithoutReferences, SCThing {
// noop // noop
} }
/** /**
* Meta information about academic degrees * Meta information about academic degrees
*/ */
export class SCAcademicDegreeMeta export class SCAcademicDegreeMeta extends SCThingMeta implements SCMetaTranslations<SCAcademicDegree> {
extends SCThingMeta implements SCMetaTranslations<SCAcademicDegree> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
academicDegree: 'Hochschulgrad', academicDegree: 'Abschlussgrad',
academicDegreewithField: 'Abschlussbezeichnungen', academicDegreewithField: 'Abschlussbezeichnung',
academicDegreewithFieldShort: 'Abschlussbezeichnungen (kurz)', academicDegreewithFieldShort: 'Abschlussbezeichnung (kurz)',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
academicDegree: 'academic degree', academicDegree: 'academic degree',
academicDegreewithField: 'acedemic degree and discipline', academicDegreewithField: 'acedemic degree and discipline',
academicDegreewithFieldShort: 'acedemic degree and discipline (short)', academicDegreewithFieldShort: 'acedemic degree and discipline (short)',
@@ -80,33 +76,10 @@ export class SCAcademicDegreeMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new 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, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }
/**
* Types of (german) academic degrees
*/
export type SCGermanAcademicDegree =
'bachelor'
| 'diploma'
| 'doctor'
| 'licentiate'
| 'magister'
| 'master'
| 'master pupil'
| 'state examination' ;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -19,8 +19,7 @@ import {SCThing, SCThingMeta, SCThingWithoutReferences} from './thing';
/** /**
* An academic term without references * An academic term without references
*/ */
export interface SCAcademicTermWithoutReferences export interface SCAcademicTermWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Short name of the academic term, using the given pattern * Short name of the academic term, using the given pattern
* *
@@ -62,22 +61,20 @@ export interface SCAcademicTermWithoutReferences
/** /**
* An academic term * An academic term
*/ */
export interface SCAcademicTerm export interface SCAcademicTerm extends SCAcademicTermWithoutReferences, SCThing {
extends SCAcademicTermWithoutReferences, SCThing {
// noop // noop
} }
/** /**
* Meta information about academic terms * Meta information about academic terms
*/ */
export class SCAcademicTermWithoutReferencesMeta export class SCAcademicTermWithoutReferencesMeta extends SCThingMeta implements SCMetaTranslations<SCThing> {
extends SCThingMeta implements SCMetaTranslations<SCThing> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
acronym: 'Akronym', acronym: 'Akronym',
endDate: 'Enddatum', endDate: 'Enddatum',
eventsEndDate: 'Enddatum der Veranstaltungen', eventsEndDate: 'Enddatum der Veranstaltungen',
@@ -85,7 +82,7 @@ export class SCAcademicTermWithoutReferencesMeta
startDate: 'Startdatum', startDate: 'Startdatum',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
acronym: 'acronym', acronym: 'acronym',
endDate: 'end date', endDate: 'end date',
eventsEndDate: 'end date of events', eventsEndDate: 'end date of events',
@@ -99,10 +96,10 @@ export class SCAcademicTermWithoutReferencesMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,35 +12,47 @@
* 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 {SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing'; import {SCPublicationEventWithoutReferences} from '../publication-event';
import { import {SCThing, SCThingMeta, SCThingTranslatableProperties, SCThingWithoutReferences} from './thing';
SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './thing-that-can-be-offered';
/** /**
* A creative work without references * A creative work without references
*/ */
export interface SCCreativeWorkWithoutReferences export interface SCCreativeWorkWithoutReferences extends SCThingWithoutReferences {
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 +63,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
*/ */
@@ -60,18 +79,32 @@ export interface SCCreativeWorkWithoutReferences
/** /**
* A creative work * A creative work
*/ */
export interface SCCreativeWork export interface SCCreativeWork extends SCCreativeWorkWithoutReferences, SCThing {
extends SCCreativeWorkWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup> {
/** /**
* Authors of the creative work * Authors of the creative work
*/ */
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
*/ */
@@ -81,8 +114,7 @@ export interface SCCreativeWork
/** /**
* Translatable properties of creative works * Translatable properties of creative works
*/ */
export interface SCCreativeWorkTranslatableProperties export interface SCCreativeWorkTranslatableProperties extends SCThingTranslatableProperties {
extends SCThingTranslatableProperties, SCThingThatCanBeOfferedTranslatableProperties {
/** /**
* Translation of the keywords of the creative work * Translation of the keywords of the creative work
* *
@@ -94,29 +126,42 @@ export interface SCCreativeWorkTranslatableProperties
/** /**
* Meta information about creative works * Meta information about creative works
*/ */
export class SCCreativeWorkMeta export class SCCreativeWorkMeta extends SCThingMeta implements SCMetaTranslations<SCCreativeWork> {
extends SCThingMeta implements SCMetaTranslations<SCCreativeWork> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.de, name: 'Titel',
authors: 'Authoren', 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, ...new SCThingMeta().fieldTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance().fieldTranslations.en, name: 'title',
authors: 'authors', 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',
}, },
}; };
@@ -125,12 +170,10 @@ export class SCCreativeWorkMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.en,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance().fieldValueTranslations.en,
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,8 +22,7 @@ import {SCThing, SCThingMeta, SCThingWithoutReferences} from './thing';
/** /**
* An event without references * An event without references
*/ */
export interface SCEventWithoutReferences export interface SCEventWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Maximum number of participants of the event * Maximum number of participants of the event
* *
@@ -46,8 +45,7 @@ export interface SCEventWithoutReferences
/** /**
* An event * An event
*/ */
export interface SCEvent export interface SCEvent extends SCEventWithoutReferences, SCThing {
extends SCEventWithoutReferences, SCThing {
/** /**
* Academic terms that an event belongs to, e.g. semester(s). * Academic terms that an event belongs to, e.g. semester(s).
*/ */
@@ -79,14 +77,13 @@ export interface SCEvent
/** /**
* Meta information about events * Meta information about events
*/ */
export class SCEventMeta export class SCEventMeta extends SCThingMeta implements SCMetaTranslations<SCEvent> {
extends SCThingMeta implements SCMetaTranslations<SCEvent> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
academicTerms: 'Semester', academicTerms: 'Semester',
catalogs: 'Verzeichnis', catalogs: 'Verzeichnis',
creativeWorks: 'begleitende Werke', creativeWorks: 'begleitende Werke',
@@ -96,7 +93,7 @@ export class SCEventMeta
remainingAttendeeCapacity: 'verfügbare Anzahl an Teilnehmern', remainingAttendeeCapacity: 'verfügbare Anzahl an Teilnehmern',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
academicTerms: 'academic terms', academicTerms: 'academic terms',
catalogs: 'catalogs', catalogs: 'catalogs',
creativeWorks: 'related material', creativeWorks: 'related material',
@@ -112,10 +109,10 @@ export class SCEventMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,6 @@
* 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/>.
*/ */
// tslint:disable-next-line:no-implicit-dependencies
import {Point, Polygon} from 'geojson'; import {Point, Polygon} from 'geojson';
import {SCMetaTranslations, SCTranslations} from '../../general/i18n'; import {SCMetaTranslations, SCTranslations} from '../../general/i18n';
import {SCBuildingWithoutReferences} from '../building'; import {SCBuildingWithoutReferences} from '../building';
@@ -84,8 +83,7 @@ export interface SCPostalAddress {
/** /**
* A place without references * A place without references
*/ */
export interface SCPlaceWithoutReferences export interface SCPlaceWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Address of the place * Address of the place
*/ */
@@ -116,8 +114,7 @@ export interface SCPlaceWithoutReferences
/** /**
* A place * A place
*/ */
export interface SCPlace export interface SCPlace extends SCPlaceWithoutReferences, SCThing {
extends SCPlaceWithoutReferences, SCThing {
/** /**
* Translated fields of a place * Translated fields of a place
*/ */
@@ -127,8 +124,7 @@ export interface SCPlace
/** /**
* Translatable properties of a place without references * Translatable properties of a place without references
*/ */
export interface SCPlaceWithoutReferencesTranslatableProperties export interface SCPlaceWithoutReferencesTranslatableProperties extends SCThingTranslatableProperties {
extends SCThingTranslatableProperties {
/** /**
* Address of a place * Address of a place
*/ */
@@ -139,19 +135,21 @@ export interface SCPlaceWithoutReferencesTranslatableProperties
* Meta information about creative works * Meta information about creative works
*/ */
export class SCPlaceWithoutReferencesMeta export class SCPlaceWithoutReferencesMeta
extends SCThingMeta implements SCMetaTranslations<SCPlaceWithoutReferences> { extends SCThingMeta
implements SCMetaTranslations<SCPlaceWithoutReferences>
{
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
address: 'Adresse', address: 'Adresse',
geo: 'Geoinformation', geo: 'Geoinformation',
openingHours: 'Öffnungszeiten', openingHours: 'Öffnungszeiten',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
address: 'address', address: 'address',
geo: 'geographic information', geo: 'geographic information',
openingHours: 'opening hours', openingHours: 'opening hours',
@@ -163,10 +161,10 @@ export class SCPlaceWithoutReferencesMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }
@@ -181,8 +179,5 @@ export interface SCInPlace {
/** /**
* Place the thing is or happens in * Place the thing is or happens in
*/ */
inPlace?: inPlace?: SCBuildingWithoutReferences | SCPointOfInterestWithoutReferences | SCRoomWithoutReferences;
SCBuildingWithoutReferences
| SCPointOfInterestWithoutReferences
| SCRoomWithoutReferences;
} }

View File

@@ -0,0 +1,66 @@
/*
* Copyright (C) 2021-2022 Open 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;
}
| {
gt?: T;
gte?: never;
lt?: T;
lte?: never;
}
| {
gt?: T;
gte?: never;
lt?: never;
lte?: T;
}
| {
gt?: never;
gte?: T;
lt?: T;
lte?: never;
};

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,25 +12,22 @@
* 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';
/** /**
* 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 SCSaveableThingWithoutReferences export type SCSaveableThingWithoutReferences = 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
*/ */

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -19,26 +19,24 @@ import {SCThing, SCThingMeta} from './thing';
/** /**
* A thing that is or happens in a place * A thing that is or happens in a place
*/ */
export interface SCThingInPlace export interface SCThingInPlace extends SCThing, SCInPlace {
extends SCThing, SCInPlace {
// noop // noop
} }
/** /**
* Meta information about thing in a place * Meta information about thing in a place
*/ */
export class SCThingInPlaceMeta export class SCThingInPlaceMeta extends SCThingMeta implements SCMetaTranslations<SCThingInPlace> {
extends SCThingMeta implements SCMetaTranslations<SCThingInPlace> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
inPlace: 'Ort', inPlace: 'Ort',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
inPlace: 'location', inPlace: 'location',
}, },
}; };
@@ -48,10 +46,10 @@ export class SCThingInPlaceMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -18,16 +18,12 @@ import {SCThing, SCThingMeta, SCThingWithoutReferences} from './thing';
/** /**
* Types of payment that are accepted at a place. * Types of payment that are accepted at a place.
*/ */
export type SCThingThatAcceptsPaymentsAcceptedPayments = export type SCThingThatAcceptsPaymentsAcceptedPayments = 'cash' | 'credit' | 'cafeteria card';
'cash'
| 'credit'
| 'cafeteria card';
/** /**
* A thing without references that accepts payments * A thing without references that accepts payments
*/ */
export interface SCThingThatAcceptsPaymentsWithoutReferences export interface SCThingThatAcceptsPaymentsWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Accepted payments of the place * Accepted payments of the place
* *
@@ -39,8 +35,7 @@ export interface SCThingThatAcceptsPaymentsWithoutReferences
/** /**
* A thing that accepts payments * A thing that accepts payments
*/ */
export interface SCThingThatAcceptsPayments export interface SCThingThatAcceptsPayments extends SCThingThatAcceptsPaymentsWithoutReferences, SCThing {
extends SCThingThatAcceptsPaymentsWithoutReferences, SCThing {
// noop // noop
} }
@@ -48,17 +43,19 @@ export interface SCThingThatAcceptsPayments
* Meta information about a thing without references that accepts payments * Meta information about a thing without references that accepts payments
*/ */
export class SCThingThatAcceptsPaymentsWithoutReferencesMeta export class SCThingThatAcceptsPaymentsWithoutReferencesMeta
extends SCThingMeta implements SCMetaTranslations<SCThingThatAcceptsPaymentsWithoutReferences> { extends SCThingMeta
implements SCMetaTranslations<SCThingThatAcceptsPaymentsWithoutReferences>
{
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
paymentsAccepted: 'Bezahlmethoden', paymentsAccepted: 'Bezahlmethoden',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
paymentsAccepted: 'accepted payment methods', paymentsAccepted: 'accepted payment methods',
}, },
}; };
@@ -68,7 +65,7 @@ export class SCThingThatAcceptsPaymentsWithoutReferencesMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
paymentsAccepted: { paymentsAccepted: {
'cafeteria card': 'Mensakarte', 'cafeteria card': 'Mensakarte',
'cash': 'Bar', 'cash': 'Bar',
@@ -76,7 +73,7 @@ export class SCThingThatAcceptsPaymentsWithoutReferencesMeta
}, },
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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';
/** /**
@@ -35,8 +35,7 @@ export interface SCPriceGroup {
/** /**
* Price distinctions for academic context * Price distinctions for academic context
*/ */
export interface SCAcademicPriceGroup export interface SCAcademicPriceGroup extends SCPriceGroup {
extends SCPriceGroup {
/** /**
* Price for employees * Price for employees
* *
@@ -65,8 +64,7 @@ export interface SCAcademicPriceGroup
/** /**
* A thing without references that can be offered * A thing without references that can be offered
*/ */
export interface SCThingThatCanBeOfferedWithoutReferences export interface SCThingThatCanBeOfferedWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Translations of a thing that can be offered * Translations of a thing that can be offered
*/ */
@@ -77,7 +75,8 @@ export interface SCThingThatCanBeOfferedWithoutReferences
* A thing that can be offered * A thing that can be offered
*/ */
export interface SCThingThatCanBeOffered<T extends SCPriceGroup> export interface SCThingThatCanBeOffered<T extends SCPriceGroup>
extends SCThing, SCThingThatCanBeOfferedWithoutReferences { extends SCThing,
SCThingThatCanBeOfferedWithoutReferences {
/** /**
* List of offers for that thing * List of offers for that thing
*/ */
@@ -92,27 +91,21 @@ export interface SCThingThatCanBeOffered<T extends SCPriceGroup>
/** /**
* Offer of a thing * Offer of a thing
*/ */
export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup> export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup> extends SCInPlace {
extends SCInPlace {
/** /**
* Availability of an offer * Availability of an offer
*/ */
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
@@ -123,8 +116,7 @@ export interface SCThingThatCanBeOfferedOffer<T extends SCPriceGroup>
/** /**
* Translatable properties of a thing that can be offered * Translatable properties of a thing that can be offered
*/ */
export interface SCThingThatCanBeOfferedTranslatableProperties export interface SCThingThatCanBeOfferedTranslatableProperties extends SCThingTranslatableProperties {
extends SCThingTranslatableProperties {
/** /**
* Availability of an offer * Availability of an offer
* *
@@ -136,9 +128,7 @@ export interface SCThingThatCanBeOfferedTranslatableProperties
/** /**
* Entity responsible for the offer * Entity responsible for the offer
*/ */
export type SCThingThatCanBeOfferedProvider = export type SCThingThatCanBeOfferedProvider = SCOrganizationWithoutReferences | SCPersonWithoutReferences;
| SCOrganizationWithoutReferences
| SCPersonWithoutReferences;
/** /**
* Availability of an Offer * Availability of an Offer
@@ -153,23 +143,18 @@ export type SCThingThatCanBeOfferedAvailability =
* Meta information about a thing without references that accepts payments * Meta information about a thing without references that accepts payments
*/ */
export class SCThingThatCanBeOfferedMeta<T extends SCPriceGroup> export class SCThingThatCanBeOfferedMeta<T extends SCPriceGroup>
implements SCMetaTranslations<SCThingThatCanBeOffered<T>> { implements SCMetaTranslations<SCThingThatCanBeOffered<T>>
{
/**
* Instance
*/
protected static _instance = new Map<string, unknown>();
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
offers: 'Angebote', offers: 'Angebote',
}, },
en: { en: {
...SCThingMeta.getInstance().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
offers: 'offers', offers: 'offers',
}, },
}; };
@@ -179,26 +164,10 @@ export class SCThingThatCanBeOfferedMeta<T extends SCPriceGroup>
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
// tslint:disable:static-this
/**
* Function to retrieve typed singleton instance (including generics)
*/
public static getInstance<T extends SCPriceGroup>(): SCThingThatCanBeOfferedMeta<T> {
if (!SCThingThatCanBeOfferedMeta._instance.has(this.name)) {
SCThingThatCanBeOfferedMeta._instance.set(this.name, new SCThingThatCanBeOfferedMeta<T>());
}
return SCThingThatCanBeOfferedMeta._instance
.get(this.name) as SCThingThatCanBeOfferedMeta<T>;
}
protected constructor() {
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -50,7 +50,8 @@ export interface SCThingWithCategoriesWithoutReferences<T, U extends SCThingWith
* A thing with categories * A thing with categories
*/ */
export interface SCThingWithCategories<T, U extends SCThingWithCategoriesSpecificValues> export interface SCThingWithCategories<T, U extends SCThingWithCategoriesSpecificValues>
extends SCThing, SCThingWithCategoriesWithoutReferences<T, U> { extends SCThing,
SCThingWithCategoriesWithoutReferences<T, U> {
/** /**
* Translated fields of a thing with categories * Translated fields of a thing with categories
*/ */
@@ -60,8 +61,13 @@ export interface SCThingWithCategories<T, U extends SCThingWithCategoriesSpecifi
/** /**
* Translatable properties of a thing with categories * Translatable properties of a thing with categories
*/ */
export interface SCThingWithCategoriesTranslatableProperties export interface SCThingWithCategoriesTranslatableProperties extends SCThingTranslatableProperties {
extends SCThingTranslatableProperties { /**
* translations of the categories of a thing with categories
*
* @sortable ducet
*/
categories?: string[];
} }
/** /**
@@ -94,6 +100,7 @@ export interface SCThingWithCategoriesSpecificValues {
/** /**
* Category specific name of a thing * Category specific name of a thing
* *
* @sortable ducet
* @text * @text
*/ */
name?: string; name?: string;
@@ -111,24 +118,19 @@ export interface SCThingWithCategoriesSpecificValues {
* It intentionally does not extend the SCThingMeta implementation to be able to include generics. * It intentionally does not extend the SCThingMeta implementation to be able to include generics.
*/ */
export class SCThingWithCategoriesWithoutReferencesMeta<T, U> export class SCThingWithCategoriesWithoutReferencesMeta<T, U>
implements SCMetaTranslations<SCThingWithCategoriesWithoutReferences<T, U>> { implements SCMetaTranslations<SCThingWithCategoriesWithoutReferences<T, U>>
{
/**
* Instance
*/
protected static _instance = new Map<string, unknown>();
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
categories: 'Kategorien', categories: 'Kategorien',
categorySpecificValues: 'besondere Kategorien', categorySpecificValues: 'besondere Kategorien',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
categories: 'categories', categories: 'categories',
categorySpecificValues: 'category with specific values', categorySpecificValues: 'category with specific values',
}, },
@@ -139,27 +141,10 @@ export class SCThingWithCategoriesWithoutReferencesMeta<T, U>
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
}, },
}; };
// tslint:disable:static-this
/**
* Function to retrieve typed singleton instance (including generics)
*/
public static getInstance<T, U>(): SCThingWithCategoriesWithoutReferencesMeta<T, U> {
if (!SCThingWithCategoriesWithoutReferencesMeta._instance.has(this.name)) {
SCThingWithCategoriesWithoutReferencesMeta._instance
.set(this.name, new SCThingWithCategoriesWithoutReferencesMeta<T, U>());
}
return SCThingWithCategoriesWithoutReferencesMeta._instance
.get(this.name) as SCThingWithCategoriesWithoutReferencesMeta<T, U>;
}
protected constructor() {
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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,14 +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
*/
url?: string;
} }
/** /**
@@ -223,6 +243,7 @@ export interface SCThingTranslatableProperties {
/** /**
* Translation of the name of the thing * Translation of the name of the thing
* *
* @sortable ducet
* @text * @text
*/ */
name?: string; name?: string;
@@ -248,11 +269,6 @@ export interface SCThingTranslatablePropertyOrigin {
* Meta information about things * Meta information about things
*/ */
export class SCThingMeta implements SCMetaTranslations<SCThing> { export class SCThingMeta implements SCMetaTranslations<SCThing> {
/**
* Set type definiton for singleton instance
*/
protected static _instance = new Map<string, unknown>();
/** /**
* Translations of fields * Translations of fields
*/ */
@@ -260,24 +276,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',
}, },
}; };
@@ -292,19 +310,4 @@ export class SCThingMeta implements SCMetaTranslations<SCThing> {
type: 'Thing', type: 'Thing',
}, },
}; };
// tslint:disable:static-this
/**
* Function to retrieve typed singleton instance
*/
public static getInstance<T extends SCThingMeta>(): T {
if (!SCThingMeta._instance.has(this.name)) {
SCThingMeta._instance.set(this.name, new this());
}
return SCThingMeta._instance.get(this.name) as T;
}
protected constructor() {
}
} }

View File

@@ -0,0 +1,18 @@
/*
* Copyright (C) 2021-2022 Open 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';

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -64,7 +64,8 @@ export interface SCAcademicEventWithoutReferences
* @indexable * @indexable
*/ */
export interface SCAcademicEvent export interface SCAcademicEvent
extends SCEvent, SCAcademicEventWithoutReferences, extends SCEvent,
SCAcademicEventWithoutReferences,
SCThingWithCategories<SCAcademicEventCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCAcademicEventCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Translated fields of an academic event * Translated fields of an academic event
@@ -81,7 +82,7 @@ export interface SCAcademicEvent
* Categories of academic events * Categories of academic events
*/ */
export type SCAcademicEventCategories = export type SCAcademicEventCategories =
'lecture' | 'lecture'
| 'seminar' | 'seminar'
| 'integrated course' | 'integrated course'
| 'written exam' | 'written exam'
@@ -100,8 +101,7 @@ export type SCAcademicEventCategories =
/** /**
* Translatable properties of an academic event * Translatable properties of an academic event
*/ */
export interface SCAcademicEventTranslatableProperties export interface SCAcademicEventTranslatableProperties extends SCThingWithCategoriesTranslatableProperties {
extends SCThingWithCategoriesTranslatableProperties {
/** /**
* Translations of the majors of the academic event that this event belongs to * Translations of the majors of the academic event that this event belongs to
* *
@@ -120,24 +120,26 @@ export interface SCAcademicEventTranslatableProperties
/** /**
* Meta information about academic events * Meta information about academic events
*/ */
export class SCAcademicEventMeta export class SCAcademicEventMeta extends SCThingMeta implements SCMetaTranslations<SCAcademicEvent> {
extends SCThingMeta
implements SCMetaTranslations<SCAcademicEvent> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.de, ...new SCEventMeta().fieldTranslations.de,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAcademicEventCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCAcademicEventCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
majors: 'Hauptfächer', majors: 'Hauptfächer',
originalCategory: 'ursprüngliche Kategorie', originalCategory: 'ursprüngliche Kategorie',
}, },
en: { en: {
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.en, ...new SCEventMeta().fieldTranslations.en,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAcademicEventCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCAcademicEventCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
majors: 'majors', majors: 'majors',
originalCategory: 'original category', originalCategory: 'original category',
}, },
@@ -148,9 +150,11 @@ export class SCAcademicEventMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.de, ...new SCEventMeta().fieldValueTranslations.de,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAcademicEventCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCAcademicEventCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
categories: { categories: {
'colloquium': 'Kolloquium', 'colloquium': 'Kolloquium',
'course': 'Kurs', 'course': 'Kurs',
@@ -171,9 +175,11 @@ export class SCAcademicEventMeta
type: 'akademische Veranstaltung', type: 'akademische Veranstaltung',
}, },
en: { en: {
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.en, ...new SCEventMeta().fieldValueTranslations.en,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCAcademicEventCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCAcademicEventCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.AcademicEvent, type: SCThingType.AcademicEvent,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,25 +21,43 @@ import {
} from './abstract/creative-work'; } from './abstract/creative-work';
import {SCThingMeta, SCThingType} from './abstract/thing'; import {SCThingMeta, SCThingType} from './abstract/thing';
import { import {
SCThingWithCategories, SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
import {
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
*/ */
export interface SCArticleWithoutReferences export interface SCArticleWithoutReferences
extends SCCreativeWorkWithoutReferences, extends SCCreativeWorkWithoutReferences,
SCThingThatCanBeOfferedWithoutReferences,
SCThingWithCategoriesWithoutReferences<SCArticleCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategoriesWithoutReferences<SCArticleCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Article itself as markdown * Article itself as markdown
* *
* @text * @text
*/ */
articleBody: string; articleBody?: string;
/**
* Categories of an article
*/
categories: SCArticleCategories[];
/** /**
* Translated fields of an article * Translated fields of an article
@@ -59,8 +77,18 @@ export interface SCArticleWithoutReferences
* @indexable * @indexable
*/ */
export interface SCArticle export interface SCArticle
extends SCCreativeWork, SCArticleWithoutReferences, extends SCCreativeWork,
SCThingWithCategories<SCArticleCategories, SCThingWithCategoriesSpecificValues> { SCThingThatCanBeOffered<SCAcademicPriceGroup>,
SCArticleWithoutReferences {
/**
* A periodical to which this article belongs
*/
isPartOf?: SCPeriodicalWithoutReferences;
/**
* Additional information about how to find the article inside of its "parent" (which is provided in 'isPartOf')
* e.g. "40, 2011, S. 2-3"
*/
reference?: string;
/** /**
* Translated fields of an article * Translated fields of an article
*/ */
@@ -73,15 +101,12 @@ 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,
SCThingThatCanBeOfferedTranslatableProperties,
SCCreativeWorkTranslatableProperties {
/** /**
* Translation of the article itself as markdown * Translation of the article itself as markdown
* *
@@ -93,24 +118,31 @@ export interface SCArticleTranslatableProperties
/** /**
* Meta information about an article * Meta information about an article
*/ */
export class SCArticleMeta export class SCArticleMeta extends SCThingMeta implements SCMetaTranslations<SCArticle> {
extends SCThingMeta implements SCMetaTranslations<SCArticle> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.de,
.de, ...new SCThingWithCategoriesWithoutReferencesMeta<
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories, SCArticleCategories,
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
categories: 'Format',
reference: 'Referenz',
articleBody: 'Artikelinhalt', articleBody: 'Artikelinhalt',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.en,
.en, ...new SCThingWithCategoriesWithoutReferencesMeta<
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories, SCArticleCategories,
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
categories: 'format',
reference: 'reference',
articleBody: 'article body', articleBody: 'article body',
}, },
}; };
@@ -120,21 +152,32 @@ export class SCArticleMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCArticleCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
categories: { categories: {
'unipedia': 'Unipedia', article: 'Artikel',
eArticle: 'E-Aufsatz',
unipedia: 'Unipedia',
}, },
type: 'Artikel', type: 'Artikel',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCArticleCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCArticleCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.Article, type: SCThingType.Article,
categories: {
article: 'article',
eArticle: 'E-Article',
unipedia: 'unipedia',
},
}, },
}; };
} }

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

@@ -0,0 +1,174 @@
/*
* Copyright (C) 2021-2022 Open 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: {
...new SCThingWithCategoriesWithoutReferencesMeta<
SCAssessmentCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
attempt: 'Versuch',
courseOfStudy: 'Studiengang',
date: 'Datum',
ects: 'ECTS-Punkte',
grade: 'Note',
status: 'Status',
superAssessments: 'übergeordnete Prüfungen',
},
en: {
...new SCThingWithCategoriesWithoutReferencesMeta<
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: {
...new SCThingWithCategoriesWithoutReferencesMeta<
SCAssessmentCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
type: 'Prüfung',
},
en: {
...new SCThingWithCategoriesWithoutReferencesMeta<
SCAssessmentCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.Assessment,
},
};
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,64 @@ 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'; SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
import {
SCThingWithCategoriesSpecificValues,
SCThingWithCategoriesTranslatableProperties,
SCThingWithCategoriesWithoutReferences,
SCThingWithCategoriesWithoutReferencesMeta,
} from './abstract/thing-with-categories';
/**
* Categories of a book
*/
export type SCBookCategories =
| 'audio'
| 'audiobook'
| 'book'
| 'cd'
| 'dvd'
| 'eAudiobook'
| 'ebook'
| 'ePhoto'
| '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,
SCThingThatCanBeOfferedWithoutReferences,
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
@@ -69,12 +104,9 @@ export interface SCBookWithoutReferences
* @indexable * @indexable
*/ */
export interface SCBook export interface SCBook
extends SCCreativeWork, SCBookWithoutReferences { extends SCCreativeWork,
/** SCThingThatCanBeOffered<SCAcademicPriceGroup>,
* Authors of the creative work SCBookWithoutReferences {
*/
authors: SCPersonWithoutReferences[];
/** /**
* Translated properties of a book * Translated properties of a book
*/ */
@@ -90,14 +122,9 @@ export interface SCBook
* Translatable properties of a book * Translatable properties of a book
*/ */
export interface SCBookTranslatableFields export interface SCBookTranslatableFields
extends SCThingWithCategoriesTranslatableProperties, SCCreativeWorkTranslatableProperties { extends SCThingWithCategoriesTranslatableProperties,
/** SCThingThatCanBeOfferedTranslatableProperties,
* Translation of an edition of a book SCCreativeWorkTranslatableProperties {}
*
* @keyword
*/
bookEdition?: string;
}
/** /**
* Meta information about a book * Meta information about a book
@@ -108,17 +135,25 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.de,
.de, ...new SCThingWithCategoriesWithoutReferencesMeta<
bookEdition: 'Buchausgabe', SCBookCategories,
isbn: 'ISBN', SCThingWithCategoriesSpecificValues
numberOfPages: 'Seitenzahl', >().fieldTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
categories: 'Format',
ISBNs: 'ISBN',
numberOfPages: 'Seitenanzahl',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.en,
.en, ...new SCThingWithCategoriesWithoutReferencesMeta<
bookEdition: 'book edition', SCBookCategories,
isbn: 'ISBN', SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
categories: 'format',
ISBNs: 'ISBN',
numberOfPages: 'number of pages', numberOfPages: 'number of pages',
}, },
}; };
@@ -128,14 +163,66 @@ export class SCBookMeta extends SCThingMeta implements SCMetaTranslations<SCBook
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCBookCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
categories: {
audio: 'Tonträger',
audiobook: 'Hörbuch',
book: 'Buch',
cd: 'CD',
dvd: 'DVD',
eAudiobook: 'E-Hörbuch',
ebook: 'E-Book',
ePhoto: 'E-Photo',
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>() ...new SCCreativeWorkMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCBookCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
type: SCThingType.Book, type: SCThingType.Book,
categories: {
audio: 'audio material',
audiobook: 'audiobook',
book: 'book',
cd: 'CD',
dvd: 'DVD',
eAudiobook: 'E-Audiobook',
ebook: 'E-Book',
ePhoto: 'E-Photo',
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',
},
}, },
}; };
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -29,7 +29,7 @@ import {
} from './abstract/thing-with-categories'; } from './abstract/thing-with-categories';
export type SCBuildingCategories = export type SCBuildingCategories =
'cafe' | 'cafe'
| 'education' | 'education'
| 'library' | 'library'
| 'office' | 'office'
@@ -41,15 +41,6 @@ export type SCBuildingCategories =
export interface SCBuildingWithoutReferences export interface SCBuildingWithoutReferences
extends SCThingWithCategoriesWithoutReferences<SCBuildingCategories, SCThingWithCategoriesSpecificValues>, extends SCThingWithCategoriesWithoutReferences<SCBuildingCategories, SCThingWithCategoriesSpecificValues>,
SCPlaceWithoutReferences { SCPlaceWithoutReferences {
/**
* Categories of a building
*
* @sortable ducet
* @aggregatable
* @filterable
*/
categories: SCBuildingCategories[];
/** /**
* List of floor names of the place * List of floor names of the place
* *
@@ -76,7 +67,8 @@ export interface SCBuildingWithoutReferences
* @indexable * @indexable
*/ */
export interface SCBuilding export interface SCBuilding
extends SCBuildingWithoutReferences, SCPlace, extends SCBuildingWithoutReferences,
SCPlace,
SCThingWithCategories<SCBuildingCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCBuildingCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Translated fields of a building * Translated fields of a building
@@ -90,7 +82,8 @@ export interface SCBuilding
} }
export interface SCBuildingTranslatableProperties export interface SCBuildingTranslatableProperties
extends SCPlaceWithoutReferencesTranslatableProperties, SCThingWithCategoriesTranslatableProperties { extends SCPlaceWithoutReferencesTranslatableProperties,
SCThingWithCategoriesTranslatableProperties {
/** /**
* @see SCBuilding.floors * @see SCBuilding.floors
*/ */
@@ -100,23 +93,25 @@ export interface SCBuildingTranslatableProperties
/** /**
* Meta information about a place * Meta information about a place
*/ */
export class SCBuildingMeta export class SCBuildingMeta extends SCThingMeta implements SCMetaTranslations<SCBuilding> {
extends SCThingMeta
implements SCMetaTranslations<SCBuilding> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBuildingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCBuildingCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.de, SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
...new SCPlaceWithoutReferencesMeta().fieldTranslations.de,
floors: 'Etagen', floors: 'Etagen',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBuildingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCBuildingCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.en, SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
...new SCPlaceWithoutReferencesMeta().fieldTranslations.en,
floors: 'floors', floors: 'floors',
}, },
}; };
@@ -126,9 +121,11 @@ export class SCBuildingMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBuildingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCBuildingCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.de, SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.de,
categories: { categories: {
'cafe': 'Café', 'cafe': 'Café',
'canteen': 'Kantine', 'canteen': 'Kantine',
@@ -142,9 +139,11 @@ export class SCBuildingMeta
type: 'Gebäude', type: 'Gebäude',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCBuildingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCBuildingCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.en, SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.en,
type: SCThingType.Building, type: SCThingType.Building,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,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;
@@ -50,7 +51,8 @@ export interface SCCatalogWithoutReferences
* @indexable * @indexable
*/ */
export interface SCCatalog export interface SCCatalog
extends SCCatalogWithoutReferences, SCThing, extends SCCatalogWithoutReferences,
SCThing,
SCThingWithCategories<SCCatalogCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCCatalogCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Academic term that a catalog belongs to (e.g. semester) * Academic term that a catalog belongs to (e.g. semester)
@@ -81,23 +83,26 @@ export interface SCCatalog
/** /**
* Catalog meta data * Catalog meta data
*/ */
export class SCCatalogMeta export class SCCatalogMeta extends SCThingMeta implements SCMetaTranslations<SCCatalog> {
extends SCThingMeta implements SCMetaTranslations<SCCatalog> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCCatalogCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCCatalogCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
academicTerm: 'Semester', academicTerm: 'Semester',
level: 'Ebene', level: 'Ebene',
superCatalog: 'übergeordnetes Verzeichniss', superCatalog: 'übergeordnetes Verzeichniss',
superCatalogs: 'übergeordnete Verzeichnisse', superCatalogs: 'übergeordnete Verzeichnisse',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCCatalogCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCCatalogCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
academicTerm: 'academic term', academicTerm: 'academic term',
level: 'level', level: 'level',
superCatalog: 'parent catalog', superCatalog: 'parent catalog',
@@ -110,16 +115,20 @@ export class SCCatalogMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCCatalogCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCCatalogCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
categories: { categories: {
'university events': 'Universitätsveranstaltung', 'university events': 'Universitätsveranstaltung',
}, },
type: 'Verzeichnis', type: 'Verzeichnis',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCCatalogCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCCatalogCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.Catalog, type: SCThingType.Catalog,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,19 +14,13 @@
*/ */
import {SCMetaTranslations} from '../general/i18n'; import {SCMetaTranslations} from '../general/i18n';
import { import {SCThing, SCThingMeta, SCThingType, SCThingWithoutReferences} from './abstract/thing';
SCThing,
SCThingMeta,
SCThingType,
SCThingWithoutReferences,
} from './abstract/thing';
import {SCRoomWithoutReferences} from './room'; import {SCRoomWithoutReferences} from './room';
/** /**
* A contact point without references * A contact point without references
*/ */
export interface SCContactPointWithoutReferences export interface SCContactPointWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* E-mail at the work location * E-mail at the work location
* *
@@ -73,12 +67,10 @@ export interface SCContactPointWithoutReferences
* A contact point * A contact point
* *
* @see http://schema.org/ContactPoint * @see http://schema.org/ContactPoint
*
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCContactPoint export interface SCContactPoint extends SCContactPointWithoutReferences, SCThing {
extends SCContactPointWithoutReferences, SCThing {
/** /**
* Exact place where work is performed * Exact place where work is performed
*/ */
@@ -93,15 +85,13 @@ export interface SCContactPoint
/** /**
* Meta information about a contact point * Meta information about a contact point
*/ */
export class SCContactPointMeta export class SCContactPointMeta extends SCThingMeta implements SCMetaTranslations<SCContactPoint> {
extends SCThingMeta
implements SCMetaTranslations<SCContactPoint> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
areaServed: 'Arbeitsraum', areaServed: 'Arbeitsraum',
email: 'E-Mail-Addresse', email: 'E-Mail-Addresse',
faxNumber: 'Faxnummer', faxNumber: 'Faxnummer',
@@ -110,7 +100,7 @@ export class SCContactPointMeta
url: 'Link', url: 'Link',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
areaServed: 'location', areaServed: 'location',
email: 'email address', email: 'email address',
faxNumber: 'fax number', faxNumber: 'fax number',
@@ -125,11 +115,11 @@ export class SCContactPointMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
type: 'Kontaktinformation', type: 'Kontaktinformation',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
type: SCThingType.ContactPoint, type: SCThingType.ContactPoint,
}, },
}; };

View File

@@ -1,196 +0,0 @@
/*
* Copyright (C) 2019 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 {SCLanguage, SCMetaTranslations, SCTranslations} from '../general/i18n';
import {SCAcademicDegree, SCAcademicDegreeMeta, SCAcademicDegreeWithoutReferences} from './abstract/academic-degree';
import {SCThingMeta, SCThingType} from './abstract/thing';
import {
SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
import {SCDateSeriesWithoutReferences} from './date-series';
import {SCOrganizationWithoutReferences} from './organization';
/**
* A course of studies without references
*/
export interface SCCourseOfStudiesWithoutReferences
extends SCAcademicDegreeWithoutReferences, SCThingThatCanBeOfferedWithoutReferences {
/**
* The main language in which the course of studies
* is beeing offered
*/
mainLanguage: SCLanguage;
/**
* Actual major of the course of studies (eg. physics)
*
* @filterable
* @keyword
*/
major: string;
/**
* The modes the course of studies is offered in
*/
mode: SCCourseOfStudiesMode;
/**
* The time modes the course of studies is offered in
*/
timeMode: SCCourseOfStudiesTimeMode;
/**
* Translated fields of a dish
*/
translations?: SCTranslations<SCCourseOfStudiesTranslatableProperties>;
/**
* Type of the course of studies
*/
type: SCThingType.CourseOfStudies;
}
/**
* A course of studies
*
* @validatable
* @indexable
*/
export interface SCCourseOfStudies
extends SCCourseOfStudiesWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup>, SCAcademicDegree {
/**
* The department that manages the course of studies
*/
department: SCOrganizationWithoutReferences;
/**
* The secretary that administers requests and
* questions concerning the course of studies
*/
secretary: SCOrganizationWithoutReferences;
/**
* Dates at which the course of studies is planned to start
*/
startDates?: SCDateSeriesWithoutReferences[];
/**
* Translated fields of a course of studies
*/
translations?: SCTranslations<SCCourseOfStudiesTranslatableProperties>;
/**
* Type of the course of studies
*/
type: SCThingType.CourseOfStudies;
}
/**
* Translatable properties of a course of studies
*/
export interface SCCourseOfStudiesTranslatableProperties
extends SCThingThatCanBeOfferedTranslatableProperties {
// noop
}
/**
* Meta information about a course of studies
*/
export class SCCourseOfStudiesMeta
extends SCThingMeta
implements SCMetaTranslations<SCCourseOfStudies> {
/**
* Translations of fields
*/
fieldTranslations = {
de: {
...SCAcademicDegreeMeta.getInstance<SCAcademicDegreeMeta>()
.fieldTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>()
.fieldTranslations.de,
department: 'Fachbereich',
mainLanguage: 'Unterrichtssprache',
major: 'Studienfach',
mode: 'Studiengangsart',
secretary: 'Sekretariat',
startDates: 'Startdatum',
timeMode: 'Zeitmodell',
},
en: {
...SCAcademicDegreeMeta.getInstance<SCAcademicDegreeMeta>()
.fieldTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>()
.fieldTranslations.de,
department: 'department',
mainLanguage: 'main language',
major: 'major',
mode: 'mode',
secretary: 'secretary',
startDates: 'start dates',
timeMode: 'time mode',
},
};
/**
* Translations of values of fields
*/
fieldValueTranslations = {
de: {
...SCAcademicDegreeMeta.getInstance().fieldValueTranslations.de,
modes: {
combination: 'Kombinationsstudiengang',
'double-degree': 'Doppelstudium',
dual: 'duales Studium',
standard: 'Studium',
},
timeMode: {
fulltime: 'Vollzeitstudiengang',
parttime: 'Teilzeitstudiengang',
},
type: 'Studiengang',
},
en: {
...SCAcademicDegreeMeta.getInstance().fieldValueTranslations.en,
modes: {
combination: 'combination course of studies',
'double-degree': 'double degree course of studies',
dual: 'dual course of studies',
standard: 'course of studies',
},
timeMode: {
fulltime: 'full-time',
parttime: 'part-time',
},
type: SCThingType.CourseOfStudies,
},
};
}
/**
* Types of (german) course of studies modes
*/
export type SCCourseOfStudiesMode = 'combination'
| 'dual'
| 'double-degree'
| 'standard' ;
/**
* Types of (german) course of studies time modes
*/
export type SCCourseOfStudiesTimeMode = 'fulltime'
| 'parttime' ;

View File

@@ -0,0 +1,184 @@
/*
* Copyright (C) 2021-2022 Open 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 {SCLanguage, SCMetaTranslations, SCTranslations} from '../general/i18n';
import {
SCAcademicDegree,
SCAcademicDegreeMeta,
SCAcademicDegreeWithoutReferences,
} from './abstract/academic-degree';
import {SCThingMeta, SCThingType} from './abstract/thing';
import {
SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
import {SCDateSeriesWithoutReferences} from './date-series';
import {SCOrganizationWithoutReferences} from './organization';
/**
* A course of study without references
*/
export interface SCCourseOfStudyWithoutReferences
extends SCAcademicDegreeWithoutReferences,
SCThingThatCanBeOfferedWithoutReferences {
/**
* The main language in which the course of study
* is beeing offered
*/
mainLanguage?: SCLanguage;
/**
* The modes the course of study is offered in
*
* @filterable
*/
mode?: SCCourseOfStudyMode;
/**
* The time modes the course of study is offered in
*
* @filterable
*/
timeMode?: SCCourseOfStudyTimeMode;
/**
* Translated fields of a dish
*/
translations?: SCTranslations<SCCourseOfStudyTranslatableProperties>;
/**
* Type of the course of study
*/
type: SCThingType.CourseOfStudy;
}
/**
* A course of study
*
* @validatable
* @indexable
*/
export interface SCCourseOfStudy
extends SCCourseOfStudyWithoutReferences,
SCThingThatCanBeOffered<SCAcademicPriceGroup>,
SCAcademicDegree {
/**
* The department that manages the course of study
*/
department?: SCOrganizationWithoutReferences;
/**
* The secretary that administers requests and
* questions concerning the course of study
*/
secretary?: SCOrganizationWithoutReferences;
/**
* Dates at which the course of study is planned to start
*/
startDates?: SCDateSeriesWithoutReferences[];
/**
* Translated fields of a course of study
*/
translations?: SCTranslations<SCCourseOfStudyTranslatableProperties>;
/**
* Type of the course of study
*/
type: SCThingType.CourseOfStudy;
}
/**
* Translatable properties of a course of study
*/
export type SCCourseOfStudyTranslatableProperties = SCThingThatCanBeOfferedTranslatableProperties;
/**
* Meta information about a course of study
*/
export class SCCourseOfStudyMeta extends SCThingMeta implements SCMetaTranslations<SCCourseOfStudy> {
/**
* Translations of fields
*/
fieldTranslations = {
de: {
...new SCAcademicDegreeMeta().fieldTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
department: 'Fachbereich',
mainLanguage: 'Unterrichtssprache',
mode: 'Studiengangsart',
secretary: 'Sekretariat',
startDates: 'Startdatum',
timeMode: 'Zeitmodell',
},
en: {
...new SCAcademicDegreeMeta().fieldTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
department: 'department',
mainLanguage: 'main language',
mode: 'mode',
secretary: 'secretary',
startDates: 'start dates',
timeMode: 'time mode',
},
};
/**
* Translations of values of fields
*/
fieldValueTranslations = {
de: {
...new SCAcademicDegreeMeta().fieldValueTranslations.de,
modes: {
'combination': 'Kombinationsstudiengang',
'double-degree': 'Doppelstudium',
'dual': 'duales Studium',
'standard': 'Studium',
},
timeMode: {
fulltime: 'Vollzeitstudiengang',
parttime: 'Teilzeitstudiengang',
},
type: 'Studiengang',
},
en: {
...new SCAcademicDegreeMeta().fieldValueTranslations.en,
modes: {
'combination': 'combination course of study',
'double-degree': 'double degree course of study',
'dual': 'dual course of study',
'standard': 'course of study',
},
timeMode: {
fulltime: 'full-time',
parttime: 'part-time',
},
type: SCThingType.CourseOfStudy,
},
};
}
/**
* Types of (german) course of study modes
*/
export type SCCourseOfStudyMode = 'combination' | 'dual' | 'double-degree' | 'standard';
/**
* Types of (german) course of study time modes
*/
export type SCCourseOfStudyTimeMode = 'fulltime' | 'parttime';

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -30,8 +30,7 @@ import {SCSportCourseWithoutReferences} from './sport-course';
/** /**
* Price groups for sport courses * Price groups for sport courses
*/ */
export interface SCSportCoursePriceGroup export interface SCSportCoursePriceGroup extends SCAcademicPriceGroup {
extends SCAcademicPriceGroup {
/** /**
* Price for alumnis * Price for alumnis
* *
@@ -43,8 +42,7 @@ export interface SCSportCoursePriceGroup
/** /**
* A date without references * A date without references
*/ */
export interface SCDateSeriesWithoutReferences export interface SCDateSeriesWithoutReferences extends SCThingThatCanBeOfferedWithoutReferences {
extends SCThingThatCanBeOfferedWithoutReferences {
/** /**
* Dates of the date series that are initially planned to be held * Dates of the date series that are initially planned to be held
* *
@@ -65,9 +63,9 @@ export interface SCDateSeriesWithoutReferences
/** /**
* Frequency of the date series * Frequency of the date series
* *
* @keyword * @filterable
*/ */
frequency: string; repeatFrequency?: SCISO8601Duration;
/** /**
* Translated properties * Translated properties
@@ -93,8 +91,7 @@ export interface SCDateSeries
/** /**
* Event to which the date series belongs * Event to which the date series belongs
*/ */
event: SCAcademicEventWithoutReferences event: SCAcademicEventWithoutReferences | SCSportCourseWithoutReferences;
| SCSportCourseWithoutReferences;
/** /**
* Performers of the date series * Performers of the date series
@@ -115,35 +112,29 @@ export interface SCDateSeries
/** /**
* Meta information about a date series * Meta information about a date series
*/ */
export class SCDateSeriesMeta export class SCDateSeriesMeta extends SCThingMeta implements SCMetaTranslations<SCDateSeries> {
extends SCThingMeta
implements SCMetaTranslations<SCDateSeries> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.de,
.de, ...new SCThingThatCanBeOfferedMeta<SCSportCoursePriceGroup>().fieldTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance<SCSportCoursePriceGroup>()
.fieldTranslations.de,
dates: 'Einzeltermine', dates: 'Einzeltermine',
duration: 'Dauer', duration: 'Dauer',
event: 'Event', event: 'Event',
exceptions: 'Ausnahmen', exceptions: 'Ausnahmen',
frequency: 'Frequenz', repeatFrequency: 'Frequenz',
performers: 'Vortragende', performers: 'Vortragende',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.en,
.en, ...new SCThingThatCanBeOfferedMeta<SCSportCoursePriceGroup>().fieldTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance<SCSportCoursePriceGroup>()
.fieldTranslations.en,
dates: 'dates', dates: 'dates',
duration: 'duration', duration: 'duration',
event: 'event', event: 'event',
exceptions: 'exceptions', exceptions: 'exceptions',
frequency: 'frequency', repeatFrequency: 'frequency',
performers: 'performers', performers: 'performers',
}, },
}; };
@@ -153,17 +144,13 @@ export class SCDateSeriesMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingThatCanBeOfferedMeta<SCSportCoursePriceGroup>().fieldValueTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance<SCSportCoursePriceGroup>()
.fieldValueTranslations.de,
type: 'Terminserie', type: 'Terminserie',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingThatCanBeOfferedMeta<SCSportCoursePriceGroup>().fieldValueTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance<SCSportCoursePriceGroup>()
.fieldValueTranslations.en,
type: SCThingType.DateSeries, type: SCThingType.DateSeries,
}, },
}; };
@@ -172,10 +159,4 @@ export class SCDateSeriesMeta
/** /**
* Translatable properties of date series' * Translatable properties of date series'
*/ */
export interface SCDateSeriesTranslatableProperties export type SCDateSeriesTranslatableProperties = SCThingThatCanBeOfferedTranslatableProperties;
extends SCThingThatCanBeOfferedTranslatableProperties {
/**
* @see SCDateSeriesWithoutReferences.frequency
*/
frequency?: string;
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,14 +15,13 @@
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';
/** /**
* A diff without references * A diff without references
*/ */
export interface SCDiffWithoutReferences export interface SCDiffWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Action of the diff * Action of the diff
*/ */
@@ -48,14 +47,12 @@ 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
@@ -66,22 +63,20 @@ export interface SCDiff
/** /**
* Meta information about a diff * Meta information about a diff
*/ */
export class SCDiffMeta export class SCDiffMeta extends SCThingMeta implements SCMetaTranslations<SCDiff> {
extends SCThingMeta
implements SCMetaTranslations<SCDiff> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
action: 'Aktion', action: 'Aktion',
changes: 'Änderungen', changes: 'Änderungen',
dateCreated: 'Erstellungsdatum', dateCreated: 'Erstellungsdatum',
object: 'Objekt', object: 'Objekt',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
action: 'action', action: 'action',
changes: 'changes', changes: 'changes',
dateCreated: 'date created', dateCreated: 'date created',
@@ -94,15 +89,15 @@ export class SCDiffMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
action: { action: {
'changed': 'geändert', changed: 'geändert',
'removed': 'gelöscht', removed: 'gelöscht',
}, },
type: 'Unterschied', type: 'Unterschied',
}, },
en: { en: {
...SCThingMeta.getInstance().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
type: SCThingType.Diff, type: SCThingType.Diff,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -43,15 +43,6 @@ export interface SCDishWithoutReferences
*/ */
additives?: string[]; additives?: string[];
/**
* Category of the dish
*
* @sortable ducet
* @aggregatable
* @filterable
*/
categories: SCDishCategories[];
/** /**
* Characteristics of the dish * Characteristics of the dish
*/ */
@@ -80,7 +71,8 @@ export interface SCDishWithoutReferences
* @indexable * @indexable
*/ */
export interface SCDish export interface SCDish
extends SCDishWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup>, extends SCDishWithoutReferences,
SCThingThatCanBeOffered<SCAcademicPriceGroup>,
SCThingWithCategories<SCDishCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCDishCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Dishes ("Beilagen") that are served with the dish (if only certain supplement dishes can be taken with a dish) * Dishes ("Beilagen") that are served with the dish (if only certain supplement dishes can be taken with a dish)
@@ -99,7 +91,15 @@ export interface SCDish
} }
export interface SCDishTranslatableProperties export interface SCDishTranslatableProperties
extends SCThingWithCategoriesTranslatableProperties, SCThingThatCanBeOfferedTranslatableProperties { extends SCThingWithCategoriesTranslatableProperties,
SCThingThatCanBeOfferedTranslatableProperties {
/**
* Additives of the dish
*
* @filterable
* @keyword
*/
additives?: string[];
/** /**
* Characteristics of the dish * Characteristics of the dish
*/ */
@@ -129,13 +129,7 @@ export interface SCDishCharacteristic {
/** /**
* A list of categories for dishes * A list of categories for dishes
*/ */
export type SCDishCategories = export type SCDishCategories = 'appetizer' | 'salad' | 'main dish' | 'dessert' | 'soup' | 'side dish';
| 'appetizer'
| 'salad'
| 'main dish'
| 'dessert'
| 'soup'
| 'side dish';
/** /**
* Type definition for SCNutritionInformation * Type definition for SCNutritionInformation
@@ -196,28 +190,28 @@ export interface SCNutritionInformation {
/** /**
* Meta information about a dish * Meta information about a dish
*/ */
export class SCDishMeta export class SCDishMeta extends SCThingMeta implements SCMetaTranslations<SCDish> {
extends SCThingMeta
implements SCMetaTranslations<SCDish> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCDishCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCDishCategories,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() SCThingWithCategoriesSpecificValues
.fieldTranslations.de, >().fieldTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
additives: 'Zusatzstoffe', additives: 'Zusatzstoffe',
characteristics: 'Merkmale', characteristics: 'Merkmale',
dishAddOns: 'Beilagen', dishAddOns: 'Beilagen',
nutrition: 'Nährwertangaben', nutrition: 'Nährwertangaben',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCDishCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCDishCategories,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() SCThingWithCategoriesSpecificValues
.fieldTranslations.en, >().fieldTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
additives: 'additives', additives: 'additives',
characteristics: 'characteristics', characteristics: 'characteristics',
dishAddOns: 'side dishes', dishAddOns: 'side dishes',
@@ -230,25 +224,27 @@ export class SCDishMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCDishCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCDishCategories,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() SCThingWithCategoriesSpecificValues
.fieldValueTranslations.de, >().fieldValueTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
categories: { categories: {
appetizer: 'Vorspeise', 'appetizer': 'Vorspeise',
dessert: 'Nachtisch', 'dessert': 'Nachtisch',
'main dish': 'Hauptgericht', 'main dish': 'Hauptgericht',
salad: 'Salat', 'salad': 'Salat',
'side dish': 'Beilage', 'side dish': 'Beilage',
soup: 'Suppe', 'soup': 'Suppe',
}, },
type: 'Essen', type: 'Essen',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCDishCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCDishCategories,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() SCThingWithCategoriesSpecificValues
.fieldValueTranslations.en, >().fieldValueTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
type: SCThingType.Dish, type: SCThingType.Dish,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,23 @@
*/ */
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
*/ */
@@ -62,6 +40,4 @@ export interface SCFavorite
/** /**
* Meta information about a favorite * Meta information about a favorite
*/ */
export class SCFavoriteMeta export class SCFavoriteMeta extends SCThingMeta {}
extends SCThingMeta {
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,10 +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/>.
*/ */
// tslint:disable-next-line:no-implicit-dependencies
import {Feature, FeatureCollection, GeometryObject, LineString} from 'geojson'; import {Feature, FeatureCollection, GeometryObject, LineString} from 'geojson';
import {SCMetaTranslations, SCTranslations} from '../general/i18n'; import {SCMetaTranslations, SCTranslations} from '../general/i18n';
import {SCThingMeta, SCThingTranslatableProperties, SCThingType, SCThingWithoutReferences} from './abstract/thing'; import {
SCThingMeta,
SCThingTranslatableProperties,
SCThingType,
SCThingWithoutReferences,
} from './abstract/thing';
import {SCThingInPlace, SCThingInPlaceMeta} from './abstract/thing-in-place'; import {SCThingInPlace, SCThingInPlaceMeta} from './abstract/thing-in-place';
import {SCPointOfInterestWithoutReferences} from './point-of-interest'; import {SCPointOfInterestWithoutReferences} from './point-of-interest';
import {SCRoomWithoutReferences} from './room'; import {SCRoomWithoutReferences} from './room';
@@ -23,8 +27,7 @@ import {SCRoomWithoutReferences} from './room';
/** /**
* A floor without references * A floor without references
*/ */
export interface SCFloorWithoutReferences export interface SCFloorWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Floor name in the place it is in e.g. "first floor", "ground floor". This doesn't reference the building name. * Floor name in the place it is in e.g. "first floor", "ground floor". This doesn't reference the building name.
* *
@@ -54,8 +57,7 @@ export interface SCFloorWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCFloor export interface SCFloor extends SCFloorWithoutReferences, SCThingInPlace {
extends SCFloorWithoutReferences, SCThingInPlace {
/** /**
* Translated fields of a floor * Translated fields of a floor
*/ */
@@ -70,8 +72,7 @@ export interface SCFloor
/** /**
* A feature collection * A feature collection
*/ */
export interface SCFloorFeatureCollectionWithPlaces<T extends GeometryObject> export interface SCFloorFeatureCollectionWithPlaces<T extends GeometryObject> extends FeatureCollection<T> {
extends FeatureCollection<T> {
/** /**
* Features of the collection * Features of the collection
*/ */
@@ -82,7 +83,7 @@ export interface SCFloorFeatureCollectionWithPlaces<T extends GeometryObject>
* A feature with a place * A feature with a place
*/ */
export interface SCFloorFeatureWithPlace<T extends GeometryObject> export interface SCFloorFeatureWithPlace<T extends GeometryObject>
// tslint:disable-next-line:no-any TODO // eslint-disable-next-line @typescript-eslint/no-explicit-any
extends Feature<T, any> { extends Feature<T, any> {
/** /**
* The place of the feature * The place of the feature
@@ -93,8 +94,7 @@ export interface SCFloorFeatureWithPlace<T extends GeometryObject>
/** /**
* Translatable properties of a floor * Translatable properties of a floor
*/ */
export interface SCFloorTranslatableProperties export interface SCFloorTranslatableProperties extends SCThingTranslatableProperties {
extends SCThingTranslatableProperties {
/** /**
* Translation of the floor name * Translation of the floor name
* *
@@ -106,22 +106,18 @@ export interface SCFloorTranslatableProperties
/** /**
* Meta information about floors * Meta information about floors
*/ */
export class SCFloorMeta export class SCFloorMeta extends SCThingMeta implements SCMetaTranslations<SCFloor> {
extends SCThingMeta
implements SCMetaTranslations<SCFloor> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.de,
.de,
floorName: 'Etagenbezeichnung', floorName: 'Etagenbezeichnung',
plan: 'Grundriss', plan: 'Grundriss',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.en,
.en,
floorName: 'floor name', floorName: 'floor name',
plan: 'plan', plan: 'plan',
}, },
@@ -132,13 +128,11 @@ export class SCFloorMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.de,
.fieldValueTranslations.de,
type: 'Etage', type: 'Etage',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.en,
.fieldValueTranslations.en,
type: SCThingType.Floor, type: SCThingType.Floor,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,25 @@ 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 +51,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
@@ -77,8 +94,7 @@ export interface SCMessageWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCMessage export interface SCMessage extends SCCreativeWork, SCMessageWithoutReferences {
extends SCCreativeWork, SCMessageWithoutReferences {
/** /**
* Translated fields of a message * Translated fields of a message
*/ */
@@ -90,19 +106,12 @@ 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
*/ */
export interface SCMessageTranslatableProperties export interface SCMessageTranslatableProperties
extends SCCreativeWorkTranslatableProperties, SCThingThatCanBeOfferedTranslatableProperties { extends SCCreativeWorkTranslatableProperties,
SCThingThatCanBeOfferedTranslatableProperties {
/** /**
* Message itself * Message itself
* *
@@ -114,16 +123,17 @@ export interface SCMessageTranslatableProperties
/** /**
* Meta information about messages * Meta information about messages
*/ */
export class SCMessageMeta export class SCMessageMeta extends SCThingMeta implements SCMetaTranslations<SCMessage> {
extends SCThingMeta
implements SCMetaTranslations<SCMessage> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.de,
.de, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCMessageCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
audienceOrganizations: 'Zielgruppenorganisationen', audienceOrganizations: 'Zielgruppenorganisationen',
audiences: 'Zielgruppen', audiences: 'Zielgruppen',
dateCreated: 'Erstellungsdatum', dateCreated: 'Erstellungsdatum',
@@ -131,8 +141,11 @@ export class SCMessageMeta
sequenceIndex: 'Sequenzindex', sequenceIndex: 'Sequenzindex',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.en,
.en, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCMessageCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
audienceOrganizations: 'audience organizations', audienceOrganizations: 'audience organizations',
audiences: 'audiences', audiences: 'audiences',
dateCreated: 'date created', dateCreated: 'date created',
@@ -146,18 +159,27 @@ export class SCMessageMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCMessageCategories,
SCThingWithCategoriesSpecificValues
>().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',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCMessageCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.Message, type: SCThingType.Message,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,8 +20,7 @@ import {SCContactPointWithoutReferences} from './contact-point';
/** /**
* An organization without references * An organization without references
*/ */
export interface SCOrganizationWithoutReferences export interface SCOrganizationWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Type of an organization * Type of an organization
*/ */
@@ -34,8 +33,7 @@ export interface SCOrganizationWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCOrganization export interface SCOrganization extends SCOrganizationWithoutReferences, SCThingInPlace {
extends SCOrganizationWithoutReferences, SCThingInPlace {
/** /**
* A list of contact points concerning the organization * A list of contact points concerning the organization
*/ */
@@ -50,18 +48,17 @@ export interface SCOrganization
/** /**
* Meta information about an organization * Meta information about an organization
*/ */
export class SCOrganizationMeta export class SCOrganizationMeta extends SCThingMeta implements SCMetaTranslations<SCOrganization> {
extends SCThingMeta implements SCMetaTranslations<SCOrganization> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations.de, ...new SCThingInPlaceMeta().fieldTranslations.de,
contactPoints: 'Kontaktinformationen', contactPoints: 'Kontaktinformationen',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations.en, ...new SCThingInPlaceMeta().fieldTranslations.en,
contactPoints: 'contact details', contactPoints: 'contact details',
}, },
}; };
@@ -71,11 +68,11 @@ export class SCOrganizationMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldValueTranslations.de, ...new SCThingInPlaceMeta().fieldValueTranslations.de,
type: 'Einrichtung', type: 'Einrichtung',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldValueTranslations.en, ...new SCThingInPlaceMeta().fieldValueTranslations.en,
type: SCThingType.Organization, type: SCThingType.Organization,
}, },
}; };

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

@@ -0,0 +1,162 @@
/*
* Copyright (C) 2021-2022 Open 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 {
SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
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,
SCThingThatCanBeOfferedWithoutReferences,
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,
SCThingThatCanBeOffered<SCAcademicPriceGroup>,
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,
SCThingThatCanBeOfferedTranslatableProperties,
SCCreativeWorkTranslatableProperties {}
/**
* Meta information about a periodical
*/
export class SCPeriodicalMeta extends SCThingMeta implements SCMetaTranslations<SCPeriodical> {
/**
* Translations of fields
*/
fieldTranslations = {
de: {
...new SCCreativeWorkMeta().fieldTranslations.de,
...new SCThingWithCategoriesWithoutReferencesMeta<
SCPeriodicalCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
categories: 'Format',
ISSNs: 'ISSN',
},
en: {
...new SCCreativeWorkMeta().fieldTranslations.en,
...new SCThingWithCategoriesWithoutReferencesMeta<
SCPeriodicalCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
categories: 'format',
ISSNs: 'ISSN',
},
};
/**
* Translations of values of fields
*/
fieldValueTranslations = {
de: {
...new SCCreativeWorkMeta().fieldValueTranslations.de,
...new SCThingWithCategoriesWithoutReferencesMeta<
SCPeriodicalCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
type: 'Periodikum',
categories: {
electronic: 'E-Journal',
journal: 'Zeitschrift',
},
},
en: {
...new SCCreativeWorkMeta().fieldValueTranslations.en,
...new SCThingWithCategoriesWithoutReferencesMeta<
SCPeriodicalCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
type: 'periodical',
categories: {
electronic: 'E-Journal',
journal: 'journal',
},
},
};
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -24,8 +24,7 @@ import {SCRoomWithoutReferences} from './room';
/** /**
* A person without references * A person without references
*/ */
export interface SCPersonWithoutReferences export interface SCPersonWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Additional first names of the person. * Additional first names of the person.
* *
@@ -45,7 +44,6 @@ export interface SCPersonWithoutReferences
* The private email address of the person. * The private email address of the person.
* *
* @TJS-format email * @TJS-format email
*
* @filterable * @filterable
* @keyword * @keyword
*/ */
@@ -57,7 +55,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 +78,7 @@ export interface SCPersonWithoutReferences
* @filterable * @filterable
* @keyword * @keyword
*/ */
givenName: string; givenName?: string;
/** /**
* Honorific prefix of the person. * Honorific prefix of the person.
@@ -138,8 +136,7 @@ export interface SCPersonWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCPerson export interface SCPerson extends SCPersonWithoutReferences, SCThing {
extends SCPersonWithoutReferences, SCThing {
/** /**
* Organization the person works for * Organization the person works for
*/ */
@@ -148,9 +145,9 @@ export interface SCPerson
/** /**
* A list of homes of the person * A list of homes of the person
*/ */
homeLocations?: Array<SCBuildingWithoutReferences homeLocations?: Array<
| SCPointOfInterestWithoutReferences SCBuildingWithoutReferences | SCPointOfInterestWithoutReferences | SCRoomWithoutReferences
| SCRoomWithoutReferences>; >;
/** /**
* Type of a person * Type of a person
@@ -166,15 +163,13 @@ export interface SCPerson
/** /**
* Meta information about a person * Meta information about a person
*/ */
export class SCPersonMeta export class SCPersonMeta extends SCThingMeta implements SCMetaTranslations<SCPerson> {
extends SCThingMeta
implements SCMetaTranslations<SCPerson> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
additionalName: 'Zusatzname', additionalName: 'Zusatzname',
affiliations: 'Zugehörigkeiten', affiliations: 'Zugehörigkeiten',
birthDate: 'Geburtsdatum', birthDate: 'Geburtsdatum',
@@ -192,7 +187,7 @@ export class SCPersonMeta
workLocations: 'Arbeitsstandorte', workLocations: 'Arbeitsstandorte',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
additionalName: 'additional name', additionalName: 'additional name',
affiliations: 'affiliations', affiliations: 'affiliations',
birthDate: 'birth date', birthDate: 'birth date',
@@ -217,17 +212,17 @@ export class SCPersonMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
gender: { gender: {
'female': 'weiblich', female: 'weiblich',
'inter': 'divers', inter: 'divers',
'male': 'männlich', male: 'männlich',
'undefined': 'undefiniert', undefined: 'undefiniert',
}, },
type: 'Person', type: 'Person',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
type: SCThingType.Person, type: SCThingType.Person,
}, },
}; };
@@ -236,8 +231,4 @@ export class SCPersonMeta
/** /**
* Gender of a person * Gender of a person
*/ */
export type SCPersonGender = export type SCPersonGender = 'male' | 'female' | 'inter' | 'undefined';
'male'
| 'female'
| 'inter'
| 'undefined';

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -28,7 +28,10 @@ import {
* A point of interest without references * A point of interest without references
*/ */
export interface SCPointOfInterestWithoutReferences export interface SCPointOfInterestWithoutReferences
extends SCThingWithCategoriesWithoutReferences<SCPointOfInterestCategories, SCThingWithCategoriesSpecificValues>, extends SCThingWithCategoriesWithoutReferences<
SCPointOfInterestCategories,
SCThingWithCategoriesSpecificValues
>,
SCPlaceWithoutReferences { SCPlaceWithoutReferences {
/** /**
* Translated properties of a point of interest * Translated properties of a point of interest
@@ -48,7 +51,9 @@ export interface SCPointOfInterestWithoutReferences
* @indexable * @indexable
*/ */
export interface SCPointOfInterest export interface SCPointOfInterest
extends SCPointOfInterestWithoutReferences, SCThingInPlace, SCPlace, extends SCPointOfInterestWithoutReferences,
SCThingInPlace,
SCPlace,
SCThingWithCategories<SCPointOfInterestCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCPointOfInterestCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Translated properties of a point of interest * Translated properties of a point of interest
@@ -65,7 +70,7 @@ export interface SCPointOfInterest
* Categories of a point of interest * Categories of a point of interest
*/ */
export type SCPointOfInterestCategories = export type SCPointOfInterestCategories =
'computer' | 'computer'
| 'validator' | 'validator'
| 'card charger' | 'card charger'
| 'printer' | 'printer'
@@ -74,26 +79,26 @@ export type SCPointOfInterestCategories =
/** /**
* Meta information about points of interest * Meta information about points of interest
*/ */
export class SCPointOfInterestMeta export class SCPointOfInterestMeta extends SCThingMeta implements SCMetaTranslations<SCPointOfInterest> {
extends SCThingMeta
implements SCMetaTranslations<SCPointOfInterest> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPointOfInterestCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCPointOfInterestCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.de, SCThingWithCategoriesSpecificValues
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations >().fieldTranslations.de,
.de, ...new SCPlaceWithoutReferencesMeta().fieldTranslations.de,
...new SCThingInPlaceMeta().fieldTranslations.de,
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPointOfInterestCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCPointOfInterestCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.en, SCThingWithCategoriesSpecificValues
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations >().fieldTranslations.en,
.en, ...new SCPlaceWithoutReferencesMeta().fieldTranslations.en,
...new SCThingInPlaceMeta().fieldTranslations.en,
}, },
}; };
@@ -102,9 +107,11 @@ export class SCPointOfInterestMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPointOfInterestCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCPointOfInterestCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.de, SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.de,
categories: { categories: {
'card charger': 'Kartenaufwerter', 'card charger': 'Kartenaufwerter',
'computer': 'Computer', 'computer': 'Computer',
@@ -115,9 +122,11 @@ export class SCPointOfInterestMeta
type: 'Sonderziel', type: 'Sonderziel',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCPointOfInterestCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCPointOfInterestCategories,
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.en, SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.en,
type: SCThingType.PointOfInterest, type: SCThingType.PointOfInterest,
}, },
}; };

View File

@@ -0,0 +1,100 @@
/*
* Copyright (C) 2021-2022 Open 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 type SCPublicationEventTranslatableProperties = SCThingTranslatableProperties;
/**
* Meta information about publication events
*/
export class SCPublicationEventMeta extends SCThingMeta implements SCMetaTranslations<SCPublicationEvent> {
/**
* Translations of fields
*/
fieldTranslations = {
de: {
...new SCEventMeta().fieldTranslations.de,
locations: 'Erscheinungsorte',
publisher: 'Verlag',
},
en: {
...new SCEventMeta().fieldTranslations.en,
locations: 'places of publication',
publisher: 'publisher',
},
};
/**
* Translations of values of fields
*/
fieldValueTranslations = {
de: {
...new SCEventMeta().fieldValueTranslations.de,
type: 'Veröffentlichung',
},
en: {
...new SCEventMeta().fieldValueTranslations.en,
type: 'publication event',
},
};
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -35,7 +35,7 @@ import {
* Categories of a room * Categories of a room
*/ */
export type SCRoomCategories = export type SCRoomCategories =
'cafe' | 'cafe'
| 'canteen' | 'canteen'
| 'computer' | 'computer'
| 'education' | 'education'
@@ -53,7 +53,8 @@ export type SCRoomCategories =
* A room without references * A room without references
*/ */
export interface SCRoomWithoutReferences export interface SCRoomWithoutReferences
extends SCPlaceWithoutReferences, SCThingThatAcceptsPaymentsWithoutReferences, extends SCPlaceWithoutReferences,
SCThingThatAcceptsPaymentsWithoutReferences,
SCThingWithCategoriesWithoutReferences<SCRoomCategories, SCRoomSpecificValues> { SCThingWithCategoriesWithoutReferences<SCRoomCategories, SCRoomSpecificValues> {
/** /**
* The name of the floor in which the room is in. * The name of the floor in which the room is in.
@@ -88,7 +89,10 @@ export interface SCRoomWithoutReferences
* @indexable * @indexable
*/ */
export interface SCRoom export interface SCRoom
extends SCRoomWithoutReferences, SCThingInPlace, SCThingThatAcceptsPayments, SCPlace, extends SCRoomWithoutReferences,
SCThingInPlace,
SCThingThatAcceptsPayments,
SCPlace,
SCThingWithCategories<SCRoomCategories, SCRoomSpecificValues> { SCThingWithCategories<SCRoomCategories, SCRoomSpecificValues> {
/** /**
* Translations of specific values of the object * Translations of specific values of the object
@@ -106,8 +110,7 @@ export interface SCRoom
/** /**
* Category specific values of a room * Category specific values of a room
*/ */
export interface SCRoomSpecificValues export interface SCRoomSpecificValues extends SCThingWithCategoriesSpecificValues {
extends SCThingWithCategoriesSpecificValues {
/** /**
* Category specific opening hours of the room * Category specific opening hours of the room
* *
@@ -119,32 +122,26 @@ export interface SCRoomSpecificValues
/** /**
* Meta information about a place * Meta information about a place
*/ */
export class SCRoomMeta export class SCRoomMeta extends SCThingMeta implements SCMetaTranslations<SCRoom> {
extends SCThingMeta
implements SCMetaTranslations<SCRoom> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.de, ...new SCPlaceWithoutReferencesMeta().fieldTranslations.de,
...SCThingThatAcceptsPaymentsWithoutReferencesMeta.getInstance<SCThingThatAcceptsPaymentsWithoutReferencesMeta>() ...new SCThingThatAcceptsPaymentsWithoutReferencesMeta().fieldTranslations.de,
...new SCThingWithCategoriesWithoutReferencesMeta<SCRoomCategories, SCRoomSpecificValues>()
.fieldTranslations.de, .fieldTranslations.de,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCRoomCategories, ...new SCThingInPlaceMeta().fieldTranslations.de,
SCRoomSpecificValues>().fieldTranslations.de,
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations
.de,
floorName: 'Etagenbezeichnung', floorName: 'Etagenbezeichnung',
inventory: 'Bestand', inventory: 'Bestand',
}, },
en: { en: {
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldTranslations.en, ...new SCPlaceWithoutReferencesMeta().fieldTranslations.en,
...SCThingThatAcceptsPaymentsWithoutReferencesMeta.getInstance<SCThingThatAcceptsPaymentsWithoutReferencesMeta>() ...new SCThingThatAcceptsPaymentsWithoutReferencesMeta().fieldTranslations.en,
...new SCThingWithCategoriesWithoutReferencesMeta<SCRoomCategories, SCRoomSpecificValues>()
.fieldTranslations.en, .fieldTranslations.en,
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCRoomCategories, ...new SCThingInPlaceMeta().fieldTranslations.en,
SCRoomSpecificValues>().fieldTranslations.en,
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations
.en,
floorName: 'floor name', floorName: 'floor name',
inventory: 'inventory', inventory: 'inventory',
}, },
@@ -155,13 +152,11 @@ export class SCRoomMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.de, ...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.de,
...SCThingThatAcceptsPaymentsWithoutReferencesMeta.getInstance<SCThingThatAcceptsPaymentsWithoutReferencesMeta>() ...new SCThingThatAcceptsPaymentsWithoutReferencesMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingWithCategoriesWithoutReferencesMeta<SCRoomCategories, SCRoomSpecificValues>()
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCRoomCategories,
SCRoomSpecificValues>().fieldValueTranslations.de,
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>()
.fieldValueTranslations.de, .fieldValueTranslations.de,
...new SCThingInPlaceMeta().fieldValueTranslations.de,
categories: { categories: {
'cafe': 'Café', 'cafe': 'Café',
'canteen': 'Kantine', 'canteen': 'Kantine',
@@ -180,13 +175,11 @@ export class SCRoomMeta
type: 'Raum', type: 'Raum',
}, },
en: { en: {
...SCPlaceWithoutReferencesMeta.getInstance<SCPlaceWithoutReferencesMeta>().fieldValueTranslations.en, ...new SCPlaceWithoutReferencesMeta().fieldValueTranslations.en,
...SCThingThatAcceptsPaymentsWithoutReferencesMeta.getInstance<SCThingThatAcceptsPaymentsWithoutReferencesMeta>() ...new SCThingThatAcceptsPaymentsWithoutReferencesMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingWithCategoriesWithoutReferencesMeta<SCRoomCategories, SCRoomSpecificValues>()
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCRoomCategories,
SCRoomSpecificValues>().fieldValueTranslations.en,
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>()
.fieldValueTranslations.en, .fieldValueTranslations.en,
...new SCThingInPlaceMeta().fieldValueTranslations.en,
type: SCThingType.Room, type: SCThingType.Room,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -23,13 +23,12 @@ import {SCThingMeta, SCThingType} from './abstract/thing';
/** /**
* A semester without references * A semester without references
*/ */
export interface SCSemesterWithoutReferences export interface SCSemesterWithoutReferences extends SCAcademicTermWithoutReferences {
extends SCAcademicTermWithoutReferences {
/** /**
* The short name of the semester, using the given pattern. * The short name of the semester, using the given pattern.
* *
* @filterable * @filterable
* @pattern ^(WS|SS) [0-9]{4}(/[0-9]{2})?$ * @pattern ^(WS|SS|WiSe|SoSe) [0-9]{4}(/[0-9]{2})?$
* @keyword * @keyword
*/ */
acronym: string; acronym: string;
@@ -46,8 +45,7 @@ export interface SCSemesterWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCSemester export interface SCSemester extends SCSemesterWithoutReferences, SCAcademicTerm {
extends SCSemesterWithoutReferences, SCAcademicTerm {
/** /**
* Type of the semester * Type of the semester
*/ */
@@ -57,15 +55,13 @@ export interface SCSemester
/** /**
* Meta information about a semester * Meta information about a semester
*/ */
export class SCSemesterMeta export class SCSemesterMeta extends SCThingMeta implements SCMetaTranslations<SCSemester> {
extends SCThingMeta
implements SCMetaTranslations<SCSemester> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCAcademicTermWithoutReferencesMeta.getInstance<SCAcademicTermWithoutReferencesMeta>().fieldTranslations.de, ...new SCAcademicTermWithoutReferencesMeta().fieldTranslations.de,
acronym: 'Abkürzung', acronym: 'Abkürzung',
endDate: 'Ende', endDate: 'Ende',
eventsEndDate: 'Vorlesungsschluss', eventsEndDate: 'Vorlesungsschluss',
@@ -73,7 +69,7 @@ export class SCSemesterMeta
startDate: 'Beginn', startDate: 'Beginn',
}, },
en: { en: {
...SCAcademicTermWithoutReferencesMeta.getInstance<SCAcademicTermWithoutReferencesMeta>().fieldTranslations.en, ...new SCAcademicTermWithoutReferencesMeta().fieldTranslations.en,
acronym: 'acronym', acronym: 'acronym',
endDate: 'end date', endDate: 'end date',
eventsEndDate: 'semester ending', eventsEndDate: 'semester ending',
@@ -87,13 +83,11 @@ export class SCSemesterMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCAcademicTermWithoutReferencesMeta.getInstance<SCAcademicTermWithoutReferencesMeta>() ...new SCAcademicTermWithoutReferencesMeta().fieldValueTranslations.de,
.fieldValueTranslations.de,
type: 'Semester', type: 'Semester',
}, },
en: { en: {
...SCAcademicTermWithoutReferencesMeta.getInstance<SCAcademicTermWithoutReferencesMeta>() ...new SCAcademicTermWithoutReferencesMeta().fieldValueTranslations.en,
.fieldValueTranslations.en,
type: SCThingType.Semester, type: SCThingType.Semester,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,16 +21,13 @@ 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
*/ */
export interface SCSettingWithoutReferences export interface SCSettingWithoutReferences
extends SCThingWithCategoriesWithoutReferences<SCSettingCategories, SCThingWithCategoriesSpecificValues> { extends SCThingWithCategoriesWithoutReferences<SCSettingCategories, SCThingWithCategoriesSpecificValues> {
/**
* Categories of a setting
*/
categories: SCSettingCategories[];
/** /**
* The default value of a setting * The default value of a setting
*/ */
@@ -66,11 +63,7 @@ export interface SCSettingWithoutReferences
/** /**
* A list of categories for settings * A list of categories for settings
*/ */
export type SCSettingCategories = export type SCSettingCategories = 'profile' | 'privacy' | 'credentials' | 'others';
'profile'
| 'privacy'
| 'credentials'
| 'others';
/** /**
* The types of input/value a setting object can carry * The types of input/value a setting object can carry
@@ -87,10 +80,10 @@ 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,
SCThingWithCategories<SCSettingCategories, SCThingWithCategoriesSpecificValues> { SCThingWithCategories<SCSettingCategories, SCThingWithCategoriesSpecificValues> {
/** /**
* Translated fields of a setting * Translated fields of a setting
@@ -133,8 +126,10 @@ export class SCSettingMeta extends SCThingMeta implements SCMetaTranslations<SCS
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCSettingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, SCSettingCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.de,
defaultValue: 'Standard Wert', defaultValue: 'Standard Wert',
inputType: 'Eingabetyp', inputType: 'Eingabetyp',
order: 'Position', order: 'Position',
@@ -142,8 +137,10 @@ export class SCSettingMeta extends SCThingMeta implements SCMetaTranslations<SCS
values: 'Werte', values: 'Werte',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCSettingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, SCSettingCategories,
SCThingWithCategoriesSpecificValues
>().fieldTranslations.en,
defaultValue: 'default value', defaultValue: 'default value',
inputType: 'input type', inputType: 'input type',
order: 'position', order: 'position',
@@ -157,8 +154,10 @@ export class SCSettingMeta extends SCThingMeta implements SCMetaTranslations<SCS
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCSettingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, SCSettingCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.de,
categories: { categories: {
credentials: 'Anmeldedaten', credentials: 'Anmeldedaten',
others: 'Andere', others: 'Andere',
@@ -167,17 +166,71 @@ export class SCSettingMeta extends SCThingMeta implements SCMetaTranslations<SCS
}, },
inputType: { inputType: {
'multiple choice': 'mehrfach Auswahl', 'multiple choice': 'mehrfach Auswahl',
number: 'Zahl', 'number': 'Zahl',
password: 'Passwort', 'password': 'Passwort',
'single choice': 'einfache Auswahl', 'single choice': 'einfache Auswahl',
text: 'Text', 'text': 'Text',
}, },
type: 'Einstellung', type: 'Einstellung',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<SCSettingCategories, ...new SCThingWithCategoriesWithoutReferencesMeta<
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, SCSettingCategories,
SCThingWithCategoriesSpecificValues
>().fieldValueTranslations.en,
type: SCThingType.Setting, type: SCThingType.Setting,
}, },
}; };
} }
/**
* 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[];
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -19,8 +19,7 @@ import {SCThingMeta, SCThingType} from './abstract/thing';
/** /**
* A sport course without references * A sport course without references
*/ */
export interface SCSportCourseWithoutReferences export interface SCSportCourseWithoutReferences extends SCEventWithoutReferences {
extends SCEventWithoutReferences {
/** /**
* Type of a sport course * Type of a sport course
*/ */
@@ -33,8 +32,7 @@ export interface SCSportCourseWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCSportCourse export interface SCSportCourse extends SCEvent, SCSportCourseWithoutReferences {
extends SCEvent, SCSportCourseWithoutReferences {
/** /**
* Type of a sport course * Type of a sport course
*/ */
@@ -44,18 +42,16 @@ export interface SCSportCourse
/** /**
* Meta information about a sport course * Meta information about a sport course
*/ */
export class SCSportCourseMeta export class SCSportCourseMeta extends SCThingMeta implements SCMetaTranslations<SCSportCourse> {
extends SCThingMeta
implements SCMetaTranslations<SCSportCourse> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.de, ...new SCEventMeta().fieldTranslations.de,
}, },
en: { en: {
...SCEventMeta.getInstance<SCEventMeta>().fieldTranslations.en, ...new SCEventMeta().fieldTranslations.en,
}, },
}; };
@@ -64,11 +60,11 @@ export class SCSportCourseMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.de, ...new SCEventMeta().fieldValueTranslations.de,
type: 'Sportkurs', type: 'Sportkurs',
}, },
en: { en: {
...SCEventMeta.getInstance<SCEventMeta>().fieldValueTranslations.en, ...new SCEventMeta().fieldValueTranslations.en,
type: SCThingType.SportCourse, type: SCThingType.SportCourse,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -29,9 +29,7 @@ import {SCPersonWithoutReferences} from './person';
/** /**
* A study module without references * A study module without references
*/ */
export interface SCStudyModuleWithoutReferences export interface SCStudyModuleWithoutReferences extends SCThingThatCanBeOfferedWithoutReferences {
extends SCThingThatCanBeOfferedWithoutReferences {
/** /**
* ECTS points (European Credit Transfer System) * ECTS points (European Credit Transfer System)
* *
@@ -75,7 +73,8 @@ export interface SCStudyModuleWithoutReferences
* @indexable * @indexable
*/ */
export interface SCStudyModule export interface SCStudyModule
extends SCStudyModuleWithoutReferences, SCThingThatCanBeOffered<SCAcademicPriceGroup> { extends SCStudyModuleWithoutReferences,
SCThingThatCanBeOffered<SCAcademicPriceGroup> {
/** /**
* Academic events that make up a study module * Academic events that make up a study module
*/ */
@@ -113,8 +112,7 @@ export interface SCStudyModule
type: SCThingType.StudyModule; type: SCThingType.StudyModule;
} }
export interface SCStudyModuleTranslatableProperties export interface SCStudyModuleTranslatableProperties extends SCThingThatCanBeOfferedTranslatableProperties {
extends SCThingThatCanBeOfferedTranslatableProperties {
/** /**
* Translations of the majors that this study module is meant for * Translations of the majors that this study module is meant for
* *
@@ -142,17 +140,14 @@ export enum SCStudyModuleNecessity {
/** /**
* Study module meta data * Study module meta data
*/ */
export class SCStudyModuleMeta export class SCStudyModuleMeta extends SCThingMeta implements SCMetaTranslations<SCStudyModule> {
extends SCThingMeta
implements SCMetaTranslations<SCStudyModule> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
.fieldTranslations.de,
academicEvents: 'Veranstaltungen', academicEvents: 'Veranstaltungen',
ects: 'ECTS-Punkte', ects: 'ECTS-Punkte',
faculty: 'Fachbereich', faculty: 'Fachbereich',
@@ -164,9 +159,8 @@ export class SCStudyModuleMeta
secretary: 'Sekretariat', secretary: 'Sekretariat',
}, },
en: { en: {
...SCThingMeta.getInstance().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
.fieldTranslations.en,
academicEvents: 'academic events', academicEvents: 'academic events',
ects: 'ECTS points', ects: 'ECTS points',
faculty: 'faculty', faculty: 'faculty',
@@ -184,20 +178,18 @@ export class SCStudyModuleMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
.fieldValueTranslations.de,
necessity: { necessity: {
'elective': 'Wahlfach', elective: 'Wahlfach',
'optional': 'optional', optional: 'optional',
'required': 'benötigt', required: 'benötigt',
}, },
type: 'Studiengangmodul', type: 'Studiengangmodul',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
...SCThingThatCanBeOfferedMeta.getInstance<SCAcademicPriceGroup>() ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
.fieldValueTranslations.en,
type: SCThingType.StudyModule, type: SCThingType.StudyModule,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,8 +20,7 @@ import {SCThingInPlace, SCThingInPlaceMeta} from './abstract/thing-in-place';
/** /**
* A ticket without references * A ticket without references
*/ */
export interface SCTicketWithoutReferences export interface SCTicketWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Approximate wait time * Approximate wait time
*/ */
@@ -51,8 +50,7 @@ export interface SCTicketWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCTicket export interface SCTicket extends SCTicketWithoutReferences, SCThingInPlace {
extends SCTicketWithoutReferences, SCThingInPlace {
/** /**
* Type of a ticket * Type of a ticket
*/ */
@@ -62,23 +60,19 @@ export interface SCTicket
/** /**
* Meta information about a ticket * Meta information about a ticket
*/ */
export class SCTicketMeta export class SCTicketMeta extends SCThingMeta implements SCMetaTranslations<SCTicket> {
extends SCThingMeta
implements SCMetaTranslations<SCTicket> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.de,
.de,
approxWaitingTime: 'ungefähre Wartezeit', approxWaitingTime: 'ungefähre Wartezeit',
currentTicketNumber: 'aktuelle Ticketnummer', currentTicketNumber: 'aktuelle Ticketnummer',
serviceType: 'Service Kategorie', serviceType: 'Service Kategorie',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>().fieldTranslations ...new SCThingInPlaceMeta().fieldTranslations.en,
.en,
approxWaitingTime: 'approximate waiting time', approxWaitingTime: 'approximate waiting time',
currentTicketNumber: 'current ticket number', currentTicketNumber: 'current ticket number',
serviceType: 'type of service', serviceType: 'type of service',
@@ -90,13 +84,11 @@ export class SCTicketMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.de,
.fieldValueTranslations.de,
type: 'Ticket', type: 'Ticket',
}, },
en: { en: {
...SCThingInPlaceMeta.getInstance<SCThingInPlaceMeta>() ...new SCThingInPlaceMeta().fieldValueTranslations.en,
.fieldValueTranslations.en,
type: SCThingType.Ticket, type: SCThingType.Ticket,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -58,7 +58,9 @@ export interface SCToDoWithoutReferences
* @indexable * @indexable
*/ */
export interface SCToDo export interface SCToDo
extends SCToDoWithoutReferences, SCThing, SCThingWithCategories<string, SCThingWithCategoriesSpecificValues> { extends SCToDoWithoutReferences,
SCThing,
SCThingWithCategories<string, SCThingWithCategoriesSpecificValues> {
/** /**
* Translated fields of a thing with categories * Translated fields of a thing with categories
*/ */
@@ -88,15 +90,15 @@ export class SCToDoMeta extends SCThingMeta implements SCMetaTranslations<SCToDo
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<string, ...new SCThingWithCategoriesWithoutReferencesMeta<string, SCThingWithCategoriesSpecificValues>()
SCThingWithCategoriesSpecificValues>().fieldTranslations.de, .fieldTranslations.de,
done: 'Erledigt', done: 'Erledigt',
dueDate: 'Fälligkeitsdatum', dueDate: 'Fälligkeitsdatum',
priority: 'Priorität', priority: 'Priorität',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<string, ...new SCThingWithCategoriesWithoutReferencesMeta<string, SCThingWithCategoriesSpecificValues>()
SCThingWithCategoriesSpecificValues>().fieldTranslations.en, .fieldTranslations.en,
done: 'done', done: 'done',
dueDate: 'due date', dueDate: 'due date',
priority: 'priority', priority: 'priority',
@@ -108,13 +110,13 @@ export class SCToDoMeta extends SCThingMeta implements SCMetaTranslations<SCToDo
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<string, ...new SCThingWithCategoriesWithoutReferencesMeta<string, SCThingWithCategoriesSpecificValues>()
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.de, .fieldValueTranslations.de,
type: 'ToDo', type: 'ToDo',
}, },
en: { en: {
...SCThingWithCategoriesWithoutReferencesMeta.getInstance<string, ...new SCThingWithCategoriesWithoutReferencesMeta<string, SCThingWithCategoriesSpecificValues>()
SCThingWithCategoriesSpecificValues>().fieldValueTranslations.en, .fieldValueTranslations.en,
type: SCThingType.ToDo, type: SCThingType.ToDo,
}, },
}; };

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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.
@@ -18,8 +18,7 @@ import {SCThing, SCThingMeta, SCThingType, SCThingWithoutReferences} from './abs
/** /**
* A tour without references * A tour without references
*/ */
export interface SCTourWithoutReferences export interface SCTourWithoutReferences extends SCThingWithoutReferences {
extends SCThingWithoutReferences {
/** /**
* Init script for the tour * Init script for the tour
* *
@@ -29,8 +28,6 @@ export interface SCTourWithoutReferences
/** /**
* Steps of a tour * Steps of a tour
*
* @keyword
*/ */
steps: SCTourStep[]; steps: SCTourStep[];
@@ -48,8 +45,7 @@ export interface SCTourWithoutReferences
* @validatable * @validatable
* @indexable * @indexable
*/ */
export interface SCTour export interface SCTour extends SCTourWithoutReferences, SCThing {
extends SCTourWithoutReferences, SCThing {
/** /**
* Type of a tour * Type of a tour
*/ */
@@ -59,20 +55,18 @@ export interface SCTour
/** /**
* Meta information about a tour * Meta information about a tour
*/ */
export class SCTourMeta export class SCTourMeta extends SCThingMeta implements SCMetaTranslations<SCTour> {
extends SCThingMeta
implements SCMetaTranslations<SCTour> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.de, ...new SCThingMeta().fieldTranslations.de,
init: 'Initiales Skript', init: 'Initiales Skript',
steps: 'Schritte', steps: 'Schritte',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldTranslations.en, ...new SCThingMeta().fieldTranslations.en,
init: 'initial script', init: 'initial script',
steps: 'steps', steps: 'steps',
}, },
@@ -83,11 +77,11 @@ export class SCTourMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.de, ...new SCThingMeta().fieldValueTranslations.de,
type: 'Tour', type: 'Tour',
}, },
en: { en: {
...SCThingMeta.getInstance<SCThingMeta>().fieldValueTranslations.en, ...new SCThingMeta().fieldValueTranslations.en,
type: SCThingType.Tour, type: SCThingType.Tour,
}, },
}; };
@@ -96,10 +90,7 @@ export class SCTourMeta
/** /**
* A step in a tour * A step in a tour
*/ */
export type SCTourStep = export type SCTourStep = SCTourStepMenu | SCTourStepLocation | SCTourStepTooltip;
SCTourStepMenu
| SCTourStepLocation
| SCTourStepTooltip;
/** /**
* A location of a tour step * A location of a tour step

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,17 +12,30 @@
* 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} from '../general/i18n'; import {SCLanguage, SCMetaTranslations, SCTranslations} from '../general/i18n';
import {SCISO8601Duration} from '../general/time'; import {SCISO8601Duration} from '../general/time';
import {SCCreativeWork, SCCreativeWorkMeta, SCCreativeWorkWithoutReferences} from './abstract/creative-work'; import {
SCCreativeWork,
SCCreativeWorkMeta,
SCCreativeWorkTranslatableProperties,
SCCreativeWorkWithoutReferences,
} from './abstract/creative-work';
import {SCThingMeta, SCThingType} from './abstract/thing'; import {SCThingMeta, SCThingType} from './abstract/thing';
import {
SCAcademicPriceGroup,
SCThingThatCanBeOffered,
SCThingThatCanBeOfferedMeta,
SCThingThatCanBeOfferedTranslatableProperties,
SCThingThatCanBeOfferedWithoutReferences,
} from './abstract/thing-that-can-be-offered';
import {SCPersonWithoutReferences} from './person'; import {SCPersonWithoutReferences} from './person';
/** /**
* A video without references * A video without references
*/ */
export interface SCVideoWithoutReferences export interface SCVideoWithoutReferences
extends SCCreativeWorkWithoutReferences { extends SCCreativeWorkWithoutReferences,
SCThingThatCanBeOfferedWithoutReferences {
/** /**
* The Duration of the Video * The Duration of the Video
*/ */
@@ -52,6 +65,11 @@ export interface SCVideoWithoutReferences
*/ */
transcript?: string; transcript?: string;
/**
* Translated fields of a video
*/
translations?: SCTranslations<SCVideoTranslatableFields>;
/** /**
* Type of an Video * Type of an Video
*/ */
@@ -123,31 +141,43 @@ export interface SCVideoTrack {
* @indexable * @indexable
*/ */
export interface SCVideo export interface SCVideo
extends SCCreativeWork, SCVideoWithoutReferences { extends SCCreativeWork,
SCThingThatCanBeOffered<SCAcademicPriceGroup>,
SCVideoWithoutReferences {
/** /**
* Persons acting in the Video * Persons acting in the Video
*/ */
actors?: SCPersonWithoutReferences[]; actors?: SCPersonWithoutReferences[];
/**
* Translated fields of a video
*/
translations?: SCTranslations<SCVideoTranslatableFields>;
/** /**
* Type of a video * Type of a video
*/ */
type: SCThingType.Video; type: SCThingType.Video;
} }
/**
* Translatable properties of a video
*/
export interface SCVideoTranslatableFields
extends SCCreativeWorkTranslatableProperties,
SCThingThatCanBeOfferedTranslatableProperties {}
/** /**
* Meta information about a video * Meta information about a video
*/ */
export class SCVideoMeta export class SCVideoMeta extends SCThingMeta implements SCMetaTranslations<SCVideo> {
extends SCThingMeta
implements SCMetaTranslations<SCVideo> {
/** /**
* Translations of fields * Translations of fields
*/ */
fieldTranslations = { fieldTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.de,
.de, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.de,
actors: 'Darsteller', actors: 'Darsteller',
duration: 'Dauer', duration: 'Dauer',
sources: 'Quellen', sources: 'Quellen',
@@ -156,8 +186,8 @@ export class SCVideoMeta
transcript: 'Transkript', transcript: 'Transkript',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>().fieldTranslations ...new SCCreativeWorkMeta().fieldTranslations.en,
.en, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldTranslations.en,
actors: 'actors', actors: 'actors',
duration: 'duration', duration: 'duration',
sources: 'sources', sources: 'sources',
@@ -172,13 +202,13 @@ export class SCVideoMeta
*/ */
fieldValueTranslations = { fieldValueTranslations = {
de: { de: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.de,
.fieldValueTranslations.de, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.de,
type: 'Video', type: 'Video',
}, },
en: { en: {
...SCCreativeWorkMeta.getInstance<SCCreativeWorkMeta>() ...new SCCreativeWorkMeta().fieldValueTranslations.en,
.fieldValueTranslations.en, ...new SCThingThatCanBeOfferedMeta<SCAcademicPriceGroup>().fieldValueTranslations.en,
type: SCThingType.Video, type: SCThingType.Video,
}, },
}; };
@@ -188,7 +218,7 @@ export class SCVideoMeta
* Video Encoding Formats * Video Encoding Formats
*/ */
export type SCVideoMimeType = export type SCVideoMimeType =
'video/mp4' | 'video/mp4'
| 'video/ogg' | 'video/ogg'
| 'video/webm' | 'video/webm'
| 'application/vnd.apple.mpegurl' | 'application/vnd.apple.mpegurl'
@@ -197,9 +227,4 @@ export type SCVideoMimeType =
/** /**
* Video Track Types * Video Track Types
*/ */
export type SCVideoTrackTypes = export type SCVideoTrackTypes = 'closed captions' | 'chapters' | 'description' | 'metadata' | 'subtitles';
'closed captions'
| 'chapters'
| 'description'
| 'metadata'
| 'subtitles';

View File

@@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* /*
* Copyright (C) 2019 StApps * Copyright (C) 2019-2022 Open 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,28 +13,47 @@
* 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 clone = require('fast-clone'); import equal = require('fast-deep-equal/es6');
import {Defined, OCType} from 'ts-optchain'; import clone = require('rfdc');
import {SCTranslations} from './general/i18n'; import {Defined, TSOCType} from 'ts-optchain';
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';
// tslint:disable:no-any // eslint disable @typescript-eslint/no-explicit-any
const standardCacheSize = 200; const standardCacheSize = 200;
/** /**
* SCThingTranslator class * SCThingTranslator class
*/ */
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,51 +62,44 @@ 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;
}
/** // Initalize all meta classes once
* Getter for language property if (typeof (this.metaClasses as any)[Object.keys(this.metaClasses)[0]] === 'function') {
*/ for (const metaClass of Object.keys(this.metaClasses)) {
get language(): keyof SCTranslations<SCThing> { (this.metaClasses as any)[metaClass] = new (SCClasses as any)[metaClass]();
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
* *
* @param data The intermediate object / primitive returned by the Proxys get() method * @param data The intermediate object / primitive returned by the Proxys get() method
* @returns an OCType<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)
*/ */
// tslint:disable-next-line:prefer-function-over-method private deeptranslate<T>(data?: T): TSOCType<T> {
private deeptranslate<T>(data?: T): OCType<T> {
const proxy = new Proxy( const proxy = new Proxy(
((defaultValue?: Defined<T>) => (data == null ? defaultValue : data)) as OCType<T>, ((defaultValue?: Defined<T>) => (data == undefined ? defaultValue : data)) as TSOCType<T>,
{ {
get: (target, key) => { get: (target, key) => {
const obj: any = target(); const object: any = target();
return this.deeptranslate(obj[key]); return this.deeptranslate(object[key]);
}, },
}, },
); );
@@ -101,8 +114,7 @@ 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: SCLanguageCode): object | undefined {
language: keyof SCTranslations<T>): object | undefined {
const fieldTranslations = {}; const fieldTranslations = {};
const metaClass = this.getMetaClassInstance(thingType); const metaClass = this.getMetaClassInstance(thingType);
if (typeof metaClass === 'undefined') { if (typeof metaClass === 'undefined') {
@@ -111,18 +123,16 @@ export class SCThingTranslator {
// Assigns every property in fieldTranslations to the known base language translation // Assigns every property in fieldTranslations to the known base language translation
if (typeof metaClass.fieldTranslations.en !== 'undefined') { if (typeof metaClass.fieldTranslations.en !== 'undefined') {
Object.keys(metaClass.fieldTranslations.en) for (const key of Object.keys(metaClass.fieldTranslations.en)) {
.forEach((key) => { (fieldTranslations as any)[key] = metaClass.fieldTranslations.en[key];
(fieldTranslations as any)[key] = metaClass.fieldTranslations.en[key]; }
});
} }
// Assigns every property in fieldTranslations to the known translation in given language // Assigns every property in fieldTranslations to the known translation in given language
if (typeof metaClass.fieldTranslations[language] !== 'undefined') { if (typeof metaClass.fieldTranslations[language] !== 'undefined') {
Object.keys(metaClass.fieldTranslations[language]) for (const key of Object.keys(metaClass.fieldTranslations[language])) {
.forEach((key) => { (fieldTranslations as any)[key] = metaClass.fieldTranslations[language][key];
(fieldTranslations as any)[key] = metaClass.fieldTranslations[language][key]; }
});
} }
return fieldTranslations; return fieldTranslations;
@@ -136,7 +146,7 @@ export class SCThingTranslator {
*/ */
private getMetaClassInstance(thingType: SCThingType): any { private getMetaClassInstance(thingType: SCThingType): any {
if (thingType in this.metaClasses) { if (thingType in this.metaClasses) {
return new (this.metaClasses as any)[thingType](); return this.metaClasses[thingType];
} }
return undefined; return undefined;
@@ -150,64 +160,123 @@ export class SCThingTranslator {
* @param language The language the thing / object is translated to * @param language The language the thing / object is translated to
* @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: SCLanguageCode): any {
language: keyof SCTranslations<any>): 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;
} }
if (typeof metaClass.fieldValueTranslations[language] !== 'undefined') { if (typeof metaClass.fieldValueTranslations[language] !== 'undefined') {
Object.keys(metaClass.fieldValueTranslations[language]) for (const key of Object.keys(metaClass.fieldValueTranslations[language])) {
.forEach((key) => { if (
if (metaClass.fieldValueTranslations[language][key] instanceof Object metaClass.fieldValueTranslations[language][key] instanceof Object &&
&& (instance as any)[key] instanceof Object) { (instance as any)[key] instanceof Object
// Assigns known translations of subproperties to property in given language (e.g. categories) ) {
Object.keys((instance as any)[key]) // Assigns known translations of subproperties to property in given language (e.g. categories)
.forEach((subKey) => { for (const subKey of Object.keys((instance as any)[key])) {
(instance as any)[key][subKey] = (instance as any)[key][subKey] =
metaClass.fieldValueTranslations[language][key][(instance as any)[key][subKey]]; metaClass.fieldValueTranslations[language][key][(instance as any)[key][subKey]];
});
} else if (metaClass.fieldValueTranslations[language][key] instanceof Object
&& typeof (instance as any)[key] === 'string') {
// Assigns known translations of enum to property in given language (e.g. SCSettingInputType)
(instance as any)[key] = metaClass.fieldValueTranslations[language][key][(instance as any)[key]];
} else {
// Assigns property to known translation of fieldValueTranslations in given language
(instance as any)[key] = metaClass.fieldValueTranslations[language][key];
} }
}); } else if (
metaClass.fieldValueTranslations[language][key] instanceof Object &&
typeof (instance as any)[key] === 'string'
) {
// Assigns known translations of enum to property in given language (e.g. SCSettingInputType)
(instance as any)[key] = metaClass.fieldValueTranslations[language][key][(instance as any)[key]];
} else {
// Assigns property to known translation of fieldValueTranslations in given language
(instance as any)[key] = metaClass.fieldValueTranslations[language][key];
}
}
} }
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
for (const key of Object.keys(nextInstance)) {
if (
isThing(nextInstance[key]) ||
Array.isArray(nextInstance[key]) ||
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 thing 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
* const dish: SCDish = {...}; * const dish: SCDish = {...};
* translator.translate(dish).offers[0].inPlace.categories[1]()); * translator.translate(dish).offers[0].inPlace.categories[1]());
* // or * // or
* const dishTranslatedAccess = translator.translate(dish); * const dishTranslatedAccess = translator.translate(dish);
* dishTranslatedAccess.offers[0].inPlace.categories[1](); * dishTranslatedAccess.offers[0].inPlace.categories[1]();
* // undoing the OCType<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 OCType<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): OCType<T> { public translatedAccess<T extends SCThing>(thing: T): TSOCType<T> {
return new Proxy( return new Proxy(
((defaultValue?: Defined<T>) => (data == null ? defaultValue : data)) as OCType<T>, ((defaultValue?: Defined<T>) => (thing == undefined ? defaultValue : thing)) as TSOCType<T>,
{ {
get: (target, key) => { get: (target, key) => {
const obj: any = target(); const object: any = target();
const objTranslatedFromCache = this.cache.get(data); if (equal(this.sourceCache.get(thing), thing)) {
if (typeof objTranslatedFromCache !== 'undefined') { const objectTranslatedFromCache = this.cache.get(thing);
return this.deeptranslate((objTranslatedFromCache as any)[key]); if (typeof objectTranslatedFromCache !== 'undefined') {
return this.deeptranslate((objectTranslatedFromCache as any)[key]);
}
} }
const objTranslated = this.translateWholeThingDestructively(clone(obj)); const objectTranslated = this.translateThingInPlaceDestructively(clone()(object));
this.cache.putObject(objTranslated); this.cache.putObject(objectTranslated);
this.sourceCache.putObject(thing);
return this.deeptranslate(objTranslated[key]); return this.deeptranslate(objectTranslated[key]);
}, },
}, },
); );
@@ -216,54 +285,35 @@ 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 thing The thing 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>(thing: T, public translatedPropertyNames<T extends SCThing>(type: SCThingType): T | undefined {
language?: keyof SCTranslations<T>): T | undefined { return this.getAllMetaFieldTranslations(type, this.language) as T;
const targetLanguage = (typeof language !== 'undefined') ? language : this.language;
return this.getAllMetaFieldTranslations(thing.type, targetLanguage) as T;
} }
/** /**
* Recursively translates the given object in-place * Given a SCThingType and a corresponding property name it returns the known property value translation
* Translated values overwrite current values (destructive) * Access pattern to the meta object containing the translation can be thought of as type.field[key] with key being optional
* *
* @param instance The thing / object that will be translated * @example
* @param language The language the thing / object is translated to * const singleValueTranslation = translator.translatedPropertyValue(SCThingType.Dish, 'categories', 'main dish');
* @returns The thing translated * @param type The type for whose property values 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
* @returns Known translation for the property
*/ */
public translateWholeThingDestructively(instance: any, public translatedPropertyValue(type: SCThingType, field: string, key?: string): string | undefined {
language?: keyof SCTranslations<any>): any { const fieldValueTranslations =
const targetLanguage = (typeof language !== 'undefined') ? language : this.language; this.getMetaClassInstance(type).fieldValueTranslations[this.language] ??
let nextInstance = instance; this.getMetaClassInstance(type).fieldValueTranslations.en;
// Recursively call this function on all nested SCThings, arrays and objects const fieldTranslation = fieldValueTranslations?.[field];
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 return fieldTranslation?.[key ?? ''] ?? key ?? fieldTranslation;
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;
} }
} }
/** /**
@@ -342,8 +392,7 @@ class LRUCache<T> {
public put(key: string, content: T) { public put(key: string, content: T) {
if (this.entries.size >= this.maxEntries) { if (this.entries.size >= this.maxEntries) {
// LRU behavior // LRU behavior
const keyToDelete = this.entries.keys() const keyToDelete = this.entries.keys().next().value;
.next().value;
this.entries.delete(keyToDelete); this.entries.delete(keyToDelete);
} }
this.entries.set(key, content); this.entries.set(key, content);
@@ -355,6 +404,6 @@ class LRUCache<T> {
* @param something The object that should be cached under something.uid * @param something The object that should be cached under something.uid
*/ */
public putObject<U extends SCThing>(something: U) { public putObject<U extends SCThing>(something: U) {
this.put(something.uid, (something as any) as T); this.put(something.uid, something as any as T);
} }
} }

44
test/compat.spec.ts Normal file
View 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>);
});
});

139
test/features.spec.ts Normal file
View File

@@ -0,0 +1,139 @@
/*
* 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',
});
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;
}
});
});

View File

@@ -13,7 +13,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {expect} from 'chai'; import {expect} from 'chai';
import {slow, suite, test, timeout} from 'mocha-typescript'; import {slow, suite, test, timeout} from '@testdeck/mocha';
import {SCBulkResponse} from '../src/protocol/routes/bulk-request'; import {SCBulkResponse} from '../src/protocol/routes/bulk-request';
import {SCMultiSearchResponse} from '../src/protocol/routes/search-multi'; import {SCMultiSearchResponse} from '../src/protocol/routes/search-multi';
import {SCSearchResponse} from '../src/protocol/routes/search'; import {SCSearchResponse} from '../src/protocol/routes/search';
@@ -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);

Some files were not shown because too many files have changed in this diff Show More