Как реализовать запрос "подписки" в социальных сетях с помощью 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()
Отсюда вы можете взять альбомы всех этих исполнителей, а затем отсортировать их в коде сервера, чтобы затем отправить обратно в качестве результата запроса.