From 64bfb8f329ce302c7821e5344ffd1b815a8bcaf9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=80=81=E5=91=A8=E9=83=A8=E8=90=BD?=
 <laozhoubuluo@gmail.com>
Date: Fri, 1 Mar 2024 18:15:08 +0800
Subject: [PATCH] fix(backend): mastodon stats conflate all indexed users and
 statuses

---
 .../src/server/api/mastodon/endpoints/meta.ts        | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/packages/backend/src/server/api/mastodon/endpoints/meta.ts b/packages/backend/src/server/api/mastodon/endpoints/meta.ts
index c458798d5f..fbad7d5ef4 100644
--- a/packages/backend/src/server/api/mastodon/endpoints/meta.ts
+++ b/packages/backend/src/server/api/mastodon/endpoints/meta.ts
@@ -1,13 +1,19 @@
 import { Entity } from "megalodon";
 import config from "@/config/index.js";
 import { fetchMeta } from "@/misc/fetch-meta.js";
+import { Users, Notes } from "@/models/index.js";
+import { IsNull } from "typeorm";
 import { MAX_NOTE_TEXT_LENGTH, FILE_TYPE_BROWSERSAFE } from "@/const.js";
 
 export async function getInstance(
 	response: Entity.Instance,
 	contact: Entity.Account,
 ) {
-	const meta = await fetchMeta(true);
+	const [meta, totalUsers, totalStatuses] = await Promise.all([
+		fetchMeta(),
+		Users.count({ where: { host: IsNull() } }),
+		Notes.count({ where: { userHost: IsNull() } }),
+	]);
 
 	return {
 		uri: response.uri,
@@ -21,8 +27,8 @@ export async function getInstance(
 		version: `3.0.0 (compatible; Firefish ${config.version})`,
 		urls: response.urls,
 		stats: {
-			user_count: response.stats.user_count,
-			status_count: response.stats.status_count,
+			user_count: totalUsers,
+			status_count: totalStatuses,
 			domain_count: response.stats.domain_count,
 		},
 		thumbnail: response.thumbnail || "/static-assets/transparent.png",