From 32cb0ea7336354e16c598eb40d1ad1dee4a1a33a Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Wed, 5 Jun 2024 19:08:34 -1000 Subject: [PATCH] fix(federation): :bug: Fix profile edits not being federated --- packages/database-interface/user.ts | 2 +- .../v1/accounts/update_credentials/index.ts | 30 +++++++++---------- server/api/api/v1/profile/avatar.ts | 14 ++------- server/api/api/v1/profile/header.ts | 14 ++------- 4 files changed, 21 insertions(+), 39 deletions(-) diff --git a/packages/database-interface/user.ts b/packages/database-interface/user.ts index 8834cc58..a7c19dbd 100644 --- a/packages/database-interface/user.ts +++ b/packages/database-interface/user.ts @@ -521,7 +521,7 @@ export class User { ) { // Get followers const followers = await User.manyFromSql( - sql`EXISTS (SELECT 1 FROM "Relationships" WHERE "Relationships"."subjectId" = ${Users.id} AND "Relationships"."ownerId" = ${this.id} AND "Relationships"."following" = true)`, + sql`EXISTS (SELECT 1 FROM "Relationships" WHERE "Relationships"."subjectId" = ${this.id} AND "Relationships"."ownerId" = ${Users.id} AND "Relationships"."following" = true)`, ); for (const follower of followers) { diff --git a/server/api/api/v1/accounts/update_credentials/index.ts b/server/api/api/v1/accounts/update_credentials/index.ts index ed7c673c..f1e9aa6c 100644 --- a/server/api/api/v1/accounts/update_credentials/index.ts +++ b/server/api/api/v1/accounts/update_credentials/index.ts @@ -14,7 +14,7 @@ import { getUrl } from "~/database/entities/Attachment"; import { type EmojiWithInstance, parseEmojis } from "~/database/entities/Emoji"; import { contentToHtml } from "~/database/entities/Status"; import { db } from "~/drizzle/db"; -import { EmojiToUser, Users } from "~/drizzle/schema"; +import { EmojiToUser } from "~/drizzle/schema"; import { User } from "~/packages/database-interface/user"; export const meta = applyConfig({ @@ -283,22 +283,8 @@ export default (app: Hono) => self.findIndex((e) => e.id === emoji.id) === index, ); - await db - .update(Users) - .set({ - displayName: self.displayName, - note: self.note, - avatar: self.avatar, - header: self.header, - fields: self.fields, - isLocked: self.isLocked, - isBot: self.isBot, - isDiscoverable: self.isDiscoverable, - source: self.source || undefined, - }) - .where(eq(Users.id, self.id)); - // Connect emojis, if any + // Do it before updating user, so that federation takes that into account for (const emoji of self.emojis) { await db .delete(EmojiToUser) @@ -319,6 +305,18 @@ export default (app: Hono) => .execute(); } + await user.update({ + displayName: self.displayName, + note: self.note, + avatar: self.avatar, + header: self.header, + fields: self.fields, + isLocked: self.isLocked, + isBot: self.isBot, + isDiscoverable: self.isDiscoverable, + source: self.source || undefined, + }); + const output = await User.fromId(self.id); if (!output) return errorResponse("Couldn't edit user", 500); diff --git a/server/api/api/v1/profile/avatar.ts b/server/api/api/v1/profile/avatar.ts index 286cf2aa..4c688ae1 100644 --- a/server/api/api/v1/profile/avatar.ts +++ b/server/api/api/v1/profile/avatar.ts @@ -1,10 +1,6 @@ import { applyConfig, auth } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; -import { eq } from "drizzle-orm"; import type { Hono } from "hono"; -import { db } from "~/drizzle/db"; -import { Users } from "~/drizzle/schema"; -import { User } from "~/packages/database-interface/user"; export const meta = applyConfig({ allowedMethods: ["DELETE"], @@ -28,14 +24,10 @@ export default (app: Hono) => if (!self) return errorResponse("Unauthorized", 401); - await db - .update(Users) - .set({ avatar: "" }) - .where(eq(Users.id, self.id)); - - return jsonResponse({ - ...(await User.fromId(self.id))?.toAPI(), + await self.update({ avatar: "", }); + + return jsonResponse(self.toAPI(true)); }, ); diff --git a/server/api/api/v1/profile/header.ts b/server/api/api/v1/profile/header.ts index 715a84d1..635edb8e 100644 --- a/server/api/api/v1/profile/header.ts +++ b/server/api/api/v1/profile/header.ts @@ -1,10 +1,6 @@ import { applyConfig, auth } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; -import { eq } from "drizzle-orm"; import type { Hono } from "hono"; -import { db } from "~/drizzle/db"; -import { Users } from "~/drizzle/schema"; -import { User } from "~/packages/database-interface/user"; export const meta = applyConfig({ allowedMethods: ["DELETE"], @@ -28,14 +24,10 @@ export default (app: Hono) => if (!self) return errorResponse("Unauthorized", 401); - await db - .update(Users) - .set({ header: "" }) - .where(eq(Users.id, self.id)); - - return jsonResponse({ - ...(await User.fromId(self.id))?.toAPI(), + await self.update({ header: "", }); + + return jsonResponse(self.toAPI(true)); }, );