Files
jaengseung-made/supabase/migrations/002_project_milestones.sql
gahusb 19b09e3b90 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>
2026-04-02 02:49:40 +09:00

54 lines
2.0 KiB
SQL

-- ============================================================
-- 프로젝트 진행 단계 관리 시스템
-- 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 $$;