lookup note in scylla
This commit is contained in:
parent
2d1a6d8ab0
commit
d8154dc591
1 changed files with 25 additions and 8 deletions
|
@ -10,6 +10,8 @@ import type { UserNotePining } from "@/models/entities/user-note-pining.js";
|
||||||
import { genId } from "@/misc/gen-id.js";
|
import { genId } from "@/misc/gen-id.js";
|
||||||
import { deliverToFollowers } from "@/remote/activitypub/deliver-manager.js";
|
import { deliverToFollowers } from "@/remote/activitypub/deliver-manager.js";
|
||||||
import { deliverToRelays } from "../relay.js";
|
import { deliverToRelays } from "../relay.js";
|
||||||
|
import { parseScyllaNote, prepared, scyllaClient } from "@/db/scylla.js";
|
||||||
|
import { userByIdCache } from "../user-cache.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 指定した投稿をピン留めします
|
* 指定した投稿をピン留めします
|
||||||
|
@ -21,12 +23,25 @@ export async function addPinned(
|
||||||
noteId: Note["id"],
|
noteId: Note["id"],
|
||||||
) {
|
) {
|
||||||
// Fetch pinee
|
// Fetch pinee
|
||||||
const note = await Notes.findOneBy({
|
let note: Note | null = null;
|
||||||
|
if (scyllaClient) {
|
||||||
|
const result = await scyllaClient.execute(
|
||||||
|
prepared.note.select.byId,
|
||||||
|
[noteId],
|
||||||
|
{ prepare: true },
|
||||||
|
);
|
||||||
|
if (result.rowLength > 0) {
|
||||||
|
const candidate = parseScyllaNote(result.first());
|
||||||
|
if (candidate.userId === user.id) note = candidate;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
note = await Notes.findOneBy({
|
||||||
id: noteId,
|
id: noteId,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (note == null) {
|
if (!note) {
|
||||||
throw new IdentifiableError(
|
throw new IdentifiableError(
|
||||||
"70c4e51f-5bea-449c-a030-53bee3cce202",
|
"70c4e51f-5bea-449c-a030-53bee3cce202",
|
||||||
"No such note.",
|
"No such note.",
|
||||||
|
@ -42,7 +57,7 @@ export async function addPinned(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pinings.some((pining) => pining.noteId === note.id)) {
|
if (pinings.some((pining) => note && pining.noteId === note.id)) {
|
||||||
throw new IdentifiableError(
|
throw new IdentifiableError(
|
||||||
"23f0cf4e-59a3-4276-a91d-61a5891c1514",
|
"23f0cf4e-59a3-4276-a91d-61a5891c1514",
|
||||||
"That note has already been pinned.",
|
"That note has already been pinned.",
|
||||||
|
@ -100,8 +115,10 @@ export async function deliverPinnedChange(
|
||||||
noteId: Note["id"],
|
noteId: Note["id"],
|
||||||
isAddition: boolean,
|
isAddition: boolean,
|
||||||
) {
|
) {
|
||||||
const user = await Users.findOneBy({ id: userId });
|
const user = await userByIdCache.fetchMaybe(userId, () =>
|
||||||
if (user == null) throw new Error("user not found");
|
Users.findOneBy({ id: userId }).then((user) => user ?? undefined),
|
||||||
|
);
|
||||||
|
if (!user) throw new Error("user not found");
|
||||||
|
|
||||||
if (!Users.isLocalUser(user)) return;
|
if (!Users.isLocalUser(user)) return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue