결제 · 구독 커리큘럼으로

기술 문서 (프로토타입 버전)

Subscriptions 수정

저장소의 docs/fix-subscriptions-table.md 와 동일한 원문입니다. 아래에서 Markdown과 HTML 변환 결과를 각각 복사할 수 있습니다.

공개 문서 원문 (Markdown)

# subscriptions 테이블 즉시 복구 가이드

로그인 후 대시보드에서 아래 오류가 보이면 이 문서대로 진행합니다.

- `Could not find the table 'public.subscriptions' in the schema cache`

---

## 1) Supabase SQL Editor에서 실행

프로젝트: `nuqjwsxdscxyhbrsmiqd`

아래 SQL을 그대로 실행하세요.

```sql
CREATE TABLE IF NOT EXISTS public.subscriptions (
  user_id uuid PRIMARY KEY REFERENCES public.users (id) ON DELETE CASCADE,
  polar_subscription_id text UNIQUE,
  polar_customer_id text,
  plan text NOT NULL DEFAULT 'free',
  status text NOT NULL DEFAULT 'inactive',
  current_period_end timestamptz,
  metadata jsonb DEFAULT '{}'::jsonb,
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_subscriptions_polar_subscription
  ON public.subscriptions (polar_subscription_id);

ALTER TABLE public.subscriptions ENABLE ROW LEVEL SECURITY;

DROP POLICY IF EXISTS "Users can read own subscription" ON public.subscriptions;

CREATE POLICY "Users can read own subscription"
  ON public.subscriptions
  FOR SELECT
  TO authenticated
  USING (auth.uid() = user_id);
```

---

## 2) 실행 후 검증

1. 앱 새로고침 (`/dashboard`)
2. 구독 카드에서 에러 문구가 사라졌는지 확인
3. `plan/status`가 기본값(`free/none` 또는 `free/inactive`)으로 표시되는지 확인

---

## 3) 참고

- 원본 마이그레이션 파일: `supabase/migrations/005_subscriptions.sql`
- 앱은 현재 테이블 누락 시에도 `free/none`으로 폴백하도록 완화되어 있음

공개 문서 변환 코드 (HTML)

<h1>subscriptions 테이블 즉시 복구 가이드</h1>
<p>로그인 후 대시보드에서 아래 오류가 보이면 이 문서대로 진행합니다.</p>
<ul>
<li><code>Could not find the table &#39;public.subscriptions&#39; in the schema cache</code></li>
</ul>
<hr>
<h2>1) Supabase SQL Editor에서 실행</h2>
<p>프로젝트: <code>nuqjwsxdscxyhbrsmiqd</code></p>
<p>아래 SQL을 그대로 실행하세요.</p>
<pre><code class="language-sql">CREATE TABLE IF NOT EXISTS public.subscriptions (
  user_id uuid PRIMARY KEY REFERENCES public.users (id) ON DELETE CASCADE,
  polar_subscription_id text UNIQUE,
  polar_customer_id text,
  plan text NOT NULL DEFAULT &#39;free&#39;,
  status text NOT NULL DEFAULT &#39;inactive&#39;,
  current_period_end timestamptz,
  metadata jsonb DEFAULT &#39;{}&#39;::jsonb,
  created_at timestamptz DEFAULT now(),
  updated_at timestamptz DEFAULT now()
);

CREATE INDEX IF NOT EXISTS idx_subscriptions_polar_subscription
  ON public.subscriptions (polar_subscription_id);

ALTER TABLE public.subscriptions ENABLE ROW LEVEL SECURITY;

DROP POLICY IF EXISTS &quot;Users can read own subscription&quot; ON public.subscriptions;

CREATE POLICY &quot;Users can read own subscription&quot;
  ON public.subscriptions
  FOR SELECT
  TO authenticated
  USING (auth.uid() = user_id);
</code></pre>
<hr>
<h2>2) 실행 후 검증</h2>
<ol>
<li>앱 새로고침 (<code>/dashboard</code>)</li>
<li>구독 카드에서 에러 문구가 사라졌는지 확인</li>
<li><code>plan/status</code>가 기본값(<code>free/none</code> 또는 <code>free/inactive</code>)으로 표시되는지 확인</li>
</ol>
<hr>
<h2>3) 참고</h2>
<ul>
<li>원본 마이그레이션 파일: <code>supabase/migrations/005_subscriptions.sql</code></li>
<li>앱은 현재 테이블 누락 시에도 <code>free/none</code>으로 폴백하도록 완화되어 있음</li>
</ul>