Newer
Older
supabase-sample / src / app / api / sample / route.ts
Shinya Tomozumi on 28 May 3 KB First Commit
// src/app/api/sample/route.ts
import { NextResponse } from 'next/server';
import { createClient } from '@supabase/supabase-js'; // Supabaseクライアントをインポート

// Supabaseクライアントの初期化
// Route Handlerはサーバーサイドで実行されるため、
// 環境変数は NEXT_PUBLIC_ プレフィックスなしでもアクセス可能ですが、
// クライアントサイドでも共有する場合は NEXT_PUBLIC_ を付けます。
// 本番環境では、より安全な SUPABASE_SERVICE_ROLE_KEY の使用を検討してください。
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL;
const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY;

// 環境変数が設定されているか確認 (必須)
if (!supabaseUrl || !supabaseAnonKey) {
  // エラーをスローするか、適切なエラーレスポンスを返す
  throw new Error('Supabase URL or Anon Key is missing in environment variables.');
}

// サーバーサイド用のSupabaseクライアントを作成
// auth: { persistSession: false } は、セッションを永続化しない設定で、
// API Routeなどステートレスなサーバーサイド処理に適しています。
const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    persistSession: false,
  },
});


export async function GET(request: Request) {
  try {
    console.log('API Route accessed at:', new Date().toISOString());

    // --- ここからSupabaseへの接続とデータ取得の処理 ---

    // 例: 'users' テーブルからすべての行を取得
    const { data, error } = await supabase
      .from('users') // あなたのテーブル名に置き換えてください
      .select('*'); // すべてのカラムを選択

    if (error) {
      // Supabaseからのエラーがあれば、ここでキャッチ
      console.error('Supabase query error:', error);
      return NextResponse.json(
        { message: 'Failed to fetch data from Supabase', status: 'error', details: error.message },
        { status: 500 }
      );
    }

    // データが正常に取得できた場合
    console.log('Data from Supabase:', data);

    // 成功レスポンスとしてデータを返す
    return NextResponse.json({
      message: 'Data fetched successfully from Supabase',
      status: 'success',
      data: data, // 取得したデータをレスポンスに含める
    });

  } catch (error) {
    console.error('Unexpected error in API Route:', error);
    return NextResponse.json(
      { message: 'An unexpected error occurred', status: 'error', error: (error as Error).message },
      { status: 500 }
    );
  }
}

// 注意: この関数はここでは使用しません。
// クライアントサイドでのみ使用されるSupabaseClientは、
// 別のファイル (例: `lib/supabase/client.ts`) で作成することを推奨します。
// function performDatabaseCleanup() {
//   // この関数は Supabase に直接接続しないため、ここでは不要です。
//   // 実際のデータベースクリーンアップは Supabase クライアントを使って行います。
//   return new Promise(resolve => {
//     setTimeout(() => {
//       resolve('Database records purged.');
//     }, 2000);
//   });
// }