Compare commits

...

18 Commits

Author SHA1 Message Date
Karl-Philipp Wulfert
8dc40dbb00 0.14.0 2019-04-03 16:23:53 +02:00
Wieland Schöbl
c4e30c5fdd docs: add blank line before @param 2019-04-03 15:49:34 +02:00
Wieland Schöbl
81887315f8 feat: add model for plugin register route 2019-04-03 15:17:01 +02:00
Karl-Philipp Wulfert
55687daca9 docs: update changelog 2019-04-02 17:14:45 +02:00
Karl-Philipp Wulfert
2bf65a9086 0.13.0 2019-04-02 17:14:41 +02:00
Karl-Philipp Wulfert
d9347ece05 build: remove extraneous dependency 2019-04-02 16:52:32 +02:00
Karl-Philipp Wulfert
acdca2f554 test: add test for isThing guard 2019-04-02 16:24:40 +02:00
Karl-Philipp Wulfert
67868e9eb8 fix: correct isThing guard 2019-04-02 16:24:27 +02:00
Karl-Philipp Wulfert
bc00f62117 test: appropriately rename schema spec 2019-04-02 16:24:03 +02:00
Karl-Philipp Wulfert
75e833d841 refactor: adjust type to new requirements 2019-04-02 15:47:20 +02:00
Karl-Philipp Wulfert
a97805172c ci: allow audit stage to fail 2019-04-02 15:38:59 +02:00
Karl-Philipp Wulfert
c8bda2eae7 feat: add conditional "maps" for associated types
Fixes #50
2019-04-02 15:37:10 +02:00
Karl-Philipp Wulfert
1e9f36c4be refactor: apply structure to favorites and saveable things 2019-04-02 15:36:14 +02:00
Karl-Philipp Wulfert
6da9d73477 build: update dependencies 2019-04-02 15:34:38 +02:00
Rainer Killinger
bbe4fcac42 fix: update tslint dependencies 2019-04-01 14:10:14 +02:00
Jovan Krunić
5d1e79d487 feat: provide sample JSON files with the package
Closes #46
2019-03-21 17:34:28 +01:00
Jovan Krunić
7532a9bb62 test: use different UIDs for different things 2019-03-21 16:15:10 +01:00
Jovan Krunić
a4db76ec36 docs: update changelog 2019-03-14 10:16:50 +01:00
59 changed files with 2474 additions and 341 deletions

View File

@@ -28,6 +28,16 @@ audit:
stage: test
script:
- npm audit
allow_failure: true
except:
- schedules
scheduled-audit:
stage: test
script:
- npm audit
only:
- schedules
test:
dependencies:

View File

