From ee03cd616020725e0f0478731704bfbfbe990efc Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Mon, 6 Sep 2021 02:33:16 +0900
Subject: [PATCH] test

---
 src/misc/schema.ts                      | 13 ++++++++++++-
 src/models/repositories/blocking.ts     |  2 +-
 src/models/repositories/notification.ts | 13 +++++++++++++
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/misc/schema.ts b/src/misc/schema.ts
index e14e6e0dd7..8854ab5303 100644
--- a/src/misc/schema.ts
+++ b/src/misc/schema.ts
@@ -1,3 +1,6 @@
+import { packedNoteSchema } from "@/models/repositories/note";
+import { packedNotificationSchema } from "@/models/repositories/notification";
+
 export type Schema = {
 	type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any';
 	nullable: boolean;
@@ -43,11 +46,19 @@ type NullOrUndefined<p extends Schema, T> =
 			? (T | undefined)
 			: T;
 
+export const refs = {
+	Note: packedNoteSchema,
+	Notification: packedNotificationSchema,
+};
+
 export type SchemaType<p extends Schema> =
 	p['type'] extends 'number' ? NullOrUndefined<p, number> :
 	p['type'] extends 'string' ? NullOrUndefined<p, string> :
 	p['type'] extends 'boolean' ? NullOrUndefined<p, boolean> :
 	p['type'] extends 'array' ? NullOrUndefined<p, MyType<NonNullable<p['items']>>[]> :
-	p['type'] extends 'object' ? NullOrUndefined<p, ObjType<NonNullable<p['properties']>>> :
+	p['type'] extends 'object' ?
+	(	p['ref'] extends keyof typeof refs ?
+		NullOrUndefined<p, SchemaType<typeof refs[p['ref']]>> :
+		NullOrUndefined<p, ObjType<NonNullable<p['properties']>>> ) :
 	p['type'] extends 'any' ? NullOrUndefined<p, any> :
 	any;
diff --git a/src/models/repositories/blocking.ts b/src/models/repositories/blocking.ts
index dd3a10905c..515b3a6b16 100644
--- a/src/models/repositories/blocking.ts
+++ b/src/models/repositories/blocking.ts
@@ -56,7 +56,7 @@ export const packedBlockingSchema = {
 		blockee: {
 			type: 'object' as const,
 			optional: false as const, nullable: false as const,
-			ref: 'User',
+			ref: 'User' as const,
 		},
 	}
 };
diff --git a/src/models/repositories/notification.ts b/src/models/repositories/notification.ts
index ed9de7ef4c..584e3d8061 100644
--- a/src/models/repositories/notification.ts
+++ b/src/models/repositories/notification.ts
@@ -145,6 +145,19 @@ export const packedNotificationSchema = {
 			format: 'id',
 		},
 		note: {
+			type: 'object' as const,
+			ref: 'Note' as const,
+			optional: true as const, nullable: true as const,
+		},
+		reaction: {
+			type: 'string' as const,
+			optional: true as const, nullable: true as const,
+		},
+		choice: {
+			type: 'number' as const,
+			optional: true as const, nullable: true as const,
+		},
+		invitation: {
 			type: 'object' as const,
 			ref: 'Note',
 			optional: true as const, nullable: true as const,