Получение отфильтрованного postgres результата с помощью sequelize - PullRequest
0 голосов
/ 24 октября 2019

Я бы хотел отфильтровать пользователей по типу подписки с помощью 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']],
            };

Есть ли у вас какие-либо идеи / рекомендации о том, что я мог бы попробовать дальше?

...