811d4cad42
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>
30 lines
943 B
TypeScript
30 lines
943 B
TypeScript
import { NextResponse } from "next/server";
|
|
import { db, users, supportTickets, eq, desc } from "@epicure/db";
|
|
import { requireAdmin } from "@/lib/api-auth";
|
|
|
|
export async function GET() {
|
|
const { response } = await requireAdmin();
|
|
if (response) return response;
|
|
|
|
const rows = await db
|
|
.select({
|
|
id: supportTickets.id,
|
|
userId: supportTickets.userId,
|
|
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,
|
|
updatedAt: supportTickets.updatedAt,
|
|
})
|
|
.from(supportTickets)
|
|
.innerJoin(users, eq(supportTickets.userId, users.id))
|
|
.orderBy(desc(supportTickets.createdAt));
|
|
|
|
return NextResponse.json(rows);
|
|
}
|