77 lines
No EOL
2.5 KiB
JavaScript
77 lines
No EOL
2.5 KiB
JavaScript
import { createClient } from '@supabase/supabase-js'
|
|
import { fetchDataByUrl, fetchGlobals } from './utils/fetchers.js'
|
|
import {
|
|
generateArtistHTML,
|
|
generateBookHTML,
|
|
generateGenreHTML,
|
|
generateMetadata,
|
|
generateWatchingHTML
|
|
} from './utils/generators.js'
|
|
import { updateDynamicContent } from './utils/updaters.js'
|
|
|
|
const BASE_URL = 'https://coryd.dev'
|
|
const NOT_FOUND_URL = `${BASE_URL}/404`
|
|
|
|
export default {
|
|
async fetch(request, env) {
|
|
const url = new URL(request.url)
|
|
const path = url.pathname.replace(/\/$/, '')
|
|
const supabaseUrl = env.SUPABASE_URL
|
|
const supabaseKey = env.SUPABASE_KEY
|
|
const supabase = createClient(supabaseUrl, supabaseKey)
|
|
let data, type
|
|
|
|
if (path === '/books' || path === '/books/') return fetch(`${BASE_URL}/books/`)
|
|
if (path.startsWith('/books/years/')) return fetch(`${BASE_URL}${path}`)
|
|
|
|
if (path.startsWith('/watching/movies/')) {
|
|
data = await fetchDataByUrl(supabase, 'optimized_movies', path)
|
|
type = 'movie'
|
|
} else if (path.startsWith('/watching/shows/')) {
|
|
data = await fetchDataByUrl(supabase, 'optimized_shows', path)
|
|
type = 'show'
|
|
} else if (path.startsWith('/music/artists/')) {
|
|
data = await fetchDataByUrl(supabase, 'optimized_artists', path)
|
|
type = 'artist'
|
|
} else if (path.startsWith('/music/genres/')) {
|
|
data = await fetchDataByUrl(supabase, 'optimized_genres', path)
|
|
type = 'genre'
|
|
} else if (path.startsWith('/books/')) {
|
|
data = await fetchDataByUrl(supabase, 'optimized_books', path)
|
|
type = 'book'
|
|
} else {
|
|
return Response.redirect(NOT_FOUND_URL, 302)
|
|
}
|
|
|
|
if (!data) return Response.redirect(NOT_FOUND_URL, 302)
|
|
|
|
const globals = await fetchGlobals(supabase)
|
|
let mediaHtml
|
|
|
|
switch (type) {
|
|
case 'artist':
|
|
mediaHtml = generateArtistHTML(data, globals)
|
|
break
|
|
case 'genre':
|
|
mediaHtml = generateGenreHTML(data, globals)
|
|
break
|
|
case 'book':
|
|
mediaHtml = generateBookHTML(data, globals)
|
|
break
|
|
default:
|
|
mediaHtml = generateWatchingHTML(data, globals, type)
|
|
break
|
|
}
|
|
|
|
const templateResponse = await fetch(`${BASE_URL}/dynamic.html`)
|
|
const template = await templateResponse.text()
|
|
const metadata = generateMetadata(data, type, globals)
|
|
const html = updateDynamicContent(template, metadata, mediaHtml)
|
|
const headers = new Headers({
|
|
'Content-Type': 'text/html',
|
|
'Cache-Control': 'public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400',
|
|
})
|
|
|
|
return new Response(html, { headers })
|
|
}
|
|
} |