summaryrefslogtreecommitdiff
path: root/src/server/api/openapi/schemas.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2019-04-23 22:35:26 +0900
committerGitHub <noreply@github.com>2019-04-23 22:35:26 +0900
commit0463c6bb0f8fd32740ceb61ccce04c662272a618 (patch)
treea28cbdf6c9cdc14648b8c0e46248665a3ad7e5af /src/server/api/openapi/schemas.ts
parentFix #4768 (diff)
downloadsharkey-0463c6bb0f8fd32740ceb61ccce04c662272a618.tar.gz
sharkey-0463c6bb0f8fd32740ceb61ccce04c662272a618.tar.bz2
sharkey-0463c6bb0f8fd32740ceb61ccce04c662272a618.zip
Refactor API (#4770)
* wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update description.ts * wip
Diffstat (limited to 'src/server/api/openapi/schemas.ts')
-rw-r--r--src/server/api/openapi/schemas.ts455
1 files changed, 48 insertions, 407 deletions
diff --git a/src/server/api/openapi/schemas.ts b/src/server/api/openapi/schemas.ts
index 65826d9321..e54f989e74 100644
--- a/src/server/api/openapi/schemas.ts
+++ b/src/server/api/openapi/schemas.ts
@@ -1,3 +1,39 @@
+import { packedUserSchema } from '../../../models/repositories/user';
+import { Schema } from '../../../misc/schema';
+import { packedNoteSchema } from '../../../models/repositories/note';
+import { packedUserListSchema } from '../../../models/repositories/user-list';
+import { packedAppSchema } from '../../../models/repositories/app';
+import { packedMessagingMessageSchema } from '../../../models/repositories/messaging-message';
+import { packedNotificationSchema } from '../../../models/repositories/notification';
+import { packedDriveFileSchema } from '../../../models/repositories/drive-file';
+import { packedDriveFolderSchema } from '../../../models/repositories/drive-folder';
+import { packedFollowingSchema } from '../../../models/repositories/following';
+import { packedMutingSchema } from '../../../models/repositories/muting';
+import { packedBlockingSchema } from '../../../models/repositories/blocking';
+import { packedNoteReactionSchema } from '../../../models/repositories/note-reaction';
+
+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 !== true).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',
@@ -26,413 +62,18 @@ export const schemas = {
required: ['error']
},
- User: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this User.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- username: {
- type: 'string',
- description: 'The screen name, handle, or alias that this user identifies themselves with.',
- example: 'ai'
- },
- name: {
- type: 'string',
- nullable: true,
- description: 'The name of the user, as they’ve defined it.',
- example: '藍'
- },
- host: {
- type: 'string',
- nullable: true,
- example: 'misskey.example.com'
- },
- description: {
- type: 'string',
- nullable: true,
- description: 'The user-defined UTF-8 string describing their account.',
- example: 'Hi masters, I am Ai!'
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the user account was created on Misskey.'
- },
- followersCount: {
- type: 'number',
- description: 'The number of followers this account currently has.'
- },
- followingCount: {
- type: 'number',
- description: 'The number of users this account is following.'
- },
- notesCount: {
- type: 'number',
- description: 'The number of Notes (including renotes) issued by the user.'
- },
- isBot: {
- type: 'boolean',
- description: 'Whether this account is a bot.'
- },
- isCat: {
- type: 'boolean',
- description: 'Whether this account is a cat.'
- },
- isAdmin: {
- type: 'boolean',
- description: 'Whether this account is the admin.'
- },
- isVerified: {
- type: 'boolean'
- },
- isLocked: {
- type: 'boolean'
- },
- },
- required: ['id', 'name', 'username', 'createdAt']
- },
-
- UserList: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this UserList.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the UserList was created.'
- },
- title: {
- type: 'string',
- description: 'The name of the UserList.'
- },
- },
- required: ['id', 'createdAt', 'title']
- },
-
- MessagingMessage: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this MessagingMessage.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the MessagingMessage was created.'
- },
- text: {
- type: 'string',
- nullable: true
- },
- file: {
- type: 'DriveFile',
- nullable: true
- },
- recipientId: {
- type: 'string',
- format: 'id',
- },
- recipient: {
- $ref: '#/components/schemas/User'
- },
- },
- required: ['id', 'createdAt']
- },
-
- Note: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this Note.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the Note was created on Misskey.'
- },
- text: {
- type: 'string'
- },
- cw: {
- type: 'string'
- },
- userId: {
- type: 'string',
- format: 'id',
- },
- user: {
- $ref: '#/components/schemas/User'
- },
- replyId: {
- type: 'string',
- format: 'id',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- renoteId: {
- type: 'string',
- format: 'id',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- reply: {
- $ref: '#/components/schemas/Note'
- },
- renote: {
- $ref: '#/components/schemas/Note'
- },
- viaMobile: {
- type: 'boolean'
- },
- visibility: {
- type: 'string'
- },
- },
- required: ['id', 'userId', 'createdAt']
- },
-
- Notification: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this notification.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the notification was created.'
- },
- type: {
- type: 'string',
- enum: ['follow', 'receiveFollowRequest', 'mention', 'reply', 'renote', 'quote', 'reaction', 'pollVote'],
- description: 'The type of the notification.'
- },
- },
- required: ['id', 'createdAt', 'type']
- },
-
- DriveFile: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this Drive file.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the Drive file was created on Misskey.'
- },
- name: {
- type: 'string',
- description: 'The file name with extension.',
- example: 'lenna.jpg'
- },
- type: {
- type: 'string',
- description: 'The MIME type of this Drive file.',
- example: 'image/jpeg'
- },
- md5: {
- type: 'string',
- format: 'md5',
- description: 'The MD5 hash of this Drive file.',
- example: '15eca7fba0480996e2245f5185bf39f2'
- },
- size: {
- type: 'number',
- description: 'The size of this Drive file. (bytes)',
- example: 51469
- },
- folderId: {
- type: 'string',
- format: 'id',
- nullable: true,
- description: 'The parent folder ID of this Drive file.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- isSensitive: {
- type: 'boolean',
- description: 'Whether this Drive file is sensitive.',
- },
- },
- required: ['id', 'createdAt', 'name', 'type', 'size', 'md5']
- },
-
- DriveFolder: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this Drive folder.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the Drive folder was created.'
- },
- name: {
- type: 'string',
- description: 'The folder name.',
- },
- foldersCount: {
- type: 'number',
- description: 'The count of child folders.',
- },
- filesCount: {
- type: 'number',
- description: 'The count of child files.',
- },
- parentId: {
- type: 'string',
- format: 'id',
- nullable: true,
- description: 'The parent folder ID of this folder.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- parent: {
- $ref: '#/components/schemas/DriveFolder'
- },
- },
- required: ['id', 'createdAt', 'name']
- },
-
- Following: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this following.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the following was created.'
- },
- followeeId: {
- type: 'string',
- format: 'id',
- },
- followee: {
- $ref: '#/components/schemas/User',
- description: 'The followee.'
- },
- followerId: {
- type: 'string',
- format: 'id',
- },
- follower: {
- $ref: '#/components/schemas/User',
- description: 'The follower.'
- },
- },
- required: ['id', 'createdAt', 'followeeId', 'followerId']
- },
-
- Muting: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this mute.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the mute was created.'
- },
- mutee: {
- $ref: '#/components/schemas/User',
- description: 'The mutee.'
- },
- },
- required: ['id', 'createdAt', 'mutee']
- },
-
- Blocking: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this block.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the block was created.'
- },
- blockee: {
- $ref: '#/components/schemas/User',
- description: 'The blockee.'
- },
- },
- required: ['id', 'createdAt', 'blockee']
- },
-
- Reaction: {
- type: 'object',
- properties: {
- id: {
- type: 'string',
- format: 'id',
- description: 'The unique identifier for this reaction.',
- example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
- },
- createdAt: {
- type: 'string',
- format: 'date-time',
- description: 'The date that the reaction was created.'
- },
- user: {
- $ref: '#/components/schemas/User',
- description: 'User who performed this reaction.'
- },
- type: {
- type: 'string',
- enum: [
- 'like',
- 'love',
- 'laugh',
- 'hmm',
- 'surprise',
- 'congrats',
- 'angry',
- 'confused',
- 'rip',
- 'pudding',
- 'star'
- ],
- description: 'The reaction type.'
- },
- },
- required: ['id', 'createdAt', 'user', 'type']
- },
+ User: convertSchemaToOpenApiSchema(packedUserSchema),
+ UserList: convertSchemaToOpenApiSchema(packedUserListSchema),
+ App: convertSchemaToOpenApiSchema(packedAppSchema),
+ MessagingMessage: convertSchemaToOpenApiSchema(packedMessagingMessageSchema),
+ Note: convertSchemaToOpenApiSchema(packedNoteSchema),
+ Notification: convertSchemaToOpenApiSchema(packedNotificationSchema),
+ DriveFile: convertSchemaToOpenApiSchema(packedDriveFileSchema),
+ DriveFolder: convertSchemaToOpenApiSchema(packedDriveFolderSchema),
+ Following: convertSchemaToOpenApiSchema(packedFollowingSchema),
+ Muting: convertSchemaToOpenApiSchema(packedMutingSchema),
+ Blocking: convertSchemaToOpenApiSchema(packedBlockingSchema),
+ NoteReaction: convertSchemaToOpenApiSchema(packedNoteReactionSchema),
Hashtag: {
type: 'object',