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

80 lines
2.6 KiB
JavaScript

import createReaction from "../../../../../services/note/reaction/create.js";
import define from "../../../define.js";
import { getNote } from "../../../common/getters.js";
import { ApiError } from "../../../error.js";
import { getGroupActor } from "../../../common/get-group-actor.js";
export const meta = {
tags: [
"reactions",
"notes"
],
requireCredential: true,
kind: "write:reactions",
errors: {
noSuchNote: {
message: "No such note.",
code: "NO_SUCH_NOTE",
id: "033d0620-5bfe-4027-965d-980b0c85a3ea"
},
alreadyReacted: {
message: "You are already reacting to that note.",
code: "ALREADY_REACTED",
id: "71efcf98-86d6-4e2b-b2ad-9d032369366b"
},
youHaveBeenBlocked: {
message: "You cannot react this note because you have been blocked by this user.",
code: "YOU_HAVE_BEEN_BLOCKED",
id: "20ef5475-9f38-4e4c-bd33-de6d979498ec"
},
accountLocked: {
message: "You migrated. Your account is now locked.",
code: "ACCOUNT_LOCKED",
id: "d390d7e1-8a5e-46ed-b625-06271cafd3d3"
},
noSuchGroup: {
message: "No such group.",
code: "NO_SUCH_GROUP",
id: "8ad1dbe0-6498-45ac-9243-5864d80ed5c1"
}
}
};
export const paramDef = {
type: "object",
properties: {
noteId: {
type: "string",
format: "misskey:id"
},
reaction: {
type: "string"
},
groupId: {
type: "string",
format: "misskey:id",
nullable: true
}
},
required: [
"noteId",
"reaction"
]
};
export default define(meta, paramDef, async (ps, user)=>{
if (user.movedToUri != null) throw new ApiError(meta.errors.accountLocked);
const note = await getNote(ps.noteId, user).catch((err)=>{
if (err.id === "9725d0ce-ba28-4dde-95a7-2cbb2c15de24") throw new ApiError(meta.errors.noSuchNote);
throw err;
});
const group = await getGroupActor(ps.groupId, user);
if (ps.groupId != null && group == null) throw new ApiError(meta.errors.noSuchGroup);
await createReaction({
...user,
groupId: group?.id ?? null
}, note, ps.reaction).catch((e)=>{
if (e.id === "51c42bb4-931a-456b-bff7-e5a8a70dd298") throw new ApiError(meta.errors.alreadyReacted);
if (e.id === "e70412a4-7197-4726-8e74-f3e0deb92aa7") throw new ApiError(meta.errors.youHaveBeenBlocked);
throw e;
});
return;
});