From 328521ccd99e1fb2110a6743e8b9cacb0bc64026 Mon Sep 17 00:00:00 2001 From: birdhead Date: Wed, 22 Oct 2025 01:09:31 +0000 Subject: [PATCH] =?UTF-8?q?Movie=20List=EC=97=90=EC=84=9C=20=EB=82=98?= =?UTF-8?q?=EB=A1=9C=20=ED=95=A0=EB=8B=B9=EB=90=9C=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=EB=A7=8C=20=EB=B3=B4=EC=9D=B4=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks.server.ts | 5 +- .../bigdata-generate/+page.server.ts | 66 ++++++++++++++----- .../(protected)/bigdata-generate/+page.svelte | 46 ++++++++++++- src/routes/+layout.server.ts | 3 +- 4 files changed, 95 insertions(+), 25 deletions(-) diff --git a/src/hooks.server.ts b/src/hooks.server.ts index c583af0..ebb160d 100755 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,9 +1,9 @@ // src/hooks.server.ts - import type { Handle } from '@sveltejs/kit'; import jwt from 'jsonwebtoken'; +import { JWT_SECRET } from '$env/static/private'; -const SECRET_KEY = 'my_secret_key'; // 실제 운영 시 .env 파일에 보관 +const SECRET_KEY = JWT_SECRET; export const handle: Handle = async ({ event, resolve }) => { const token = event.cookies.get('session'); @@ -26,4 +26,3 @@ export const handle: Handle = async ({ event, resolve }) => { response.headers.set('Cross-Origin-Embedder-Policy', 'require-corp'); return response; }; - diff --git a/src/routes/(protected)/bigdata-generate/+page.server.ts b/src/routes/(protected)/bigdata-generate/+page.server.ts index 08edb20..de802c9 100755 --- a/src/routes/(protected)/bigdata-generate/+page.server.ts +++ b/src/routes/(protected)/bigdata-generate/+page.server.ts @@ -1,22 +1,52 @@ -// ======================================================================= -// src/routes/+page.server.ts (확장자 변경 및 타입 추가) -// ======================================================================= +// src/routes/(protected)/bigdata-generate/+page.server.ts + import pool from '$lib/server/database'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = async () => { - try { - const result = await pool.query<{ IndexMovie: number }>( - 'SELECT DISTINCT "IndexMovie" FROM public."TumerDatasetRef" ORDER BY "IndexMovie" ASC' - ); - return { - movies: result.rows.map(row => row.IndexMovie) - }; - } catch (error) { - console.error("Failed to load initial movies", error); - return { - movies: [], - error: "데이터베이스에서 영화 목록을 가져오는 데 실패했습니다." - }; - } +export const load: PageServerLoad = async (event) => { + const { user } = await event.parent(); + // console.log('Parent로부터 받은 사용자 정보:', user); // 디버깅 완료 후 주석 처리 + + let myMovies: number[] = []; + let allMovies: number[] = []; + let error: string | null = null; + + try { + // "전체" 목록 쿼리 (정상) + const allResult = await pool.query<{ IndexMovie: number }>( + 'SELECT DISTINCT "IndexMovie" FROM public."TumerDatasetRef" ORDER BY "IndexMovie" ASC' + ); + allMovies = allResult.rows.map((row) => row.IndexMovie); + + + if (user && user.workerId) { + // ▼▼▼ [ "내" 목록 쿼리 수정 ] ▼▼▼ + + // 2-1. 타입을 올바른 컬럼명 "Index"로 수정 + const myResult = await pool.query<{ Index: number }>( + // 2-2. 쿼리는 "Index" 컬럼을 SELECT (정상) + 'SELECT DISTINCT "Index" FROM public."TumerMovie" WHERE "WorkerID" = $1 ORDER BY "Index" ASC', + [user.workerId] + ); + + // 2-3. 매핑을 "row.IndexMovie"가 아닌 "row.Index"로 수정 + myMovies = myResult.rows.map((row) => row.Index); + + // ▲▲▲ [ 수정 완료 ] ▲▲▲ + } else { + console.warn('user.workerId를 찾을 수 없거나 user가 null입니다.', user); + } + + return { + allMovies, + myMovies + }; + } catch (dbError: any) { + console.error('Failed to load movie lists', dbError); + return { + allMovies: [], + myMovies: [], + error: dbError.message || '데이터베이스에서 영화 목록을 가져오는 데 실패했습니다.' + }; + } }; \ No newline at end of file diff --git a/src/routes/(protected)/bigdata-generate/+page.svelte b/src/routes/(protected)/bigdata-generate/+page.svelte index 37d37c4..9ef9145 100755 --- a/src/routes/(protected)/bigdata-generate/+page.svelte +++ b/src/routes/(protected)/bigdata-generate/+page.svelte @@ -1,3 +1,5 @@ + +