refactor: APIエンドポイントファイルの定義を良い感じにする (#8154)
* Fix API Schema Error * Delete SimpleSchema/SimpleObj and Move schemas to dedicated files * Userのスキーマを分割してみる * define packMany type * add , * Ensure enum schema and Make "as const" put once * test? * Revert "test?" This reverts commit97dc9bfa70. * Revert "Fix API Schema Error" This reverts commit21b6176d97. * ✌️ * clean up * test? * wip * wip * better schema def * ✌️ * fix * add minLength property * wip * wip * wip * anyOf/oneOf/allOfに対応? ~ relation.ts * refactor! * Define MinimumSchema * wip * wip * anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正 * anyOf/oneOf/allOfが動作するようにUnionSchemaTypeを修正 * Update packages/backend/src/misc/schema.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * fix * array oneOfをより正確な型に * array oneOfをより正確な型に * wip * ✌️ * なんかもういろいろ * remove * very good schema * api schema * wip * refactor: awaitAllの型定義を変えてみる * fix * specify types in awaitAll * specify types in awaitAll * ✌️ * wip * ... * ✌️ * AllowDateはやめておく * 不必要なoptional: false, nullable: falseを廃止 * Packedが展開されないように * 続packed * wip * define note type * wip * UserDetailedをMeDetailedかUserDetailedNotMeかを区別できるように * wip * wip * wip specify user type of other schemas * ok * convertSchemaToOpenApiSchemaを改修 * convertSchemaToOpenApiSchemaを改修 * Fix * fix * ✌️ * wip * 分割代入ではなくallOfで定義するように Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
This commit is contained in:
		
							
								
								
									
										89
									
								
								packages/backend/src/models/schema/antenna.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								packages/backend/src/models/schema/antenna.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| export const packedAntennaSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		keywords: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'array', | ||||
| 				optional: false, nullable: false, | ||||
| 				items: { | ||||
| 					type: 'string', | ||||
| 					optional: false, nullable: false, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		excludeKeywords: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'array', | ||||
| 				optional: false, nullable: false, | ||||
| 				items: { | ||||
| 					type: 'string', | ||||
| 					optional: false, nullable: false, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		src: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			enum: ['home', 'all', 'users', 'list', 'group'], | ||||
| 		}, | ||||
| 		userListId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		userGroupId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		users: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		caseSensitive: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		notify: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		withReplies: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		withFile: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		hasUnreadNote: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										33
									
								
								packages/backend/src/models/schema/app.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								packages/backend/src/models/schema/app.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| export const packedAppSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		callbackUrl: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		permission: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		secret: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		isAuthorized: { | ||||
| 			type: 'boolean', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/blocking.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/blocking.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| export const packedBlockingSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		blockeeId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		blockee: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 			ref: 'UserDetailed', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										51
									
								
								packages/backend/src/models/schema/channel.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								packages/backend/src/models/schema/channel.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| export const packedChannelSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		lastNotedAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		description: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		bannerUrl: { | ||||
| 			type: 'string', | ||||
| 			format: 'url', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		notesCount: { | ||||
| 			type: 'number', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		usersCount: { | ||||
| 			type: 'number', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		isFollowing: { | ||||
| 			type: 'boolean', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										38
									
								
								packages/backend/src/models/schema/clip.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								packages/backend/src/models/schema/clip.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| export const packedClipSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		description: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		isPublic: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										107
									
								
								packages/backend/src/models/schema/drive-file.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								packages/backend/src/models/schema/drive-file.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| export const packedDriveFileSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			example: 'lenna.jpg', | ||||
| 		}, | ||||
| 		type: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			example: 'image/jpeg', | ||||
| 		}, | ||||
| 		md5: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'md5', | ||||
| 			example: '15eca7fba0480996e2245f5185bf39f2', | ||||
| 		}, | ||||
| 		size: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 			example: 51469, | ||||
| 		}, | ||||
| 		isSensitive: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		blurhash: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		properties: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 			properties: { | ||||
| 				width: { | ||||
| 					type: 'number', | ||||
| 					optional: true, nullable: false, | ||||
| 					example: 1280, | ||||
| 				}, | ||||
| 				height: { | ||||
| 					type: 'number', | ||||
| 					optional: true, nullable: false, | ||||
| 					example: 720, | ||||
| 				}, | ||||
| 				orientation: { | ||||
| 					type: 'number', | ||||
| 					optional: true, nullable: false, | ||||
| 					example: 8, | ||||
| 				}, | ||||
| 				avgColor: { | ||||
| 					type: 'string', | ||||
| 					optional: true, nullable: false, | ||||
| 					example: 'rgb(40,65,87)', | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		url: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'url', | ||||
| 		}, | ||||
| 		thumbnailUrl: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'url', | ||||
| 		}, | ||||
| 		comment: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		folderId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		folder: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'DriveFolder', | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										39
									
								
								packages/backend/src/models/schema/drive-folder.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								packages/backend/src/models/schema/drive-folder.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| export const packedDriveFolderSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		foldersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		filesCount: { | ||||
| 			type: 'number', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		parentId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		parent: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'DriveFolder', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										36
									
								
								packages/backend/src/models/schema/emoji.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								packages/backend/src/models/schema/emoji.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| export const packedEmojiSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		aliases: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		category: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		host: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		url: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										105
									
								
								packages/backend/src/models/schema/federation-instance.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								packages/backend/src/models/schema/federation-instance.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| import config from "@/config"; | ||||
|  | ||||
| export const packedFederationInstanceSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		caughtAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		host: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			example: 'misskey.example.com', | ||||
| 		}, | ||||
| 		usersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		notesCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		followingCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		followersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		driveUsage: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		driveFiles: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		latestRequestSentAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		lastCommunicatedAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		isNotResponding: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		isSuspended: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		softwareName: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			example: 'misskey', | ||||
| 		}, | ||||
| 		softwareVersion: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			example: config.version, | ||||
| 		}, | ||||
| 		openRegistrations: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: true, | ||||
| 			example: true, | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		description: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		maintainerName: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		maintainerEmail: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		iconUrl: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'url', | ||||
| 		}, | ||||
| 		infoUpdatedAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										36
									
								
								packages/backend/src/models/schema/following.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								packages/backend/src/models/schema/following.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| export const packedFollowingSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		followeeId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		followee: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: false, | ||||
