🔥 Get 11 random published photos on the Homepage collage
Thanks to Directus help, this works! Concept: fetch all published photos IDs only, get 11 random items and query these 11 IDs Only 2 queries, one for the IDs and one for the photos
This commit is contained in:
@@ -1,15 +1,29 @@
|
||||
import type { RequestEvent, RequestHandlerOutput } from '@sveltejs/kit'
|
||||
import { fetchAPI } from '$utils/api'
|
||||
import { getRandomItems } from '$utils/functions'
|
||||
|
||||
export async function get({}: RequestEvent): Promise<RequestHandlerOutput> {
|
||||
try {
|
||||
const res = await fetchAPI(`
|
||||
// Get total of published photos
|
||||
const totalRes = await fetchAPI(`
|
||||
query {
|
||||
photo (
|
||||
limit: 11,
|
||||
sort: ["-date_created"],
|
||||
filter: { status: { _eq: "published" }},
|
||||
limit: -1,
|
||||
) {
|
||||
id
|
||||
}
|
||||
}
|
||||
`)
|
||||
const { data: { photo: photosIds }} = totalRes
|
||||
|
||||
// Get random photos
|
||||
const randomPhotosIds = [...getRandomItems(photosIds, 11)].map(({ id }) => id)
|
||||
|
||||
// Query these random photos from IDs
|
||||
const photosRes = await fetchAPI(`
|
||||
query {
|
||||
photo (filter: { id: { _in: [${randomPhotosIds}] }}) {
|
||||
slug
|
||||
title
|
||||
city
|
||||
@@ -26,12 +40,13 @@ export async function get({}: RequestEvent): Promise<RequestHandlerOutput> {
|
||||
}
|
||||
}
|
||||
`)
|
||||
const { data: { photo: photos }} = photosRes
|
||||
|
||||
const { data } = res
|
||||
|
||||
return {
|
||||
body: {
|
||||
photos: data.photo
|
||||
if (photos) {
|
||||
return {
|
||||
body: {
|
||||
photos,
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user