Phase 2 시작 — pack_files 테이블이 자료 리스트 source of truth. PACK_TIER_NAMES export 신규 추가 (mypage가 카드 제목용으로 참조). TIER_LABEL, extractPackTier 변경 없음. Note: 이 commit 단독으로는 mypage 빌드 깨짐. Task C3 (mypage page.tsx 수정) 에서 PACK_ASSETS 참조 제거 + 새 데이터 흐름 적용 후 빌드 복구. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
export type PackTier = 'starter' | 'pro' | 'master';
|
|
|
|
/**
|
|
* Tier 키 → 한국어 표시명 SSOT.
|
|
* `app/services/music/page.tsx`의 TIERS와 일치 유지 필요 (현재 입문/프로/마스터).
|
|
*/
|
|
export const TIER_LABEL: Record<PackTier, string> = {
|
|
starter: '입문',
|
|
pro: '프로',
|
|
master: '마스터',
|
|
};
|
|
|
|
const LABEL_TO_TIER: Record<string, PackTier> = Object.fromEntries(
|
|
Object.entries(TIER_LABEL).map(([tier, label]) => [label, tier as PackTier])
|
|
);
|
|
|
|
/**
|
|
* Tier 키 → 팩 이름 (mypage 표시용).
|
|
* 자료 파일 리스트는 pack_files DB 테이블이 SSOT.
|
|
*/
|
|
export const PACK_TIER_NAMES: Record<PackTier, string> = {
|
|
starter: `AI 음악 마스터 팩 (${TIER_LABEL.starter})`,
|
|
pro: `AI 음악 마스터 팩 (${TIER_LABEL.pro})`,
|
|
master: `AI 음악 마스터 팩 (${TIER_LABEL.master})`,
|
|
};
|
|
|
|
/**
|
|
* orders.service ("구매 신청: AI 음악 마스터 팩 · 프로") → tier key.
|
|
* 매칭 안 되면 null 반환 (Music 팩 외 의뢰).
|
|
*
|
|
* NOTE: service 문자열은 U+00B7 MIDDLE DOT (·) 사용.
|
|
*/
|
|
export function extractPackTier(service: string): PackTier | null {
|
|
if (!service.startsWith('구매 신청:')) return null;
|
|
const dotIdx = service.lastIndexOf('·');
|
|
if (dotIdx === -1) return null;
|
|
const tierName = service.slice(dotIdx + 1).trim();
|
|
return LABEL_TO_TIER[tierName] ?? null;
|
|
}
|