Files
blogflare/src/routes/admin/pages/+page.server.ts
T

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' };
}
}
};