71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import type { PageServerLoad } from './$types';
|
|
|
|
interface PageListRow {
|
|
id: number;
|
|
title: string;
|
|
slug: string;
|
|
date: string;
|
|
author: string | null;
|
|
}
|
|
export const load: PageServerLoad = async ({ platform }) => {
|
|
const db = platform?.env?.DB;
|
|
|
|
if (!db) {
|
|
return {
|
|
pages: []
|
|
};
|
|
}
|
|
|
|
try {
|
|
const queryRes = await db.prepare(
|
|
`SELECT p.id, p.title, p.slug, p.published_at as date, u.username as author
|
|
FROM pages p
|
|
LEFT JOIN users u ON p.author_id = u.id
|
|
ORDER BY p.published_at DESC`
|
|
).all<PageListRow>();
|
|
|
|
const results = queryRes.results;
|
|
|
|
// Format date for display
|
|
const formattedPages = results.map((page) => {
|
|
const d = new Date(page.date as string);
|
|
const year = d.getFullYear();
|
|
const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
const day = String(d.getDate()).padStart(2, '0');
|
|
|
|
return {
|
|
...page,
|
|
dateStr: `${year}-${month}-${day}`
|
|
};
|
|
});
|
|
|
|
return {
|
|
pages: formattedPages
|
|
};
|
|
} catch (err) {
|
|
console.error('Error fetching admin pages list:', err);
|
|
return { pages: [] };
|
|
}
|
|
};
|
|
|
|
export const actions = {
|
|
delete: async ({ request, platform }) => {
|
|
const db = platform?.env?.DB;
|
|
if (!db) return { success: false, error: 'Database not found' };
|
|
|
|
const data = await request.formData();
|
|
const ids = data.getAll('ids');
|
|
|
|
if (!ids || ids.length === 0) return { success: false, error: 'Missing IDs' };
|
|
|
|
try {
|
|
const placeholders = ids.map(() => '?').join(',');
|
|
await db.prepare(`DELETE FROM pages WHERE id IN (${placeholders})`).bind(...ids).run();
|
|
return { success: true };
|
|
} catch (err) {
|
|
console.error('Error deleting page:', err);
|
|
return { success: false, error: 'Failed to delete page' };
|
|
}
|
|
}
|
|
};
|