summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/openapi/schemas.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/openapi/schemas.ts')
-rw-r--r--packages/backend/src/server/api/openapi/schemas.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts
new file mode 100644
index 0000000000..12fc207c47
--- /dev/null
+++ b/packages/backend/src/server/api/openapi/schemas.ts
@@ -0,0 +1,56 @@
+import { refs, Schema } from '@/misc/schema';
+
+export function convertSchemaToOpenApiSchema(schema: Schema) {
+ const res: any = schema;
+
+ if (schema.type === 'object' && schema.properties) {
+ res.required = Object.entries(schema.properties).filter(([k, v]) => !v.optional).map(([k]) => k);
+
+ for (const k of Object.keys(schema.properties)) {
+ res.properties[k] = convertSchemaToOpenApiSchema(schema.properties[k]);
+ }
+ }
+
+ if (schema.type === 'array' && schema.items) {
+ res.items = convertSchemaToOpenApiSchema(schema.items);
+ }
+
+ if (schema.ref) {
+ res.$ref = `#/components/schemas/${schema.ref}`;
+ }
+
+ return res;
+}
+
+export const schemas = {
+ Error: {
+ type: 'object',
+ properties: {
+ error: {
+ type: 'object',
+ description: 'An error object.',
+ properties: {
+ code: {
+ type: 'string',
+ description: 'An error code. Unique within the endpoint.',
+ },
+ message: {
+ type: 'string',
+ description: 'An error message.',
+ },
+ id: {
+ type: 'string',
+ format: 'uuid',
+ description: 'An error ID. This ID is static.',
+ }
+ },
+ required: ['code', 'id', 'message']
+ },
+ },
+ required: ['error']
+ },
+
+ ...Object.fromEntries(
+ Object.entries(refs).map(([key, schema]) => [key, convertSchemaToOpenApiSchema(schema)])
+ ),
+};