Initial commit: FL-Akademie LMS mit Docker, Admin, Portal und Dokumentation.
Made-with: Cursor
This commit is contained in:
54
app/portal/certificates/page.tsx
Normal file
54
app/portal/certificates/page.tsx
Normal file
@@ -0,0 +1,54 @@
|
||||
import Link from "next/link";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { requireSession } from "@/lib/session-helpers";
|
||||
|
||||
export default async function PortalCertificatesPage() {
|
||||
const session = await requireSession();
|
||||
|
||||
const rows = await prisma.certificate.findMany({
|
||||
where: { userId: session.user.id },
|
||||
orderBy: { issuedAt: "desc" },
|
||||
include: { course: { select: { title: true, slug: true } } },
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h1 className="page-title">Zertifikate</h1>
|
||||
<p className="muted subtitle">Teilnahmebestätigungen nach vollständigem Kursabschluss.</p>
|
||||
|
||||
{rows.length === 0 ? (
|
||||
<div className="panel">
|
||||
<p className="muted">Noch keine Zertifikate – schließe zuerst alle Lektionen eines Kurses ab.</p>
|
||||
<Link href="/portal" className="btn btn-primary">
|
||||
Zu deinen Kursen
|
||||
</Link>
|
||||
</div>
|
||||
) : (
|
||||
<div className="table-wrap">
|
||||
<table className="simple">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Kurs</th>
|
||||
<th>Ausgestellt</th>
|
||||
<th>Code</th>
|
||||
<th />
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{rows.map((r) => (
|
||||
<tr key={r.id}>
|
||||
<td>{r.course.title}</td>
|
||||
<td className="muted">{r.issuedAt.toLocaleDateString("de-DE")}</td>
|
||||
<td className="muted">{r.code}</td>
|
||||
<td>
|
||||
<Link href={`/zertifikat/${r.code}`}>Ansehen / Drucken</Link>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user