--- import { getDatabase, schema } from "@/db"; import BaseLayout from "@/layouts/BaseLayout.astro"; import { desc, eq, and, sql } from "drizzle-orm"; const db = getDatabase(); const currentUser = Astro.locals.user; // Get filter from query params const filter = Astro.url.searchParams.get("filter") || "open"; const sort = Astro.url.searchParams.get("sort") || "newest"; // Fetch issues from public repos, ordered by most recent let issues: any[] = []; try { // Get issues with their repositories const rawIssues = await db.query.issues.findMany({ where: filter === "closed" ? eq(schema.issues.state, "closed") : filter === "all" ? undefined : eq(schema.issues.state, "open"), orderBy: sort === "oldest" ? [schema.issues.createdAt] : sort === "comments" ? [desc(schema.issues.commentCount)] : [desc(schema.issues.createdAt)], limit: 50, with: { repository: { with: { owner: true, }, }, author: true, }, }); // Filter to only public repos issues = rawIssues.filter(issue => issue.repository?.visibility === "public" ); } catch (e) { console.error("Error fetching issues:", e); } function timeAgo(date: string | number | Date) { if (!date) return ""; const seconds = Math.floor( (new Date().getTime() - new Date(date).getTime()) / 1000 ); if (seconds < 60) return "just now"; if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`; if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`; if (seconds < 604800) return `${Math.floor(seconds / 86400)}d ago`; return new Date(date).toLocaleDateString(); } ---

Issues

Browse issues across all public repositories

Sort: