Как получить количество ассоциаций (связей) по столбцу для статистики | Sequelize

Имеется модель User

User.init(
    {
        id: {
            type: DataTypes.INTEGER.UNSIGNED,
            autoIncrement: true,
            primaryKey: true,
        },
    },
    {
        tableName: 'users',
        sequelize,
    }
);

Имеется модель Payment

Payment.init(
    {
        id: {
            type: DataTypes.INTEGER.UNSIGNED,
            autoIncrement: true,
            primaryKey: true,
        },
        status: {
            type: DataTypes.ENUM,
            values: Object.values(PaymentStatuses),
            defaultValue: PaymentStatuses.created,
            allowNull: false,
        },
    },
    {
        tableName: 'payments',
        sequelize,
        paranoid: true,
    }
);

Между ними связь один ко многим:

User.hasMany(Payment);
Payment.belongsTo(User);

Модель Payment имеет несколько статусов:

export enum PaymentStatuses {
    completed = 'completed',
    created = 'created',
    error = 'error',
}

Я получаю количество всех платежей:

const user = await User.scope(['paymentsCount']).findByPk(1);

Scope paymentsCount:

User.addScope('paymentsCount', {
    attributes: {
        include: [[fn('COUNT', col('Payments.id')), 'paymentsCount']],
    },
    include: [
        {
            association: 'Payments',
            required: false,
            attributes: [],
        },
    ],
});

Но так я получаю только все платежи. Если мне необходимо выбрать платежи по определенному статусу, то я создаю новый scope и заново делаю выборку но уже по определенному статусу, проблема заключается в том, что запросов становится много, это не единственная таблица в которой нужна статистика, есть другие, где статусов уже 5 штук.

Как можно в одном Scope сделать выборку сразу по нескольким статусам и подсчитать их количество?


Ответы (0 шт):