Как реализовать запрос "подписки" в социальных сетях с помощью Prisma 2?

У меня есть вопрос, связанный с написанием запроса ленты в стиле "социальных сетей", но в данном случае я использую Prisma 2. У меня есть музыкальное приложение, в котором я хотел бы отображать ленту всех Albums из Artists что User следует.

В моем schema.prisma, У меня есть следующие модели:

Пользователь

model User {
  id         Int      @id @default(autoincrement())
  email      String   @unique
  following  Artist[]
}

Художник

model Artist {
  id        Int     @id @default(autoincrement())
  name      String
  followers User[]
  albums    Album[]
}

Prisma создает неявную таблицу соединений с именем UserToArtist отслеживать, когда User следует за Artist

Альбом

model Album {
  id          Int      @id @default(autoincrement())
  title       String
  date        DateTime <-- this is an ISO date string
  artists     Artist[] <-- an album can have several artists
}

Prisma создает неявную таблицу соединений с именем ArtistToAlbum отслеживать какие Artists связаны с определенными Albums.


Итак, как я могу создать запрос Prisma, чтобы найти все альбомы исполнителей, на которые подписан пользователь, в порядке AlbumДата? Это была моя первая попытка, но это не похоже на правильность, и альбомы не отсортированы по дате:

const results = await ctx.db.album.findMany({
  where: {
    date: {
      gt: moment().startOf('day').toISOString()
    },
    artists: {
      some: {
        followers: {
          some: {
            id: args.userId, <-- the userId for the feed
          },
        },
      },
    },
  },
  orderBy: {
    date: 'asc',
  },
})

Обратите внимание, как мне нужно отфильтровать два someзаявления? Просто не кажется правильным... Какие рекомендации вы можете дать по подобному запросу? Благодарность!

1 ответ

Вы можете использовать свободный API, чтобы захватить всех художников, за которыми следует пользователь, и он должен выглядеть примерно так:

const followedArtists = await ctx.db.user.findOne({ where: { id: args.userId, } }).following()

Отсюда вы можете взять альбомы всех этих исполнителей, а затем отсортировать их в коде сервера, чтобы затем отправить обратно в качестве результата запроса.

Другие вопросы по тегам