From 261cd339faf99e821adf8f68b1173370b305ef4b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 3 Dec 2024 22:03:46 +0000 Subject: [PATCH] Revert "Merge branch 'fix-stop-overwite-kind-0-unnecessarily' into 'main'" This reverts merge request !598 --- src/controllers/api/accounts.ts | 105 ++++++++++++++------------------ 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/src/controllers/api/accounts.ts b/src/controllers/api/accounts.ts index 3e054581..d5beac03 100644 --- a/src/controllers/api/accounts.ts +++ b/src/controllers/api/accounts.ts @@ -1,4 +1,4 @@ -import { NostrEvent, NostrFilter, NSchema as n } from '@nostrify/nostrify'; +import { NostrFilter, NSchema as n } from '@nostrify/nostrify'; import { nip19 } from 'nostr-tools'; import { z } from 'zod'; @@ -20,7 +20,6 @@ import { hydrateEvents } from '@/storages/hydrate.ts'; import { bech32ToPubkey } from '@/utils.ts'; import { addTag, deleteTag, findReplyTag, getTagSet } from '@/utils/tags.ts'; import { getPubkeysBySearch } from '@/utils/search.ts'; -import { MastodonAccount } from '@/entities/MastodonAccount.ts'; const usernameSchema = z .string().min(1).max(30) @@ -289,76 +288,62 @@ const updateCredentialsController: AppController = async (c) => { const pubkey = await signer.getPublicKey(); const body = await parseBody(c.req.raw); const result = updateCredentialsSchema.safeParse(body); - const store = await Storages.db(); if (!result.success) { return c.json(result.error, 422); } - const keys = Object.keys(result.data); - let event: NostrEvent | undefined; + const event = await updateEvent( + { kinds: [0], authors: [pubkey], limit: 1 }, + async (prev) => { + const meta = n.json().pipe(metadataSchema).catch({}).parse(prev.content); + const { + avatar: avatarFile, + header: headerFile, + display_name, + fields_attributes, + note, + nip05, + lud16, + website, + bot, + } = result.data; - if (keys.length === 1 && keys[0] === 'pleroma_settings_store') { - event = (await store.query([{ kinds: [0], authors: [pubkey] }]))[0]; - } else { - event = await updateEvent( - { kinds: [0], authors: [pubkey], limit: 1 }, - async (prev) => { - const meta = n.json().pipe(metadataSchema).catch({}).parse(prev.content); - const { - avatar: avatarFile, - header: headerFile, - display_name, - fields_attributes, - note, - nip05, - lud16, - website, - bot, - } = result.data; + const [avatar, header] = await Promise.all([ + avatarFile ? uploadFile(c, avatarFile, { pubkey }) : undefined, + headerFile ? uploadFile(c, headerFile, { pubkey }) : undefined, + ]); - const [avatar, header] = await Promise.all([ - avatarFile ? uploadFile(c, avatarFile, { pubkey }) : undefined, - headerFile ? uploadFile(c, headerFile, { pubkey }) : undefined, - ]); + meta.name = display_name ?? meta.name; + meta.about = note ?? meta.about; + meta.picture = avatar?.url ?? meta.picture; + meta.banner = header?.url ?? meta.banner; + meta.nip05 = nip05 ?? meta.nip05; + meta.lud16 = lud16 ?? meta.lud16; + meta.website = website ?? meta.website; + meta.bot = bot ?? meta.bot; - meta.name = display_name ?? meta.name; - meta.about = note ?? meta.about; - meta.picture = avatar?.url ?? meta.picture; - meta.banner = header?.url ?? meta.banner; - meta.nip05 = nip05 ?? meta.nip05; - meta.lud16 = lud16 ?? meta.lud16; - meta.website = website ?? meta.website; - meta.bot = bot ?? meta.bot; + if (avatarFile === '') delete meta.picture; + if (headerFile === '') delete meta.banner; + if (nip05 === '') delete meta.nip05; + if (lud16 === '') delete meta.lud16; + if (website === '') delete meta.website; - if (avatarFile === '') delete meta.picture; - if (headerFile === '') delete meta.banner; - if (nip05 === '') delete meta.nip05; - if (lud16 === '') delete meta.lud16; - if (website === '') delete meta.website; + if (fields_attributes) { + meta.fields = fields_attributes.map(({ name, value }) => [name, value]); + } - if (fields_attributes) { - meta.fields = fields_attributes.map(({ name, value }) => [name, value]); - } - - return { - kind: 0, - content: JSON.stringify(meta), - tags: [], - }; - }, - c, - ); - } + return { + kind: 0, + content: JSON.stringify(meta), + tags: [], + }; + }, + c, + ); const settingsStore = result.data.pleroma_settings_store; - - let account: MastodonAccount; - if (event) { - account = await renderAccount(event, { withSource: true, settingsStore }); - } else { - account = await accountFromPubkey(pubkey, { withSource: true, settingsStore }); - } + const account = await renderAccount(event, { withSource: true, settingsStore }); if (settingsStore) { await createEvent({