// 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);
// });
// }