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

Merge branch 'feat/schema-docs-additions' into 'main'

planning#367: Anpassung Schema Seiten

See merge request !157
parents 2ca782ed b26633eb
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
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.
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.
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.
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 [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
......
......@@ -4,8 +4,8 @@ title: Metadatensatz
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.
Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/schema.mdx) zu finden.
Im Folgenden wird beschrieben, wie für das Versenden einer Einreichung das Schema aufgebaut und befüllt wird.
Eine genaue Definition ist in der [Schema-Beschreibung](../../metadata/overview.mdx) zu finden.
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`.
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.
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.
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.
:::tip Hinweis
......@@ -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.
Es besteht primär aus den fünf Bereichen Authentifizierungsinformationen, Inhaltsstruktur, Bezahlinformationen, Verwaltungsleistung und Rückkanal.
```json
{
"authenticationInformation": [
],
"paymentInformation": {
},
"publicServiceType": {
},
"contentStructure": {
},
"replyChannel": {
}
}
```
## Metadatenschema
<JSONSchema version={"1.*.*"} name="metadata" />
---
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 = {
label: '🚧 Metadatenschema',
docId: 'metadata/overview',
},
/*
{
type: 'doc',
label: 'FIM',
docId: 'schemas/fim'
}*/
label: '🚧 Security Event Token',
docId: 'set-schema/overview'
}
]
},
/*
......
......@@ -113,7 +113,6 @@ module.exports = {
],
metadataSidebar: [
'metadata/overview',
'metadata/schema',
'metadata/authenticationInformation',
'metadata/paymentInformation',
'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'
import useAsync from '@hooks/useAsync'
import getLatestVersion from "@lib/utils/getLatestVersion";
import DownloadLabel from "@components/DownloadLabel";
import VersionSelect from "@components/VersionSelect";
const SCHEMA_BASE_URL = 'https://schema.fitko.de/fit-connect/metadata'
const SCHEMA_FILE_NAME = 'metadata.schema.json'
const GITLAB_PROJECT_ID = 40
const loadSchema = async (version) => {
return await axios.get(`${SCHEMA_BASE_URL}/${version}/${SCHEMA_FILE_NAME}`).catch((error) => {
throw `Fetching of schema with version ${version} failed with status code ${error.response.status}`
}).then(({data}) => data)
const SCHEMA_BASE_URL_SET = 'https://schema.fitko.de/fit-connect/set-payload/'
const SCHEMA_FILE_NAME_SET = 'set-payload.schema.json'
const GITLAB_PROJECT_ID_SET = 81
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) {
const { name, version, includePrerelease } = props;
const [jsonSchema, setJsonSchema] = useState(null)
const [selectedVersion, setSelectedVersion] = useState(version)
console.log('selectedVersion: ', selectedVersion);
const isInBrowser = ExecutionEnvironment.canUseDOM
const {pluginId} = useActivePlugin({failfast: true})
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, {
siteVersion: props.version === undefined ? '*' : props.version,
siteVersion: selectedVersion === undefined ? '*' : selectedVersion,
projectId: GITLAB_PROJECT_ID,
includePrerelease: props.includePrerelease !== undefined
includePrerelease: includePrerelease !== undefined
}, false)
const [metadataSchema, setMetadataSchema] = useState(null)
if (isInBrowser) {
useEffect(() => {
execute()
}, [])
useEffect(async () => {
setJsonSchema(await loadSchema(selectedVersion, name))
}, [selectedVersion])
useEffect(async () => {
if (status === 'success') {
console.log('vvvvvv', latestVersion, siteVersion, props.version)
setMetadataSchema(await loadSchema(latestVersion))
setSelectedVersion(latestVersion)
setJsonSchema(await loadSchema(latestVersion, name))
}
}, [status])
}
......@@ -50,22 +70,24 @@ export default function JSONSchema(props) {
<BrowserOnly fallback={<div>Lädt...</div>}>
{() => (
<div>
<p>Die aktuell angezeigte Version des Metadatenschema ist {status === 'success' &&
<code>{latestVersion}</code>} {status === 'success' &&
<DownloadLabel baseURL={SCHEMA_BASE_URL} version={latestVersion} artifact={SCHEMA_FILE_NAME} label="JSON Schema"/>}.
</p><br />
<p>Die aktuell angezeigte Version des JSON Schema ist {status === 'success' &&
<code>{selectedVersion}</code>} {status === 'success' &&
<DownloadLabel baseURL={schemaUrl} version={selectedVersion} artifact={schemaName} label="JSON Schema"/>}.
</p>
<VersionSelect version={selectedVersion} setVersion={setSelectedVersion} gitlabId={gitlabId}/>
<br />
<div className="json-schema-viewer admonition admonition-note alert alert--secondary">
{metadataSchema ? <JsonSchemaViewer
name="FIT-Connect Metadatenschema"
schema={metadataSchema}
<div className="json-schema-viewer admonition admonition-note alert alert--secondary pl-5">
{jsonSchema ? <JsonSchemaViewer
name="FIT-Connect JSON Schema"
schema={jsonSchema}
expanded={true}
hideTopBar={false}
emptyText="No schema defined"
defaultExpandedDepth={1} /> : <p>wird geladen...</p>}
</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>
)
}
......
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