Skip to content
Snippets Groups Projects
Commit b26633eb authored by Rene Roesner's avatar Rene Roesner
Browse files

planning#367: Anpassung Schema Seiten

parent 201f3db6
No related branches found
No related tags found
1 merge request!157planning#367: Anpassung Schema Seiten
...@@ -275,8 +275,8 @@ Die Dokumentation wird noch um eine Validierung des Metadatenschema anhand eines ...@@ -275,8 +275,8 @@ Die Dokumentation wird noch um eine Validierung des Metadatenschema anhand eines
Im Metadatensatz muss mindestens eine Struktur der übermittelten Inhalte einer Einreichung (Fachdaten, Anlagen) im Feld `contentStructure` angegeben werden. Im Metadatensatz muss mindestens eine Struktur der übermittelten Inhalte einer Einreichung (Fachdaten, Anlagen) im Feld `contentStructure` angegeben werden.
Zusätzlich können noch die Felder `authenticationInformation`, `paymentInformation`, `publicServiceType` und `replyChannel` mit entsprechenden Unterobjekten angegeben werden, um den Weg einer Antwort bzw. die Bezahlinformationen der Einreichung genauer zu definieren. Zusätzlich können noch die Felder `authenticationInformation`, `paymentInformation`, `publicServiceType` und `replyChannel` mit entsprechenden Unterobjekten angegeben werden, um den Weg einer Antwort bzw. die Bezahlinformationen der Einreichung genauer zu definieren.
Die gültigen Formate, die die Felder des Schemas annehmen können, sind im [Metadatenschema selbst](../metadata/schema.mdx) definiert und können mithilfe von Bibliotheken validiert werden. Die gültigen Formate, die die Felder des Schemas annehmen können, sind im [Metadatenschema selbst](../metadata/overview.mdx) definiert und können mithilfe von Bibliotheken validiert werden.
Eine Liste der zur Verfügung stehenden [Schema-Validatoren](https://json-schema.org/implementations.html#validators) sowie [Code-Generatoren](https://json-schema.org/implementations.html#generators-from-schemas) für verschiedenste Programmiersprachen findet sich auf der offiziellen Seite von JSON-Schema. Eine Liste der zur Verfügung stehenden [Schmema-Validatoren](https://json-schema.org/implementations.html#validators) sowie [Code-Generatoren](https://json-schema.org/implementations.html#generators-from-schemas) für verschiedenste Programmiersprachen findet sich auf der offiziellen Seite von JSON-Schema.
## Validierung des Fachdatensatz ## Validierung des Fachdatensatz
......
...@@ -4,8 +4,8 @@ title: Metadatensatz ...@@ -4,8 +4,8 @@ title: Metadatensatz
Die Antragsmetadaten beschreiben die Struktur der Einreichung und deren Inhalte, wie Anhänge oder Fachdaten. Die Antragsmetadaten beschreiben die Struktur der Einreichung und deren Inhalte, wie Anhänge oder Fachdaten.
Zusätzlich können weitere Informationen über Verwaltungskund:innen hinterlegt werden. Zusätzlich können weitere Informationen über Verwaltungskund:innen hinterlegt werden.
Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/schema.mdx) zu finden. Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/overview.mdx) zu finden.
Im Folgenden wird beschrieben, wie für das Versenden einer Einreichung das Schema aufgebaut und befüllt wird. Im Folgenden wird nun beschrieben, wie für das Versenden einer Einreichung das Schema aufgebaut und befüllt wird.
Das Minimum, was an Information in den Metadaten vorhanden sein muss, ist der Abschnitt `contentStructure`. Das Minimum, was an Information in den Metadaten vorhanden sein muss, ist der Abschnitt `contentStructure`.
In diesem muss angegeben werden, ob und in welchem Format ein Fachdatensatz mit versendet wird. In diesem muss angegeben werden, ob und in welchem Format ein Fachdatensatz mit versendet wird.
......
# Metadatensatz ---
title: Metadatensatz
hide_table_of_contents: true
---
import JSONSchema from '@views/JSONSchema'
Metadaten sind ein zentraler Bestandteil einer Einreichung. Metadaten sind ein zentraler Bestandteil einer Einreichung.
Sie beschreiben die Struktur der Einreichung und deren Inhalte, wie beispielsweise Anlagen oder die Fachdaten. Sie beschreiben die Struktur der Einreichung und deren Inhalte, wie beispielsweise Anlagen oder die Fachdaten.
Zusätzlich können weitere Informationen über d:ie Verwaltungskund:in hinterlegt werden. Zusätzlich können weitere Informationen über d:ie Verwaltungskund:in hinterlegt werden.
Eine genaue Definition ist in der [Schema-Definition](../metadata/schema.mdx) zu finden. Eine genaue Definition ist in der [Schema-Definition](#metadatenschema) zu finden.
Im Folgenden werden nun die großen Bereiche, die im Metadatenschema aufgeführt werden, grob beschrieben. Im Folgenden werden nun die großen Bereiche, die im Metadatenschema aufgeführt werden, grob beschrieben.
:::tip Hinweis :::tip Hinweis
...@@ -13,22 +18,6 @@ Ein Beispiel für den Metadatensatz eines Kindergeldantrags findet sich in der [ ...@@ -13,22 +18,6 @@ Ein Beispiel für den Metadatensatz eines Kindergeldantrags findet sich in der [
Das Metadaten-Schema validiert gegen und orientiert sich an der [JSON Schema Spezifikation 2020-12](https://json-schema.org/specification-links.html#2020-12) in der Version von 2020. Das Metadaten-Schema validiert gegen und orientiert sich an der [JSON Schema Spezifikation 2020-12](https://json-schema.org/specification-links.html#2020-12) in der Version von 2020.
Es besteht primär aus den fünf Bereichen Authentifizierungsinformationen, Inhaltsstruktur, Bezahlinformationen, Verwaltungsleistung und Rückkanal. Es besteht primär aus den fünf Bereichen Authentifizierungsinformationen, Inhaltsstruktur, Bezahlinformationen, Verwaltungsleistung und Rückkanal.
```json ## Metadatenschema
{
"authenticationInformation": [ <JSONSchema version={"1.*.*"} name="metadata" />
],
"paymentInformation": {
},
"publicServiceType": {
},
"contentStructure": {
},
"replyChannel": {
}
}
```
---
title: Metadatenschema
hide_table_of_contents: true
---
import JSONSchema from '@views/JSONSchema'
<JSONSchema version={"1.*.*"} />
---
title: Security Event Token
hide_table_of_contents: true
---
import JSONSchema from '@views/JSONSchema'
Im Ereignisprotokoll (Event Log) werden relevante Ereignisse (events) aufgezeichnet.
Beim Abruf des Ereignisprotokolls liefert die API ein Array von JSON Web Token (JWT) gemäß [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519).
Der JWT ist einen Security-Event-Token (SET) gemäß [RFC 8417](https://datatracker.ietf.org/doc/html/rfc8417).
Wie mit den Security-Event-Token (SET) umgegangen wird, wird genauer in [Ereignisprotokoll](../getting-started/event-log/overview.mdx) beschrieben.
## Security Event Token JSON Schema
<JSONSchema version={"1.*.*"} name="set" />
...@@ -62,12 +62,11 @@ module.exports = { ...@@ -62,12 +62,11 @@ module.exports = {
label: '🚧 Metadatenschema', label: '🚧 Metadatenschema',
docId: 'metadata/overview', docId: 'metadata/overview',
}, },
/*
{ {
type: 'doc', type: 'doc',
label: 'FIM', label: '🚧 Security Event Token',
docId: 'schemas/fim' docId: 'set-schema/overview'
}*/ }
] ]
}, },
/* /*
......
...@@ -113,7 +113,6 @@ module.exports = { ...@@ -113,7 +113,6 @@ module.exports = {
], ],
metadataSidebar: [ metadataSidebar: [
'metadata/overview', 'metadata/overview',
'metadata/schema',
'metadata/authenticationInformation', 'metadata/authenticationInformation',
'metadata/paymentInformation', 'metadata/paymentInformation',
'metadata/publicServiceType', 'metadata/publicServiceType',
......
import React, {useEffect} from "react"
import useAsync from '@hooks/useAsync'
import getVersionList from "@lib/utils/getVersionList";
export default ({ version, setVersion, gitlabId }) => {
const {execute, status, error, value: versions} = useAsync(getVersionList, {
projectId: gitlabId,
includePrerelease: false
}, false)
useEffect(() => {
execute()
}, [])
useEffect(async () => {
if (status === 'success') {
console.log('vvvvvv', versions)
}
}, [status])
return <div>
Andere Version anzeigen: <select
value={version}
onChange={e => setVersion(e.target.value)}>
{versions && versions.map ? versions.map((v, i) => (
<option value={v} key={i}>
{v}
</option>
)) : ''}
</select>
</div>
}
import axios from "axios";
import semver from "semver";
export default async function ({projectId, includePrerelease = false}) {
return axios.get(`https://git.fitko.de/api/v4/projects/${projectId}/repository/tags`)
.catch((error) => {
throw `Fetching of tags failed with ${error.response.status}`
})
.then(async ({data}) => {
const versionRange = `~*.*.*`
const suitableVersions = await data
.filter(({name}) => semver.satisfies(name, versionRange, {includePrerelease}))
.map(({name}) => name)
.sort()
return suitableVersions
})
}
...@@ -9,39 +9,59 @@ import {useActivePlugin, useActiveVersion,} from '@theme/hooks/useDocs' ...@@ -9,39 +9,59 @@ import {useActivePlugin, useActiveVersion,} from '@theme/hooks/useDocs'
import useAsync from '@hooks/useAsync' import useAsync from '@hooks/useAsync'
import getLatestVersion from "@lib/utils/getLatestVersion"; import getLatestVersion from "@lib/utils/getLatestVersion";
import DownloadLabel from "@components/DownloadLabel"; import DownloadLabel from "@components/DownloadLabel";
import VersionSelect from "@components/VersionSelect";
const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect/metadata' const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect/metadata'
const SCHEMA_FILE_NAME = 'metadata.schema.json' const SCHEMA_FILE_NAME = 'metadata.schema.json'
const GITLAB_PROJECT_ID = 40 const GITLAB_PROJECT_ID = 40
const loadSchema = async (version) => { const SCHEMA_BASE_URL_SET = 'https://schema.fitko.de/fit-connect/set-payload/'
return await axios.get(`${SCHEMA_BASE_URL}/${version}/${SCHEMA_FILE_NAME}`).catch((error) => { const SCHEMA_FILE_NAME_SET = 'set-payload.schema.json'
throw `Fetching of schema with version ${version} failed with status code ${error.response.status}` const GITLAB_PROJECT_ID_SET = 81
}).then(({data}) => data)
const loadSchema = async (version, name) => {
if (name === 'set') {
return await axios.get(`${SCHEMA_BASE_URL_SET}/${version}/${SCHEMA_FILE_NAME_SET}`).catch((error) => {
throw `Fetching of Security Event Token schema with version ${version} failed with status code ${error.response.status}`
}).then(({data}) => data)
} else {
return await axios.get(`${SCHEMA_BASE_URL}/${version}/${SCHEMA_FILE_NAME}`).catch((error) => {
throw `Fetching of Metadata schema with version ${version} failed with status code ${error.response.status}`
}).then(({data}) => data)
}
} }
export default function JSONSchema(props) { export default function JSONSchema(props) {
const { name, version, includePrerelease } = props;
const [jsonSchema, setJsonSchema] = useState(null)
const [selectedVersion, setSelectedVersion] = useState(version)
console.log('selectedVersion: ', selectedVersion);
const isInBrowser = ExecutionEnvironment.canUseDOM const isInBrowser = ExecutionEnvironment.canUseDOM
const {pluginId} = useActivePlugin({failfast: true}) const {pluginId} = useActivePlugin({failfast: true})
const {name: siteVersion} = useActiveVersion(pluginId) const {name: siteVersion} = useActiveVersion(pluginId)
const schemaUrl = name === 'set' ? SCHEMA_BASE_URL_SET : SCHEMA_BASE_URL;
const schemaName = name === 'set' ? SCHEMA_FILE_NAME_SET : SCHEMA_FILE_NAME;
const gitlabId = name === 'set' ? GITLAB_PROJECT_ID_SET : GITLAB_PROJECT_ID;
const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, { const {execute, status, error, value: latestVersion} = useAsync(getLatestVersion, {
siteVersion: props.version === undefined ? '*' : props.version, siteVersion: selectedVersion === undefined ? '*' : selectedVersion,
projectId: GITLAB_PROJECT_ID, projectId: GITLAB_PROJECT_ID,
includePrerelease: props.includePrerelease !== undefined includePrerelease: includePrerelease !== undefined
}, false) }, false)
const [metadataSchema, setMetadataSchema] = useState(null)
if (isInBrowser) { if (isInBrowser) {
useEffect(() => { useEffect(() => {
execute() execute()
}, []) }, [])
useEffect(async () => {
setJsonSchema(await loadSchema(selectedVersion, name))
}, [selectedVersion])
useEffect(async () => { useEffect(async () => {
if (status === 'success') { if (status === 'success') {
console.log('vvvvvv', latestVersion, siteVersion, props.version) setSelectedVersion(latestVersion)
setMetadataSchema(await loadSchema(latestVersion)) setJsonSchema(await loadSchema(latestVersion, name))
} }
}, [status]) }, [status])
} }
...@@ -50,22 +70,24 @@ export default function JSONSchema(props) { ...@@ -50,22 +70,24 @@ export default function JSONSchema(props) {
<BrowserOnly fallback={<div>Lädt...</div>}> <BrowserOnly fallback={<div>Lädt...</div>}>
{() => ( {() => (
<div> <div>
<p>Die aktuell angezeigte Version des Metadatenschema ist {status === 'success' && <p>Die aktuell angezeigte Version des JSON Schema ist {status === 'success' &&
<code>{latestVersion}</code>} {status === 'success' && <code>{selectedVersion}</code>} {status === 'success' &&
<DownloadLabel baseURL={SCHEMA_BASE_URL} version={latestVersion} artifact={SCHEMA_FILE_NAME} label="JSON Schema"/>}. <DownloadLabel baseURL={schemaUrl} version={selectedVersion} artifact={schemaName} label="JSON Schema"/>}.
</p><br /> </p>
<VersionSelect version={selectedVersion} setVersion={setSelectedVersion} gitlabId={gitlabId}/>
<br />
<div className="json-schema-viewer admonition admonition-note alert alert--secondary"> <div className="json-schema-viewer admonition admonition-note alert alert--secondary pl-5">
{metadataSchema ? <JsonSchemaViewer {jsonSchema ? <JsonSchemaViewer
name="FIT-Connect Metadatenschema" name="FIT-Connect JSON Schema"
schema={metadataSchema} schema={jsonSchema}
expanded={true} expanded={true}
hideTopBar={false} hideTopBar={false}
emptyText="No schema defined" emptyText="No schema defined"
defaultExpandedDepth={1} /> : <p>wird geladen...</p>} defaultExpandedDepth={1} /> : <p>wird geladen...</p>}
</div> </div>
{status === 'error' && <p>Das Metadatenschema konnte leider nicht geladen werden.</p>} {status === 'error' && <p>Das JSON Schema konnte leider nicht geladen werden.</p>}
</div> </div>
) )
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment