// GET /trash — list soft-deleted posts
app.get('/trash', async (req, res) => {
const trashed = await Post.onlyTrashed()
.orderBy('deleted_at', 'desc')
.paginate(req.query.page, 20);
res.json(trashed);
});
// PATCH /trash/:id/restore — restore a post
app.patch('/trash/:id/restore', async (req, res) => {
const post = await Post.withTrashed().find(req.params.id);
if (!post?.trashed()) return res.status(404).json({ message: 'Not in trash' });
await post.restore();
res.json(post);
});
// DELETE /trash/:id — permanently delete
app.delete('/trash/:id', async (req, res) => {
const post = await Post.withTrashed().find(req.params.id);
if (!post?.trashed()) return res.status(404).json({ message: 'Not in trash' });
await post.forceDelete();
res.json({ message: 'Permanently deleted' });
});
// DELETE /trash — empty trash (purge all deleted posts)
app.delete('/trash', async (req, res) => {
const trashed = await Post.onlyTrashed().get();
for (const post of trashed) {
await post.forceDelete();
}
res.json({ message: `${trashed.length} posts permanently deleted` });
});