Skip to content

Commit

Permalink
v2.0.0--beta.16: REST API
Browse files Browse the repository at this point in the history
  • Loading branch information
mateomorris committed Aug 1, 2023
1 parent df2116e commit 736c078
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/routes/[site]/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,17 @@
display: flex;
align-items: center;
justify-content: center;
background: var(--color-gray-9);
color: var(--color-gray-1);
background: #111;
color: white;
font-family: system-ui, sans-serif;
.container {
background: var(--color-gray-8);
background: #222;
padding: 2rem;
border-radius: 0.25rem;
:global(a) {
color: var(--primo-color-brand);
color: #35d994;
}
}
}
Expand Down
59 changes: 59 additions & 0 deletions src/routes/api/[site]/+server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { json } from '@sveltejs/kit';
import {supabaseAdmin} from '$lib/supabaseAdmin'

export async function GET({ params }) {

const [{data:site_res},{data:page_res},{data:subpages_data, error:subpages_error},{data:sections_res}] = await Promise.all([
supabaseAdmin.from('sites').select().filter('url', 'eq', params.site).single(),
supabaseAdmin.from('pages').select('*, site!inner(url)').match({ url: 'index', 'site.url': params.site }).single(),
supabaseAdmin.from('pages').select('*, site!inner(url)').match({ 'site.url': params.site }),
supabaseAdmin.from('sections').select('*, page!inner( site!inner(url) )').match({
'page.site.url': params.site,
'page.url': 'index'
})
])

const site = {
...site_res['content']['en'],
_meta: {
id: site_res.id,
name: site_res.name,
url: site_res.url,
created_at: site_res.created_at
}
}

const page = {
...page_res['content']['en'],
_meta: {
id: page_res.id,
name: page_res.name,
url: page_res.url,
created_at: page_res.created_at,
// filtering here because the query above is not filtering properly (maybe a Supabase bug)
subpages: subpages_data?.filter(subpage => subpage.parent === null && subpage.url !== 'index').map(subpage => ({
id: subpage.id,
name: subpage.name,
url: subpage.url,
created_at: subpage.created_at
}))
},
}


const sections = sections_res?.sort((a,b) => a.index - b.index).map(section => ({
...section.content.en,
_meta: {
id: section.id,
symbol: section.symbol,
created_at: section.created_at
}
}))

return json({
site,
page,
sections
})

}
57 changes: 57 additions & 0 deletions src/routes/api/[site]/[page]/+server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { json } from '@sveltejs/kit';
import {supabaseAdmin} from '$lib/supabaseAdmin'

export async function GET({ params }) {

const [{data:site_data},{data:page_data},{data:subpages_data, error:subpages_error},{data:sections_data}] = await Promise.all([
supabaseAdmin.from('sites').select().filter('url', 'eq', params.site).single(),
supabaseAdmin.from('pages').select('*, site!inner(url)').match({ url: params.page, 'site.url': params.site }).single(),
supabaseAdmin.from('pages').select('*, parent!inner(*), site!inner(url)').match({ 'site.url': params.site, 'parent.url': params.page }),
supabaseAdmin.from('sections').select('*, page!inner( site!inner(url) )').match({
'page.site.url': params.site,
'page.url': params.page
})
])

const site = {
...site_data['content']['en'],
_meta: {
id: site_data.id,
name: site_data.name,
url: site_data.url,
created_at: site_data.created_at
}
}

const page = {
...page_data['content']['en'],
_meta: {
id: page_data.id,
name: page_data.name,
url: page_data.url,
created_at: page_data.created_at,
subpages: subpages_data?.map(subpage => ({
id: subpage.id,
name: subpage.name,
url: subpage.url,
created_at: subpage.created_at
}))
},
}

const sections = sections_data?.sort((a,b) => a.index - b.index).map(section => ({
...section.content.en,
_meta: {
id: section.id,
symbol: section.symbol,
created_at: section.created_at
}
}))

return json({
site,
page,
sections
})

}

0 comments on commit 736c078

Please sign in to comment.