Я бы хотел отфильтровать пользователей по типу подписки с помощью sequelize.
Сущность пользователя:
@HasMany(() => Purchase, { onDelete: "cascade" })
purchases?: Purchase[];
Субъект покупки:
@CreatedAt
date: Date;
@Column
item: PURCHASE_ITEMS;
@ForeignKey(() => User)
userId: number;
@BelongsTo(() => User)
user: User;
Итак, какВы можете видеть, что мой Пользователь также сохраняет прошлые подписки в массиве.
Что я хотел бы сделать, это вернуть пользователей, где
item eq 1month.sub
, но я хочу только тех, чья последняя подпрограмматипа я фильтрую. Мой текущий код возвращает массив покупок, и когда я фильтрую пользователей, которые в настоящий момент подписаны на подписку на месяц 1 месяц, я получаю всех пользователей, у которых была подписка на 1 месяц, даже если они подписаны на 12 месяцев. И если я пытаюсь отфильтровать по 6-месячному или 12-месячному сабвуферу, мой запрос ничего не возвращает.
if (query.purchase) {
// query.purchase == '1month.sub'
const purch = sqs.find(query.purchase);
const where1 = { ...purch };
const purchaseUserIds = await Purchase.findAll({
attributes: ['userId'],
where: where1,
raw: true,
group: ['userId', 'updatedAt'],
order: [['updatedAt', 'desc']]
});
where.id = purchaseUserIds.map(object => (object as any).userId);
}
, и этот sql-запрос позже используется в User.FindAll (sql):
const sql: IFindOptions = {
where,
include: [
{
model: Image,
as: 'images'
},
{ model: Purchase, as: 'purchases' },
{ model: Relationship, as: 'relationships' }
],
order: query.sort ? sqs.sort(query.sort) : [['createdAt', 'desc']],
};
Есть ли у вас какие-либо идеи / рекомендации о том, что я мог бы попробовать дальше?