import { prisma } from '@innungsapp/shared' import { auth } from '@/lib/auth' import { headers } from 'next/headers' import { redirect } from 'next/navigation' import Link from 'next/link' import { MEMBER_STATUS_LABELS } from '@innungsapp/shared' import { format } from 'date-fns' import { de } from 'date-fns/locale' const STATUS_COLORS = { aktiv: 'bg-green-100 text-green-700', ruhend: 'bg-yellow-100 text-yellow-700', ausgetreten: 'bg-red-100 text-red-700', } export default async function MitgliederPage({ searchParams, }: { searchParams: { q?: string; status?: string } }) { const session = await auth.api.getSession({ headers: await headers() }) if (!session?.user) redirect('/login') const userRole = await prisma.userRole.findFirst({ where: { userId: session.user.id }, }) if (!userRole || userRole.role !== 'admin') redirect('/dashboard') const search = searchParams.q ?? '' const statusFilter = searchParams.status const members = await prisma.member.findMany({ where: { orgId: userRole.orgId, ...(statusFilter && { status: statusFilter as never }), ...(search && { OR: [ { name: { contains: search, mode: 'insensitive' } }, { betrieb: { contains: search, mode: 'insensitive' } }, { ort: { contains: search, mode: 'insensitive' } }, ], }), }, orderBy: { name: 'asc' }, }) return (
{members.length} Einträge
| Name / Betrieb | Sparte | Ort | Mitglied seit | Status | Eingeladen | |
|---|---|---|---|---|---|---|
|
{m.name} {m.betrieb} |
{m.sparte} | {m.ort} | {m.seit ?? '—'} | {MEMBER_STATUS_LABELS[m.status]} | {m.userId ? ( ✓ Aktiv ) : ( Nicht eingeladen )} | Bearbeiten |