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

81 lines
2.3 KiB
JavaScript

import { NoteReactions, UserProfiles } from "../../../../models/index.js";
import define from "../../define.js";
import { makePaginationQuery } from "../../common/make-pagination-query.js";
import { generateVisibilityQuery } from "../../common/generate-visibility-query.js";
import { ApiError } from "../../error.js";
export const meta = {
tags: [
"users",
"reactions"
],
requireCredential: false,
requireCredentialPrivateMode: true,
description: "Show all reactions this user made.",
res: {
type: "array",
optional: false,
nullable: false,
items: {
type: "object",
optional: false,
nullable: false,
ref: "NoteReaction"
}
},
errors: {
reactionsNotPublic: {
message: "Reactions of the user is not public.",
code: "REACTIONS_NOT_PUBLIC",
id: "673a7dd2-6924-1093-e0c0-e68456ceae5c"
}
}
};
export const paramDef = {
type: "object",
properties: {
userId: {
type: "string",
format: "misskey:id"
},
limit: {
type: "integer",
minimum: 1,
maximum: 100,
default: 10
},
sinceId: {
type: "string",
format: "misskey:id"
},
untilId: {
type: "string",
format: "misskey:id"
},
sinceDate: {
type: "integer"
},
untilDate: {
type: "integer"
}
},
required: [
"userId"
]
};
export default define(meta, paramDef, async (ps, me)=>{
const profile = await UserProfiles.findOneByOrFail({
userId: ps.userId
});
if (me.id !== ps.userId && !profile.publicReactions) {
throw new ApiError(meta.errors.reactionsNotPublic);
}
const query = makePaginationQuery(NoteReactions.createQueryBuilder("reaction"), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate).andWhere("reaction.userId = :userId", {
userId: ps.userId
}).leftJoinAndSelect("reaction.note", "note");
generateVisibilityQuery(query, me);
const reactions = await query.take(ps.limit).getMany();
return await NoteReactions.packMany(reactions, me, {
withNote: true
});
});