feat: in-app support form with email + Gitea issue integration (v0.49.0)
Users can now report bugs, suggestions, or questions from a new /support page. Each submission sends a confirmation email and, when GITEA_URL/ GITEA_TOKEN/GITEA_REPO are configured in admin Settings, opens a labeled issue on that repo automatically (best-effort — failure doesn't block the ticket). Admins get a Support section to triage status and retry failed Gitea issue creation. New support_tickets table, gitea.ts client, site-settings entries for the three new secrets, and OpenAPI docs for the two user-facing endpoints. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import type { Metadata } from "next";
|
||||
import { db, users, supportTickets, eq, desc } from "@epicure/db";
|
||||
import { AdminSupportManager } from "@/components/admin/admin-support-manager";
|
||||
|
||||
export const metadata: Metadata = {};
|
||||
|
||||
export default async function AdminSupportPage() {
|
||||
const rows = await db
|
||||
.select({
|
||||
id: supportTickets.id,
|
||||
userEmail: users.email,
|
||||
username: users.username,
|
||||
type: supportTickets.type,
|
||||
title: supportTickets.title,
|
||||
description: supportTickets.description,
|
||||
status: supportTickets.status,
|
||||
giteaIssueUrl: supportTickets.giteaIssueUrl,
|
||||
giteaError: supportTickets.giteaError,
|
||||
createdAt: supportTickets.createdAt,
|
||||
})
|
||||
.from(supportTickets)
|
||||
.innerJoin(users, eq(supportTickets.userId, users.id))
|
||||
.orderBy(desc(supportTickets.createdAt));
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold tracking-tight">Support Tickets</h1>
|
||||
<p className="text-muted-foreground text-sm mt-1">
|
||||
Bug reports, suggestions, and questions submitted through the app.
|
||||
</p>
|
||||
</div>
|
||||
<AdminSupportManager
|
||||
initialTickets={rows.map((r) => ({ ...r, createdAt: r.createdAt.toISOString() }))}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user