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
            ] : []);
    }
});
