Neuer Endpunkt GET /api/v1/qr/:entityType/:id/link liefert den vom QR-Dienst bereits genutzten Deep-Link als reine URL statt als SVG, damit die Web-NFC-API (client-seitig, Chrome/Android) ihn per NDEFReader.write() auf einen physischen NFC-Tag schreiben kann. QrService.resolveUrl() ist aus generateSvg() herausgezogen, damit beide Endpunkte exakt denselben Link erzeugen. Der bestehende QrCodeDialog bekommt dadurch für alle sechs QR-fähigen Entitäten (Völker, Bienenstände, Königinnen, Honigchargen, Lagerbehälter, Abfüllungen) automatisch einen "Auf NFC-Tag schreiben"-Button, der nur erscheint, wenn window.NDEFReader tatsächlich existiert – kein Fallback für andere Browser oder iOS, wie in der Lastenheft vorgesehen.
20 lines
596 B
TypeScript
20 lines
596 B
TypeScript
import { apiFetch, apiFetchBlob } from "@/lib/auth/api-client";
|
|
|
|
export type QrEntityType =
|
|
| "colonies"
|
|
| "apiaries"
|
|
| "queens"
|
|
| "honey-batches"
|
|
| "storage-containers"
|
|
| "bottling-batches";
|
|
|
|
export async function fetchQrCodeSvg(entityType: QrEntityType, id: string): Promise<Blob> {
|
|
const { blob } = await apiFetchBlob(`/qr/${entityType}/${id}.svg`, `${entityType}.svg`);
|
|
return blob;
|
|
}
|
|
|
|
export async function fetchQrLink(entityType: QrEntityType, id: string): Promise<string> {
|
|
const { url } = await apiFetch<{ url: string }>(`/qr/${entityType}/${id}/link`);
|
|
return url;
|
|
}
|