Compare commits

..
Author SHA1 Message Date
Theaninova 69868663cb feat: update to node 22 2024-06-03 13:16:16 +02:00
Rainer Killinger a6b88d3534 refactor: add f-u specific changelogs 2024-05-27 16:27:37 +02:00
Rainer Killinger be863daaef refactor: updated used licences within the app 2024-05-27 15:36:00 +02:00
Theaninova 2f64d69693 feat: migrate to protomaps and maplibre 2024-05-27 15:07:27 +02:00
Theaninova 964516d3cf fix: remove noUnused* TSConfig options
TSConfig options prevent Angular from compiling the app. This is
specifically harsh with the noUnused* rules, which require you to
strictly remove any unused variables even in dev mode while testing.
Since this case is already covered by ESLint, the TSConfig option was
removed.
2024-05-27 15:07:27 +02:00
Theaninova 71ff9fd960 fix: favorite button 2024-05-27 15:07:27 +02:00
Theaninova abf9999461 feat: type-safe sc-icons 2024-05-27 15:07:26 +02:00
Theaninova 53c3d0ba0c refactor: replace rfdc with native structuredClone 2024-05-27 15:07:25 +02:00
Rainer Killinger 622481a3c9 docs: update changelogs for release\n\nci: publish release 2024-03-28 14:27:56 +01:00
Thea Schöbl 1ab5c0c355 fix: inPlace in list items is placed weird 2024-03-27 13:45:22 +00:00
Rainer Killinger b0f6ffb21c refactor: ajdust app environment to backend version >= v3.1.0 2024-03-27 10:11:32 +01:00
Rainer Killinger e658cff9d2 refactor: use GET for id-cards requests 2024-03-27 09:55:31 +01:00
Rainer Killinger e71355a2fb fix: malformed Bearer header in id-cards provider 2024-03-27 09:55:30 +01:00
Theaninova 100607740b fix: angular lsp broken 2024-03-27 09:55:30 +01:00
Thea Schöbl 10c4466b37 feat: update to angular 17 2024-03-27 09:55:30 +01:00
Rainer Killinger 09faa66e98 fix: broken build and test stage 2024-03-27 09:55:30 +01:00
Rainer Killinger 7c5687111f fix: check-icons script in app 2024-03-27 09:55:30 +01:00
Rainer Killinger c066028e49 refactor: update asdf .tool-versions 2024-03-27 09:55:30 +01:00
Theaninova 0858a26dc1 fix: dish prices sometimes go missing 2024-03-27 09:55:30 +01:00
Theaninova 8667603bd6 feat: export core version in package 2024-03-27 09:55:29 +01:00
Theaninova 65bc9a76b6 feat: add syncpack semver ranges 2024-03-27 09:55:29 +01:00
Theaninova 912ae42270 feat: add ability to check for existence of a field 2024-03-27 09:55:29 +01:00
Theaninova c4a5d6e73b fix: exclude app.js and lib from typescript compliation 2024-03-27 09:55:29 +01:00
Theaninova deed376c24 feat: enable checkJs by default 2024-03-27 09:55:29 +01:00
Theaninova a4cc23e9a8 feat: add direnv for nix
feat: update nix flake to not rely on buildFHSUserEnv
2024-03-27 09:55:29 +01:00
Theaninova e8d72683ef fix: backend tests break every year
refactor: update some backend unit tests
2024-03-27 09:55:28 +01:00
Rainer Killinger e3d068f8d4 fix: iOS build resources 2024-03-27 09:55:28 +01:00
Rainer Killinger b346d216a3 refactor: add asdf tool versioning file 2024-03-27 09:55:28 +01:00
Theaninova dbb558508f fix: changeset crashes because it uses internal prettier version 2024-03-27 09:55:28 +01:00
Rainer Killinger 754d99c1b4 refactor: overhaul minimal-deployment compose file 2024-03-27 09:55:27 +01:00
Rainer Killinger 689ac68be3 fix: pin alpine version to 3.18 and add healthchecks 2024-03-06 11:45:40 +01:00
Rainer Killinger d36d9596fc docs: update changelogs for release 2023-12-19 15:32:42 +01:00
Thea Schöbl 8d50f669e7 feat: collapse detail titles into header bar 2023-12-19 14:16:38 +01:00
Jovan Krunić dce08d9c03 fix: reverse workaround after update of capacitor
Closes #179
2023-12-19 13:12:25 +00:00
Rainer Killinger 296054c8e0 docs: update changelogs for release
ci: publish release
2023-12-13 16:42:45 +01:00
Theaninova 859763367e fix: throw error if config import fails
feat: log used config in backend
2023-12-12 14:37:24 +01:00
Rainer Killinger 848fde4660 refactor: increase maxRequestBodySize to 2 MB 2023-12-11 13:00:52 +01:00
Rainer Killinger bd1046a19a docs: update changelogs for release
ci: publish release
2023-12-08 18:03:41 +01:00
Rainer Killinger 3b9068197c fix: pettier config causing changeset to crash 2023-12-08 17:35:00 +01:00
Thea Schöbl d2c8120255 feat: simplify version history api 2023-12-08 13:49:53 +00:00
Theaninova d44204cf8d fix: remove old console.log statements 2023-12-06 17:15:03 +01:00
Theaninova 9d5dd05bb6 refactor: remove nullish coalecing pipe 2023-12-06 17:15:03 +01:00
Theaninova 288a49113f refactor: migrate to strict template checking 2023-12-06 17:14:55 +01:00
Theaninova 791b5c895d fix: hide navigation from jop posting search 2023-12-05 15:51:57 +00:00
Theaninova d7a85b7fae feat: improved e2e tests 2023-12-05 15:17:00 +00:00
Rainer Killinger bff2d985aa refactor: use latest backend (4.1.0) 2023-12-05 12:06:11 +00:00
Rainer Killinger 655efc9d29 fix: map location preview collapsed in webkit 2023-12-05 12:06:11 +00:00
Rainer Killinger 66712bdd24 fix: iOS app not starting 2023-12-05 11:19:46 +00:00
Theaninova 8b5b4c765b fix: my app card layout 2023-12-05 10:36:22 +00:00
Thea Schöbl 31a6ebfd3f feat: upgrade prettier to v3 2023-12-05 10:36:04 +00:00
Rainer Killinger 991ed1cb1f docs: update changelogs for release
ci: publish release
2023-12-01 19:05:06 +01:00
Rainer Killinger 1efe5c1449 refactor: don't open webpack-bundle-analyzer 2023-12-01 18:28:41 +01:00
Rainer Killinger 4dbeb9936c refactor: adjust f-u release version history 2023-12-01 18:19:36 +01:00
Rainer Killinger 29e6128141 fix: resources:ios script not being BSD compatible 2023-12-01 18:15:15 +01:00
520 changed files with 18896 additions and 15358 deletions

No files matched your search

