From e7edf1613851579f6e2e23407e492b97b6f52cf6 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Fri, 26 Jul 2024 02:34:18 +0800 Subject: [PATCH] fixed incorrect qr code in qr api --- frontend/src/lib/db/schema.ts | 5 ++ .../routes/api/shortener/[id]/qr/+server.ts | 67 +++++++++---------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/frontend/src/lib/db/schema.ts b/frontend/src/lib/db/schema.ts index c5f57d2..c7a2862 100644 --- a/frontend/src/lib/db/schema.ts +++ b/frontend/src/lib/db/schema.ts @@ -108,6 +108,11 @@ export const emailVerificationToken = pgTable( ) // relations +export const userRelations = relations(user, ({ one, many }) => ({ + shortener: many(shortener), + setting: one(setting), +})) + export const shortenerRelations = relations( shortener, ({ one, many }) => ({ diff --git a/frontend/src/routes/api/shortener/[id]/qr/+server.ts b/frontend/src/routes/api/shortener/[id]/qr/+server.ts index 62df27c..06d62b1 100644 --- a/frontend/src/routes/api/shortener/[id]/qr/+server.ts +++ b/frontend/src/routes/api/shortener/[id]/qr/+server.ts @@ -1,65 +1,62 @@ import { db } from '$lib/db' -import { project, setting, shortener, user } from '$lib/db/schema' -import { eq } from 'drizzle-orm' import type { RequestHandler } from './$types' import QRCode from 'qrcode' import { redirect } from '@sveltejs/kit' -import { env } from '$env/dynamic/private' +import { env } from '$env/dynamic/public' const shortenerUrl = env.PUBLIC_SHORTENER_URL export const GET: RequestHandler = async (event) => { const shortenerId = event.params.id const color = event.url.searchParams.get('color') - const shortenerWithUserSetting = await db - .select() - .from(shortener) - .where(eq(shortener.code, shortenerId)) - .leftJoin(user, eq(shortener.userId, user.id)) - .leftJoin(setting, eq(setting.userId, user.id)) - if (shortenerWithUserSetting.length == 0) { + const shortener = await db.query.shortener.findFirst({ + where: (shortener, { eq }) => eq(shortener.code, shortenerId), + with: { + user: { + with: { + setting: true, + }, + }, + project: true, + }, + }) + + if (!shortener) { redirect(303, '/') } let colorSetting = {} if (color === 'true') { - if (shortenerWithUserSetting[0].shortener.projectId) { - const selectedProject = await db - .select() - .from(project) - .where( - eq( - project.id, - shortenerWithUserSetting[0].shortener.projectId, - ), - ) + if (shortener.project) { colorSetting = { color: { - light: selectedProject[0].qr_background, - dark: selectedProject[0].qr_foreground, + light: shortener.project.qr_background, + dark: shortener.project.qr_foreground, }, } - } else if (shortenerWithUserSetting[0].setting) { + } else if (shortener.user.setting) { colorSetting = { color: { - light: shortenerWithUserSetting[0].setting.qr_background, - dark: shortenerWithUserSetting[0].setting.qr_foreground, + light: shortener.user.setting.qr_background, + dark: shortener.user.setting.qr_foreground, }, } } } - const image = await QRCode.toBuffer( - shortenerUrl + '/' + shortenerId, - { - type: 'png', - errorCorrectionLevel: 'L', - margin: 1, - scale: 20, - ...colorSetting, - }, - ) + const url = + shortener.project && shortener.project.enable_custom_domain + ? shortener.project.custom_domain || shortenerUrl + : shortenerUrl + + const image = await QRCode.toBuffer(url + '/' + shortenerId, { + type: 'png', + errorCorrectionLevel: 'L', + margin: 1, + scale: 20, + ...colorSetting, + }) return new Response(image, { headers: {