| 			ref: 'UserDetailed', | ||||
| 		}, | ||||
| 		followerId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		follower: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: false, | ||||
| 			ref: 'UserDetailed', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										69
									
								
								packages/backend/src/models/schema/gallery-post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								packages/backend/src/models/schema/gallery-post.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| export const packedGalleryPostSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		updatedAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		title: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		description: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		fileIds: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		files: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				optional: false, nullable: false, | ||||
| 				ref: 'DriveFile', | ||||
| 			}, | ||||
| 		}, | ||||
| 		tags: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		isSensitive: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										34
									
								
								packages/backend/src/models/schema/hashtag.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								packages/backend/src/models/schema/hashtag.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| export const packedHashtagSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		tag: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			example: 'misskey', | ||||
| 		}, | ||||
| 		mentionedUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		mentionedLocalUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		mentionedRemoteUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		attachedUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		attachedLocalUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		attachedRemoteUsersCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										73
									
								
								packages/backend/src/models/schema/messaging-message.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								packages/backend/src/models/schema/messaging-message.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| export const packedMessagingMessageSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		text: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		fileId: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		file: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'DriveFile', | ||||
| 		}, | ||||
| 		recipientId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		recipient: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 		groupId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		group: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'UserGroup', | ||||
| 		}, | ||||
| 		isRead: { | ||||
| 			type: 'boolean', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		reads: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/muting.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/muting.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| export const packedMutingSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		muteeId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		mutee: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 			ref: 'UserDetailed', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										26
									
								
								packages/backend/src/models/schema/note-favorite.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								packages/backend/src/models/schema/note-favorite.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| export const packedNoteFavoriteSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		note: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 			ref: 'Note', | ||||
| 		}, | ||||
| 		noteId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										25
									
								
								packages/backend/src/models/schema/note-reaction.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								packages/backend/src/models/schema/note-reaction.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| export const packedNoteReactionSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 		type: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										183
									
								
								packages/backend/src/models/schema/note.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								packages/backend/src/models/schema/note.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,183 @@ | ||||
