83 lines
No EOL
1.9 KiB
JavaScript
83 lines
No EOL
1.9 KiB
JavaScript
import { createClient } from '@supabase/supabase-js'
|
|
|
|
const SUPABASE_URL = process.env.SUPABASE_URL
|
|
const SUPABASE_KEY = process.env.SUPABASE_KEY
|
|
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
|
|
|
|
const PAGE_SIZE = 50
|
|
|
|
const fetchBlockData = async (collection, itemId) => {
|
|
const { data, error } = await supabase
|
|
.from(collection)
|
|
.select(collection === 'hero' ? '*, image(filename_disk)' : '*')
|
|
.eq('id', itemId)
|
|
.single()
|
|
|
|
if (error) {
|
|
console.error(`Error fetching data from ${collection} for item ${itemId}:`, error)
|
|
return null
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
const fetchBlocksForPage = async (pageId) => {
|
|
const { data, error } = await supabase
|
|
.from('pages_blocks')
|
|
.select('collection, item, sort')
|
|
.eq('pages_id', pageId)
|
|
|
|
if (error) {
|
|
console.error(`Error fetching blocks for page ${pageId}:`, error)
|
|
return []
|
|
}
|
|
|
|
const blocks = await Promise.all(data.map(async block => {
|
|
const blockData = await fetchBlockData(block.collection, block.item)
|
|
|
|
return {
|
|
type: block['collection'],
|
|
sort: block['sort'],
|
|
...blockData
|
|
}
|
|
}))
|
|
|
|
return blocks.sort((a, b) => a.sort - b.sort)
|
|
}
|
|
|
|
const fetchAllPages = async () => {
|
|
let pages = []
|
|
let page = 0
|
|
let fetchMore = true
|
|
|
|
while (fetchMore) {
|
|
const { data, error } = await supabase
|
|
.from('pages')
|
|
.select(`
|
|
*,
|
|
open_graph_image(filename_disk)
|
|
`)
|
|
.range(page * PAGE_SIZE, (page + 1) * PAGE_SIZE - 1)
|
|
|
|
if (error) {
|
|
console.error('Error fetching pages:', error)
|
|
return pages
|
|
}
|
|
|
|
if (data.length < PAGE_SIZE) fetchMore = false
|
|
|
|
for (const page of data) {
|
|
page['blocks'] = await fetchBlocksForPage(page['id'])
|
|
if (page['open_graph_image']) page['open_graph_image'] = page['open_graph_image']['filename_disk']
|
|
pages.push(page)
|
|
}
|
|
|
|
page++
|
|
}
|
|
|
|
return pages
|
|
}
|
|
|
|
export default async function () {
|
|
return await fetchAllPages()
|
|
} |