Files
FrozenFriendsYume/packages/backend/built/server/api/endpoints/notes/clips.js
T
2026-07-26 18:25:37 +09:00

60 lines
1.5 KiB
JavaScript

import { In } from "typeorm";
import { ClipNotes, Clips } from "../../../../models/index.js";
import define from "../../define.js";
import { getNote } from "../../common/getters.js";
import { ApiError } from "../../error.js";
export const meta = {
tags: [
"clips",
"notes"
],
requireCredential: false,
requireCredentialPrivateMode: true,
res: {
type: "array",
optional: false,
nullable: false,
items: {
type: "object",
optional: false,
nullable: false,
ref: "Clip"
}
},
errors: {
noSuchNote: {
message: "No such note.",
code: "NO_SUCH_NOTE",
id: "47db1a1c-b0af-458d-8fb4-986e4efafe1e"
}
}
};
export const paramDef = {
type: "object",
properties: {
noteId: {
type: "string",
format: "misskey:id"
}
},
required: [
"noteId"
]
};
export default define(meta, paramDef, async (ps, me)=>{
const note = await getNote(ps.noteId, me, {
allowAdservice: true
}).catch((err)=>{
if (err.id === "9725d0ce-ba28-4dde-95a7-2cbb2c15de24") throw new ApiError(meta.errors.noSuchNote);
throw err;
});
const clipNotes = await ClipNotes.findBy({
noteId: note.id
});
const clips = await Clips.findBy({
id: In(clipNotes.map((x)=>x.clipId)),
isPublic: true
});
return await Promise.all(clips.map((x)=>Clips.pack(x)));
});