#node.js #postgresql #express #sequelize.js #hapi
Вопрос:
Мне нужна только последняя запись из таблицы подписок вместе со всеми пользователями из таблицы пользователей. Таблица подписки связана с таблицей пользователей с «идентификатором пользователя» в качестве ключа подписки. На данный момент я получаю несколько объектов одного и того же пользователя со всеми записями из таблицы подписок.
ТАБЛИЦА ПОЛЬЗОВАТЕЛЕЙ
UserModel.init(
{
user_id: {
type: Sequelize.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true,
},
user_id_converted: {
type: Sequelize.STRING(100),
allowNull: true,
},
first_name: {
type: Sequelize.STRING(100),
allowNull: false,
},
last_name: {
type: Sequelize.STRING(100),
allowNull: false,
},
date_of_birth: {
type: Sequelize.STRING(20),
allowNull: true,
},
city: {
type: Sequelize.STRING(70),
allowNull: false,
},
state: {
type: Sequelize.STRING(70),
allowNull: false,
},
email: {
type: Sequelize.STRING(65),
allowNull: false,
},
password: {
type: Sequelize.STRING(300),
allowNull: false,
},
reset_password_token: {
type: Sequelize.STRING(300),
allowNull: true,
},
is_subscribed: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
},
subscribed_till: {
type: Sequelize.STRING(50),
allowNull: true,
},
is_active: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: true
},
is_deleted: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
},
is_blocked: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
},
// is_plan_updated: {
// type: Sequelize.BOOLEAN,
// allowNull: false,
// defaultValue: false
// },
user_type: {
type: Sequelize.ENUM(UserConfig.USER_ROLE_TYPE.USER, UserConfig.USER_ROLE_TYPE.GUEST),
allowNull: false
},
plan_value: {
type: Sequelize.DOUBLE,
defaultValue: 0,
allowNull: false
},
money_to_invest: {
type: Sequelize.DOUBLE,
defaultValue: 0,
allowNull: false
},
willing_to_sell_value: {
type: Sequelize.DOUBLE,
defaultValue: 0,
},
investor_type: {
type: Sequelize.ENUM(CONSTANT.INVESTOR_TYPE.AGGRESSIVE, CONSTANT.INVESTOR_TYPE.MODERATE, CONSTANT.INVESTOR_TYPE.PAVE_SUGGESTION),
allowNull: false,
},
investment_type: {
type: Sequelize.ENUM(CONSTANT.INVESTMENT_TYPE.DIVIDEND, CONSTANT.INVESTMENT_TYPE.TRADITIONAL, CONSTANT.INVESTMENT_TYPE.PAVE_SUGGESTION),
allowNull: false,
},
}, {
sequelize: connection,
freezeTableName: true,
modelName: 'user',
underscored: true,
timestamps: true,
});
ТАБЛИЦА ПОДПИСОК
UserSubscriptionModel.init(
{
subscription_id: {
type: Sequelize.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true,
},
locale: {
type: Sequelize.STRING(300),
allowNull: false,
},
quantity: {
type: Sequelize.STRING(300),
allowNull: false,
},
price: {
type: Sequelize.DOUBLE,
allowNull: false,
},
product_id: {
type: Sequelize.STRING(300),
allowNull: false,
},
transaction_id: {
type: Sequelize.STRING(300),
allowNull: false,
},
original_transaction_id: {
type: Sequelize.STRING(300),
allowNull: false,
},
purchase_date: {
type: Sequelize.DATE,
allowNull: false,
},
expires_date: {
type: Sequelize.DATE,
allowNull: false,
},
user_type: {
type: Sequelize.ENUM(UserConfig.USER_ROLE_TYPE.USER, UserConfig.USER_ROLE_TYPE.GUEST),
allowNull: false
},
event_type: {
type: Sequelize.ENUM,
values: Object.values(CONSTANT.SUBSCRIPTION_EVENT_TYPE),
allowNull: false
},
user_id: {
type: Sequelize.INTEGER,
allowNull: false,
}
}, {
sequelize: connection,
freezeTableName: true,
modelName: 'user_subscription',
underscored: true,
timestamps: true,
});
What I am doing
{
where: filter,
include: [
{
model: UserSubscriptionModel,
as: 'subscription',
required: false,
// attributes: ['price', 'event_type', 'product_id']
// attributes: [[Sequelize.fn('max', Sequelize.col('subscription_id')), 'max']]
}
],
group: ['user.user_id', 'subscription.subscription_id'],
subQuery: false,
raw: true,
}