From 824d2cd1eac07b0bc7d9633b6c1ee84941e22c5b Mon Sep 17 00:00:00 2001 From: gahusb Date: Sat, 16 May 2026 05:18:18 +0900 Subject: [PATCH] =?UTF-8?q?feat(survey):=20lib/survey/types=20=E2=80=94=20?= =?UTF-8?q?SurveyStep,=20SurveyResponse,=20SavedProgress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 7 질문 step 정의 + 응답 객체 타입. survey_responses 테이블과 1:1 대응. Co-Authored-By: Claude Opus 4.7 (1M context) --- lib/survey/types.ts | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 lib/survey/types.ts diff --git a/lib/survey/types.ts b/lib/survey/types.ts new file mode 100644 index 0000000..be7c7ea --- /dev/null +++ b/lib/survey/types.ts @@ -0,0 +1,51 @@ +/** + * CONTOUR 설문 타입. + * survey_responses 테이블 스키마와 1:1 대응. + */ + +export type SurveyStep = + | 'intro' + | 'q1' + | 'q2' + | 'q3' + | 'q4' + | 'q5' + | 'q6' + | 'q7' + | 'thanks'; + +export const QUESTION_STEPS: SurveyStep[] = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7']; +export const TOTAL_QUESTIONS = QUESTION_STEPS.length; // 7 + +export interface SurveyResponse { + // Q1 + age_range?: string; + status?: string; + // Q2 + awareness_freq?: string; + // Q3 + tools_used?: string[]; + tools_other?: string; + // Q4 + cost_range?: string; + // Q5 + best_tool?: string; + best_satisfy?: number; + // Q6 + free_opinion?: string; + // Q7 + email?: string; + // 메타 (제출 시 자동 채워짐) + user_agent?: string; + referrer?: string; + utm_source?: string; + utm_medium?: string; + utm_campaign?: string; + completion_seconds?: number; +} + +export interface SavedProgress { + step: SurveyStep; + response: SurveyResponse; + startedAt: number; // ms epoch +}