80 lines
2.6 KiB
JavaScript
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;
|
|
});
|