From 09a846a45c5243200abdc6995229ca0be678a79a Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Fri, 24 Mar 2023 18:55:31 +0900
Subject: [PATCH] enhance(backend): use :heart: for reaction fallback

---
 CHANGELOG.md                                         |  1 +
 locales/ja-JP.yml                                    |  1 -
 packages/backend/migration/1679651580149-cleanup.js  | 11 +++++++++++
 packages/backend/src/core/ReactionService.ts         | 12 ++++--------
 packages/backend/src/models/entities/Meta.ts         |  5 -----
 .../backend/src/server/api/endpoints/admin/meta.ts   |  1 -
 .../src/server/api/endpoints/admin/update-meta.ts    |  5 -----
 7 files changed, 16 insertions(+), 20 deletions(-)
 create mode 100644 packages/backend/migration/1679651580149-cleanup.js

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85cb031d6b..e89f0ca707 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
 
 ### General
 - コンディショナルロールの条件に「投稿数が~以下」「投稿数が~以上」を追加
+- リアクション非対応AP実装からのLikeアクティビティの解釈を👍から♥に
 
 ### Client
 - クリップボタンをノートアクションに追加できるように
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 8d2b4384a0..356b93c696 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -594,7 +594,6 @@ tokenRequested: "アカウントへのアクセス許可"
 pluginTokenRequestedDescription: "このプラグインはここで設定した権限を行使できるようになります。"
 notificationType: "通知の種類"
 edit: "編集"
-useStarForReactionFallback: "リアクション絵文字が不明な場合、代わりに★を使う"
 emailServer: "メールサーバー"
 enableEmail: "メール配信機能を有効化する"
 emailConfigInfo: "メールアドレスの確認やパスワードリセットの際に使います"
diff --git a/packages/backend/migration/1679651580149-cleanup.js b/packages/backend/migration/1679651580149-cleanup.js
new file mode 100644
index 0000000000..1f00f3cc1f
--- /dev/null
+++ b/packages/backend/migration/1679651580149-cleanup.js
@@ -0,0 +1,11 @@
+export class cleanup1679651580149 {
+    name = 'cleanup1679651580149'
+
+    async up(queryRunner) {
+        await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "useStarForReactionFallback"`);
+    }
+
+    async down(queryRunner) {
+        await queryRunner.query(`ALTER TABLE "meta" ADD "useStarForReactionFallback" boolean NOT NULL DEFAULT false`);
+    }
+}
diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts
index f13e9ba15c..b3aea878d6 100644
--- a/packages/backend/src/core/ReactionService.ts
+++ b/packages/backend/src/core/ReactionService.ts
@@ -21,6 +21,8 @@ import { bindThis } from '@/decorators.js';
 import { UtilityService } from '@/core/UtilityService.js';
 import { UserBlockingService } from '@/core/UserBlockingService.js';
 
+const FALLBACK = '❤';
+
 const legacies: Record<string, string> = {
 	'like': '👍',
 	'love': '❤', // ここに記述する場合は異体字セレクタを入れない
@@ -255,12 +257,6 @@ export class ReactionService {
 		//#endregion
 	}
 
-	@bindThis
-	public async getFallbackReaction(): Promise<string> {
-		const meta = await this.metaService.fetch();
-		return meta.useStarForReactionFallback ? '⭐' : '👍';
-	}
-
 	@bindThis
 	public convertLegacyReactions(reactions: Record<string, number>) {
 		const _reactions = {} as Record<string, number>;
@@ -294,7 +290,7 @@ export class ReactionService {
 
 	@bindThis
 	public async toDbReaction(reaction?: string | null, reacterHost?: string | null): Promise<string> {
-		if (reaction == null) return await this.getFallbackReaction();
+		if (reaction == null) return FALLBACK;
 
 		reacterHost = this.utilityService.toPunyNullable(reacterHost);
 
@@ -322,7 +318,7 @@ export class ReactionService {
 			if (emoji) return reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`;
 		}
 
-		return await this.getFallbackReaction();
+		return FALLBACK;
 	}
 
 	@bindThis
diff --git a/packages/backend/src/models/entities/Meta.ts b/packages/backend/src/models/entities/Meta.ts
index 179fb53564..c7c60b6405 100644
--- a/packages/backend/src/models/entities/Meta.ts
+++ b/packages/backend/src/models/entities/Meta.ts
@@ -42,11 +42,6 @@ export class Meta {
 	})
 	public disableRegistration: boolean;
 
-	@Column('boolean', {
-		default: false,
-	})
-	public useStarForReactionFallback: boolean;
-
 	@Column('varchar', {
 		length: 1024, array: true, default: '{}',
 	})
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index 28e42e578b..cf21e1bd8f 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -303,7 +303,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				enableServiceWorker: instance.enableServiceWorker,
 				translatorAvailable: instance.deeplAuthKey != null,
 				cacheRemoteFiles: instance.cacheRemoteFiles,
-				useStarForReactionFallback: instance.useStarForReactionFallback,
 				pinnedUsers: instance.pinnedUsers,
 				hiddenTags: instance.hiddenTags,
 				blockedHosts: instance.blockedHosts,
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index 88c0565e4a..78a398d6b5 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -17,7 +17,6 @@ export const paramDef = {
 	type: 'object',
 	properties: {
 		disableRegistration: { type: 'boolean', nullable: true },
-		useStarForReactionFallback: { type: 'boolean', nullable: true },
 		pinnedUsers: { type: 'array', nullable: true, items: {
 			type: 'string',
 		} },
@@ -115,10 +114,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				set.disableRegistration = ps.disableRegistration;
 			}
 
-			if (typeof ps.useStarForReactionFallback === 'boolean') {
-				set.useStarForReactionFallback = ps.useStarForReactionFallback;
-			}
-
 			if (Array.isArray(ps.pinnedUsers)) {
 				set.pinnedUsers = ps.pinnedUsers.filter(Boolean);
 			}
-- 
GitLab