@@ -10,3 +10,5 @@
!package-lock.json
!README.md
!src
test/*
!test/resources/

View File

@@ -1,3 +1,33 @@
# [0.13.0](https://gitlab.com/openstapps/core/compare/v0.12.0...v0.13.0) (2019-04-02)
### Bug Fixes
* correct isThing guard ([67868e9](https://gitlab.com/openstapps/core/commit/67868e9))
* update tslint dependencies ([bbe4fca](https://gitlab.com/openstapps/core/commit/bbe4fca))
### Features
* add conditional "maps" for associated types ([c8bda2e](https://gitlab.com/openstapps/core/commit/c8bda2e)), 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)
# [0.12.0](https://gitlab.com/openstapps/core/compare/v0.11.0...v0.12.0) (2019-03-14)
### 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)
### Features
* add SCThingTranslator class. move functionality accordingly ([90e3d22](https://gitlab.com/openstapps/core/commit/90e3d22))
# [0.11.0](https://gitlab.com/openstapps/core/compare/v0.10.0...v0.11.0) (2019-02-21)

2098
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@openstapps/core",
"version": "0.12.0",
"version": "0.14.0",
"description": "StAppsCore - Generalized model of data",
"keywords": [
"Model",
@@ -25,7 +25,7 @@
"test": "nyc mocha --require ts-node/register --ui mocha-typescript test/*.spec.ts",
"tslint": "tslint 'src/**/*.ts'"
},
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com",
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Jovan Krunic <jovan.krunic@gmail.com>",
@@ -39,29 +39,27 @@
"@types/json-patch": "0.0.30",
"json-patch": "0.7.0",
"jsonschema": "1.2.4",
"ts-optchain": "0.1.2"
"ts-optchain": "0.1.3"
},
"devDependencies": {
"@openstapps/configuration": "0.7.0",
"@openstapps/core-tools": "0.2.1",
"@openstapps/logger": "0.0.3",
"@openstapps/configuration": "0.8.0",
"@openstapps/core-tools": "0.3.0",
"@openstapps/logger": "0.0.5",
"@types/chai": "4.1.7",
"@types/humanize-string": "1.0.0",
"@types/node": "11.9.4",
"@types/node": "10.14.4",
"@types/rimraf": "2.0.2",
"async-pool-native": "0.1.0",
"chai": "4.2.0",
"commander": "2.19.0",
"conventional-changelog-cli": "2.0.11",
"humanize-string": "1.0.2",
"mocha": "5.2.0",
"conventional-changelog-cli": "2.0.12",
"mocha": "6.0.2",
"mocha-typescript": "1.1.17",
"nyc": "13.3.0",
"rimraf": "2.6.3",
"ts-node": "8.0.2",
"tslint": "5.12.1",
"ts-node": "8.0.3",
"tslint": "5.15.0",
"typedoc": "0.14.2",
"typescript": "3.3.3"
"typescript": "3.4.1"
},
"nyc": {
"check-coverage": true,

View File

@@ -13,29 +13,29 @@
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCThingType} from './Thing';
import {SCAcademicEvent, SCAcademicEventMeta} from './things/AcademicEvent';
import {SCArticle, SCArticleMeta} from './things/Article';
import {SCBook, SCBookMeta} from './things/Book';
import {SCBuilding, SCBuildingMeta} from './things/Building';
import {SCCatalog, SCCatalogMeta} from './things/Catalog';
import {SCCourseOfStudies, SCCourseOfStudiesMeta} from './things/CourseOfStudies';
import {SCDateSeries, SCDateSeriesMeta} from './things/DateSeries';
import {SCDiff, SCDiffMeta} from './things/Diff';
import {SCDish, SCDishMeta} from './things/Dish';
import {SCFavorite, SCFavoriteMeta} from './things/Favorite';
import {SCFloor, SCFloorMeta} from './things/Floor';
import {SCMessage, SCMessageMeta} from './things/Message';
import {SCOrganization, SCOrganizationMeta} from './things/Organization';
import {SCPerson, SCPersonMeta} from './things/Person';
import {SCPointOfInterest, SCPointOfInterestMeta} from './things/PointOfInterest';
import {SCRoom, SCRoomMeta} from './things/Room';
import {SCSemester, SCSemesterMeta} from './things/Semester';
import {SCSetting, SCSettingMeta} from './things/Setting';
import {SCSportCourse, SCSportCourseMeta} from './things/SportCourse';
import {SCTicket, SCTicketMeta} from './things/Ticket';
import {SCToDo, SCToDoMeta} from './things/ToDo';
import {SCTour, SCTourMeta} from './things/Tour';
import {SCVideo, SCVideoMeta} from './things/Video';
import {SCAcademicEvent, SCAcademicEventMeta, SCAcademicEventWithoutReferences} from './things/AcademicEvent';
import {SCArticle, SCArticleMeta, SCArticleWithoutReferences} from './things/Article';
import {SCBook, SCBookMeta, SCBookWithoutReferences} from './things/Book';
import {SCBuilding, SCBuildingMeta, SCBuildingWithoutReferences} from './things/Building';
import {SCCatalog, SCCatalogMeta, SCCatalogWithoutReferences} from './things/Catalog';
import {SCCourseOfStudies, SCCourseOfStudiesMeta, SCCourseOfStudiesWithoutReferences} from './things/CourseOfStudies';
import {SCDateSeries, SCDateSeriesMeta, SCDateSeriesWithoutReferences} from './things/DateSeries';
import {SCDiff, SCDiffMeta, SCDiffWithoutReferences} from './things/Diff';
import {SCDish, SCDishMeta, SCDishWithoutReferences} from './things/Dish';
import {SCFavorite, SCFavoriteMeta, SCFavoriteWithoutReferences} from './things/Favorite';
import {SCFloor, SCFloorMeta, SCFloorWithoutReferences} from './things/Floor';
import {SCMessage, SCMessageMeta, SCMessageWithoutReferences} from './things/Message';
import {SCOrganization, SCOrganizationMeta, SCOrganizationWithoutReferences} from './things/Organization';
import {SCPerson, SCPersonMeta, SCPersonWithoutReferences} from './things/Person';
import {SCPointOfInterest, SCPointOfInterestMeta, SCPointOfInterestWithoutReferences} from './things/PointOfInterest';
import {SCRoom, SCRoomMeta, SCRoomWithoutReferences} from './things/Room';
import {SCSemester, SCSemesterMeta, SCSemesterWithoutReferences} from './things/Semester';
import {SCSetting, SCSettingMeta, SCSettingWithoutReferences} from './things/Setting';
import {SCSportCourse, SCSportCourseMeta, SCSportCourseWithoutReferences} from './things/SportCourse';
import {SCTicket, SCTicketMeta, SCTicketWithoutReferences} from './things/Ticket';
import {SCToDo, SCToDoMeta, SCToDoWithoutReferences} from './things/ToDo';
import {SCTour, SCTourMeta, SCTourWithoutReferences} from './things/Tour';
import {SCVideo, SCVideoMeta, SCVideoWithoutReferences} from './things/Video';
/* tslint:disable:variable-name */
/**
@@ -103,3 +103,61 @@ export type SCThings =
* A field of a thing
*/
export type SCThingsField = keyof SCThings | string;
/**
* Thing without references for a thing
*/
export type SCAssociatedThingWithoutReferences<THING extends SCThings> =
THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences :
THING extends SCArticle ? SCArticleWithoutReferences :
THING extends SCBook ? SCBookWithoutReferences :
THING extends SCBuilding ? SCBuildingWithoutReferences :
THING extends SCCatalog ? SCCatalogWithoutReferences :
THING extends SCCourseOfStudies ? SCCourseOfStudiesWithoutReferences :
THING extends SCDateSeries ? SCDateSeriesWithoutReferences :
THING extends SCDiff ? SCDiffWithoutReferences :
THING extends SCDish ? SCDishWithoutReferences :
THING extends SCFavorite ? SCFavoriteWithoutReferences :
THING extends SCFloor ? SCFloorWithoutReferences :
THING extends SCMessage ? SCMessageWithoutReferences :
THING extends SCOrganization ? SCOrganizationWithoutReferences :
THING extends SCPerson ? SCPersonWithoutReferences :
THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences :
THING extends SCRoom ? SCRoomWithoutReferences :
THING extends SCSemester ? SCSemesterWithoutReferences :
THING extends SCSetting ? SCSettingWithoutReferences :
THING extends SCSportCourse ? SCSportCourseWithoutReferences :
THING extends SCTicket ? SCTicketWithoutReferences :
THING extends SCToDo ? SCToDoWithoutReferences :
THING extends SCTour ? SCTourWithoutReferences :
THING extends SCVideo ? SCVideoWithoutReferences :
never;
/**
* Thing for a thing without references
*/
export type SCAssociatedThing<THING extends SCThings> =
THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent :
THING extends SCArticleWithoutReferences ? SCArticle :
THING extends SCBookWithoutReferences ? SCBook :
THING extends SCBuildingWithoutReferences ? SCBuilding :
THING extends SCCatalogWithoutReferences ? SCCatalog :
THING extends SCCourseOfStudiesWithoutReferences ? SCCourseOfStudies :
THING extends SCDateSeriesWithoutReferences ? SCDateSeries :
THING extends SCDiffWithoutReferences ? SCDiff :
THING extends SCDishWithoutReferences ? SCDish :
THING extends SCFavoriteWithoutReferences ? SCFavorite :
THING extends SCFloorWithoutReferences ? SCFloor :
THING extends SCMessageWithoutReferences ? SCMessage :
THING extends SCOrganizationWithoutReferences ? SCOrganization :
THING extends SCPersonWithoutReferences ? SCPerson :
THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest :
THING extends SCRoomWithoutReferences ? SCRoom :
THING extends SCSemesterWithoutReferences ? SCSemester :
THING extends SCSettingWithoutReferences ? SCSetting :
THING extends SCSportCourseWithoutReferences ? SCSportCourse :
THING extends SCTicketWithoutReferences ? SCTicket :
THING extends SCToDoWithoutReferences ? SCToDo :
THING extends SCTourWithoutReferences ? SCTour :
THING extends SCVideoWithoutReferences ? SCVideo :
never;

