--- import BaseLayout from "@/layouts/BaseLayout.astro"; import { getDatabase, schema } from "@/db"; import { desc, eq } from "drizzle-orm"; import { FileText, Plus, Trash2, Edit2, Star } from "lucide-react"; const user = Astro.locals.user; if (!user) { return Astro.redirect("/login"); } const db = getDatabase(); const repoId = Astro.url.searchParams.get("repo") || ""; let repositories: { id: string; name: string; fullName?: string; owner: string }[] = []; try { const repos = await db.query.repositories.findMany({ where: eq(schema.repositories.ownerId, user.id), columns: { id: true, name: true }, with: { owner: { columns: { username: true } } }, }); repositories = repos.map((r) => ({ id: r.id, name: r.name, owner: r.owner.username, fullName: `${r.owner.username}/${r.name}`, })); } catch (e) {} const selectedRepo = repositories.find((repo) => repo.id === repoId) || null; interface ReviewTemplate { id: string; name: string; description?: string | null; category?: string | null; content: string; isDefault: boolean; createdAt: string | Date; } let templates: ReviewTemplate[] = []; try { if (repoId) { const dbTemplates = await db.query.reviewTemplates.findMany({ where: eq(schema.reviewTemplates.repositoryId, repoId), orderBy: [desc(schema.reviewTemplates.createdAt)], }); templates = dbTemplates as ReviewTemplate[]; } } catch (e) {} ---

Review Templates

Create reusable checklists for code reviews

{repoId && ( )}
{!repoId ? (

Select a Repository

Choose a repository to manage review templates

) : (
{templates.length === 0 ? (

No Templates Yet

Create your first reusable review checklist

) : (
{templates.map((template) => (
{template.name} {template.isDefault && ( Default )} {template.category && ( {template.category} )}
{template.description && (

{template.description}

)}

{template.content.slice(0, 200)}{template.content.length > 200 ? "..." : ""}

))}
)}
)}