import { publishMainStream } from "../../../../services/stream.js";
import define from "../../define.js";
import { MessagingMessages, UserGroupJoinings } from "../../../../models/index.js";
export const meta = {
    tags: [
        "account",
        "messaging"
    ],
    requireCredential: true,
    kind: "write:account"
};
export const paramDef = {
    type: "object",
    properties: {},
    required: []
};
export default define(meta, paramDef, async (ps, user)=>{
    // Update documents
    await MessagingMessages.update({
        recipientId: user.id,
        isRead: false
    }, {
        isRead: true
    });
    const joinings = await UserGroupJoinings.findBy({
        userId: user.id
    });
    await Promise.all(joinings.map((j)=>MessagingMessages.createQueryBuilder().update().set({
            reads: ()=>`array_append("reads", '${user.id}')`
        }).where("groupId = :groupId", {
            groupId: j.userGroupId
        }).andWhere("userId != :userId", {
            userId: user.id
        }).andWhere("NOT (:userId = ANY(reads))", {
            userId: user.id
        }).execute()));
    publishMainStream(user.id, "readAllMessagingMessages");
});