View File

@@ -17,14 +17,19 @@ import {SCThing, SCThingUserOrigin} from '../Thing';
/**
* An encapsulation of the data (e.g. a thing) that is saved, which provides additional information.
*/
export interface SCSaveableThing<T extends SCThing> extends SCThing {
/**
* The contained data
*/
data: T;
export interface SCSaveableThingWithoutReferences extends SCThing {
/**
* Type of the origin
*/
origin: SCThingUserOrigin;
}
/**
* An encapsulation of the data (e.g. a thing) that is saved, which provides additional information.
*/
export interface SCSaveableThing<T extends SCThing> extends SCSaveableThingWithoutReferences {
/**
* The contained data
*/
data: T;
}

View File

@@ -42,6 +42,7 @@ export abstract class SCError implements SCErrorResponse {
/**
* Instatiate an SCError
*
* @param name Name of the error
* @param message Message of the error
* @param statusCode HTTP status code to return this error with
@@ -66,6 +67,7 @@ export class SCValidationErrorResponse extends SCError {
/**
* Create a SCValidationErrorResponse
*
* @param errors List of validation errors
* @param stack Set to true if a stack trace should be created
*/
@@ -81,6 +83,7 @@ export class SCValidationErrorResponse extends SCError {
export class SCUnsupportedMediaTypeErrorResponse extends SCError {
/**
* Create a SCUnsupportedMediaTypeErrorResponse
*
* @param stack Set to true if a stack trace should be created
*/
constructor(stack?: boolean) {
@@ -94,6 +97,7 @@ export class SCUnsupportedMediaTypeErrorResponse extends SCError {
export class SCMethodNotAllowedErrorResponse extends SCError {
/**
* Create a SCMethodNotAllowedErrorResponse
*
* @param stack Set to true if a stack trace should be created
*/
constructor(stack?: boolean) {
@@ -120,6 +124,7 @@ export class SCRequestBodyTooLargeErrorResponse extends SCError {
export class SCTooManyRequestsErrorResponse extends SCError {
/**
* Create a SCTooManyRequestsErrorResponse
*
* @param stack Set to true if a stack trace should be created
*/
constructor(stack?: boolean) {
@@ -133,6 +138,7 @@ export class SCTooManyRequestsErrorResponse extends SCError {
export class SCNotFoundErrorResponse extends SCError {
/**
* Create a SCNotFoundErrorResponse
*
* @param stack Set to true if a stack trace should be created
*/
constructor(stack?: boolean) {
@@ -140,12 +146,80 @@ export class SCNotFoundErrorResponse extends SCError {
}
}
/**
* An error that is returned when the request is in the right format, but contains parameters that are invalid or not
* acceptable.
*/
export class SCParametersNotAcceptable extends SCError {
/**
* Create a ParametersNotAcceptable
*
* @param message contains more details to what you did wrong
* @param stack Set to true if a stack trace should be created
*/
constructor(message: string, stack?: boolean) {
super('ParametersNotAcceptable', message, 406, stack);
}
}
/**
* An error that is returned when a plugin with the same name is already registered, to prevent two copies of a plugin
* running at the same time.
* This usually indicates that there is more than one instance a plugin running.
*/
export class SCPluginAlreadyRegisteredErrorResponse extends SCError {
/**
* Create a PluginAlreadyRegisteredError
*
* @param message contains potential differences in other parameters outside of the name
* @param stack Set to true if a stack trace should be created
*/
constructor(message: string, stack?: boolean) {
super('PluginRegisteringFailedError', message, 409, stack);
}
}
/**
* An error that is returned whenever there is an unexpected error while creating a plugin
*/
export class SCPluginRegisteringFailedErrorResponse extends SCError {
/**
* Create a PluginRegisteringFailedError
*
* @param message Describes what went wrong wile registering the plugin
* @param stack Set to true if a stack trace should be created
*/
constructor(message: string, stack?: boolean) {
super('PluginRegisteringFailedError', message, 500, stack);
}
}
/**
* An error that is returned whenever there is a plugin request that is supposed to register a route, that is already
* registered
* This usually indicates that two **different** plugins use the same route.
*/
export class SCPluginRouteAlreadyRegisteredErrorResponse extends SCError {
/**
* Create a PluginRouteAlreadyRegisteredError
*
* @param registeredName The name by the plugin that has already registered the route previously
* @param registeredUrl The URL by the plugin that has already registered the route previously
* @param stack Set to true if a stack trace should be created
*/
constructor(registeredName: string, registeredUrl: string, stack?: boolean) {
super('PluginRouteAlreadyRegisteredError',
`Already registered by "${registeredName}" under URL "${registeredUrl}".`, 409, stack);
}
}
/**
* An error that is returned whenever there is a syntax error
*/
export class SCSyntaxErrorResponse extends SCError {
/**
* Create a SyntaxError
*
* @param message Describes the syntax error
* @param stack Set to true if a stack trace should be created
*/
@@ -165,6 +239,7 @@ export class SCInternalServerErrorResponse extends SCError {
/**
* Create a SCInternalServerErrorResponse
*
* @param err Internal server error
* @param stack Set to true if a stack trace should be created
* and the internal server error should be displayed to the client

View File

@@ -0,0 +1,100 @@
/*
* 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 {Schema} from 'jsonschema';
import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route';
import {
SCInternalServerErrorResponse,
SCMethodNotAllowedErrorResponse, SCParametersNotAcceptable,
SCPluginAlreadyRegisteredErrorResponse,
SCPluginRegisteringFailedErrorResponse,
SCPluginRouteAlreadyRegisteredErrorResponse,
SCRequestBodyTooLargeErrorResponse,
SCSyntaxErrorResponse,
} from '../../errors/ErrorResponse';
/**
* Plugin register request
*
* @validatable
*/
export type SCPluginRegisterRequest = AddPlugin | RemovePlugin;
interface AddPlugin {
/**
* The desired action, so whether the plugin should be added or removed
*/
action: 'add';
/**
* The address of the plugin
*/
address: string;
/**
* The name of the plugin
* Just for debugging purposes, to more easily identify conflicts.
*/
name: string;
/**
* How the requests of the plugin looks like, a JSON schema for validation
*/
pluginRequestSchema: Schema;
/**
* How the responses of the plugin looks like, a JSON schema for validation
*/
pluginResponseSchema: Schema;
/**
* The desired route, for example /feedback.
*/
route: string;
}
interface RemovePlugin {
/**
* The desired action, so whether the plugin should be added or removed
*/
action: 'remove';
/**
* The route of the plugin you want to remove
*/
route: string;
}
/**
* Route to register plugins
*/
export class SCPluginRegisterRoute extends SCAbstractRoute {
constructor() {
super();
this.errorNames = [
SCInternalServerErrorResponse,
SCMethodNotAllowedErrorResponse,
SCParametersNotAcceptable,
SCPluginAlreadyRegisteredErrorResponse,
SCPluginRouteAlreadyRegisteredErrorResponse,
SCPluginRegisteringFailedErrorResponse,
SCPluginRouteAlreadyRegisteredErrorResponse,
SCRequestBodyTooLargeErrorResponse,
SCSyntaxErrorResponse,
];
this.method = SCRouteHttpVerbs.POST;
this.requestBodyName = 'SCPluginRegisterRequest';
this.responseBodyName = 'SCPluginRegisterResponse';
this.statusCodeSuccess = 200;
this.urlFragment = '/plugin/register';
}
}

View File

@@ -0,0 +1,26 @@
/*
* 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/>.
*/
/**
* Plugin register response
*
* @validatable
*/
export interface SCPluginRegisterResponse {
/**
* Whether the desired action succeeded or failed (true for success, false if an error occurred)
*/
success: boolean;
}

View File

@@ -12,7 +12,7 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCSaveableThing} from '../base/SaveableThing';
import {SCSaveableThing, SCSaveableThingWithoutReferences} from '../base/SaveableThing';
import {SCThingMeta, SCThingType} from '../Thing';
import {SCAcademicEventWithoutReferences} from './AcademicEvent';
import {SCArticleWithoutReferences} from './Article';
@@ -37,6 +37,13 @@ export type SCFavoriteDataTypes = SCAcademicEventWithoutReferences
| SCSportCourseWithoutReferences
| SCToDoWithoutReferences;
/**
* A favorite without references
*/
export interface SCFavoriteWithoutReferences extends SCSaveableThingWithoutReferences {
}
/**
* A favorite
*

View File

@@ -24,7 +24,11 @@ import {SCThing, SCThingType} from '../Thing';
* @param {any} something Something to check
*/
export function isThing(something: any): something is SCThing {
return (something.type && something.type in SCThingType);
return (
typeof something === 'object'
&& typeof something.type === 'string'
&& Object.values(SCThingType).indexOf(something.type) >= 0
);
}
/**
@@ -68,11 +72,10 @@ export function isSearchResponse(something: any): something is SCSearchResponse
/**
* Type guard to check if something is a multi search response
*
*
* @param something Something to check
*/
export function isMultiSearchResponse(something: any): something is SCMultiSearchResponse {
return Object.keys(something).reduce((previousOnesAreSearchResponses, key) => {
return previousOnesAreSearchResponses && isSearchResponse(something[key]);
}, true);
}, true as boolean);
}

57
test/Guards.spec.ts Normal file
View File

@@ -0,0 +1,57 @@
/*
* Copyright (C) 2018, 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 {expect} from 'chai';
import {slow, suite, test, timeout} from 'mocha-typescript';
import {SCThingOriginType, SCThingType} from '../src/core/Thing';
import {SCDish} from '../src/core/things/Dish';
import {isThing} from '../src/core/types/Guards';
@suite(timeout(10000), slow(5000))
export class GuardsSpec {
@test
public isThing() {
const notADish = {
categories: [
'appetizer',
],
name: 'foo',
origin: {
created: '',
type: SCThingOriginType.User,
},
type: 'foobar',
uid: 'bar',
};
const dish: SCDish = {
categories: [
'appetizer',
],
name: 'foo',
origin: {
created: '',
type: SCThingOriginType.User,
},
type: SCThingType.Dish,
uid: 'bar',
};
expect(isThing('foo')).to.be.equal(false);
expect(isThing(notADish)).to.be.equal(false);
expect(isThing(dish)).to.be.equal(true);
}
}

View File

@@ -3,7 +3,7 @@
"instance": {
"type": "academic event",
"description": "Fortsetzung der Algebra I: Galoistheorie mit Anwendungen, ausgewählte Spezialthemen.",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "681a59a1-23c2-5d78-861a-8c86a3abf2b9",
"name": "Algebra II",
"categories": [
"lecture"
@@ -31,7 +31,7 @@
"performers": [
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "7f8ce700-2679-51a5-86b5-3dfba85a33ff",
"givenName": "Peter",
"familyName": "Bürgisser",
"gender": "male",
@@ -59,7 +59,7 @@
"maintainer": {
"type": "organization",
"name": "tubIT",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "25f76840-db89-5da2-a8a2-75992f637613",
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
@@ -70,7 +70,7 @@
"originalId": "foo bar",
"responsibleEntity": {
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "7f8ce700-2679-51a5-86b5-3dfba85a33ff",
"givenName": "Peter",
"familyName": "Bürgisser",
"gender": "male",

View File

@@ -3,7 +3,7 @@
"instance": {
"type": "academic event",
"description": "Grundlagen, algebraische Grundbegriffe, Vektorräume, lineare Abbildungen und Gleichungen, Determinanten",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "b17eb963-42b5-5861-adce-2b7b2607ef0a",
"name": "Lineare Algebra I für Mathematiker",
"categories": [
"lecture"
@@ -31,7 +31,7 @@
"performers": [
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "fc8b10cf-10c0-5b92-b16e-92ff734676da",
"givenName": "Jörg",
"familyName": "Liesen",
"gender": "male",

View File

@@ -1,9 +1,9 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "academic event",
"description": "Die Übung hat 2 SWS und wird auf 2 Gruppen verteilt.",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "7e2b64b0-925d-5f63-b464-a6e3e9492411",
"name": "Algebra II",
"categories": [
"tutorial"
@@ -31,7 +31,7 @@
"performers": [
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "97be73c0-5319-579a-a393-c4eeeacae58b",
"givenName": "Paul",
"familyName": "Breiding",
"gender": "male",
@@ -44,7 +44,7 @@
},
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "0db9b55a-4c27-5faf-9bf0-4b564be45a08",
"givenName": "Pierre",
"familyName": "Lairez",
"gender": "male",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "8d8bd89c-8429-5f81-b754-15a5be55e593",
"type": "article",
"categories": [
"unipedia"

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "4f772b29-0b28-53a4-a8b9-206d9b425962",
"type": "article",
"categories": [
"unipedia"

View File

@@ -1,13 +1,13 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "book",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "a0520263-29ae-5357-a3ce-ba1902d121e0",
"name": "Kundenorientierung durch Quality Function Deployment: Systematisches Entwickeln von Produkten und Dienstleistungen",
"authors": [
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "10dfe386-71b4-554a-beb1-2d38561e42f8",
"name": "Jutta Saatweber",
"givenName": "Jutta",
"familyName": "Saatweber",
@@ -22,7 +22,7 @@
"publishers": [
{
"type": "organization",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "28df2bb9-c854-5898-b9d5-1abbd3524804",
"name": "Symposion Publishing",
"origin": {
"indexed": "2018-09-11T12:30:00Z",

View File

@@ -1,13 +1,13 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "book",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "db47f7f4-7699-5a37-afcc-24beaa998d36",
"name": "Minimal Book",
"authors": [
{
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "10dfe386-71b4-554a-beb1-2d38561e42f8",
"name": "Jutta Saatweber",
"givenName": "Jutta",
"familyName": "Saatweber",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"geo": {
"point": {
"type": "Point",
@@ -150,7 +150,7 @@
"alternateNames": [
"MA"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "edfaba58-254f-5da0-82d6-3b46a76c48ce",
"categories": [
"education"
],

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "64bb29ed-21e5-50c7-9d7c-1dc4741001b9",
"instance": {
"uid": "c8dc1f7f-9e3e-5b1f-8c38-084f46413b87",
"type": "catalog",
"level": 1,
"categories": [

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "5a1f4f51-2498-5af1-91cb-c939673cc69c",
"instance": {
"uid": "5a8bc725-8658-528f-b515-5f7cd6987169",
"type": "catalog",
"level": 3,
"description": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"academicDegree": "bachelor",
"academicDegreewithField": "Bachelor of Arts",
"academicDegreewithFieldShort": "B.A.",
@@ -12,7 +12,7 @@
"type": "remote"
},
"type": "organization",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140"
"uid": "b0f878fd-8fda-53b8-b065-a8d854c3d0d2"
},
"mainLanguage": {
"code": "de",
@@ -34,11 +34,11 @@
"type": "remote"
},
"type": "organization",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140"
"uid": "b0f878fd-8fda-53b8-b065-a8d854c3d0d2"
},
"timeMode": "parttime",
"type": "course of studies",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140"
"uid": "4c6f0a18-343d-5175-9fb1-62d28545c2aa"
},
"schema": "SCCourseOfStudies"
}

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "date series",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "1b421872-1b4c-579b-ba03-688f943d59ad",
"name": "Einführung in die Wirtschaftspolitik",
"duration": "PT2H",
"inPlace": {
@@ -10,7 +10,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "5a4bbced-8e1f-5f29-a1d1-336e455ce7f9",
"name": "H 0105",
"geo": {
"point": {
@@ -33,7 +33,7 @@
],
"event": {
"type": "academic event",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "dbb4e5e1-0789-59c1-9970-877430af56b3",
"name": "Einführung in die Wirtschaftspolitik",
"categories": [
"written exam"

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "date series",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "4ce41895-4b54-52db-b86f-7e6920b975c8",
"name": "Distributed Algorithms",
"duration": "PT4H",
"inPlace": {
@@ -19,7 +19,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "b535c86a-777b-54c3-b89a-cad528d0580f",
"name": "EMH 225",
"floor": "2",
"origin": {
@@ -34,7 +34,7 @@
],
"event": {
"type": "academic event",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "e6fb74d4-c6d9-59bb-930f-e47eb6e39432",
"name": "Distributed Algorithms",
"categories": [
"written exam"

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "date series",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "e6462830-187a-50b1-bdb4-8f39e49a88b8",
"name": "Dance course for beginners",
"duration": "PT8H",
"inPlace": {
@@ -19,7 +19,7 @@
"categories": [
"student union"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "b535c86a-777b-54c3-b89a-cad528d0580f",
"name": "EMH 225",
"floor": "2",
"origin": {
@@ -34,7 +34,7 @@
],
"event": {
"type": "academic event",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "4f86e8bb-ce73-520b-bfd9-e1ba9f754391",
"name": "Dance course for beginners",
"categories": [
"special"
@@ -50,7 +50,7 @@
"name": "Dummy",
"type": "remote"
},
"offers": [
"offers": [
{
"availability": "in stock",
"availabilityStarts": "2017-01-30T00:00:00.000Z",
@@ -66,7 +66,7 @@
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
},
"type": "organization",
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
}

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "a5acde0d-18c4-5511-9f86-aabf2a530f91",
"dateCreated": "2017-02-07T09:26:35.957Z",
"name": "changed_testuid",
"changes": [
@@ -14,7 +14,7 @@
"action": "changed",
"type": "diff",
"object": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "072db1e5-e479-5040-88e0-4a98d731e443",
"name": "Name One",
"type": "message",
"message": "Message",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "f71cc2c8-fef2-59ee-af0a-511cc75e7471",
"dateCreated": "2017-03-07T09:26:35.957Z",
"name": "changed_testuid",
"changes": [
@@ -14,7 +14,7 @@
"action": "changed",
"type": "diff",
"object": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "072db1e5-e479-5040-88e0-4a98d731e443",
"name": "Name One",
"type": "message",
"message": "Message",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "dish",
"name": "Pizza mit Geflügelsalami und Champignons",
"categories": [
@@ -33,7 +33,7 @@
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
},
"type": "organization",
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
},
@@ -56,7 +56,7 @@
"alternateNames": [
"MensaHardenberg"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "72fbc8a3-ebd1-58f9-9526-ad65cba2e402",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",
@@ -72,7 +72,7 @@
}
}
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "c9f32915-8ed5-5960-b850-3f7375a89922",
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "dish",
"name": "Sahne-Bärlauchsauce",
"description": "Nudelauswahl",
@@ -20,7 +20,7 @@
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
},
"type": "organization",
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
},
@@ -46,7 +46,7 @@
"alternateNames": [
"MensaHardenberg"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "072db1e5-e479-5040-88e0-4a98d731e443",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",
@@ -75,7 +75,7 @@
"Weizen",
"Milch(Laktose; Milcheiweiß)"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "3222631f-82b3-5faf-a8e8-9c10719cc95b",
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"additives": [
"1 = mit Farbstoff",
"2 = konserviert",
@@ -51,7 +51,7 @@
"indexed": "2018-09-11T12:30:00Z",
"name": "Dummy",
"type": "remote"
},
},
"type": "organization",
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634"
}
@@ -80,7 +80,7 @@
"type": "dish",
"uid": "db0caac1-062c-5333-9fcb-cfaf0ff7d799",
"nutrition": {
"calories": 106.00,
"calories": 106,
"fatContent": 5.4,
"saturatedFatContent": 1.8,
"carbohydrateContent": 6.8,
@@ -113,7 +113,7 @@
"type": "dish",
"uid": "f702fd43-1551-53b2-b35a-b5916e1cf9a1",
"nutrition": {
"calories": 106.00,
"calories": 106,
"fatContent": 5.4,
"saturatedFatContent": 1.8,
"carbohydrateContent": 6.8,
@@ -137,9 +137,9 @@
}
],
"type": "dish",
"uid": "3b9b3df6-3a7a-58cc-922f-c7335c002634",
"uid": "1c99689c-c6ec-551f-8ad8-f13c5fa812c2",
"nutrition": {
"calories": 600.00,
"calories": 600,
"fatContent": 30.5,
"saturatedFatContent": 9.9,
"carbohydrateContent": 42.2,

View File

@@ -1,13 +1,13 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "favorite",
"name": "Favorite #1",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "3af3ccaa-f066-5eff-9a3d-a70567f3d70d",
"data": {
"type": "academic event",
"description": "Grundlagen, algebraische Grundbegriffe, Vektorräume, lineare Abbildungen und Gleichungen, Determinanten",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "b17eb963-42b5-5861-adce-2b7b2607ef0a",
"name": "Lineare Algebra I für Mathematiker",
"categories": [
"lecture"

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "0effdc13-d4af-5a63-a538-c4b2c080e253",
"name": "MA E:0",
"type": "floor",
"inPlace": {
@@ -157,7 +157,7 @@
"alternateNames": [
"MA"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "edfaba58-254f-5da0-82d6-3b46a76c48ce",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",
@@ -3386,7 +3386,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "593655b5-0fc9-59de-a82f-b8f5f908deef",
"name": "MA 043",
"floor": "0",
"origin": {
@@ -5534,7 +5534,7 @@
"categories": [
"learn"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "31b1ab4c-1803-51ed-8c66-59bfc97cd350",
"name": "MA Foyer",
"floor": "0",
"origin": {
@@ -6353,7 +6353,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "56ce0744-ae39-5209-b18f-d3a6edcb8f0a",
"name": "MA 042",
"floor": "0",
"origin": {
@@ -6468,7 +6468,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "96b7e555-1214-5ca8-8294-e8209ac04f5a",
"name": "MA 041",
"floor": "0",
"origin": {
@@ -6703,7 +6703,7 @@
"categories": [
"education"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "ed50a94d-eb06-5d07-8058-dfbdeb6c3a0b",
"name": "MA 001",
"floor": "0",
"origin": {

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "3c56f5c4-006f-580e-8aff-9a9315f3fd81",
"name": "H_4",
"type": "floor",
"inPlace": {
@@ -97,7 +97,7 @@
"alternateNames": [
"H"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "ebe95e80-f826-5a70-a844-436b561d5181",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"instance": {
"uid": "d6152601-0154-581a-8bb5-0d1643972a21",
"name": "H_5",
"type": "floor",
"inPlace": {
@@ -97,7 +97,7 @@
"alternateNames": [
"H"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "ebe95e80-f826-5a70-a844-436b561d5181",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "message",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "4706ef24-b631-5c20-91d1-3c627decca5a",
"image": "icon ion-android-hand stapps-color-red-dark",
"name": "Lösung für das Problem des Zurücksetzens der StApps-App gefunden",
"message": "Wie bereits berichtet, klagten User über das Löschen ihres Stundenplans beim Update von Version 0.8.0 auf 0.8.1. Wir haben eine Lösung für das Problem gefunden und testen diese ausführlich bis zum Ende dieser Woche. Wenn alles glatt verläuft, dann kommt am Wochenende die fehlerbereinige Version 0.8.2 heraus.\n\n*(25.Okt 2016)*",

View File

@@ -4,7 +4,7 @@
],
"instance": {
"type": "invalid-value-in-schema",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "cdb7059c-a1a2-5229-821d-434c345e2917",
"image": "icon ion-android-hand stapps-color-red-dark",
"name": "Lösung für das Problem des Zurücksetzens der StApps-App gefunden",
"message": "Wie bereits berichtet, klagten User über das Löschen ihres Stundenplans beim Update von Version 0.8.0 auf 0.8.1. Wir haben eine Lösung für das Problem gefunden und testen diese ausführlich bis zum Ende dieser Woche. Wenn alles glatt verläuft, dann kommt am Wochenende die fehlerbereinige Version 0.8.2 heraus.\n\n*(25.Okt 2016)*",

View File

@@ -1,9 +1,11 @@
{
"errorNames": ["additionalProperties"],
"instance": {
"errorNames": [
"additionalProperties"
],
"instance": {
"type": "message",
"invalid-non-existing-key-in-schema": 1,
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "4706ef24-b631-5c20-91d1-3c627decca5a",
"image": "icon ion-android-hand stapps-color-red-dark",
"name": "Lösung für das Problem des Zurücksetzens der StApps-App gefunden",
"message": "Wie bereits berichtet, klagten User über das Löschen ihres Stundenplans beim Update von Version 0.8.0 auf 0.8.1. Wir haben eine Lösung für das Problem gefunden und testen diese ausführlich bis zum Ende dieser Woche. Wenn alles glatt verläuft, dann kommt am Wochenende die fehlerbereinige Version 0.8.2 heraus.\n\n*(25.Okt 2016)*",

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "organization",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "20e48393-0d2b-5bdc-9d92-5e0dc1e2860e",
"name": "Technische Universität Berlin",
"origin": {
"indexed": "2018-09-11T12:30:00Z",

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "97044080-fdf3-5ec0-8734-c412ac2dde03",
"givenName": "Michael",
"familyName": "Joswig",
"gender": "male",

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "person",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "eb516021-3b37-5358-baef-345a0e10da5b",
"givenName": "Michael",
"familyName": "Gradzielski",
"gender": "male",

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "person",
"familyName": "Mustermann",
"givenName": "Erika",
@@ -14,7 +14,7 @@
"Leitung, Projektkoordination - Abteilung Lehre und Qualitätssicherung"
],
"name": "Univ.-Prof'in Dr. Erika Mustermann",
"uid": "b22306bf-cbf3-54df-91a1-c08d8fd42e13",
"uid": "be34a419-e9e8-5de0-b998-dd1b19e7f451",
"workLocations": [
{
"url": "http://www.fb03.uni-frankfurt.de/1234567",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "2e925b84-3c99-5df2-a289-62be7a4ae512",
"instance": {
"uid": "f5fe4d13-d56a-5770-b16e-78782841bf02",
"name": "Validierer (UB)",
"type": "point of interest",
"categories": [

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "1cf75fa0-86dc-5704-8cb4-bd80cf02e640",
"instance": {
"uid": "5a5ca30a-1494-5707-9692-ff902e104c12",
"name": "Drucker 1 (IG)",
"type": "point of interest",
"categories": [

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"geo": {
"point": {
"type": "Point",
@@ -14,7 +14,7 @@
"categories": [
"cafe"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "b7206fb5-bd77-5572-928f-16aa70910f64",
"alternateNames": [
"MA Mathe Cafeteria"
],

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"geo": {
"point": {
"type": "Point",
@@ -14,7 +14,7 @@
"categories": [
"library"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "6e5abbff-d995-507b-982b-e0d094da6606",
"alternateNames": [
"BIB"
],

View File

@@ -1,6 +1,6 @@
{
"errorNames": [],
"instance": {
"instance": {
"geo": {
"point": {
"type": "Point",
@@ -15,7 +15,7 @@
"categories": [
"learn"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "d33fa478-7e5d-5197-9f0e-091f7f8105df",
"name": "MA Foyer",
"inPlace": {
"geo": {
@@ -170,7 +170,7 @@
"alternateNames": [
"MA"
],
"uid": "540862f3-ea30-5b8f-8678-56b4dc217140",
"uid": "edfaba58-254f-5da0-82d6-3b46a76c48ce",
"address": {
"addressCountry": "Germany",
"addressLocality": "Berlin",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "d7ce5623-ad47-5976-bdd3-7cf551729516",
"instance": {
"uid": "ea9db087-240b-5b10-a65b-9684d88a3e4e",
"name": "Poolraum (HoF)",
"type": "room",
"categories": [

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "b621f5b5-dd5d-5730-9e2e-e4ba52011388",
"instance": {
"uid": "622b950b-a29c-593b-9059-aece622228a0",
"type": "semester",
"name": "Wintersemester 2017/2018",
"acronym": "WS 2017/18",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "aacd5611-b5be-54ce-b39f-c52f7e9a631d",
"instance": {
"uid": "7cebbc3e-0a21-5371-ab0d-f7ba12f53dbd",
"type": "semester",
"name": "Sommersemester 2018",
"acronym": "SS 2018",

View File

@@ -27,7 +27,7 @@
}
},
"type": "setting",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217642"
"uid": "c4ff2b08-be18-528e-9b09-cb8c1d18487b"
},
"schema": "SCSetting"
}

View File

@@ -37,7 +37,7 @@
}
},
"type": "setting",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217642"
"uid": "9f0c362e-0b41-532f-9e8b-a0ac373fbede"
},
"schema": "SCSetting"
}

View File

@@ -1,9 +1,9 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "ticket",
"name": "Ticket",
"uid": "7257a1d7-47ac-4acc-a8cc-3f9ac6442e5d",
"uid": "34fc6cd9-5bd1-5779-a75d-a25d01ad4dae",
"currentTicketNumber": "250",
"approxWaitingTime": "PT43S",
"inPlace": {

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "7257a1d7-47ac-4acc-a8cc-3f9ac6442e5d",
"instance": {
"uid": "4f1c1810-1a9f-52cb-bfe9-65dcab5e889a",
"type": "tour",
"name": "Stundenplan erstellen",
"description": "Veranstaltung suchen und zum Stundenplan hinzufügen",

View File

@@ -1,7 +1,7 @@
{
"errorNames": [],
"instance": {
"uid": "7257a1d7-47ac-4acc-a8cc-3f9ac6442e5d",
"instance": {
"uid": "665d834d-594a-5d72-be94-ff2892a6003c",
"type": "tour",
"name": "Favorisierte Essensorte",
"description": "Essensorte favorisieren, um ihre Speisepläne als Widget auf der Startseite zu sehen",

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "video",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217642",
"uid": "e274cc82-f51c-566b-b8da-85763ff375e8",
"url": "https://vimeo.com/1084537",
"name": "Big Buck Bunny",
"origin": {

View File

@@ -1,8 +1,8 @@
{
"errorNames": [],
"instance": {
"instance": {
"type": "video",
"uid": "540862f3-ea30-5b8f-8678-56b4dc217642",
"uid": "2def52c8-f901-5b30-96fc-ba570a038508",
"url": "https://vimeo.com/1084537",
"name": "Big Buck Bunny",
"sources": [