feat: 프로젝트 진행 현황 추적 시스템 구축 + 마케팅 카피 강화
[DB] - supabase/migrations/002_project_milestones.sql 추가 quotes.user_id 컬럼 + project_milestones 테이블 생성 SQL [API] - GET /api/projects — 로그인 사용자의 프로젝트+마일스톤 조회 - POST /api/projects/link — 견적서 토큰으로 계정에 프로젝트 연결 - GET/POST /api/admin/milestones — 관리자 마일스톤 목록/기본 7단계 초기화 - PATCH/DELETE /api/admin/milestones/[id] — 관리자 단계별 상태·메모 업데이트 [UI — 마이페이지] - '프로젝트 현황' 탭 신규 추가 (Tab type 확장) - 진행률 바, 단계별 타임라인, 개발자 메모 표시 - 견적서 코드 입력 → 계정 연결 폼 [UI — 관리자 견적서 편집] - '진행 단계' 탭 추가: 기본 7단계 초기화, 단계별 status/메모 편집 [마케팅 카피] - page.tsx PROMISES 4번째 추가: "진행 현황 마이페이지 실시간 확인" - freelance 보증 카드 5번째 추가: 실시간 진행 현황 (그리드 2×5) - services/website trust badge 5번째 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
53
supabase/migrations/002_project_milestones.sql
Normal file
53
supabase/migrations/002_project_milestones.sql
Normal file
@@ -0,0 +1,53 @@
|
||||
-- ============================================================
|
||||
-- 프로젝트 진행 단계 관리 시스템
|
||||
-- Supabase Dashboard > SQL Editor 에서 실행하세요
|
||||
-- ============================================================
|
||||
|
||||
-- 1. quotes 테이블에 user_id 컬럼 추가
|
||||
ALTER TABLE quotes
|
||||
ADD COLUMN IF NOT EXISTS user_id uuid REFERENCES auth.users(id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_quotes_user_id ON quotes(user_id);
|
||||
|
||||
-- 2. project_milestones 테이블 생성
|
||||
CREATE TABLE IF NOT EXISTS project_milestones (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
quote_id uuid NOT NULL REFERENCES quotes(id) ON DELETE CASCADE,
|
||||
step_number int NOT NULL DEFAULT 1,
|
||||
title text NOT NULL,
|
||||
description text NOT NULL DEFAULT '',
|
||||
status text NOT NULL DEFAULT 'pending'
|
||||
CHECK (status IN ('pending', 'in_progress', 'completed')),
|
||||
note text NOT NULL DEFAULT '',
|
||||
completed_at timestamptz,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_project_milestones_quote_id
|
||||
ON project_milestones(quote_id);
|
||||
|
||||
-- 3. RLS
|
||||
ALTER TABLE project_milestones ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 로그인 사용자는 자신의 quotes에 연결된 milestones 조회 가능
|
||||
CREATE POLICY "Users view own project milestones"
|
||||
ON project_milestones FOR SELECT TO authenticated
|
||||
USING (
|
||||
quote_id IN (SELECT id FROM quotes WHERE user_id = auth.uid())
|
||||
);
|
||||
|
||||
-- quotes: 사용자가 자신에게 연결된 견적서 조회 가능
|
||||
-- (기존 RLS 없는 경우에만 실행)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_policies
|
||||
WHERE tablename = 'quotes' AND policyname = 'Users view own quotes'
|
||||
) THEN
|
||||
ALTER TABLE quotes ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY "Users view own quotes"
|
||||
ON quotes FOR SELECT TO authenticated
|
||||
USING (user_id = auth.uid());
|
||||
END IF;
|
||||
END $$;
|
||||
Reference in New Issue
Block a user