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 || process.env.SUPABASE_URL const supabaseKey = env.SUPABASE_KEY || process.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 }) } }