32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
import { db } from "../../db/postgre.js";
|
|
import { NoteReaction } from "../entities/note-reaction.js";
|
|
import { Notes, Users } from "../index.js";
|
|
import { convertLegacyReaction } from "../../misc/reaction-lib.js";
|
|
export const NoteReactionRepository = db.getRepository(NoteReaction).extend({
|
|
async pack (src, me, options) {
|
|
const opts = Object.assign({
|
|
withNote: false
|
|
}, options);
|
|
const reaction = typeof src === "object" ? src : await this.findOneByOrFail({
|
|
id: src
|
|
});
|
|
return {
|
|
id: reaction.id,
|
|
createdAt: reaction.createdAt.toISOString(),
|
|
user: await Users.pack(reaction.user ?? reaction.userId, me),
|
|
type: convertLegacyReaction(reaction.reaction),
|
|
...opts.withNote ? {
|
|
// may throw error
|
|
note: await Notes.pack(reaction.note ?? reaction.noteId, me)
|
|
} : {}
|
|
};
|
|
},
|
|
async packMany (src, me, options) {
|
|
const reactions = await Promise.allSettled(src.map((reaction)=>this.pack(reaction, me, options)));
|
|
// filter out rejected promises, only keep fulfilled values
|
|
return reactions.flatMap((result)=>result.status === "fulfilled" ? [
|
|
result.value
|
|
] : []);
|
|
}
|
|
});
|