Wichige änderung an DB

This commit is contained in:
Timo Knuth
2025-11-05 12:02:59 +01:00
parent 2f0208ebf9
commit f31992b952
37 changed files with 2774 additions and 2596 deletions

View File

@@ -1,14 +1,13 @@
import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/lib/db';
import { hashIP } from '@/lib/hash';
import { headers } from 'next/headers';
export async function GET(
request: NextRequest,
{ params }: { params: { slug: string } }
{ params }: { params: Promise<{ slug: string }> }
) {
try {
const { slug } = params;
const { slug } = await params;
// Fetch QR code by slug
const qrCode = await db.qRCode.findUnique({
@@ -43,22 +42,27 @@ export async function GET(
case 'PHONE':
destination = `tel:${content.phone}`;
break;
case 'EMAIL':
destination = `mailto:${content.email}${content.subject ? `?subject=${encodeURIComponent(content.subject)}` : ''}`;
break;
case 'SMS':
destination = `sms:${content.phone}${content.message ? `?body=${encodeURIComponent(content.message)}` : ''}`;
break;
case 'WHATSAPP':
destination = `https://wa.me/${content.phone}${content.message ? `?text=${encodeURIComponent(content.message)}` : ''}`;
break;
case 'VCARD':
// For vCard, redirect to display page
const baseUrlVcard = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3050';
destination = `${baseUrlVcard}/vcard?firstName=${encodeURIComponent(content.firstName || '')}&lastName=${encodeURIComponent(content.lastName || '')}&email=${encodeURIComponent(content.email || '')}&phone=${encodeURIComponent(content.phone || '')}&organization=${encodeURIComponent(content.organization || '')}&title=${encodeURIComponent(content.title || '')}`;
break;
case 'GEO':
// For location, redirect to Google Maps (works on desktop and mobile)
const lat = content.latitude || 0;
const lon = content.longitude || 0;
destination = `https://maps.google.com/?q=${lat},${lon}`;
break;
case 'TEXT':
// For plain text, redirect to a display page
destination = `/display?text=${encodeURIComponent(content.text || '')}`;
break;
case 'WIFI':
// For WiFi, show a connection page
destination = `/wifi?ssid=${encodeURIComponent(content.ssid || '')}&security=${content.security || 'WPA'}`;
const baseUrlText = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3050';
destination = `${baseUrlText}/display?text=${encodeURIComponent(content.text || '')}`;
break;
default:
destination = 'https://example.com';
@@ -92,15 +96,14 @@ export async function GET(
async function trackScan(qrId: string, request: NextRequest) {
try {
const headersList = headers();
const userAgent = headersList.get('user-agent') || '';
const referer = headersList.get('referer') || '';
const ip = headersList.get('x-forwarded-for') ||
headersList.get('x-real-ip') ||
const userAgent = request.headers.get('user-agent') || '';
const referer = request.headers.get('referer') || '';
const ip = request.headers.get('x-forwarded-for') ||
request.headers.get('x-real-ip') ||
'unknown';
// Check DNT header
const dnt = headersList.get('dnt');
const dnt = request.headers.get('dnt');
if (dnt === '1') {
// Respect Do Not Track - only increment counter
await db.qRScan.create({
@@ -130,8 +133,8 @@ async function trackScan(qrId: string, request: NextRequest) {
else if (/ios|iphone|ipad/i.test(userAgent)) os = 'iOS';
// Get country from header (Vercel/Cloudflare provide this)
const country = headersList.get('x-vercel-ip-country') ||
headersList.get('cf-ipcountry') ||
const country = request.headers.get('x-vercel-ip-country') ||
request.headers.get('cf-ipcountry') ||
'unknown';
// Extract UTM parameters