| export const packedNoteSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		text: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		cw: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		replyId: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		renoteId: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		reply: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'Note', | ||||
| 		}, | ||||
| 		renote: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			ref: 'Note', | ||||
| 		}, | ||||
| 		isHidden: { | ||||
| 			type: 'boolean', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		visibility: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		mentions: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		visibleUserIds: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		fileIds: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		files: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				optional: false, nullable: false, | ||||
| 				ref: 'DriveFile', | ||||
| 			}, | ||||
| 		}, | ||||
| 		tags: { | ||||
| 			type: 'array', | ||||
| 			optional: true, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		poll: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		channelId: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		channel: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				optional: false, nullable: false, | ||||
| 				properties: { | ||||
| 					id: { | ||||
| 						type: 'string', | ||||
| 						optional: false, nullable: false, | ||||
| 					}, | ||||
| 					name: { | ||||
| 						type: 'string', | ||||
| 						optional: false, nullable: true, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		localOnly: { | ||||
| 			type: 'boolean', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		emojis: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				optional: false, nullable: false, | ||||
| 				properties: { | ||||
| 					name: { | ||||
| 						type: 'string', | ||||
| 						optional: false, nullable: false, | ||||
| 					}, | ||||
| 					url: { | ||||
| 						type: 'string', | ||||
| 						optional: false, nullable: true, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		reactions: { | ||||
| 			type: 'object', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		renoteCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		repliesCount: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		uri: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
| 		url: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: false, | ||||
| 		}, | ||||
|  | ||||
| 		myReaction: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										66
									
								
								packages/backend/src/models/schema/notification.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								packages/backend/src/models/schema/notification.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| import { notificationTypes } from "@/types"; | ||||
|  | ||||
| export const packedNotificationSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		isRead: { | ||||
| 			type: 'boolean', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		type: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			enum: [...notificationTypes], | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		note: { | ||||
| 			type: 'object', | ||||
| 			ref: 'Note', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		reaction: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		choice: { | ||||
| 			type: 'number', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		invitation: { | ||||
| 			type: 'object', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		body: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		header: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 		icon: { | ||||
| 			type: 'string', | ||||
| 			optional: true, nullable: true, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										51
									
								
								packages/backend/src/models/schema/page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								packages/backend/src/models/schema/page.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| export const packedPageSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		updatedAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		title: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		summary: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: true, | ||||
| 		}, | ||||
| 		content: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		variables: { | ||||
| 			type: 'array', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		userId: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		user: { | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										25
									
								
								packages/backend/src/models/schema/queue.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								packages/backend/src/models/schema/queue.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| export const packedQueueCountSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		waiting: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		active: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		completed: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		failed: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		delayed: { | ||||
| 			type: 'number', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										34
									
								
								packages/backend/src/models/schema/user-group.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								packages/backend/src/models/schema/user-group.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| export const packedUserGroupSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		ownerId: { | ||||
| 			type: 'string', | ||||
| 			nullable: false, optional: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		userIds: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: true, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										29
									
								
								packages/backend/src/models/schema/user-list.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								packages/backend/src/models/schema/user-list.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| export const packedUserListSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			optional: false, nullable: false, | ||||
| 		}, | ||||
| 		userIds: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: true, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
							
								
								
									
										467
									
								
								packages/backend/src/models/schema/user.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								packages/backend/src/models/schema/user.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,467 @@ | ||||
| export const packedUserLiteSchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		id: { | ||||
| 			type: 'string', | ||||
| 			nullable: false, optional: false, | ||||
| 			format: 'id', | ||||
| 			example: 'xxxxxxxxxx', | ||||
| 		}, | ||||
| 		name: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			example: '藍', | ||||
| 		}, | ||||
| 		username: { | ||||
| 			type: 'string', | ||||
| 			nullable: false, optional: false, | ||||
| 			example: 'ai', | ||||
| 		}, | ||||
| 		host: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			example: 'misskey.example.com', | ||||
| 		}, | ||||
| 		avatarUrl: { | ||||
| 			type: 'string', | ||||
| 			format: 'url', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		avatarBlurhash: { | ||||
| 			type: 'any', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		avatarColor: { | ||||
| 			type: 'any', | ||||
| 			nullable: true, optional: false, | ||||
| 			default: null, | ||||
| 		}, | ||||
| 		isAdmin: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		isModerator: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		isBot: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		isCat: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		emojis: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: false, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				nullable: false, optional: false, | ||||
| 				properties: { | ||||
| 					name: { | ||||
| 						type: 'string', | ||||
| 						nullable: false, optional: false, | ||||
| 					}, | ||||
| 					url: { | ||||
| 						type: 'string', | ||||
| 						nullable: false, optional: false, | ||||
| 						format: 'url', | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		onlineStatus: { | ||||
| 			type: 'string', | ||||
| 			format: 'url', | ||||
| 			nullable: true, optional: false, | ||||
| 			enum: ['unknown', 'online', 'active', 'offline'], | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
|  | ||||
| export const packedUserDetailedNotMeOnlySchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		url: { | ||||
| 			type: 'string', | ||||
| 			format: 'url', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		uri: { | ||||
| 			type: 'string', | ||||
| 			format: 'uri', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		createdAt: { | ||||
| 			type: 'string', | ||||
| 			nullable: false, optional: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		updatedAt: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		lastFetchedAt: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			format: 'date-time', | ||||
| 		}, | ||||
| 		bannerUrl: { | ||||
| 			type: 'string', | ||||
| 			format: 'url', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		bannerBlurhash: { | ||||
| 			type: 'any', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		bannerColor: { | ||||
| 			type: 'any', | ||||
| 			nullable: true, optional: false, | ||||
| 			default: null, | ||||
| 		}, | ||||
| 		isLocked: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		isSilenced: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		isSuspended: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 			example: false, | ||||
| 		}, | ||||
| 		description: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			example: 'Hi masters, I am Ai!', | ||||
| 		}, | ||||
| 		location: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		birthday: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			example: '2018-03-12', | ||||
| 		}, | ||||
| 		lang: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			example: 'ja-JP', | ||||
| 		}, | ||||
| 		fields: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: false, | ||||
| 			items: { | ||||
| 					type: 'object', | ||||
| 					nullable: false, optional: false, | ||||
| 					properties: { | ||||
| 						name: { | ||||
| 							type: 'string', | ||||
| 							nullable: false, optional: false, | ||||
| 						}, | ||||
| 						value: { | ||||
| 							type: 'string', | ||||
| 							nullable: false, optional: false, | ||||
| 						}, | ||||
| 					}, | ||||
| 					maxLength: 4, | ||||
| 			}, | ||||
| 		}, | ||||
| 		followersCount: { | ||||
| 			type: 'number', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		followingCount: { | ||||
| 			type: 'number', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		notesCount: { | ||||
| 			type: 'number', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		pinnedNoteIds: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 				format: 'id', | ||||
| 			}, | ||||
| 		}, | ||||
| 		pinnedNotes: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: false, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				nullable: false, optional: false, | ||||
| 				ref: 'Note', | ||||
| 			}, | ||||
| 		}, | ||||
| 		pinnedPageId: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		pinnedPage: { | ||||
| 			type: 'object', | ||||
| 			nullable: true, optional: false, | ||||
| 			ref: 'Page', | ||||
| 		}, | ||||
| 		publicReactions: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		twoFactorEnabled: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		usePasswordLessLogin: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		securityKeys: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 			default: false, | ||||
| 		}, | ||||
| 		//#region relations | ||||
| 		isFollowing: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		isFollowed: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		hasPendingFollowRequestFromYou: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		hasPendingFollowRequestToYou: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		isBlocking: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		isBlocked: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		isMuted: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: true, | ||||
| 		}, | ||||
| 		//#endregion | ||||
| 	}, | ||||
| } as const; | ||||
|  | ||||
| export const packedMeDetailedOnlySchema = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		avatarId: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		bannerId: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: false, | ||||
| 			format: 'id', | ||||
| 		}, | ||||
| 		injectFeaturedNote: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		receiveAnnouncementEmail: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		alwaysMarkNsfw: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		carefulBot: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		autoAcceptFollowed: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		noCrawle: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		isExplorable: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		isDeleted: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hideOnlineStatus: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadSpecifiedNotes: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadMentions: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadAnnouncement: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadAntenna: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadChannel: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadMessagingMessage: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasUnreadNotification: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		hasPendingReceivedFollowRequest: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: false, optional: false, | ||||
| 		}, | ||||
| 		integrations: { | ||||
| 			type: 'object', | ||||
| 			nullable: true, optional: false, | ||||
| 		}, | ||||
| 		mutedWords: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: false, | ||||
| 			items: { | ||||
| 				type: 'array', | ||||
| 				nullable: false, optional: false, | ||||
| 				items: { | ||||
| 					type: 'string', | ||||
| 					nullable: false, optional: false, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		mutedInstances: { | ||||
| 			type: 'array', | ||||
| 			nullable: true, optional: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		mutingNotificationTypes: { | ||||
| 			type: 'array', | ||||
| 			nullable: true, optional: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		emailNotificationTypes: { | ||||
| 			type: 'array', | ||||
| 			nullable: true, optional: false, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 				nullable: false, optional: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		//#region secrets | ||||
| 		email: { | ||||
| 			type: 'string', | ||||
| 			nullable: true, optional: true, | ||||
| 		}, | ||||
| 		emailVerified: { | ||||
| 			type: 'boolean', | ||||
| 			nullable: true, optional: true, | ||||
| 		}, | ||||
| 		securityKeysList: { | ||||
| 			type: 'array', | ||||
| 			nullable: false, optional: true, | ||||
| 			items: { | ||||
| 				type: 'object', | ||||
| 				nullable: false, optional: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 		//#endregion | ||||
| 	}, | ||||
| } as const; | ||||
|  | ||||
| export const packedUserDetailedNotMeSchema = { | ||||
| 	type: 'object', | ||||
| 	allOf: [ | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserDetailedNotMeOnly', | ||||
| 		}, | ||||
| 	], | ||||
| } as const; | ||||
|  | ||||
| export const packedMeDetailedSchema = { | ||||
| 	type: 'object', | ||||
| 	allOf: [ | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserDetailedNotMeOnly', | ||||
| 		}, | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'MeDetailedOnly', | ||||
| 		}, | ||||
| 	], | ||||
| } as const; | ||||
|  | ||||
| export const packedUserDetailedSchema = { | ||||
| 	oneOf: [ | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserDetailedNotMe', | ||||
| 		}, | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'MeDetailed', | ||||
| 		}, | ||||
| 	], | ||||
| } as const; | ||||
|  | ||||
| export const packedUserSchema = { | ||||
| 	oneOf: [ | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserLite', | ||||
| 		}, | ||||
| 		{ | ||||
| 			type: 'object', | ||||
| 			ref: 'UserDetailed', | ||||
| 		}, | ||||
| 	], | ||||
| } as const; | ||||
		Reference in New Issue
	
	Block a user
	 tamaina
					tamaina