Files
gw-svelte/src/lib/server/content.ts
T

61 lines
1.5 KiB
TypeScript
Raw Normal View History

2026-05-02 08:26:18 +12:00
import { homepageContent } from '$lib/content/homepage';
import type { HomePageContent, SiteSharedContent } from '$lib/types';
import { getPool } from '$lib/server/db';
const CONTENT_KEY = 'homepage';
export async function getHomepageContent(): Promise<HomePageContent> {
const pool = getPool();
if (!pool) {
return structuredClone(homepageContent);
}
try {
const result = await pool.query<{ value: HomePageContent }>(
'select value from site_content where key = $1 limit 1',
[CONTENT_KEY]
);
if (result.rowCount && result.rows[0]) {
return result.rows[0].value;
}
} catch (error) {
console.error('Failed to read homepage content from PostgreSQL.', error);
}
return structuredClone(homepageContent);
}
export async function saveHomepageContent(content: HomePageContent) {
const pool = getPool();
if (!pool) {
throw new Error('DATABASE_URL is not configured.');
}
await pool.query(
`
insert into site_content (key, value)
values ($1, $2::jsonb)
on conflict (key)
do update set value = excluded.value, updated_at = now()
`,
[CONTENT_KEY, JSON.stringify(content)]
);
return content;
}
export async function getSharedPageContent(): Promise<SiteSharedContent> {
const content = await getHomepageContent();
return {
navigation: content.navigation,
services: content.services,
testimonials: content.testimonials,
booking: content.booking,
footer: content.footer
};
}