import { router, angemeldet, eigeneAkte } from "@/server/trpc"; import { AUSWEIS_GUELTIG_SEKUNDEN, ausweisErzeugen } from "@/lib/dienstausweis"; import { env } from "@/lib/env"; /** * Der digitale Dienstausweis. * * Nur eine Abfrage, und sie gibt immer den Ausweis der eigenen Person aus — * es gibt bewusst keinen Weg, sich den Ausweis eines anderen ausstellen zu * lassen. Ein Ausweis, den jemand für einen Dritten erzeugen kann, ist keiner. * * Kein eigenes Recht: einen Ausweis über sich selbst darf jeder haben, der in * der Wehr ist. Was darauf steht, steht ohnehin auf jeder Mitgliederliste. */ export const dienstausweisRouter = router({ eigener: angemeldet.query(async ({ ctx }) => { const person = await ctx.db((db) => db.person.findUnique({ where: { id: eigeneAkte(ctx.sitzung) }, select: { vorname: true, nachname: true, dienstgrad: true, organisation: { select: { name: true, kurzname: true } }, }, }), ); const code = ausweisErzeugen(eigeneAkte(ctx.sitzung), ctx.sitzung.organisationId); return { person, code, /** Was in den QR-Code geschrieben wird. */ adresse: `${env.APP_URL}/ausweis/${encodeURIComponent(code)}`, gueltigSekunden: AUSWEIS_GUELTIG_SEKUNDEN, gueltigBis: new Date(Date.now() + AUSWEIS_GUELTIG_SEKUNDEN * 1000), }; }), });