+1
View File
@@ -0,0 +1 @@
use flake
+1
View File
@@ -24,6 +24,7 @@ report-junit.xml
# NixOS flake
result
hsperfdata_root
.direnv/
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
+1
View File
@@ -0,0 +1 @@
pnpm-lock.yaml
+8 -2
View File
@@ -2,7 +2,13 @@
/** @type {import('syncpack').RcFile} */
const config = {
semverRange: '',
semverGroups: [
{
range: '',
dependencies: ['**'],
packages: ['**'],
}
],
source: ['package.json', '**/package.json'],
indent: ' ',
sortFirst: [
@@ -49,7 +55,7 @@ const config = {
{
label: 'Packages should use workspace version',
dependencies: ['@openstapps/**'],
dependencyTypes: ['prod', 'dev'],
dependencyTypes: ['prod', 'dev', 'peer'],
packages: ['**'],
pinVersion: 'workspace:*',
},
+3
View File
@@ -0,0 +1,3 @@
nodejs 22.2.0
pnpm 8.15.4
python 3.11.5
+30
View File
@@ -1,5 +1,35 @@
# @openstapps/backend
## 3.2.0
### Minor Changes
- 912ae422: Add the ability to filter by existence of a field
### Patch Changes
- 689ac68b: pin alpine version to 3.18 and add healthchecks
- e8d72683: Backend unit tests break every year
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
## 3.1.2
### Patch Changes
- Fix backend rejecting plugins
- Fix backend sliently falling back to default configs
## 3.1.1
### Patch Changes
- Fix version history offered by backend
- Updated dependencies
- @openstapps/core@3.1.1
## 3.1.0
### Minor Changes
+2
View File
@@ -9,4 +9,6 @@ ENV NODE_ENV=production
WORKDIR /app
EXPOSE 3000
HEALTHCHECK --interval=10s --timeout=10s --start-period=10s --retries=12 CMD curl -s --fail --request POST --data '{}' --header 'Content-Type: application/json' http://localhost:3000/ >/dev/null || exit 1
ENTRYPOINT ["node", "app.js"]
@@ -1,5 +1,3 @@
// @ts-check
/**
* This is the database configuration for the technical university of berlin
*
@@ -1,4 +1,3 @@
// @ts-check
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCLanguageSetting} */
@@ -1,4 +1,3 @@
// @ts-check
/** @type {import('@openstapps/core').SCAppConfigurationMenuCategory[]} */
const menus = [
{
@@ -1,4 +1,3 @@
// @ts-check
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCUserGroupSetting} */
@@ -1,4 +1,3 @@
// @ts-check
import {SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCBackendAggregationConfiguration[]} */
@@ -1,4 +1,3 @@
// @ts-check
import {
month,
sommerRange,
@@ -1,4 +1,3 @@
// @ts-check
import {SCThingType} from '@openstapps/core';
import aggregations from './aggregations.js';
import boostings from './boostings.js';
@@ -17,7 +16,7 @@ export const backend = {
hiddenTypes: [SCThingType.DateSeries, SCThingType.Diff, SCThingType.Floor],
mappingIgnoredTags: ['minlength', 'pattern', 'see', 'tjs-format'],
maxMultiSearchRouteQueries: 5,
maxRequestBodySize: 512 * 1024,
maxRequestBodySize: 2e6,
name: 'Goethe-Universität Frankfurt am Main',
namespace: '909a8cbc-8520-456c-b474-ef1525f14209',
sortableFields: [
@@ -1,4 +1,3 @@
// @ts-check
import app from './app/index.js';
import {backend, internal} from './backend/index.js';
@@ -1,5 +1,3 @@
// @ts-check
/**
* This is the default configuration for elasticsearch (a database)
*
@@ -11,13 +9,13 @@
*
* To get more information about the meaning of specific fields, please use your IDE to read the TSDoc documentation.
*
* @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js')}
* @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile}
*/
const config = {
internal: {
database: {
name: 'elasticsearch',
version: '5.6',
version: '8.4.2',
query: {
minMatch: '75%',
queryType: 'dis_max',
@@ -1,4 +1,3 @@
// @ts-check
import {readFile} from 'fs/promises';
import {SCAboutPageContentType} from '@openstapps/core';
@@ -1,4 +1,3 @@
// @ts-check
/**
* Generates a range of numbers that represent consecutive calendar months
*
+10 -15
View File
@@ -1,5 +1,6 @@
// @ts-check
import {readFile} from 'fs/promises';
import {readFile, readdir} from 'fs/promises';
import url from 'url';
import path from 'path';
/**
* @example version(1, import.meta.url)
@@ -23,20 +24,14 @@ export async function version(options, base) {
}
/**
* @param infos {Record<string, import('@openstapps/core').SCAppVersionInfo['published']>}
* @param base {string} Base path of the file as `import.meta.url`
* @returns {Promise<import('@openstapps/core').SCAppVersionInfo[]>}
*/
export async function versions(infos, base) {
return Promise.all(
Object.entries(infos).map(([versionName, published]) =>
version(
{
published,
version: versionName,
},
base,
),
),
).then(it => it.sort(({version: a}, {version: b}) => -a.localeCompare(b, undefined, {numeric: true})));
export async function versions(base) {
const directory = await readdir(path.dirname(url.fileURLToPath(base)));
const versions = [
...new Set(directory.filter(it => it.endsWith('.md')).map(it => it.replace(/\.\w+\.md$/, ''))),
].sort((a, b) => -a.localeCompare(b, undefined, {numeric: true}));
return Promise.all(versions.map(versionName => version({version: versionName}, base)));
}
@@ -1,4 +1,3 @@
// @ts-check
import {SCAboutPageContentType} from '@openstapps/core';
import {markdown} from '../../default/tools/markdown.js';
@@ -1,4 +1,3 @@
// @ts-check
import {SCAboutPageContentType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCAboutPage} */
@@ -1,4 +1,3 @@
// @ts-check
import about from './about.js';
import imprint from './imprint.js';
import privacy from './privacy.js';
@@ -1,4 +1,3 @@
// @ts-check
import {markdown} from '../../default/tools/markdown.js';
/** @type {import('@openstapps/core').SCAboutPage} */
-1
View File
@@ -1,4 +1,3 @@
// @ts-check
import aboutPages from './about-pages/index.js';
import defaultApp from '../default/app/index.js';
import {backend as defaultBackend, internal as defaultInternal} from '../default/backend/index.js';
@@ -1,4 +1,4 @@
# Goethe-Uni App 3.1
# Goethe-Uni App 2.4
Wir freuen uns euch mehr in der Goethe-Uni App
bieten zu können.
@@ -1,4 +1,4 @@
# Goethe-Uni App 3.1
# Goethe-Uni App 2.4
The Goethe-Uni App got even better!
@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
Die Goethe-Uni App ist noch besser geworden!
## Komplett neue Kartenansicht
Wir haben die Karte überarbeitet, um eine klarere und schnellere Übersicht zu bieten.
## Deutschlandticket mit an Bord
Wenn du das Upgrade des Semesterticket zum Deutschlandticket gemacht hast und eingeloggt bist, findet es sich jetzt auch in der App.
## Bibliotheksdienste sind wieder voll funktionsfähig
Aufgrund einiger Adhoc-Änderungen im Bibliothekssystem haben wir die App so angepasst, dass sie damit umgehen kann.
@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
The Goethe-Uni App got even better!
## Completelty new map view
We overhauled the map to offer you a clearer and faster and overview.
## Deutschlandticket included
If you upgraded your Semesterticket to a Deutschlandticket it will now reside in the App if you are logged in.
## Library services are fully functional again
Due to some adhoc changes in the library system we adjusted the app to handle them properly.
@@ -1,12 +1,6 @@
// @ts-check
import {versions} from '../../default/tools/version.js';
/** @type {import('@openstapps/core').SCAppVersionInfo[]} */
const versionHistory = await versions(
{
'3.1.0': {},
},
import.meta.url,
);
const versionHistory = await versions(import.meta.url);
export default versionHistory;
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@openstapps/backend",
"description": "A reference implementation for a StApps backend",
"version": "3.1.0",
"version": "3.2.0",
"private": true,
"type": "module",
"license": "AGPL-3.0-only",
@@ -64,7 +64,7 @@
"express-prom-bundle": "6.6.0",
"express-promise-router": "4.1.1",
"got": "12.6.0",
"moment": "2.29.4",
"moment": "2.30.1",
"morgan": "1.10.0",
"nock": "13.3.1",
"node-cache": "5.1.2",
@@ -98,9 +98,9 @@
"sinon": "15.0.4",
"sinon-express-mock": "2.2.1",
"supertest": "6.3.3",
"ts-node": "10.9.1",
"ts-node": "10.9.2",
"tsup": "6.7.0",
"typescript": "5.1.6"
"typescript": "5.4.2"
},
"tsup": {
"entry": [
+19 -24
View File
@@ -2,6 +2,7 @@ import {cosmiconfig, PublicExplorer} from 'cosmiconfig';
import {SCConfigFile} from '@openstapps/core';
import path from 'path';
import deepmerge from 'deepmerge';
import {Logger} from '@openstapps/logger';
const fallbackNamespace = 'default';
const configPath = 'config';
@@ -23,31 +24,25 @@ function configLoader(moduleName: string): PublicExplorer {
* Find and load a config file
*/
async function findConfig<T>(moduleName: string, namespace = fallbackNamespace): Promise<T> {
return configLoader(moduleName)
.search(path.posix.join('.', configPath, namespace))
.then(it => it!.config as T)
.catch(() =>
configLoader(moduleName)
.search(path.posix.join('.', configPath, fallbackNamespace))
.then(it => it!.config),
);
}
const config = await configLoader(moduleName).search(path.posix.join('.', configPath, namespace));
/**
* Loads a config file
*/
async function loadConfig<T>(moduleName: string): Promise<T> {
const namespace = process.env.NODE_APP_INSTANCE;
const database = process.env.NODE_CONFIG_ENV;
const config = await findConfig<T>(moduleName, namespace);
if (database) {
const databaseConfig = await findConfig<T>(database, namespace);
return deepmerge(config, databaseConfig);
if (config) {
Logger.info(`Using ${namespace} config for ${moduleName}`);
return config.config;
} else {
Logger.info(`Using ${fallbackNamespace} config for ${moduleName}`);
return configLoader(moduleName)
.search(path.posix.join('.', configPath, fallbackNamespace))
.then(it => it!.config);
}
return config;
}
export const backendConfig = await loadConfig<SCConfigFile>('backend');
export const prometheusConfig = await loadConfig<unknown>('prometheus');
const namespace = process.env.NODE_APP_INSTANCE;
const database = process.env.NODE_CONFIG_ENV;
export const prometheusConfig = await findConfig<unknown>('prometheus', namespace);
const backendConfigWithoutDatabase = await findConfig<SCConfigFile>('backend', namespace);
export const backendConfig = database
? deepmerge(backendConfigWithoutDatabase, await findConfig<never>(database, namespace))
: backendConfigWithoutDatabase;
+25 -1
View File
@@ -13,15 +13,34 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCConfigFile, SCSearchQuery, SCSearchResponse, SCThings, SCUuid} from '@openstapps/core';
import {
SCConfigFile,
SCPlace,
SCPlaceWithoutReferences,
SCSearchQuery,
SCSearchResponse,
SCThingWithCategoriesWithoutReferences,
SCThings,
SCUuid,
} from '@openstapps/core';
import {MailQueue} from '../notification/mail-queue.js';
import {Bulk} from './bulk-storage.js';
import {FeatureCollection, Point, Polygon} from 'geojson';
/**
* Creates an instance of a database
*/
export type DatabaseConstructor = new (config: SCConfigFile, mailQueue?: MailQueue) => Database;
export type SupplementaryGeoJSON = FeatureCollection<Point | Polygon, SupplementaryGeoJSONThing>;
export type SupplementaryGeoJSONThing = Pick<
Extract<SCThings, SCPlace>,
Exclude<
keyof SCPlaceWithoutReferences | keyof SCThingWithCategoriesWithoutReferences<never, never>,
'geo' | 'origin' | 'translations'
>
>;
/**
* Defines what one database class needs to have defined
*/
@@ -82,4 +101,9 @@ export interface Database {
* @param params Parameters which form a search query to search the backend data
*/
search(parameters: SCSearchQuery): Promise<SCSearchResponse>;
/**
* Get geo info for display on a map
*/
geo(): Promise<SupplementaryGeoJSON>;
}
@@ -26,7 +26,7 @@ import {Logger} from '@openstapps/logger';
import moment from 'moment';
import {MailQueue} from '../../notification/mail-queue.js';
import {Bulk} from '../bulk-storage.js';
import {Database} from '../database.js';
import {Database, SupplementaryGeoJSON, SupplementaryGeoJSONThing} from '../database.js';
import {parseAggregations} from './aggregations.js';
import * as Monitoring from './monitoring.js';
import {buildQuery} from './query/query.js';
@@ -46,6 +46,7 @@ import {
} from './util/index.js';
import {noUndefined} from './util/no-undefined.js';
import {retryCatch, RetryOptions} from './util/retry.js';
import {Feature, Point, Polygon} from 'geojson';
/**
* A database interface for elasticsearch
@@ -84,7 +85,10 @@ export class Elasticsearch implements Database {
* @param config an assembled config file
* @param mailQueue a mail queue for monitoring
*/
constructor(private readonly config: SCConfigFile, mailQueue?: MailQueue) {
constructor(
private readonly config: SCConfigFile,
mailQueue?: MailQueue,
) {
if (config.internal.database === undefined || typeof config.internal.database.version !== 'string') {
throw new TypeError('Database version is undefined. Check your config file');
}
@@ -402,4 +406,49 @@ export class Elasticsearch implements Database {
},
};
}
async geo(): Promise<SupplementaryGeoJSON> {
const searchResponse = await this.client.search<Extract<SCThings, {geo: unknown}>>({
body: {
query: {
exists: {
field: 'geo',
},
},
},
from: 0,
allow_no_indices: true,
index: ACTIVE_INDICES_ALIAS,
size: 1,
});
return {
type: 'FeatureCollection',
features: searchResponse.hits.hits
.map(thing => {
return thing._source?.geo
? ({
id: Number(thing._source.identifiers?.['OSM']) || undefined,
type: 'Feature',
geometry: thing._source.geo.polygon ?? thing._source.geo.point,
properties: {
name: thing._source.name,
sameAs: thing._source.sameAs,
image: thing._source.image,
alternateNames: thing._source.alternateNames,
description: thing._source.description,
identifiers: thing._source.identifiers,
categories: thing._source.categories,
categorySpecificValues: thing._source.categorySpecificValues,
openingHours: thing._source.openingHours,
address: thing._source.address,
uid: thing._source.uid,
type: thing._source.type,
},
} satisfies Feature<Polygon | Point, SupplementaryGeoJSONThing>)
: undefined;
})
.filter(noUndefined),
};
}
}
@@ -19,14 +19,29 @@ import {QueryDslSpecificQueryContainer} from '../../types/util.js';
* Converts a geo filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildGeoFilter(filter: SCGeoFilter): QueryDslSpecificQueryContainer<'geo_shape'> {
export function buildGeoFilter(filter: SCGeoFilter): QueryDslSpecificQueryContainer<'bool'> {
return {
geo_shape: {
ignore_unmapped: true,
[`${filter.arguments.field}.polygon`]: {
shape: filter.arguments.shape,
relation: filter.arguments.spatialRelation,
},
bool: {
should: [
{
geo_shape: {
ignore_unmapped: true,
[`${filter.arguments.field}.polygon`]: {
shape: filter.arguments.shape,
relation: filter.arguments.spatialRelation,
},
},
} satisfies QueryDslSpecificQueryContainer<'geo_shape'>,
{
geo_shape: {
ignore_unmapped: true,
[`${filter.arguments.field}.point`]: {
shape: filter.arguments.shape,
relation: filter.arguments.spatialRelation,
},
},
} satisfies QueryDslSpecificQueryContainer<'geo_shape'>,
],
},
};
}
@@ -21,16 +21,31 @@ import {QueryDslSpecificQueryContainer} from '../../types/util.js';
*/
export function buildValueFilter(
filter: SCSearchValueFilter,
): QueryDslSpecificQueryContainer<'term'> | QueryDslSpecificQueryContainer<'terms'> {
return Array.isArray(filter.arguments.value)
? {
terms: {
[`${filter.arguments.field}.raw`]: filter.arguments.value,
):
| QueryDslSpecificQueryContainer<'exists'>
| QueryDslSpecificQueryContainer<'term'>
| QueryDslSpecificQueryContainer<'terms'> {
switch (typeof filter.arguments.value) {
case 'undefined': {
return {
exists: {
field: filter.arguments.field,
},
}
: {
};
}
case 'string': {
return {
term: {
[`${filter.arguments.field}.raw`]: filter.arguments.value,
},
};
}
case 'object': {
return {
terms: {
[`${filter.arguments.field}.raw`]: filter.arguments.value,
},
};
}
}
}
+5 -2
View File
@@ -22,7 +22,7 @@ import http from 'http';
import {MailQueue} from '../src/notification/mail-queue.js';
import {Bulk, BulkStorage} from '../src/storage/bulk-storage.js';
import getPort from 'get-port';
import {Database} from '../src/storage/database.js';
import {Database, SupplementaryGeoJSON} from '../src/storage/database.js';
import {v4} from 'uuid';
import {backendConfig} from '../src/config.js';
import {getIndexUID} from '../src/storage/elasticsearch/util/index.js';
@@ -58,7 +58,6 @@ export async function startApp(): Promise<Express> {
* An elasticsearch mock
*/
export class ElasticsearchMock implements Database {
// @ts-expect-error never read
private bulk: Bulk | undefined;
private storageMock = new Map<string, SCThings>();
@@ -67,6 +66,10 @@ export class ElasticsearchMock implements Database {
// Nothing to do here
}
geo(): Promise<SupplementaryGeoJSON> {
throw new Error('Method not implemented.');
}
bulkCreated(bulk: Bulk): Promise<void> {
this.bulk = bulk;
return Promise.resolve(undefined);
+17 -15
View File
@@ -14,6 +14,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCBook,
SCBulkAddRoute,
SCBulkDoneRoute,
SCBulkRequest,
@@ -23,29 +24,30 @@ import {
import {expect} from 'chai';
import {bulk, DEFAULT_TEST_TIMEOUT} from '../common.js';
import {testApp} from '../tests-setup.js';
import {readFile} from 'fs/promises';
import {v4} from 'uuid';
import bookFile from '@openstapps/core/test/resources/indexable/Book.2.json' assert {type: 'json'};
const book = JSON.parse(
await readFile('node_modules/@openstapps/core/test/resources/indexable/Book.2.json', 'utf8'),
).instance;
const book = bookFile.instance as SCBook;
describe('Bulk routes', async function () {
// increase timeout for the suite
this.timeout(DEFAULT_TEST_TIMEOUT);
const request: SCBulkRequest = {
expiration: bulk.expiration,
source: bulk.source,
type: bulk.type,
};
const bulkRoute = new SCBulkRoute();
const bulkAddRoute = new SCBulkAddRoute();
const bulkDoneRoute = new SCBulkDoneRoute();
let request: SCBulkRequest;
let bulkRoute: SCBulkRoute;
let bulkAddRoute: SCBulkAddRoute;
let bulkDoneRoute: SCBulkDoneRoute;
// afterEach(async function() {
// TODO: Delete saved bulks
// });
before(function () {
request = {
expiration: bulk.expiration,
source: bulk.source,
type: bulk.type,
};
bulkRoute = new SCBulkRoute();
bulkAddRoute = new SCBulkAddRoute();
bulkDoneRoute = new SCBulkDoneRoute();
});
it('should create bulk', async function () {
const {status, body, error} = await testApp
@@ -21,7 +21,12 @@ import {expect} from 'chai';
describe('Index route', async function () {
// increase timeout for the suite
this.timeout(DEFAULT_TEST_TIMEOUT);
const indexRoute = new SCIndexRoute();
let indexRoute: SCIndexRoute;
before(function () {
indexRoute = new SCIndexRoute();
});
it('should respond with both app and backend configuration', async function () {
const request: SCIndexRequest = {};
@@ -30,15 +30,11 @@ import chaiAsPromised from 'chai-as-promised';
import {DEFAULT_TEST_TIMEOUT} from '../common.js';
import {testApp} from '../tests-setup.js';
import {backendConfig} from '../../src/config.js';
import {readFile} from 'fs/promises';
import registerRequest from '@openstapps/core/test/resources/PluginRegisterRequest.1.json' assert {type: 'json'};
// for using promises in expectations (to.eventually.be...)
use(chaiAsPromised);
const registerRequest = JSON.parse(
await readFile('node_modules/@openstapps/core/test/resources/PluginRegisterRequest.1.json', 'utf8'),
);
// cast it because of "TS2322: Type 'string' is not assignable to type '"add"'"
export const registerAddRequest: SCPluginAdd = registerRequest.instance as SCPluginAdd;
+5 -2
View File
@@ -47,8 +47,8 @@ describe('Create route', async function () {
const statusCodeSuccess = 222;
const bodySuccess = {foo: true};
const sandbox = sinon.createSandbox();
const validationError = new SCValidationErrorResponse([]);
const internalServerError = new SCInternalServerErrorResponse();
let validationError: SCValidationErrorResponse;
let internalServerError: SCInternalServerErrorResponse;
beforeEach(function () {
app = express();
@@ -64,6 +64,9 @@ describe('Create route', async function () {
handler = (_request, _app) => {
return Promise.resolve(bodySuccess);
};
validationError = new SCValidationErrorResponse([]);
internalServerError = new SCInternalServerErrorResponse();
});
afterEach(function () {
@@ -29,14 +29,21 @@ import {backendConfig} from '../../src/config.js';
describe('Search route', async function () {
// increase timeout for the suite
this.timeout(DEFAULT_TEST_TIMEOUT);
const searchRoute = new SCSearchRoute();
const multiSearchRoute = new SCMultiSearchRoute();
const syntaxError = new SCSyntaxErrorResponse('Foo Message');
const methodNotAllowedError = new SCMethodNotAllowedErrorResponse();
const tooManyRequestsError = new SCTooManyRequestsErrorResponse();
let searchRoute: SCSearchRoute;
let multiSearchRoute: SCMultiSearchRoute;
let syntaxError: SCSyntaxErrorResponse;
let methodNotAllowedError: SCMethodNotAllowedErrorResponse;
let tooManyRequestsError: SCTooManyRequestsErrorResponse;
before(function () {
searchRoute = new SCSearchRoute();
multiSearchRoute = new SCMultiSearchRoute();
syntaxError = new SCSyntaxErrorResponse('Foo Message');
methodNotAllowedError = new SCMethodNotAllowedErrorResponse();
tooManyRequestsError = new SCTooManyRequestsErrorResponse();
});
it('should reject GET, PUT with a valid search query', async function () {
// const expectedParams = JSON.parse(JSON.stringify(defaultParams));
const {status} = await testApp.get('/search').set('Accept', 'application/json').send({
query: 'Some search terms',
});
@@ -13,23 +13,25 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCThingUpdateRoute} from '@openstapps/core';
import {SCBook, SCThingUpdateRoute} from '@openstapps/core';
import chaiAsPromised from 'chai-as-promised';
import {bulkStorageMock, DEFAULT_TEST_TIMEOUT} from '../common.js';
import {expect, use} from 'chai';
import {testApp} from '../tests-setup.js';
import {readFile} from 'fs/promises';
import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' assert {type: 'json'};
use(chaiAsPromised);
const book = JSON.parse(
await readFile('node_modules/@openstapps/core/test/resources/indexable/Book.1.json', 'utf8'),
).instance;
const book = bookFile.instance as SCBook;
describe('Thing update route', async function () {
// increase timeout for the suite
this.timeout(DEFAULT_TEST_TIMEOUT);
const thingUpdateRoute = new SCThingUpdateRoute();
let thingUpdateRoute: SCThingUpdateRoute;
before(function () {
thingUpdateRoute = new SCThingUpdateRoute();
});
it('should update a thing', async function () {
const thingUpdateRouteurlPath = thingUpdateRoute.urlPath
@@ -39,7 +39,6 @@ import {Elasticsearch} from '../../../src/storage/elasticsearch/elasticsearch.js
import {bulk, DEFAULT_TEST_TIMEOUT, getTransport, getIndex} from '../../common.js';
import fs from 'fs';
import {backendConfig} from '../../../src/config.js';
import {readFile} from 'fs/promises';
import {
ACTIVE_INDICES_ALIAS,
getIndexUID,
@@ -50,6 +49,11 @@ import {
} from '../../../src/storage/elasticsearch/util/index.js';
import cron from 'node-cron';
import {query} from './query.js';
import messageFile from '@openstapps/core/test/resources/indexable/Message.1.json' assert {type: 'json'};
import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' assert {type: 'json'};
const message = messageFile.instance as SCMessage;
const book = bookFile.instance as SCBook;
use(chaiAsPromised);
@@ -60,13 +64,6 @@ function searchResponse<T>(...hits: SearchHit<T>[]): SearchResponse<T> {
return {hits: {hits}, took: 0, timed_out: false, _shards: {total: 1, failed: 0, successful: 1}};
}
const message = JSON.parse(
await readFile('node_modules/@openstapps/core/test/resources/indexable/Message.1.json', 'utf8'),
);
const book = JSON.parse(
await readFile('node_modules/@openstapps/core/test/resources/indexable/Book.1.json', 'utf8'),
);
describe('Elasticsearch', function () {
// increase timeout for the suite
this.timeout(DEFAULT_TEST_TIMEOUT);
@@ -74,8 +71,15 @@ describe('Elasticsearch', function () {
before(function () {
// eslint-disable-next-line no-console
console.log('before');
sandbox.stub(fs, 'readFileSync').returns('{}');
sandbox.stub(backendConfig.internal.boostings.default[0], 'fields').value({
'academicTerms.acronym': {
'SS 2023': 1.05,
'WS 2023/24': 1.1,
'SoSe 2023': 1.05,
'WiSe 2023/24': 1.1,
},
});
});
after(function () {
sandbox.restore();
@@ -445,7 +449,7 @@ describe('Elasticsearch', function () {
_id: '',
_index: '',
_score: 0,
_source: message as SCMessage,
_source: message,
};
sandbox.stub(es.client, 'search').resolves(searchResponse(foundObject));
@@ -475,7 +479,7 @@ describe('Elasticsearch', function () {
const object: SearchHit<SCMessage> = {
_id: '',
_index: oldIndex,
_source: message as SCMessage,
_source: message,
};
sandbox.stub(es.client, 'search').resolves(searchResponse<SCMessage>(object));
sandbox.stub(es, 'prepareBulkWrite').resolves(index);
@@ -489,7 +493,7 @@ describe('Elasticsearch', function () {
sandbox.stub(es.client, 'create').resolves({result: 'not_found'} as CreateResponse);
await es.init();
return expect(es.post(message as SCMessage, bulk)).to.rejectedWith('creation');
return expect(es.post(message, bulk)).to.rejectedWith('creation');
});
it('should create a new object', async function () {
@@ -502,7 +506,7 @@ describe('Elasticsearch', function () {
});
await es.init();
await es.post(message as SCMessage, bulk);
await es.post(message, bulk);
expect(createStub.called).to.be.true;
expect(caughtParameter.document).to.be.eql({
@@ -527,7 +531,7 @@ describe('Elasticsearch', function () {
_id: '',
_index: getIndex(),
_score: 0,
_source: message as SCMessage,
_source: message,
};
sandbox.stub(es.client, 'search').resolves(searchResponse());
@@ -541,7 +545,7 @@ describe('Elasticsearch', function () {
_id: '',
_index: getIndex(),
_score: 0,
_source: message as SCMessage,
_source: message,
};
sandbox.stub(es.client, 'search').resolves(searchResponse(object));
// @ts-expect-error unused
@@ -564,13 +568,13 @@ describe('Elasticsearch', function () {
_id: '123',
_index: getIndex(),
_score: 0,
_source: message as SCMessage,
_source: message,
};
const objectBook: SearchHit<SCBook> = {
_id: '321',
_index: getIndex(),
_score: 0,
_source: book as SCBook,
_source: book,
};
const fakeEsAggregations = {
'@all': {
@@ -479,18 +479,39 @@ describe('Query', function () {
it('should build geo filter for shapes and points', function () {
const filter = buildFilter(searchFilters.geoPoint);
const expectedFilter = {
geo_shape: {
'geo.polygon': {
relation: undefined,
shape: {
type: 'envelope',
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
bool: {
should: [
{
geo_shape: {
'geo.polygon': {
relation: undefined,
shape: {
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
type: 'envelope',
},
},
'ignore_unmapped': true,
},
},
},
'ignore_unmapped': true,
{
geo_shape: {
'geo.point': {
relation: undefined,
shape: {
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
type: 'envelope',
},
},
'ignore_unmapped': true,
},
},
],
},
};
@@ -500,18 +521,39 @@ describe('Query', function () {
it('should build geo filter for shapes only', function () {
const filter = buildFilter(searchFilters.geoShape);
const expectedFilter = {
geo_shape: {
'geo.polygon': {
relation: 'contains',
shape: {
type: 'envelope',
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
bool: {
should: [
{
geo_shape: {
'geo.polygon': {
relation: 'contains',
shape: {
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
type: 'envelope',
},
},
'ignore_unmapped': true,
},
},
},
'ignore_unmapped': true,
{
geo_shape: {
'geo.point': {
relation: 'contains',
shape: {
coordinates: [
[50.123, 8.123],
[50.123, 8.123],
],
type: 'envelope',
},
},
'ignore_unmapped': true,
},
},
],
},
};
+3 -3
View File
@@ -2,7 +2,7 @@
"extends": "@openstapps/tsconfig",
"compilerOptions": {
"resolveJsonModule": true,
"useUnknownInCatchVariables": false,
"allowJs": true
}
"useUnknownInCatchVariables": false
},
"exclude": ["lib", "app.js"]
}
+6
View File
@@ -1,5 +1,11 @@
# @openstapps/database
## 3.2.0
### Patch Changes
- 689ac68b: pin alpine version to 3.18 and add healthchecks
## 3.0.0
### Patch Changes
+2
View File
@@ -14,4 +14,6 @@ RUN chown elasticsearch:elasticsearch config/elasticsearch.yml
USER elasticsearch
HEALTHCHECK --interval=10s --timeout=10s --start-period=60s --retries=12 CMD curl --fail -s http://localhost:9200/ >/dev/null || exit 1
CMD ["/usr/share/elasticsearch/bin/elasticsearch"]
@@ -3,3 +3,4 @@ discovery.type: "single-node"
cluster.routing.allocation.disk.threshold_enabled: false
network.bind_host: 0.0.0.0
xpack.security.enabled: false
ingest.geoip.downloader.enabled: false
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@openstapps/database",
"version": "3.0.0",
"version": "3.2.0",
"private": true,
"files": [
"config",
+1 -3
View File
@@ -16,7 +16,7 @@
// ESM is not supported, and cts is not detected, so we use type-checked cjs instead.
/** @type {import('../src/common').ConfigFile} */
const configFile = {
module.exports = {
activeVersions: ['1\\.0\\.\\d+', '2\\.0\\.\\d+'],
hiddenRoutes: ['/bulk'],
logFormat: 'default',
@@ -31,5 +31,3 @@ const configFile = {
dhparam: '/etc/nginx/certs/dhparam.pem',
},
};
export default configFile;
+4 -4
View File
@@ -50,8 +50,8 @@
"dockerode": "3.3.5",
"is-cidr": "4.0.2",
"mustache": "4.2.0",
"semver": "7.3.8",
"typescript": "5.1.6"
"semver": "7.6.0",
"typescript": "5.4.2"
},
"devDependencies": {
"@openstapps/api-cli": "workspace:*",
@@ -65,7 +65,7 @@
"@types/mustache": "4.2.2",
"@types/node": "18.15.3",
"@types/proxyquire": "1.3.28",
"@types/semver": "7.3.13",
"@types/semver": "7.5.8",
"@types/sha1": "1.1.3",
"@types/sinon": "10.0.14",
"@types/sinon-chai": "3.2.9",
@@ -75,7 +75,7 @@
"mocha-junit-reporter": "2.2.0",
"sinon": "15.0.4",
"sinon-chai": "3.7.0",
"ts-node": "10.9.1",
"ts-node": "10.9.2",
"tsup": "6.7.0"
},
"tsup": {
+1 -1
View File
@@ -1,4 +1,4 @@
{
"extends": "@openstapps/tsconfig",
"exclude": ["./config/", "./lib/"]
"exclude": ["config", "lib", "app.js"]
}
@@ -1,4 +1,3 @@
// @ts-check
const fs = require("fs");
const path = require("node:path");
const child_process = require("child_process");
@@ -1,4 +1,3 @@
// @ts-check
"use strict"
const rule = require('./copyright-header-rule')
-2
View File
@@ -1,5 +1,3 @@
// @ts-check
/** @type {import('eslint').Linter.Config} */
const config = {
root: true,
+8 -9
View File
@@ -18,16 +18,15 @@
"devDependencies": {
"@openstapps/tsconfig": "workspace:*",
"@types/node": "18.15.3",
"eslint": "8.43.0",
"typescript": "5.1.6"
"eslint": "8.57.0",
"typescript": "5.4.2"
},
"peerDependencies": {
"@typescript-eslint/eslint-plugin": "5.60.1",
"@typescript-eslint/parser": "5.60.1",
"eslint": "8.43.0",
"eslint-config-prettier": "8.8.0",
"eslint-plugin-jsdoc": "46.4.2",
"eslint-plugin-prettier": "4.2.1",
"eslint-plugin-unicorn": "47.0.0"
"@typescript-eslint/eslint-plugin": "7.2.0",
"@typescript-eslint/parser": "7.2.0",
"eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-jsdoc": "48.2.1",
"eslint-plugin-unicorn": "51.0.1"
}
}
+20 -8
View File
@@ -1,5 +1,11 @@
# @openstapps/prettier-config
## 3.2.0
### Patch Changes
- dbb55850: Update Prettier to 3.1.1
## 3.0.0
### Major Changes
@@ -30,7 +36,7 @@
```js
#!/usr/bin/env node
import './lib/app.js';
import "./lib/app.js";
```
- 64caebaf: Migrate to ESM
@@ -69,11 +75,14 @@
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
import fs from "fs";
const path = 'packages/logger/CHANGELOG.md';
const path = "packages/logger/CHANGELOG.md";
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
fs.writeFileSync(
path,
fs.readFileSync(path, "utf8").replace(/^#+\s+\[/gm, "## ["),
);
```
- 98546a97: Migrate away from @openstapps/configuration
@@ -115,7 +124,7 @@
```js
#!/usr/bin/env node
import './lib/app.js';
import "./lib/app.js";
```
- 64caebaf: Migrate to ESM
@@ -154,11 +163,14 @@
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
import fs from "fs";
const path = 'packages/logger/CHANGELOG.md';
const path = "packages/logger/CHANGELOG.md";
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
fs.writeFileSync(
path,
fs.readFileSync(path, "utf8").replace(/^#+\s+\[/gm, "## ["),
);
```
- 98546a97: Migrate away from @openstapps/configuration
+15
View File
@@ -0,0 +1,15 @@
/** @type {import('prettier').Config} */
const config = {
tabWidth: 2,
printWidth: 110,
useTabs: false,
semi: true,
singleQuote: true,
quoteProps: 'consistent',
trailingComma: 'all',
bracketSpacing: false,
arrowParens: 'avoid',
endOfLine: 'lf'
}
export default config;
-13
View File
@@ -1,13 +0,0 @@
{
"$schema": "http://json.schemastore.org/prettierrc",
"tabWidth": 2,
"printWidth": 110,
"useTabs": false,
"semi": true,
"singleQuote": true,
"quoteProps": "consistent",
"trailingComma": "all",
"bracketSpacing": false,
"arrowParens": "avoid",
"endOfLine": "lf"
}
+8 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@openstapps/prettier-config",
"description": "StApps Prettier Config",
"version": "3.0.0",
"version": "3.2.0",
"type": "module",
"license": "GPL-3.0-only",
"repository": "git@gitlab.com:openstapps/prettier-config.git",
@@ -9,16 +9,19 @@
"contributors": [
"Rainer Killinger <mail-openstapps@killinger.co>"
],
"main": "index.json",
"main": "index.js",
"files": [
"index.json",
"index.js",
"CHANGELOG.md",
"README.md"
],
"scripts": {
"test": "npx prettier --config index.json --check \"test/*.js\""
"test": "prettier --config index.js --check \"test/*.js\""
},
"devDependencies": {
"prettier": "3.1.1"
},
"peerDependencies": {
"prettier": "2.8.6"
"prettier": "3.1.1"
}
}
+5 -5
View File
@@ -43,8 +43,8 @@
"@openstapps/logger": "workspace:*",
"@slack/web-api": "6.8.1",
"commander": "10.0.0",
"date-fns": "2.30.0",
"glob": "10.2.7",
"date-fns": "3.6.0",
"glob": "10.3.10",
"mustache": "4.2.0"
},
"devDependencies": {
@@ -53,7 +53,7 @@
"@openstapps/tsconfig": "workspace:*",
"@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.5",
"@types/glob": "8.0.1",
"@types/glob": "8.1.0",
"@types/mocha": "10.0.1",
"@types/mustache": "4.2.2",
"@types/node": "18.15.3",
@@ -63,9 +63,9 @@
"chai-as-promised": "7.1.1",
"mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0",
"ts-node": "10.9.1",
"ts-node": "10.9.2",
"tsup": "6.7.0",
"typescript": "5.1.6"
"typescript": "5.4.2"
},
"tsup": {
"entry": [
@@ -1,3 +1,4 @@
{
"extends": "@openstapps/tsconfig"
"extends": "@openstapps/tsconfig",
"exclude": ["lib", "app.js"]
}
+11 -4
View File
@@ -14,19 +14,26 @@
"noFallthroughCasesInSwitch": true,
"isolatedModules": true,
"allowJs": true,
"checkJs": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"outDir": "../../../lib/",
"lib": ["ES2022", "DOM"],
"lib": [
"ES2022",
"DOM"
],
"strict": true,
"target": "ES2022"
},
"ts-node": {
"transpileOnly": true
},
"exclude": ["../../../app.js", "../../../lib/"]
"exclude": [
"../../../app.js",
"../../../lib/"
]
}
+17
View File
@@ -1,5 +1,22 @@
# @openstapps/minimal-connector
## 3.2.0
### Patch Changes
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/api@4.0.0
- @openstapps/logger@3.0.0
## 3.1.1
### Patch Changes
- Updated dependencies
- @openstapps/api@3.1.1
- @openstapps/core@3.1.1
## 3.1.0
### Patch Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@openstapps/minimal-connector",
"description": "This is a minimal connector which serves as an example",
"version": "3.1.0",
"version": "3.2.0",
"private": true,
"type": "module",
"license": "GPL-3.0-only",
@@ -53,9 +53,9 @@
"mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0",
"nock": "13.3.1",
"ts-node": "10.9.1",
"ts-node": "10.9.2",
"tsup": "6.7.0",
"typescript": "5.1.6"
"typescript": "5.4.2"
},
"tsup": {
"entry": [
+2 -1
View File
@@ -1,3 +1,4 @@
{
"extends": "@openstapps/tsconfig"
"extends": "@openstapps/tsconfig",
"exclude": ["lib", "app.js"]
}
+42 -24
View File
@@ -1,44 +1,62 @@
version: '3.7'
x-development-variables: &development-variables
NODE_ENV: "development"
ALLOW_NO_TRANSPORT: "true"
services:
database:
image: registry.gitlab.com/openstapps/openstapps/database:2.0.0
volumes:
- ./database:/usr/share/elasticsearch/data
image: registry.gitlab.com/openstapps/openstapps/database:3.0.0
# If you need persistence for debugging purposes uncomment the following lines
#volumes:
# - ./database:/usr/share/elasticsearch/data
expose:
- "9200"
- 9200
ports:
- 127.0.0.1:9200:9200
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
restart: unless-stopped
backend:
image: registry.gitlab.com/openstapps/openstapps/backend:3.0.0-next.0
image: registry.gitlab.com/openstapps/openstapps/backend:3.1.0
environment:
<<: *development-variables
ES_ADDR: "http://database:9200"
NODE_CONFIG_ENV: "elasticsearch"
ALLOW_NO_TRANSPORT: "true"
NODE_APP_INSTANCE: "f-u"
PROMETHEUS_MIDDLEWARE: "false"
expose:
- 3000
ports:
- 3000:3000
links:
- "database"
- 127.0.0.1:3000:3000
labels:
- stapps.version=1.0.0
- stapps.version=4.1.0
restart: unless-stopped
depends_on:
- database
api:
image: registry.gitlab.com/openstapps/openstapps/api:3.0.0-next.0
links:
- "backend"
- database
minimal-connector:
image: registry.gitlab.com/openstapps/minimal-connector:core-0.23
container_name: minimal-connector-0.23
command: ["http://backend:3000", "minimal-connector", "f-u"]
# api:
# image: registry.gitlab.com/openstapps/openstapps/api:3.0.0
# links:
# - backend
app:
image: registry.gitlab.com/openstapps/app/executable:core-0.23
expose:
- 8100
ports:
- 8100:8100
# minimal-connector:
# image: registry.gitlab.com/openstapps/minimal-connector:core-0.23
# container_name: minimal-connector-0.23
# command: ["http://backend:3000", "minimal-connector", "f-u"]
# app:
# image: registry.gitlab.com/openstapps/app/executable:core-0.23
# expose:
# - 8100
# ports:
# - 8100:8100
+20
View File
@@ -1,5 +1,25 @@
# @openstapps/minimal-plugin
## 3.2.0
### Patch Changes
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/api@4.0.0
- @openstapps/api-plugin@4.0.0
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
## 3.1.1
### Patch Changes
- Updated dependencies
- @openstapps/api@3.1.1
- @openstapps/api-plugin@3.1.1
- @openstapps/core@3.1.1
## 3.1.0
### Patch Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@openstapps/minimal-plugin",
"description": "Minimal Plugin",
"version": "3.1.0",
"version": "3.2.0",
"private": true,
"type": "module",
"license": "GPL-3.0-only",
@@ -35,7 +35,7 @@
"@openstapps/logger": "workspace:*",
"commander": "10.0.0",
"express": "4.18.2",
"ts-node": "10.9.1"
"ts-node": "10.9.2"
},
"devDependencies": {
"@openstapps/eslint-config": "workspace:*",
@@ -44,7 +44,7 @@
"@types/express": "4.17.17",
"@types/node": "18.15.3",
"tsup": "6.7.0",
"typescript": "5.1.6"
"typescript": "5.4.2"
},
"tsup": {
"entry": [
+2 -1
View File
@@ -1,3 +1,4 @@
{
"extends": "@openstapps/tsconfig"
"extends": "@openstapps/tsconfig",
"exclude": ["lib", "app.js"]
}
Generated
+37 -3
View File
@@ -1,12 +1,30 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1701336116,
"narHash": "sha256-kEmpezCR/FpITc6yMbAh4WrOCiT2zg5pSjnKrq51h5Y=",
"lastModified": 1717112898,
"narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "f5c27c6136db4d76c30e533c20517df6864c46ee",
"rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0",
"type": "github"
},
"original": {
@@ -18,8 +36,24 @@
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
+67 -56
View File
@@ -1,77 +1,88 @@
{
description = "A Nix-flake-based development environment for OpenStApps";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
outputs = { self, nixpkgs }:
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{
self,
nixpkgs,
flake-utils,
}:
let
buildToolsVersion = "30.0.3";
overlays = [
(final: prev: rec {
nodejs = prev.nodejs-18_x;
pnpm = prev.nodePackages.pnpm;
chrome = prev.google-chrome;
firefox = prev.firefox;
webkit = prev.epiphany; # Safari-ish browser
android = prev.androidenv.composeAndroidPackages {
buildToolsVersions = [ "${buildToolsVersion}" ];
platformVersions = [ "33" ];
};
cypress = prev.cypress.overrideAttrs(cyPrev: rec {
version = "13.2.0";
src = prev.fetchzip {
url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip";
hash = "sha256-9o0nprGcJhudS1LNm+T7Vf0Dwd1RBauYKI+w1FBQ3ZM=";
};
});
})
];
# TODO: aarch64-linux, x68_64-darwin, aarch64-darwin
supportedSystems = [ "x86_64-linux" ];
forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f {
aapt2buildToolsVersion = "33.0.2";
in
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit overlays system;
inherit system;
overlays = [
(final: prev: rec {
fontMin = prev.python311.withPackages (
ps:
with ps;
[
brotli
fonttools
]
++ (with fonttools.optional-dependencies; [ woff ])
);
android = prev.androidenv.composeAndroidPackages {
buildToolsVersions = [
"30.0.3"
aapt2buildToolsVersion
];
platformVersions = [ "33" ];
};
cypress = prev.cypress.overrideAttrs (cyPrev: rec {
version = "13.2.0";
src = prev.fetchzip {
url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip";
hash = "sha256-9o0nprGcJhudS1LNm+T7Vf0Dwd1RBauYKI+w1FBQ3ZM=";
};
});
nodejs = prev.nodejs_22;
})
];
config = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
});
in
{
devShells = forEachSupportedSystem ({ pkgs }:
let
python = (pkgs.python311.withPackages(ps: with ps; [ brotli fonttools ] ++ (with fonttools.optional-dependencies; [ ufo lxml unicode woff ])));
androidFhs = pkgs.buildFHSUserEnv {
name = "android-env";
targetPkgs = pkgs: with pkgs; [ ];
runScript = "bash";
profile = ''
export ALLOW_NINJA_ENV=true
export USE_CCACHE=1
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
'';
};
in
{
default = (pkgs.buildFHSUserEnv {
name = "StApps Dev";
targetPkgs = pkgs: with pkgs; [
devShell = pkgs.mkShell rec {
nativeBuildInputs = [ androidFhs ];
buildInputs = with pkgs; [
nodejs
pnpm
python
docker
corepack
# tools
curl
jq
# browsers
firefox
chrome
webkit
fontMin
cypress
# android
jdk17
android.androidsdk
musl
];
runScript = "bash";
profile = ''
export CYPRESS_INSTALL_BINARY=0
export CYPRESS_RUN_BINARY=${pkgs.cypress}/bin/Cypress
export ANDROID_SDK_ROOT=${pkgs.android.androidsdk}/libexec/android-sdk
export ANDROID_JAVA_HOME=${pkgs.jdk.home}
export DOCKER_HOST=unix:///run/user/1000/docker.sock
{ dockerd-rootless & } 2>/dev/null
'';
}).env;
});
};
ANDROID_JAVA_HOME = "${pkgs.jdk.home}";
ANDROID_SDK_ROOT = "${pkgs.android.androidsdk}/libexec/android-sdk";
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${aapt2buildToolsVersion}/aapt2";
CYPRESS_INSTALL_BINARY = "0";
CYPRESS_RUN_BINARY = "${pkgs.cypress}/bin/Cypress";
};
}
);
}
+1 -7
View File
@@ -5,10 +5,4 @@
# You can see what browsers were selected by your queries by running:
# npx browserslist
> 0.5%
last 2 versions
Firefox ESR
not dead
not kaios 2.5
not op_mini all
not IE 9-11
> 0.5% in DE and last 2 major versions and supports es6 and not dead
+31
View File
@@ -1,5 +1,36 @@
# @openstapps/app
## 3.2.0
### Patch Changes
- 689ac68b: pin alpine version to 3.18 and add healthchecks
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/api@4.0.0
- @openstapps/collection-utils@3.0.0
## 3.1.2
### Patch Changes
- Fix for Android users not being able to log in
## 3.1.1
### Patch Changes
- Fix version history offered by backend
- Updated dependencies
- @openstapps/api@3.1.1
- @openstapps/core@3.1.1
## 3.1.1
### Patch Changes
- last minute deployment changes
## 3.1.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
# Creates a docker image with only the app as an executable unit
# Dependencies need to be installed beforehand
# Needs to be build beforehand
FROM node:18-alpine
FROM node:18-alpine3.18
WORKDIR /app
COPY www/ /app/www
+2 -2
View File
@@ -50,11 +50,11 @@ the config file.
Icon font minification is done automatically, but requires you to
follow a few simple rules:
1. Use the tagged template literal for referencing icon names in
1. Use the type-safe proxy for referencing icon names in
TypeScript files and code
```ts
SCIcon`icon_name`;
SCIcon.icon_name;
```
2. When using `ion-icon` in HTML, reference either icons that went through
@@ -45,7 +45,7 @@ include ':capacitor-splash-screen'
project(':capacitor-splash-screen').projectDir = new File('../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/splash-screen/android')
include ':transistorsoft-capacitor-background-fetch'
project(':transistorsoft-capacitor-background-fetch').projectDir = new File('../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@1.0.2_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch/android')
project(':transistorsoft-capacitor-background-fetch').projectDir = new File('../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@5.1.1_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch/android')
include ':capacitor-secure-storage-plugin'
project(':capacitor-secure-storage-plugin').projectDir = new File('../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.8.1_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin/android')
project(':capacitor-secure-storage-plugin').projectDir = new File('../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.9.0_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin/android')
+13 -26
View File
@@ -21,10 +21,13 @@
"allowedCommonJsDependencies": [
"moment",
"opening_hours",
"leaflet",
"leaflet.markercluster",
"localforge",
"guid-typescript"
"localforage",
"i18next",
"semver",
"suncalc",
"guid-typescript",
"fast-deep-equal",
"maplibre-gl"
],
"aot": true,
"assets": [
@@ -32,24 +35,13 @@
"glob": "**/*",
"input": "src/assets",
"output": "assets"
},
{
"glob": "**/*",
"input": "./node_modules/leaflet/dist/images",
"output": "assets/"
}
],
"styles": [
{
"input": "src/theme/variables.scss",
"inject": true
},
{
"input": "src/global.scss",
"inject": true
},
"./node_modules/leaflet/dist/leaflet.css",
"./node_modules/leaflet.markercluster/dist/MarkerCluster.Default.css"
}
]
},
"configurations": {
@@ -97,20 +89,20 @@
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "app:build"
"buildTarget": "app:build"
},
"configurations": {
"production": {
"browserTarget": "app:build:production"
"buildTarget": "app:build:production"
},
"development": {
"browserTarget": "app:build:development"
"buildTarget": "app:build:development"
},
"ci": {
"browserTarget": "app:build"
"buildTarget": "app:build"
},
"fake": {
"browserTarget": "app:build:fake"
"buildTarget": "app:build:fake"
}
},
"defaultConfiguration": "development"
@@ -132,11 +124,6 @@
"glob": "**/*",
"input": "src/assets",
"output": "/assets"
},
{
"glob": "**/*",
"input": "./node_modules/leaflet/dist/images",
"output": "assets/"
}
]
}
+1
View File
@@ -28,6 +28,7 @@ export default defineConfig({
fixturesFolder: 'cypress/fixtures',
defaultCommandTimeout: 20_000,
specPattern: 'cypress/integration/**/*.spec.ts',
blockHosts: ['mobile.server.uni-frankfurt.de'],
/*setupNodeEvents(on, config) {
on('task', {
log(message) {
+20
View File
@@ -0,0 +1,20 @@
# Backend Mocking
The backend _must_ be mocked using fixtures or other methods.
You can use
```typescript
cy.interceptMultiSearch(...)
cy.interceptSearch({extend: 'fixture', fixture: 'fixture', alias: 'alias'})
cy.interceptGet({uid})
```
For mocking the responses based on a request.
Paths in the commands will be relative to those, so
`cy.interceptSearch({extend: 'request', fixture: 'response'})`
will actually pull the fixtures from `request.search.req.json`
and `response.search.res.json` respectively.
If `fixture` is omitted, an empty response will be returned.
+29
View File
@@ -0,0 +1,29 @@
# A list of (possibly) common pitfalls
## The component is not updating
### Calling Cypress invoke will not trigger change detection
Rewrite
```typescript
cy.get('component-selector').component().invoke('someFunction');
```
Into
```typescript
cy.get('component-selector')
.component()
.runInsideAngular(component => component.someFunction());
```
## The backend is unreachable
See `BACKEND.md`, direct calls to backend are prohibited.
## The search page doesn't work
Run `cy.patchSearchPage()` after visiting the search page.
It set the due time to zero so that the component
won't wait for someone to type more.
@@ -0,0 +1,46 @@
{
"filter": {
"arguments": {
"filters": [
{
"arguments": {
"filters": [
{
"arguments": {
"field": "categories",
"value": "canteen"
},
"type": "value"
},
{
"arguments": {
"field": "categories",
"value": "student canteen"
},
"type": "value"
},
{
"arguments": {
"field": "categories",
"value": "cafe"
},
"type": "value"
},
{
"arguments": {
"field": "categories",
"value": "restaurant"
},
"type": "value"
}
],
"operation": "or"
},
"type": "boolean"
}
],
"operation": "and"
},
"type": "boolean"
}
}
@@ -0,0 +1,31 @@
{
"*": {
"filter": {
"arguments": {
"filters": [
{
"arguments": {
"field": "offers.inPlace.uid"
},
"type": "value"
},
{
"arguments": {
"field": "type",
"value": "dish"
},
"type": "value"
},
{
"arguments": {
"field": "offers.availabilityRange"
},
"type": "availability"
}
],
"operation": "and"
},
"type": "boolean"
}
}
}
@@ -0,0 +1,889 @@
{
"2020-01-01T12:00:00.000Z": {
"data": [
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "db0c03b1-b7cc-5513-b3e6-71d6020520ab",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarian"
}
],
"nutrition": {
"calories": 835,
"carbohydrateContent": 99.2,
"fatContent": 33,
"proteinContent": 33.4,
"saltContent": 3.7,
"saturatedFatContent": 9.1,
"sugarContent": 7.3
},
"additives": ["gluten (A)", "milk (G)"],
"translations": {
"de": {
"additives": ["Glutenhaltige Getreide (A)", "Milch u. Milcherzeugnisse (G)"],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarisch"
}
],
"name": "Pizza alla Pugliese (A,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.829Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Pugliese pizza (A,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "b798cc94-ab0a-5fdd-b9d8-127ae8940f47",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "pork"
}
],
"nutrition": {
"calories": 876,
"carbohydrateContent": 100.4,
"fatContent": 32.7,
"proteinContent": 42.6,
"saltContent": 4,
"saturatedFatContent": 6.3,
"sugarContent": 8.6
},
"additives": ["preserved (2)", "with antioxidants (3)", "gluten (A)", "milk (G)"],
"translations": {
"de": {
"additives": [
"konserviert (2)",
"mit Antioxidationsmittel (3)",
"Glutenhaltige Getreide (A)",
"Milch u. Milcherzeugnisse (G)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "Schwein"
}
],
"name": "Pizza Carciofi e Prosciutto (2,3,A,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.830Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Artichoke-ham pizza (2,3,A,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "e5e40978-119b-5537-a3c6-87725f797990",
"nutrition": {
"calories": 899,
"carbohydrateContent": 98.2,
"fatContent": 36.7,
"proteinContent": 42.4,
"saltContent": 4.7,
"saturatedFatContent": 6.8,
"sugarContent": 8.1
},
"additives": ["gluten (A)", "fish (D)", "milk (G)"],
"translations": {
"de": {
"additives": [
"Glutenhaltige Getreide (A)",
"Fisch u. Fischerzeugnisse (D)",
"Milch u. Milcherzeugnisse (G)"
],
"name": "Pizza Salmone e Spinaci (A,D,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.830Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Salami-spinach pizza (A,D,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "94629b59-e0a7-538e-b057-018e268297ca",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarian"
}
],
"nutrition": {
"calories": 1399,
"carbohydrateContent": 148.8,
"fatContent": 69.2,
"proteinContent": 40.2,
"saltContent": 1,
"saturatedFatContent": 16.3,
"sugarContent": 7.7
},
"additives": ["gluten (A)", "egg (C)", "milk (G)"],
"translations": {
"de": {
"additives": [
"Glutenhaltige Getreide (A)",
"Eier u. Eiererzeugnisse (C)",
"Milch u. Milcherzeugnisse (G)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarisch"
}
],
"name": "Tagliatelle Pesto verde de Francoforte (A,C,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.834Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Tagliatelle w/ Frankfurt-style green pesto (A,C,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "34d08548-07fa-51b7-ad88-cfdb6c6ed62b",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarian"
}
],
"nutrition": {
"calories": 849,
"carbohydrateContent": 103.3,
"fatContent": 37.4,
"proteinContent": 33.5,
"saltContent": 4.7,
"saturatedFatContent": 2.6,
"sugarContent": 11.6
},
"additives": [
"preserved (2)",
"with antioxidants (3)",
"gluten (A)",
"milk (G)",
"sulphur dioxide / sulphite (L)"
],
"translations": {
"de": {
"additives": [
"konserviert (2)",
"mit Antioxidationsmittel (3)",
"Glutenhaltige Getreide (A)",
"Milch u. Milcherzeugnisse (G)",
"Schwefeldioxid / Sulfit (L)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarisch"
}
],
"name": "Pizza Antipasti (2,3,A,G,L)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.828Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Antipasti pizza (2,3,A,G,L)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "b58db64e-47bc-565a-abd7-6ca79211217d",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "pork"
}
],
"nutrition": {
"calories": 930,
"carbohydrateContent": 100.5,
"fatContent": 41.4,
"proteinContent": 35.9,
"saltContent": 4.7,
"saturatedFatContent": 6.6,
"sugarContent": 9
},
"additives": [
"with artificial colouring (1)",
"preserved (2)",
"with antioxidants (3)",
"blackened (6)",
"gluten (A)",
"milk (G)"
],
"translations": {
"de": {
"additives": [
"mit Farbstoff (1)",
"konserviert (2)",
"mit Antioxidationsmittel (3)",
"geschwärzt (6)",
"Glutenhaltige Getreide (A)",
"Milch u. Milcherzeugnisse (G)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "Schwein"
}
],
"name": "Pizza alla Diavola (1,2,3,6,A,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.827Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Diavola pizza (1,2,3,6,A,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "734fc8f9-0f4d-54aa-bd8b-87431c7997bb",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarian"
}
],
"nutrition": {
"calories": 581,
"carbohydrateContent": 79.9,
"fatContent": 16.5,
"proteinContent": 28.3,
"saltContent": 3.8,
"saturatedFatContent": 4.4,
"sugarContent": 13.8
},
"additives": ["gluten (A)", "egg (C)", "milk (G)"],
"translations": {
"de": {
"additives": [
"Glutenhaltige Getreide (A)",
"Eier u. Eiererzeugnisse (C)",
"Milch u. Milcherzeugnisse (G)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarisch"
}
],
"name": "Cannelloni Ricotta-Spinat (A,C,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.832Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Ricotta-spinach cannelloni (A,C,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "738be5ff-6b35-5249-8f0d-b5e5830f9f4d",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/beef.svg",
"name": "beef"
}
],
"nutrition": {
"calories": 880,
"carbohydrateContent": 94.3,
"fatContent": 36.9,
"proteinContent": 39.9,
"saltContent": 0.8,
"saturatedFatContent": 9.9,
"sugarContent": 10.2
},
"additives": ["gluten (A)", "egg (C)", "milk (G)"],
"translations": {
"de": {
"additives": [
"Glutenhaltige Getreide (A)",
"Eier u. Eiererzeugnisse (C)",
"Milch u. Milcherzeugnisse (G)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/beef.svg",
"name": "Rind"
}
],
"name": "Spaghetti Bolognese (A,C,G)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.833Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Spaghetti bolognese (A,C,G)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "7a95dd93-83d3-560c-8069-038b51d1b46b",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarian"
}
],
"nutrition": {
"calories": 349,
"carbohydrateContent": 5.3,
"fatContent": 29.9,
"proteinContent": 10.6,
"saltContent": 0.3,
"saturatedFatContent": 18.9,
"sugarContent": 3.6
},
"additives": ["gluten (A)", "milk (G)", "celery (I)"],
"translations": {
"de": {
"additives": [
"Glutenhaltige Getreide (A)",
"Milch u. Milcherzeugnisse (G)",
"Sellerie u. Sellerieerzeugnisse (I)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/vegetarian.svg",
"name": "vegetarisch"
}
],
"name": "Flammkuchen mit Spinat und Mozzarella (A,G,I)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.832Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Spinach-mozzarella tarte flambée (A,G,I)",
"categories": ["main dish"],
"type": "dish"
},
{
"offers": [
{
"availability": "in stock",
"availabilityRange": {
"gte": "2023-02-24T09:00:00.000Z",
"lte": "2023-02-24T20:00:00.000Z"
},
"inPlace": {
"address": {
"addressCountry": "Deutschland",
"addressLocality": "Frankfurt am Main",
"addressRegion": "Hessen",
"postalCode": "60323",
"streetAddress": "Kaffeebar Alfredo/Cocktailbar Theodor-W.-Adorno-Platz 2"
},
"alternateNames": ["Alfredo Anbau Casino"],
"categories": ["cafe"],
"geo": {
"point": {
"coordinates": [8.666987121105194, 50.12725203226799],
"type": "Point"
}
},
"name": "Alfredo Anbau Casino",
"openingHours": "Mo-Fr 08:30-21:00; Sa-Su off; 2023 Feb 13 - 2023 Apr 06 Mo-Fr 10:00-21:00; 2023 Feb 13 - 2023 Apr 06 Sa-Su off",
"type": "room",
"uid": "86464b64-da1e-5578-a5c4-eec23457f596"
},
"prices": {
"default": 4.4,
"employee": 2.2,
"guest": 1.1,
"student": 3.3
},
"provider": {
"name": "Studierendenwerk Frankfurt am Main",
"type": "organization",
"uid": "0405339e-f1f3-54a6-9ac1-a230e2bda5c0"
}
}
],
"uid": "f430dde2-e17e-5406-84ae-484e1f095966",
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "pork"
}
],
"nutrition": {
"calories": 325,
"carbohydrateContent": 5.2,
"fatContent": 27.2,
"proteinContent": 11.3,
"saltContent": 0.9,
"saturatedFatContent": 16.4,
"sugarContent": 4.1
},
"additives": ["preserved (2)", "gluten (A)", "milk (G)", "celery (I)"],
"translations": {
"de": {
"additives": [
"konserviert (2)",
"Glutenhaltige Getreide (A)",
"Milch u. Milcherzeugnisse (G)",
"Sellerie u. Sellerieerzeugnisse (I)"
],
"characteristics": [
{
"image": "https://mobile.server.uni-frankfurt.de/_static/canteen/pork.svg",
"name": "Schwein"
}
],
"name": "Flammkuchen mit Speck und Zwiebeln (2,A,G,I)"
}
},
"origin": {
"indexed": "2023-02-24T17:00:07.831Z",
"name": "Studierendenwerk Frankfurt am Main",
"type": "remote"
},
"name": "Bacon-onion tart flambée (2,A,G,I)",
"categories": ["main dish"],
"type": "dish"
}
],
"facets": [
{
"buckets": [
{
"count": 10,
"key": "dish"
}
],
"field": "type"
},
{
"buckets": [
{
"count": 10,
"key": "main dish"
}
],
"field": "categories",
"onlyOnType": "dish"
},
{
"buckets": [
{
"count": 10,
"key": "cafe"
}
],
"field": "offers.inPlace.categories",
"onlyOnType": "dish"
}
],
"pagination": {
"count": 10,
"offset": 0,
"total": 10
},
"stats": {
"time": 2
}
}
}
@@ -0,0 +1,30 @@
{
"filter": {
"arguments": {
"operation": "and",
"filters": [
{
"type": "value",
"arguments": {
"field": "type",
"value": "catalog"
}
},
{
"type": "value",
"arguments": {
"field": "academicTerm.uid"
}
},
{
"type": "value",
"arguments": {
"field": "level",
"value": "0"
}
}
]
},
"type": "boolean"
}
}
@@ -0,0 +1,519 @@
{
"data": [
{
"uid": "3553954b-f551-5326-a4bd-38bedffb3e37",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91602"
},
"origin": {
"indexed": "2023-02-24T23:14:57.998Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 1 - Rechtswissenschaft",
"description": "Das stets aktuelle Vorlesungsverzeichnis des Fachbereichs Rechtswissenschaft finden Sie hier! Ein Ausdruck mit allen aktuellen Änderungen hängt außerdem vor dem Dekanat des Fachbereichs (1. OG, Gebäude RuW) aus. Nähere Informationen über den Aufbau des Studiums der Rechtswissenschaft erhalten Sie über unsere Studien- und Prüfungsordnung, die Sie im Dekanat bekommen. Das gedruckte VORLESUNGSVERZEICHNIS kann zudem während der Öffnungszeiten im Hörsaalgebäude am Verkaufsstand der Buchhandlung Hector erworben werden.\n\nDas Veranstaltungsangebot orientiert sich am Studienplan des Fachbereichs Rechtswissenschaft. Die Lehrveranstaltungen beginnen in der ersten Vorlesungswoche. Die Pflichtveranstaltungen enden an unserem Fachbereich\neine Woche vor Vorlesungsende\n, anschließend beginnt die zweiwöchige Klausurenphase.\n\nDie wöchentlichen Veranstaltungen im Schwerpunktbereichsstudium enden bereits zwei Wochen vor dem allgemeinen Vorlesungsende der Universität. Anschließend werden Blockveranstaltungen angeboten.\n\nAchtung:\nIm Schwerpunktbereichsstudium dürfen insgesamt nur maximal zwei rechtsmedizinische und arztrechtliche Veranstaltungen des Insituts für Rechtsmedizin zur Erbringung des Pflichtprogramms gem. § 25 Abs. 3 genutzt werden!\n\n \n\n\nFür Studienanfänger wird eine spezielle dreitägige Orientierungsveranstaltung in der Woche vor Vorlesungsbeginn angeboten; Einzelheiten hierzu werden brieflich mitgeteilt. Für Fragen und Sorgen steht die Studienberatung des Fachbereichs für Studierende aller Semester zur Verfügung.\nZur Zeit findet die Studienberatung telefonisch unter: 069 / 798 – 34211 von Mo - Do von 10:00 Uhr - 12:00 Uhr und Mi von 14.00 Uhr - 17.00 Uhr oder per Mail:\nstudienberatung@jura.uni-frankfurt.de\nstatt.\n\n\n \nDer Fachbereich bietet einen Aufbaustudiengang für im Ausland graduierte Juristinnen und Juristen (LL.M.), einen Aufbaustudiengang \"Europäisches und Internationales Wirtschaftsrecht\" (LL.M. Eur.), einen Weiterbildungsstudiengang \"Law and Finance\" (LL.M. Finance) sowie ein Masterprogramm \"LL.M. Legal Theory\" an. Veranstaltungen zu den Studiengängen siehe Vorlesungsverzeichnis und Aushänge.",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "c9d881de-b04e-5775-a36f-58bd7d9a6416",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94670"
},
"origin": {
"indexed": "2023-02-24T23:14:58.125Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 10 - Neuere Philologien",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "47622795-c4bd-5f3a-80b0-dcb18335314e",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "93430"
},
"origin": {
"indexed": "2023-02-24T23:14:58.172Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 11 - Geowissenschaften / Geographie",
"description": "Fachstudienberatung\n\n\n \n\n\nBachelor/Master/Lehramt Geographie\n\n\n\n\nTeilbereich Humangeographie\n\n\n\n\n\n\n\n\n\n\nJens Schreiber, Sprechstunde siehe geostud (\nhttp://www.geostud.de/mein-studium/beratungpruefungsaemter/studienberatung/\n), Campus Westend, PEG-Gebäude, Theodor-W.-Adorno-Platz 6, Raum PEG 2.G 053\n\n \n\n\nTeilbereich Physische Geographie\n\n\n\n\n\n\nAkad. ORätin Dr. Irene Marzolff, Sprechstunde Do 09.00-10.00, Altenhöferallee 1, Zi 2.222, Tel. 798-40173;\n\nVertr.: Dr. Christiane Berger, Sprechstunde Mi 10-10:45, Altenhöferallee 1, Zi. 2.111, Tel. 798-40157 \n\n\n\n\n\n\n\n\n\n\n   \n\n\n\n \n\nBSc-Nebenfachbereich\n\n\n\n\n\n\n\n\n     Dr. Christiane Berger, Sprechstunde Mi 10-10:45, Altenhöferallee 1, Zi. 2.111, Tel. 798-40157\n\n\n\n\n\n\n\n \n\nBachelor/Master Geowissenschaften\n\n\nDr. Frederik Kirst, Altenhöferallee 1, Zi 2.317, Tel. 798-40199\n\nAkad. ORat\nDr. Rainer Petschick\n, Sprechstunde n.V., Altenhöferallee 1, Zi 2.325, Tel. 798-40192\n\nProf. Dr. Jens O. Herrle, Sprechstunde n.V., Altenhöferallee 1, Zi 2.227, Tel. 798-40180\n\nAkad. Rat PD Dr. Eiken Haussühl, Sprechstunde n.V., Altenhöferallee 1, Zi 1.217, Tel. 798-40105\n\nProf. Dr. Björn Winkler, Sprechstunde n.V., Altenhöferallee 1, Zi 1.219, Tel. 798-40107\n\nProf. Dr. Andreas Junge, Sprechstunde n.V., Altenhöferallee 1, Zi. 1.319, Tel. 798-40144\n\nProf. Dr. Georg Rümpker, Sprechstunde n.V., Altenhöferallee 1, Zi. 1.320, Tel. 798-40142\n\n\n \n\n\nBachelor/Master Meteorologie\n\n\nAkad. ORat Dr. Andreas Kürten, Sprechstunde n.V., Altenhöferallee 1, Zi 3.318, Tel. 798-40256\n\nAkad. Rat Dr. Stamen Dolaptchiev, Sprechstunde n.V., Altenhöferallee 1, Zi  3.336, Tel. 798-40233\n\n\n \n\n\nMaster Umweltwissenschaften\n\n\nProf. Dr. Jörg Oehlmann, Sprechstunde n.V., Max-von-Laue-Str. 7, Tel. 798-42142",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "1dc1df6b-31c6-5ce5-a1b5-18098b07c23a",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91471"
},
"origin": {
"indexed": "2023-02-24T23:14:58.180Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 12 - Informatik und Mathematik",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "57dde85a-5d8b-5fbd-b72e-3ec2f9dec83e",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "93223"
},
"origin": {
"indexed": "2023-02-24T23:14:58.185Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 13 - Physik",
"description": "Dekanat\n:\nhttp://www.uni-frankfurt.de/60506908/\n\n \n\nPrüfungsamt\n: \nGoethe-Universität — Examination office (uni-frankfurt.de)\n\n \n\nFachstudienberatung:\nhttps://www.uni-frankfurt.de/60655696/Studienberatung\n \n\n \n\nFachschaft Physik: \nhttps://fachschaftphysik.uni-frankfurt.de/\n \n\n \n\nVirtuelle und Präsenzlehre:\n\nNach derzeitiger Planung werden im Wintersemester 2022/23 Lehrveranstaltungen in der Regel als  Präsenzveranstaltungen angeboten (mit voller Belegung von Hörsälen bzw. Seminarräumen). Ausnahmen davon finden Sie im Vorlesungsverzeichnis bei den jeweiligen Veranstaltungen.\nAngesichts der noch nicht absehbaren Situation im April sind die Einträge im elektronischen Vorlesungsverzeichnis LSF aber derzeit noch als vorläufig zu betrachten. Bitte informieren Sie sich zu einem späteren Zeitpunkt noch einmal im LSF, ob sich bei den Sie interessierenden Veranstaltungen Änderungen ergeben haben.\n \n\nAnfänger-Praktika:\n Die Online-Anmeldung für alle Anfänger-Praktika für das\nWintersemester 2022/23\nist in der Zeit\n\n vom\n15.08.2022, 8.00 Uhr bis 04.09.2022, 22.00\n \n\n \nunter\n\n\nhttps://www.uni-frankfurt.de/60589452/Anfaengerpraktikum\n frei geschaltet.\n\n \n\nFortgeschrittenen-Praktikum für Studierende der Physik: \nDie Online-Anmeldung für alle Fortgeschrittenen-Praktika für das\nWintersemester 2022/23\n\n\nist in der Zeit vom\n12.09.2022 bis zum 09.10.2022\nunter \n\nhttp://goethe.link/FuLPraktikum\n \n\nfrei geschaltet.\n\n \nBitte beachten Sie: Melden Sie sich bitte für den Studiengang (BA, MA) an, in den Sie das Praktikum einbringen wollen.\n \n\nDie virtuelle Einführungsveranstaltung für die Fortgeschrittenen-Praktika finden Sie in OLAT unter dem link: \nhttps://olat-ce.server.uni-frankfurt.de/olat/auth/RepositoryEntry/16096034818\n \n\n \nDetails werden nach der erfolgreichen Anmeldung bekannt gegeben.",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "8b6802d7-6365-54c3-ae09-992d42f89430",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91658"
},
"origin": {
"indexed": "2023-02-24T23:14:58.188Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 14 - Biochemie, Chemie und Pharmazie",
"description": "Anschrift des Dekanats:\nMax-von-Laue-Str. 9 (Geb. N101, Rm. 1.12), 60438 Frankfurt am Main, Tel.: 798-29545, mailto:dekanatFB14@uni-frankfurt.de, Öffnungszeiten: Mo, Di, Do, Fr 9-13 Uhr.\n\n\nAuskünfte zu Promotionsangelegenheiten\nerteilt das Dekanat, Tel.: 798-29545;\n\nGeschäftsführende Vorsitzende: Prof. Dr. J. Dressman Tel.: 798-29680.\n\nPromotionsbüro der Naturwissenschaftlichen Fachbereiche:\nRobert-Mayer-Str. 6-8 (Rm. 304), Tel.: 798-23504, mailto:promotionsbuero@math.uni-frankfurt.de.\n\nPrüfungsamt Chemie (Bachelorstudiengang):\nMax-von-Laue-Str. 9 (Geb. N101, Rm. 1.13), 60438 Frankfurt, Tel.: 798-29212, mailto:PruefungsamtFB14@uni-frankfurt.de.\n\nPrüfungsamt Studiengang Biochemie (Bachelor, Master und Diplom) und Chemie (Master):\nMax-von-Laue-Str. 9 (Geb.: N101, Rm. 1.08), 60438 Frankfurt, Tel.: 798-29362, mailto:PruefungsamtFB14@uni-frankfurt.de. \n\n\nStudienfachberatung\n\nBiochemie:\nAllgem. Beratung in Studienangelegenheiten: Prof. Dr. V. Dötsch, Tel.: 798-29631, Prof. Dr. C. Glaubitz, Tel.: 798-29927, Prof. Dr. M. Pos, Tel.: 798-29251, Prof. Dr. R. Tampé, Tel.: 798-29476.\n\nChemie (Bachelor und Master):\n\nJeden Freitag um 11 Uhr bietet Herr Dr. Lill eine Studienberatung in den Räumen des Dekanats an.\n\n- Termine\ndafür und Termine für die Studienfachberatung erhalten Sie über Frau Schreiber im Termine können über das Prüfungsamt (Tel.: 798-29212) vereinbart werden.\n\nProf. Göbel, Tel.: 798-29222, Prof. Schmidt, Tel.: 798-29171, Prof. Dr. A. Terfort, Tel.: 798-29181.\n\n\n\nLehrämter\n\nLehramt an Gymnasien (L3):\nDidaktik der Chemie: Prof. Dr. A. Lühken, Tel.: 798-29446; Anorganische und Analytische Chemie: Dr. L. Fink, Tel.: 798-29123; Physikalische und Theoretische Chemie: Prof. Dr. J. Wachtveitl, Tel.: 798-29351; Organische Chemie und Chemische Biologie: Prof. Dr. M. Göbel, Tel.: 798-29222. \n\nLehramt an Haupt- und Realschulen (L2) sowie an Förderschulen (L5):\nDidaktik der Chemie: Prof. Dr. A. Lühken, Tel.: 798-29446; Anorganische und Analytische Chemie: Dr. L. Fink, Tel.: 798-29123; Physikalische und Theoretische Chemie: Dr. H-D. Barth, Tel.: 798-29428; Organische Chemie und Chemische Biologie: Dr. T. Russ, Tel.: 798-29121.\n\nLehramt an Grundschulen (L1):\nDidaktik der Chemie: Dr. Jens Salzner, Tel.: 798-29454 \n\nChemie für Mediziner:\nDie Veranstaltungen werden im Klinikum Haus 75, Sandhofstr. angeboten. Dr. B. Patzke und Dr. Th. Russ, Tel.: 6301-7624; Internet: http://www.chemed.de/\n\nChemie für Studierende im Nebenfach:\nDr. Buchsbaum, Tel: 798-29171\n\n\n\nPharmazie:\nAllgemeine Studienberatung für Studierende der Pharmazie und Bewerber/-innen zum Pharmaziestudium: Prof. Dr. R. Schmidtko, Tel.: 798-29376.\n\nHess. Landesprüfungsamt für Heilberufe (Hauptstelle):\nLurgiallee 10, 60439 Frankfurt/Main, Frau Manuela Wiegand, Tel.: 069 580013-211.",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "977e0f94-bfdd-5c55-adee-e7adc12d9ff0",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94462"
},
"origin": {
"indexed": "2023-02-24T23:14:58.219Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 15 - Biowissenschaften",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "3fc1561b-f38a-573d-817c-d5bb93506f61",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "93289"
},
"origin": {
"indexed": "2023-02-24T23:14:58.240Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 16 - Medizin",
"description": "Sehr geehrte Studierende,\nSehr geehrte Damen und Herren,\n \ndie Angaben im Vorlesungsverzeichnis werden regelmäßig aktualisiert.\nWir bitten Sie daher, sich unmittelbar vor dem Besuch Ihrer Veranstaltung\nüber die aktuellen Angaben zu Zeit und Ort zu informieren.\n\nAlle Detailangaben zu\nvorklinischen\nund\nklinischen\nWahlfächern\n\nfinden Sie auf den Webseiten des Fachbereichs Medizin.",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92339"
},
"origin": {
"indexed": "2023-02-24T23:14:58.000Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 2 - Wirtschaftswissenschaften",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "04dd801e-3986-529a-bb67-b4d7c86fc624",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94757"
},
"origin": {
"indexed": "2023-02-24T23:14:58.030Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 3 - Gesellschaftswissenschaften",
"description": "Ab dem 18.07.2022 finden Sie hier das Veranstaltungsangebot für das Wintersemester 2022/23.\nBitte beachten Sie, dass es bis zu Beginn der Anmeldephase noch zu Änderungen in geringem Umfang kommen kann.\n\n \n\nErstsemester\nwerden in die jeweils neusten Prüfungsordnungen (PO 2022 bzw. PO 2019) eingeschrieben.\n\n \n\nVerbindliches Anmeldesystem:\nDie Anmeldung zu allen Lehrveranstaltungen des Fachbereich Gesellschaftswissenschaften erfolgt über QIS-LSF. Weitere Informationen dazu finden Sie auf den Seiten der Fachbereichs im Bereich Studium -> Anmeldeverfahren \nhttps://www.fb03.uni-frankfurt.de/58614228/Anmeldung_zu_Lehrveranstaltungen\n(hier informieren wir Sie auch über die aktuellen Fristen und ggfls. zu Änderungen im Verfahren)!",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "573d7374-fdb2-54e4-846e-231395bc7a21",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "93734"
},
"origin": {
"indexed": "2023-02-24T23:14:58.049Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 4 - Erziehungswissenschaften",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "21bc5d2b-c4e2-5df4-abca-fd120805b8e0",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94521"
},
"origin": {
"indexed": "2023-02-24T23:14:58.053Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 5 - Psychologie und Sportwissenschaften",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "5f45ed02-171b-5d55-8863-9a878005a5d8",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94505"
},
"origin": {
"indexed": "2023-02-24T23:14:58.058Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 6 - Evangelische Theologie",
"description": "Sehr geehrte Studentinnen und Studenten,\ndas Wintersemester 2021/22 wird aller Voraussicht nach in weiten Teilen wieder im Präsenzbetrieb stattfinden. Bitte beachten Sie zu den hier aufgeführten Lehrveranstaltungen folgende Hinweise:\n\n\nAlle im Vorlesungsverzeichnis aufgeführten\nVeranstaltungen finden statt\n- ggf. wird kurzfristig eine Rückkehr in den Online-Modus notwendig. Darüber informieren wir dann an dieser Stelle.\n\n\nAktuell sind (insbesondere für die Studiengänge Religionswissenschaft) noch nicht alle\nModulangaben\neingetragen. Eine Orientierung bietet - wie stets - die Zuordnung zu Fachgebieten/Professuren sowie die eigenständige Lektüre der Studien- und Prüfungsordnungen. Die Modulangaben werden spätestens bis 15. Juli verbindlich in LSF ersichtlich sein. Fragen zur Modulzuordnung beantworten ebenfalls die zuständigen Fachstudienberater*innen. Wir bitten darum, von Nachfragen bis zur vollständigen Eintragung der Module möglichst abzusehen.\n\n\nBitte informieren Sie sich auch selbst über folgende Seiten:\n\n\nwww.uni-frankfurt.de/corona\n(Informationsseite der Universität)\n\n\nwww.evtheol.uni-frankfurt.de\n(Fachbereichsseite Evangelische Theologie)\n\n\nwww.facebook.com/evtheol.ffm\n(Facebook-Auftritt des Fachbereichs Evangelische Theologie)\n\n\n \n\nIn Forschung und Lehre kooperiert der Fachbereich Evangelische Theologie mit dem Institut für Evangelische Theologie der Justus-Liebig-Universität in Gießen. Dies bedeutet, dass einerseits Gießener Professoren/innen Lehrveranstaltungen in Frankfurt anbieten und umgekehrt, andererseits, dass die Studierenden beider Universitäten die Möglichkeit haben, Lehrveranstaltungen der jeweils anderen Universität in Evangelischer Theologie zu belegen.\n\n\nAlle Veranstaltungen beginnen - soweit nicht anders vermerkt - in der ersten Vorlesungswoche.",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "5711d338-0111-5352-991c-11210649f7c8",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94716"
},
"origin": {
"indexed": "2023-02-24T23:14:58.066Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 7 - Katholische Theologie",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "7e5c2463-c0ab-585a-ad97-b6cf178dd8c4",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92555"
},
"origin": {
"indexed": "2023-02-24T23:14:58.073Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 8 - Philosophie und Geschichtswissenschaften",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "d65f83e8-5f69-5dfe-b23e-f0abb327cac4",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91668"
},
"origin": {
"indexed": "2023-02-24T23:14:58.091Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "FB 9 - Sprach- und Kulturwissenschaften",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "ac329244-cfbe-535d-ae60-88afe09cf7eb",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92184"
},
"origin": {
"indexed": "2023-02-24T23:14:58.252Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Lehrveranstaltungen für Lehramtsstudiengänge (Modulstruktur)",
"categories": ["university events"],
"type": "catalog"
},
{
"uid": "80e6cc59-7894-5204-8b3a-b1fdb49e7a72",
"level": 0,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92603"
},
"origin": {
"indexed": "2023-02-24T23:14:58.324Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Weitere Studienangebote",
"categories": ["university events"],
"type": "catalog"
}
],
"facets": [
{
"buckets": [
{
"count": 18,
"key": "catalog"
}
],
"field": "type"
},
{
"buckets": [
{
"count": 18,
"key": "WiSe 2022/23"
}
],
"field": "academicTerm.acronym",
"onlyOnType": "catalog"
},
{
"buckets": [
{
"count": 18,
"key": "university events"
}
],
"field": "categories",
"onlyOnType": "catalog"
}
],
"pagination": {
"count": 18,
"offset": 0,
"total": 18
},
"stats": {
"time": 3
}
}
@@ -1,7 +1,7 @@
{
"data": [
{
"uid": "ae3cf884-4dc4-526b-9213-6850135591ab",
"uid": "catalog",
"superCatalogs": [
{
"categories": ["university events"],
@@ -0,0 +1,60 @@
{
"filter": {
"arguments": {
"filters": [
{
"arguments": {
"filters": [
{
"arguments": {
"operation": "and",
"filters": [
{
"type": "value",
"arguments": {
"field": "type",
"value": "catalog"
}
},
{
"type": "value",
"arguments": {
"field": "superCatalog.uid"
}
}
]
},
"type": "boolean"
},
{
"arguments": {
"operation": "and",
"filters": [
{
"type": "value",
"arguments": {
"field": "type",
"value": "academic event"
}
},
{
"type": "value",
"arguments": {
"field": "catalogs.uid"
}
}
]
},
"type": "boolean"
}
],
"operation": "or"
},
"type": "boolean"
}
],
"operation": "and"
},
"type": "boolean"
}
}
@@ -0,0 +1,364 @@
{
"data": [
{
"uid": "1a91ca6f-c1f2-51f4-b48b-0680c661e86b",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94412"
},
"origin": {
"indexed": "2023-02-24T23:14:58.001Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Allgemeine Veranstaltungen / Informationsveranstaltungen",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
},
{
"uid": "c448ee2b-6a5e-5d88-973b-f71c7a1b63cd",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91482"
},
"origin": {
"indexed": "2023-02-24T23:14:58.029Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Anwendungsfächer/Exportmodule gemäß Vereinbarungen",
"description": "Dieses  Verzeichnis gilt ausschließlich für  Studierende, die in das Nebenfach BWL bzw. VWL des Fachbereichs 02 Wirtschaftswissenschaften  eingeschrieben sind. Ob diese Regelung für Sie gilt, finden Sie unter:\nhttp://www.wiwi.uni-frankfurt.de/mein-wiwi-studium/pruefungsamt/allgemeine-informationen/infos-nebenfachstudierende.html",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
},
{
"uid": "55f677f4-98ab-5645-bfe0-06a38b2c5d72",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92478"
},
"origin": {
"indexed": "2023-02-24T23:14:58.001Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Bachelorstudium",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
},
{
"uid": "c22d157e-9cfa-551a-8d5c-2c77046e814b",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "91546"
},
"origin": {
"indexed": "2023-02-24T23:14:58.028Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Graduiertenstudium",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
},
{
"uid": "3da3bc68-d27f-5730-b224-eef7a3e328cc",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "92114"
},
"origin": {
"indexed": "2023-02-24T23:14:58.014Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Masterstudium",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
},
{
"uid": "67303028-6ee7-5d64-86b5-f154221a2e93",
"superCatalogs": [
{
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
],
"level": 1,
"academicTerm": {
"acronym": "WiSe 2022/23",
"alternateNames": ["Winter 2022/23"],
"endDate": "2023-03-31T21:59:59.999Z",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"name": "Wintersemester 2022/23",
"startDate": "2022-09-30T22:00:00.000Z",
"type": "semester",
"uid": "d8045576-799a-5bec-85be-bc0026a76509"
},
"identifiers": {
"LSF": "94694"
},
"origin": {
"indexed": "2023-02-24T23:14:58.027Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Wirtschaftssprachen",
"categories": ["university events"],
"type": "catalog",
"superCatalog": {
"categories": ["university events"],
"identifiers": {
"LSF": "92339"
},
"level": 0,
"name": "FB 2 - Wirtschaftswissenschaften",
"type": "catalog",
"uid": "ed67e49a-927e-5051-aa03-140385553945",
"description": "Alle Veranstaltungen beginnen grundsätzlich in der ersten Vorlesungswoche, es sei denn, es ist im Folgenden anders vermerkt.\nBis zum Semesterbeginn haben alle Angaben nur vorläufigen Charakter.\n\nBeratung zu allen Fragen erhalten Sie bei der Studienfachberatung Wirtschaftswissenschaften: \nSprechzeiten und Kontaktmöglichkeiten\n\n\nWeitere Informationen finden Sie auch auf der Website: \nhttps://www.wiwi.uni-frankfurt.de/"
}
}
],
"facets": [
{
"buckets": [
{
"count": 6,
"key": "catalog"
}
],
"field": "type"
},
{
"buckets": [
{
"count": 6,
"key": "WiSe 2022/23"
}
],
"field": "academicTerm.acronym",
"onlyOnType": "catalog"
},
{
"buckets": [
{
"count": 6,
"key": "university events"
}
],
"field": "categories",
"onlyOnType": "catalog"
},
{
"buckets": [
{
"count": 6,
"key": "university events"
}
],
"field": "superCatalog.categories",
"onlyOnType": "catalog"
},
{
"buckets": [
{
"count": 6,
"key": "university events"
}
],
"field": "superCatalogs.categories",
"onlyOnType": "catalog"
}
],
"pagination": {
"count": 6,
"offset": 0,
"total": 6
},
"stats": {
"time": 3
}
}
@@ -0,0 +1,9 @@
{
"filter": {
"arguments": {
"field": "type",
"value": "semester"
},
"type": "value"
}
}
@@ -0,0 +1,209 @@
{
"data": [
{
"uid": "ff2626e2-c1d8-5cd0-a6a2-cc68547a8079",
"alternateNames": ["Winter 2019/20"],
"acronym": "WiSe 2019/20",
"endDate": "2020-03-31T21:59:59.999Z",
"eventsStartDate": "2019-10-13T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.429Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Wintersemester 2019/20",
"eventsEndDate": "2020-02-14T22:59:59.999Z",
"type": "semester",
"startDate": "2019-09-30T22:00:00.000Z"
},
{
"uid": "283210ef-60fd-571c-b2d7-233a223d815c",
"alternateNames": ["Sommer 2019"],
"acronym": "SoSe 2019",
"endDate": "2019-09-30T21:59:59.999Z",
"eventsStartDate": "2019-04-14T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.427Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Sommersemester 2019",
"eventsEndDate": "2019-07-19T21:59:59.999Z",
"type": "semester",
"startDate": "2019-03-31T22:00:00.000Z"
},
{
"uid": "e9333354-79c5-5afc-8c28-e5e7079956ed",
"alternateNames": ["Sommer 2020"],
"acronym": "SoSe 2020",
"endDate": "2020-09-30T21:59:59.999Z",
"eventsStartDate": "2020-04-13T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.430Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Sommersemester 2020",
"eventsEndDate": "2020-07-17T21:59:59.999Z",
"type": "semester",
"startDate": "2020-03-31T22:00:00.000Z"
},
{
"uid": "34757b85-6f96-5b72-adc4-b96ef4c67037",
"alternateNames": ["Winter 2020/21"],
"acronym": "WiSe 2020/21",
"endDate": "2021-03-31T21:59:59.999Z",
"eventsStartDate": "2020-11-01T23:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.431Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Wintersemester 2020/21",
"eventsEndDate": "2020-02-21T22:59:59.999Z",
"type": "semester",
"startDate": "2020-09-30T22:00:00.000Z"
},
{
"uid": "dbf1d23d-5ee9-58d6-af40-f64f3b3019fa",
"alternateNames": ["Sommer 2021"],
"acronym": "SoSe 2021",
"endDate": "2021-09-30T21:59:59.999Z",
"eventsStartDate": "2021-04-11T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.431Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Sommersemester 2021",
"eventsEndDate": "2021-07-16T21:59:59.999Z",
"type": "semester",
"startDate": "2021-03-31T22:00:00.000Z"
},
{
"uid": "049ab143-8b77-5dcc-95e9-8bb6755f3db4",
"alternateNames": ["Winter 2021/22"],
"acronym": "WiSe 2021/22",
"endDate": "2022-03-31T21:59:59.999Z",
"eventsStartDate": "2021-10-17T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.432Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Wintersemester 2021/22",
"eventsEndDate": "2022-02-18T22:59:59.999Z",
"type": "semester",
"startDate": "2021-09-30T22:00:00.000Z"
},
{
"uid": "4b2766cb-e16d-5698-b5b3-e650613d497a",
"alternateNames": ["Sommer 2022"],
"acronym": "SoSe 2022",
"endDate": "2022-09-30T21:59:59.999Z",
"eventsStartDate": "2022-04-10T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.433Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Sommersemester 2022",
"eventsEndDate": "2022-07-15T21:59:59.999Z",
"type": "semester",
"startDate": "2022-03-31T22:00:00.000Z"
},
{
"uid": "d8045576-799a-5bec-85be-bc0026a76509",
"alternateNames": ["Winter 2022/23"],
"acronym": "WiSe 2022/23",
"endDate": "2023-03-31T21:59:59.999Z",
"eventsStartDate": "2022-10-16T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.433Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Wintersemester 2022/23",
"eventsEndDate": "2023-02-10T22:59:59.999Z",
"type": "semester",
"startDate": "2022-09-30T22:00:00.000Z"
},
{
"uid": "7391f2ee-8f3b-577b-890a-a3f4f4728a9d",
"alternateNames": ["Sommer 2023"],
"acronym": "SoSe 2023",
"endDate": "2023-09-30T21:59:59.999Z",
"eventsStartDate": "2023-04-10T22:00:00.000Z",
"origin": {
"indexed": "2023-02-24T23:14:26.434Z",
"name": "Goethe-Uni QIS / LSF",
"type": "remote"
},
"name": "Sommersemester 2023",
"eventsEndDate": "2023-07-14T21:59:59.999Z",
"type": "semester",
"startDate": "2023-03-31T22:00:00.000Z"
}
],
"facets": [
{
"buckets": [
{
"count": 9,
"key": "semester"
}
],
"field": "type"
},
{
"buckets": [
{
"count": 1,
"key": "SoSe 2019"
},
{
"count": 1,
"key": "SoSe 2020"
},
{
"count": 1,
"key": "SoSe 2021"
},
{
"count": 1,
"key": "SoSe 2022"
},
{
"count": 1,
"key": "SoSe 2023"
},
{
"count": 1,
"key": "WiSe 2019/20"
},
{
"count": 1,
"key": "WiSe 2020/21"
},
{
"count": 1,
"key": "WiSe 2021/22"
},
{
"count": 1,
"key": "WiSe 2022/23"
}
],
"field": "acronym",
"onlyOnType": "semester"
}
],
"pagination": {
"count": 9,
"offset": 0,
"total": 9
},
"stats": {
"time": 2
}
}
@@ -0,0 +1,549 @@
{
"app": {
"aboutPages": {
"about": {
"title": "Über Open StApps",
"content": [
{
"title": "Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App",
"content": {
"value": "Open StApps bietet Studierenden aller beteiligten Hochschulen eine qualitativ\nhochwertige App für den Studienalltag. Open StApps-Verbundpartner integrieren\ngeneralisierbare Studierendenprozesse so in App-Module, dass diese auch\nvon anderen Hochschulen verwendet werden können. Die in der Open StApps App\nverwendeten Daten einer Datenquelle sind in einem generalisierten Datenmodell\nso aufbereitet, dass ein Austausch oder Abschaltung der Datenquelle problemlos möglich\nist und die Open StApps App problemlos weiterhin funktionsfähig bleibt.\n",
"translations": {
"en": {
"value": "Open StApps provides students from all participating universities with a\nhigh-quality app for everyday study. Open StApps partners integrate\ngeneralizable student processes into app modules in such a way that they can be\nused by other universities. The data of a data source used in the Open StApps app\nis prepared in a generalized data model in a way that the data source can be easily\nexchanged or switched off while the app continues to function without any problems.\n"
}
},
"type": "markdown"
},
"translations": {
"en": {
"title": "Collaborative project of multiple universities for a single generic study app"
}
},
"type": "section"
},
{
"title": "Goethe-Uni Kontakt",
"content": {
"rows": [
[
{
"value": "Adresse",
"translations": {
"en": {
"value": "Address"
}
},
"type": "markdown"
},
{
"value": "Goethe Universität<br>Hochschulrechenzentrum (HRZ)<br>Norbert-Wollheim-Platz 1<br>60629 Frankfurt",
"translations": {},
"type": "markdown"
}
],
[
{
"value": "Kontaktinformation",
"translations": {
"en": {
"value": "Contact information"
}
},
"type": "markdown"
},
{
"value": "[app@rz.uni-frankfurt.de](mailto:app@rz.uni-frankfurt.de)<br>[+49 69 798 32936](tel:+496979832936)<br>[https://app.rz.uni-frankfurt.de](https://app.rz.uni-frankfurt.de)",
"translations": {},
"type": "markdown"
}
]
],
"type": "table"
},
"translations": {
"en": {
"title": "Goethe-Uni Contact"
}
},
"type": "section"
},
{
"icon": "newspaper",
"title": "Neue Funktionen / Gelöste Probleme",
"link": "changelog",
"translations": {
"en": {
"title": "New features / Resolved issues"
}
},
"type": "router link"
},
{
"icon": "description",
"title": "Impressum",
"link": "imprint",
"translations": {
"en": {
"title": "Imprint"
}
},
"type": "router link"
},
{
"icon": "policy",
"title": "Datenschutz",
"link": "privacy",
"translations": {
"en": {
"title": "Privacy policy"
}
},
"type": "router link"
},
{
"icon": "copyright",
"title": "Bibliotheken und Lizenzen",
"link": "licenses",
"translations": {
"en": {
"title": "Libraries and licenses"
}
},
"type": "router link"
}
],
"translations": {
"en": {
"title": "About Open StApps"
}
}
},
"about/imprint": {
"title": "Impressum",
"content": [
{
"value": "[Impressum der Johann Wolfgang Goethe-Universität Frankfurt am Main](https://www.uni-frankfurt.de/impressum)",
"translations": {
"en": {
"value": "[Imprint of the Goethe University Frankfurt](https://www.uni-frankfurt.de/impressum)"
}
},
"type": "markdown"
}
],
"translations": {
"en": {
"title": "Imprint"
}
}
},
"about/privacy": {
"title": "Datenschutz",
"content": [
{
"value": "# Datenschutzerklärung\n\n## Kontaktdaten des Verantwortlichen\n\nVerantwortlich im Sinne der Datenschutz-Grundverordnung und weiterer Vorschriften zum Datenschutz ist die:\n\nJohann Wolfgang Goethe-Universität Frankfurt am Main vertreten durch ihren Präsidenten<br />\nTheodor-W.-Adorno-Platz 1<br />\n60323 Frankfurt am Main\n\nPostanschrift:<br />\nGoethe-Universität Frankfurt am Main<br />\n60629 Frankfurt\n\nWebsite: http://www.uni-frankfurt.de\n\n## Kontaktdaten der Datenschutzbeauftragten an der Goethe-Universität\n\nSie erreichen die behördlichen Datenschutzbeauftragten der Johann Wolfgang Goethe-Universität Frankfurt am Main unter:<br />\nMail: <dsb@uni-frankfurt.de><br />\nWebsite: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte\n\n## Informationen zur Verarbeitung personenbezogener Daten\n\n### <u>1. Umfang der Verarbeitung personenbezogener Daten</u>\n\nPersonenbezogene Daten sind gemäß Artikel 4 DSGVO alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.\n\nWir verarbeiten personenbezogene Daten von Ihnen als Nutzer:innen der Goethe-Uni-App, soweit dies zur Bereitstellung einer **funktionsfähigen Applikation** technisch erforderlich ist.\n\nWeiterhin kann eine Datenverarbeitung auf Ihrer freiwilligen Einwilligung basieren, wenn Sie **spezifische Funktionen** nutzen möchten.\n\nWir unterscheiden daher nachfolgend zwischen\n\n- Zugriffsdaten bei der Nutzung der App: Inhalt der Anfragen, IP-Adressen, Datum/Uhrzeit der Anfrage, Angefragte URL, Fehlermeldungen, Browser-Kennung, HTTP-Header\n\n- Standortbestimmung und Navigation: freiwillige Standortangaben\n\n- Nutzer:inneneinstellungen: freiwillige Angabe von a) Sprachpräferenzen (derzeit: deutsch/englisch), b) Status (z. B. Gast/Student) oder c) spezifischen Suchanfragen und Suchergebnissen (Notifications)\n\n- Kalenderfunktion: freiwillige Nutzung der Kalenderfunktion (optional mit freiwilliger Nutzung einer Synchronisationsfunktion: Opt-in) oder der integrierten Stundenplanfunktion, hierbei werden folgende Daten auf dem Endgerät verarbeitet und gespeichert: Termine und Veranstaltungen\n\n- Feedbackfunktion und Kontaktaufnahme: freiwillige Nutzung mit der Angabe von Kontaktdaten und ggf. freiwilliger Übermittlung von Protokolldaten\n\n- Campus Dienste: freiwillige Nutzung mit Verarbeitung von Notenansicht, Matrikelnummer, E-Mailadresse, Name\n\n- Funktionen der Bibliothek: freiwillige Nutzung mit Verarbeitung von Bibliothekskontodaten, wie z.B. Ausweisnummer mit Name, E-Mailadresse, postalischer Adresse, Nutzungsberechtigung, Bestelldaten, Gebühren, Vormerkung, Ausleihdaten. Die vollständigen Angaben zur Verarbeitung finden Sie in der Datenschutzerklärung der Bibliothek:<br />\n https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html\n\nDie App verlinkt an einigen Stellen auf die Website der Goethe-Universität sowie auf andere, externe Websites, die in einem In-App-Browser dargestellt werden. Wir bitten Sie bei Aufruf dieser Websites, die dort geltenden gesonderte Datenschutzhinweise und Erklärungen zu beachten.\n\n### <u>2. Zweck(e) der Datenverarbeitung</u>\n\n**Zugriff auf Standortdaten**\n\nFür die Navigation benötigt die Goethe-Uni-App Zugriff auf den Standort des verwendeten Endgerätes (Location Based Services). Bei einer Anfrage erhebt die App den aktuellen Standort über GPS, Funkzellendaten und WLAN-Datenbanken, um Ihnen als Nutzer:in Informationen zu Ihrer unmittelbaren Umgebung geben zu können. Der Zugriff auf die Standortdaten erfolgt nur, wenn Sie den Zugriff auf die Standortdaten erlauben. Daten zu Ihrem Standort werden ausschließlich für die Bearbeitung von standortbezogenen Anfragen genutzt und um Ihren Standort auf der Karte anzuzeigen.\n\n**Zugriff auf Zugriffsdaten**\n\nDie Speicherung und Verarbeitung von Protokolldateien erfolgt, um die Funktionsfähigkeit der Goethe Uni-App für Sie sicherzustellen. Zudem benötigen wir die die Daten aus Gründen der Sicherheit unserer informationstechnischen Systeme. Eine anderweitige Auswertung oder Weitergabe findet in diesem Zusammenhang nicht statt.\n\n**Zugriff auf Spracheinstellungen**\n\nDer Zugriff auf die Spracheinstellung erfolgt um Ihnen die Oberfläche der App in der von Ihnen gewünschten Sprache anzuzeigen.\n\n**Zugriff auf die Einstellung der Statusgruppe**\n\nDer Zugriff auf die Einstellung der Statusgruppe erfolgt um Ihnen in der App die für Ihre Gruppe zutreffenden Informationen anzuzeigen, z.B. Mensapreise\n\n**Zugriff auf personenbezogene Daten bei der Nutzung der Feedbackfunktion**\n\nDie Verarbeitung der personenbezogenen Daten aus der Feedbackfunktion dient uns zur Kontaktaufnahme und Fehlerbehebung.\n\n**Zugriff auf personenbezogene Daten bei der Kalendersynchronisation**\n\nDer Zugriff auf die Termindaten erfolgt um sie bei aktivierter Kalenderfunktion in den Gerätekalender zu schreiben.\n\n**Zugriff auf Daten der Campus Dienste**\n\nDer Zugriff auf das Line truncated
"translations": {
"en": {
"value": "# Privacy policy\n\n## Contact details of the person responsible\n\nResponsible in the sense of the General Data Protection Regulation and further regulations on data protection is the:\n\nJohann Wolfgang Goethe-Universität Frankfurt am Main represented by its president<br />\nTheodor-W.-Adorno-Platz 1<br />\n60323 Frankfurt am Main\n\nPostanschrift:<br />\nGoethe-Universität Frankfurt am Main<br />\n60629 Frankfurt\n\nWebsite: http://www.uni-frankfurt.de\n\n## Contact details of the data protection officer at Goethe University\n\nYou can reach the data protection officers at Johann Wolfgang Goethe University Frankfurt am Main at:<br />\nMail: <dsb@uni-frankfurt.de><br />\nWebsite: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte\n\n## Information on the processing of personal data\n\n### <u>1. Scope of the processing of personal data</u>.\n\nAccording to Article 4 DSGVO, personal data is any information relating to an identified or identifiable natural person.\n\nWe process personal data of you as a user inside of the Goethe University App to the extent that this is technically necessary for the provision of a **functional application**.\n\nFurthermore, data processing may be based on your voluntary consent if you wish to use **specific functions**.\n\nWe therefore distinguish below between\n\n- Access data when using the app: content of requests, IP addresses, date/time of request, requested URL, error codes, browser identifier, HTTP header.\n\n- Location and navigation: voluntary location information\n\n- User settings: voluntary specification of a) language preferences (currently: German/English), b) status (e.g. guest/student) or c) specific search queries and search results (notifications)\n\n- Calendar function: voluntary use of the calendar function (optional with voluntary use of a sync function: opt-in) or the integrated timetable function. The following data is processed and stored on the users device: appointments and events\n\n- Feedback function and contacting: voluntary use with the provision of contact data and, if applicable, voluntary transmission of log data\n\n- Campus services: voluntary use with processing of grade view, matriculation number, email address, name\n\n- Services of the library: voluntary use with processing of library account data, such as ID number with name, e-mail address, postal address, right of use, order data, fees, reservation, loan data. Full details of processing can be found in the library's privacy policy:<br />\n https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html\n\nIn some places, the app links to the Goethe University website and to other external websites that are displayed in an in-app browser. When you visit these websites, we ask you to pay attention to the separate data protection notices and declarations that apply there.\n\n### <u>2. Purpose(s) of data processing</u>\n\n**Access to location data**.\n\nFor navigation, the Goethe University app requires access to the location of the end device used (location-based services). When a request is made, the app collects the current location via GPS, radio cell data and WLAN databases in order to be able to give you as a user:in information about your immediate surroundings. The location data is only accessed if you allow access to the location data. Data about your location is only used to process location-related requests and to display your location on the map.\n\n**Access to access data**.\n\nLog files are stored and processed to ensure that the Goethe Uni app functions properly for you. In addition, we need the data for reasons of security of our information technology systems. No other evaluation or disclosure takes place in this context.\n\n**Access to language settings**.\n\nAccess to the language setting is made in order to display the interface of the app in the language of your choice.\n\n**Access to the status group setting**.\n\nAccess to the status group setting is provided to show you the information in the app that applies to your group, e.g. canteen prices.\n\n**Access to personal data when using the feedback function**.\n\nWe use the processing of personal data from the feedback function to contact you and troubleshoot problems.\n\n**Access to personal data when synchronizing calendars**.\n\nAppointment data is accessed in order to write it to the device calendar when the calendar function is enabled.\n\n**Access to Campus Services data**.\n\nAccess to the Campus Management System is solely for the purpose of displaying personal student management data in the app (e.g., exam grades).\n\n**Access to library-specific personal data**.\n\nAccess to data (e.g., ID number, name, mailing address) is for the purpose of carrying out ordering and borrowing procedures for books and other materials from the University Library. Full details of the purposes of processing can be found in the Library's Privacy Policy: https://www.ub.uni-frankfurt.de/benutzunLine truncated
}
},
"type": "markdown"
}
],
"translations": {
"en": {
"title": "Privacy Policy"
}
}
}
},
"campusPolygon": {
"coordinates": [
[
[8.660432999690723, 50.123027017044436],
[8.675496285518358, 50.123027017044436],
[8.675496285518358, 50.13066176448642],
[8.660432999690723, 50.13066176448642],
[8.660432999690723, 50.123027017044436]
]
],
"type": "Polygon"
},
"features": {
"extern": {
"hisometry": {
"authProvider": "default",
"url": "https://his-self-service.rz.uni-frankfurt.de"
},
"daia": {
"url": "https://daia.hebis.de/DAIA2/UB_Frankfurt"
},
"hebisProxy": {
"url": "https://proxy.ub.uni-frankfurt.de/login?qurl="
},
"paia": {
"authProvider": "paia",
"url": "https://hds.hebis.de/paia/core"
}
},
"plugins": {
"openstapps-f-u-rating-plugin": {
"urlPath": "/rating"
},
"feedback": {
"urlPath": "/feedback"
},
"hebis-plugin": {
"urlPath": "/hebissearch"
}
}
},
"menus": [
{
"icon": "home",
"items": [
{
"icon": "newspaper",
"route": "/news",
"title": "news",
"translations": {
"de": {
"title": "Aktuelles"
},
"en": {
"title": "news"
}
}
},
{
"icon": "search",
"route": "/search",
"title": "search",
"translations": {
"de": {
"title": "Suche"
},
"en": {
"title": "search"
}
}
},
{
"icon": "local_library",
"route": "/hebis-search",
"title": "library catalog",
"translations": {
"de": {
"title": "Bibliothekskatalog"
},
"en": {
"title": "library catalog"
}
}
},
{
"icon": "inventory_2",
"route": "/catalog",
"title": "course catalog",
"translations": {
"de": {
"title": "Vorlesungsverzeichnis"
},
"en": {
"title": "course catalog"
}
}
}
],
"title": "overview",
"route": "/overview",
"translations": {
"de": {
"title": "Übersicht"
},
"en": {
"title": "overview"
}
}
},
{
"icon": "local_cafe",
"items": [],
"route": "/canteen",
"title": "canteen",
"translations": {
"de": {
"title": "Mensa"
},
"en": {
"title": "canteen"
}
}
},
{
"icon": "map",
"items": [],
"route": "/map",
"title": "campus map",
"translations": {
"de": {
"title": "Campus Karte"
},
"en": {
"title": "campus map"
}
}
},
{
"icon": "school",
"items": [
{
"icon": "grade",
"route": "/favorites",
"title": "favorites",
"translations": {
"de": {
"title": "Favoriten"
},
"en": {
"title": "favorites"
}
}
},
{
"icon": "calendar_today",
"route": "/schedule",
"title": "schedule",
"translations": {
"de": {
"title": "Stundenplan"
},
"en": {
"title": "schedule"
}
}
},
{
"authProvider": "paia",
"icon": "badge",
"route": "/library-account",
"title": "library account",
"translations": {
"de": {
"title": "Bibliothekskonto"
},
"en": {
"title": "library account"
}
}
},
{
"icon": "settings",
"route": "/settings",
"title": "settings",
"translations": {
"de": {
"title": "Einstellungen"
},
"en": {
"title": "settings"
}
}
},
{
"icon": "rate_review",
"route": "/feedback",
"title": "feedback",
"translations": {
"de": {
"title": "Feedback"
},
"en": {
"title": "feedback"
}
}
},
{
"icon": "info",
"route": "/about",
"title": "about",
"translations": {
"de": {
"title": "Über die App"
},
"en": {
"title": "About the App"
}
}
}
],
"title": "my app",
"route": "/profile",
"translations": {
"de": {
"title": "Meine App"
},
"en": {
"title": "my app"
}
}
}
],
"name": "Goethe-Uni",
"privacyPolicyUrl": "https://mobile.server.uni-frankfurt.de/_static/privacy.md",
"settings": [
{
"categories": ["profile"],
"defaultValue": "students",
"description": "The user group the app is going to be used.This settings for example is getting used for the predefined price category of mensa meals.",
"inputType": "single choice",
"name": "group",
"order": 1,
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "SCConfigFile Default Values",
"type": "remote"
},
"translations": {
"de": {
"description": "Mit welcher Benutzergruppe soll die App verwendet werden? Die Einstellung wird beispielsweise für die Vorauswahl der Preiskategorie der Mensa verwendet.",
"name": "Gruppe",
"values": ["Studierende", "Angestellte", "Gäste"]
},
"en": {
"description": "The user group the app is going to be used. This settings for example is getting used for the predefined price category of mensa meals.",
"name": "Group",
"values": ["students", "employees", "guests"]
}
},
"type": "setting",
"uid": "2c97aa36-4aa2-43de-bc5d-a2b2cb3a530e",
"values": ["students", "employees", "guests"]
},
{
"categories": ["profile"],
"defaultValue": "en",
"description": "The language this app is going to use.",
"inputType": "single choice",
"name": "language",
"order": 0,
"origin": {
"indexed": "2018-09-11T12:30:00Z",
"name": "SCConfigFile Default Values",
"type": "remote"
},
"translations": {
"de": {
"description": "Die Sprache in der die App angezeigt wird.",
"name": "Sprache",
"values": ["Deutsch", "English"]
},
"en": {
"description": "The language this app is going to use.",
"name": "Language",
"values": ["Deutsch", "English"]
}
},
"type": "setting",
"uid": "dc9d6dec-6576-45ef-9e35-3598c0d6a662",
"values": ["de", "en"]
}
]
},
"auth": {
"default": {
"client": {
"clientId": "1cac3f99-33fa-4234-8438-979f07e0cdab",
"scopes": "",
"url": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0"
},
"endpoints": {
"authorization": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/authorize",
"endSession": "https://cas.rz.uni-frankfurt.de/cas/logout",
"mapping": {
"id": "$.id",
"email": "$.attributes.mailPrimaryAddress",
"familyName": "$.attributes.sn",
"givenName": "$.attributes.givenName",
"name": "$.attributes.givenName",
"role": "$.attributes.eduPersonPrimaryAffiliation",
"studentId": "$.attributes.employeeNumber"
},
"token": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/accessToken",
"userinfo": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile"
}
},
"paia": {
"client": {
"clientId": "",
"scopes": "",
"url": "https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php"
},
"endpoints": {
"authorization": "https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php",
"endSession": "https://ubffm.hds.hebis.de/Shibboleth.sso/Logout",
"mapping": {
"id": "$.email",
"name": "$.name",
"role": "$.type"
},
"token": "https://hds.hebis.de/paia/auth/login",
"userinfo": "https://hds.hebis.de/paia/core"
}
}
},
"backend": {
"SCVersion": "3.0.1",
"externalRequestTimeout": 5000,
"hiddenTypes": ["date series", "diff", "floor"],
"mappingIgnoredTags": ["minlength", "pattern", "see", "tjs-format"],
"maxMultiSearchRouteQueries": 5,
"maxRequestBodySize": 524288,
"name": "Goethe-Universität Frankfurt am Main",
"namespace": "909a8cbc-8520-456c-b474-ef1525f14209",
"sortableFields": [
{
"fieldName": "name",
"sortTypes": ["ducet"]
},
{
"fieldName": "type",
"sortTypes": ["ducet"]
},
{
"fieldName": "categories",
"onlyOnTypes": ["academic event", "building", "catalog", "dish", "point of interest", "room"],
"sortTypes": ["ducet"]
},
{
"fieldName": "geo",
"onlyOnTypes": ["building", "point of interest", "room"],
"sortTypes": ["distance"]
},
{
"fieldName": "geo",
"onlyOnTypes": ["building", "point of interest", "room"],
"sortTypes": ["distance"]
},
{
"fieldName": "inPlace.geo",
"onlyOnTypes": [
"date series",
"dish",
"floor",
"organization",
"point of interest",
"room",
"ticket"
],
"sortTypes": ["distance"]
},
{
"fieldName": "offers",
"onlyOnTypes": ["dish"],
"sortTypes": ["price"]
}
]
}
}
@@ -0,0 +1,24 @@
{
"filter": {
"arguments": {
"filters": [
{
"arguments": {
"field": "type",
"value": "date series"
},
"type": "value"
},
{
"arguments": {
"filters": [],
"operation": "or"
},
"type": "boolean"
}
],
"operation": "and"
},
"type": "boolean"
}
}
@@ -1,5 +0,0 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}
@@ -0,0 +1,17 @@
{
"filter": {
"type": "boolean",
"arguments": {
"filters": [
{
"type": "value",
"arguments": {
"field": "type",
"value": "message"
}
}
],
"operation": "and"
}
}
}
@@ -2,7 +2,7 @@
"data": [
{
"datePublished": "2022-06-07T09:42:00.000Z",
"uid": "c90c7d30-410f-5aea-a67b-ea1f98929b93",
"uid": "message",
"messageBody": "DE for Students and Employees",
"origin": {
"indexed": "2022-06-08T19:30:08.640Z",
@@ -2,7 +2,7 @@
"data": [
{
"datePublished": "2022-06-07T09:42:00.000Z",
"uid": "c90c7d30-410f-5aea-a67b-ea1f98929b93",
"uid": "message",
"messageBody": "DE for Students and Employees",
"origin": {
"indexed": "2022-06-08T19:30:08.640Z",
@@ -19,31 +19,11 @@
"sameAs": "https://aktuelles.uni-frankfurt.de/?p=59273"
}
],
"facets": [
{
"buckets": [
{
"count": 85,
"key": "message"
}
],
"field": "type"
},
{
"buckets": [
{
"count": 85,
"key": "news"
}
],
"field": "categories",
"onlyOnType": "message"
}
],
"facets": [],
"pagination": {
"count": 10,
"count": 1,
"offset": 0,
"total": 85
"total": 1
},
"stats": {
"time": 2
Loaded 100 of 520 files, more files were not shown because too many files have changed in this diff. Show more