From 0742059db2a7edc05a61ae97185f81e418fcb0c6 Mon Sep 17 00:00:00 2001 From: gahusb Date: Fri, 3 Jul 2026 12:51:54 +0900 Subject: [PATCH] =?UTF-8?q?feat(phase3a):=20=EC=9D=8C=EC=95=85=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EA=B3=B5=EA=B0=9C=ED=99=94=20=E2=80=94=20?= =?UTF-8?q?=EA=B0=80=EB=93=9C=C2=B7HideableService=C2=B7DEFAULT=5FSERVICES?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - app/music/layout.tsx: isServiceVisible/notFound 제거, metadata 유지 - lib/service-visibility.ts: HideableService type에서 'music' 제거 (gyeol|lotto만 유지) - app/api/admin/services/route.ts: DEFAULT_SERVICES에서 music 행 제거 /music* 라우트가 이제 공개(static) 상태로 노출됨. service_settings music DELETE는 Task 1 마이그레이션이 담당. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/api/admin/services/route.ts | 1 - app/music/layout.tsx | 5 +---- lib/service-visibility.ts | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/api/admin/services/route.ts b/app/api/admin/services/route.ts index 79496d6..2d94727 100644 --- a/app/api/admin/services/route.ts +++ b/app/api/admin/services/route.ts @@ -51,7 +51,6 @@ export async function PATCH(request: Request) { } const DEFAULT_SERVICES = [ - { id: 'music', name: 'AI 음악 팩', description: '음악 가이드 패키지·샘플·스튜디오', is_active: false, order_index: 102 }, { id: 'gyeol', name: 'CONTOUR 설문', description: '/gyeol PMF 설문', is_active: false, order_index: 103 }, { id: 'lotto', name: '로또 추천', description: '로또 번호 추천 노출', is_active: false, order_index: 105 }, ]; diff --git a/app/music/layout.tsx b/app/music/layout.tsx index c0d9476..bbe4a75 100644 --- a/app/music/layout.tsx +++ b/app/music/layout.tsx @@ -1,13 +1,10 @@ -import { notFound } from 'next/navigation'; import type { Metadata } from 'next'; -import { isServiceVisible } from '@/lib/service-visibility'; export const metadata: Metadata = { title: 'AI 음악 제품', description: 'Suno 프롬프트 + 뮤직비디오 워크플로우 + 유튜브 SEO 템플릿 한 팩에. 1시간 만에 음악·뮤비 완성.', }; -export default async function MusicLayout({ children }: { children: React.ReactNode }) { - if (!(await isServiceVisible('music'))) notFound(); +export default function MusicLayout({ children }: { children: React.ReactNode }) { return <>{children}; } diff --git a/lib/service-visibility.ts b/lib/service-visibility.ts index 5547478..3dd59ef 100644 --- a/lib/service-visibility.ts +++ b/lib/service-visibility.ts @@ -3,7 +3,7 @@ import { createAdminClient } from '@/lib/supabase/admin'; import { verifyAdminTokenNode } from '@/lib/admin-auth'; /** 숨김 가능 서비스 id (service_settings.id와 일치) */ -export type HideableService = 'music' | 'gyeol' | 'lotto'; +export type HideableService = 'gyeol' | 'lotto'; /** * 서비스 노출 여부. admin_token 세션이면 항상 true.