'use client'; import { useEffect, useState } from 'react'; import { createBrowserClient } from '@supabase/ssr' import Link from 'next/link'; import { useRouter } from 'next/navigation'; import TokenPurchaseModal from '@/components/TokenPurchaseModal'; import { ensureProfile } from '@/lib/ensure-profile'; export default function MyPage() { const [user, setUser] = useState(null); const [records, setRecords] = useState([]); const [loading, setLoading] = useState(true); const [credits, setCredits] = useState(0); const [showTokenModal, setShowTokenModal] = useState(false); const router = useRouter(); const supabase = createBrowserClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! ); useEffect(() => { async function getUserData() { const { data: { user } } = await supabase.auth.getUser(); if (!user) { router.push('/login'); return; } setUser(user); // Fetch credits (프로필 없으면 자동 생성) const currentCredits = await ensureProfile(supabase, user); setCredits(currentCredits); // Fetch records const { data, error } = await supabase .from('saju_records') .select('*') .eq('user_id', user.id) // Ensure only fetching user's records .order('created_at', { ascending: false }); if (error) { console.error('Error fetching records:', error.message, error.details, error.hint); alert('기록을 불러오는 중 오류가 발생했습니다: ' + error.message); } else { setRecords(data || []); } setLoading(false); } getUserData(); }, [router]); if (loading) return (
); return (
{/* Navigation */}

내 사주 보관함

+ 새 사주 보기
{user.email[0].toUpperCase()}

{user.email}

회원 보유 토큰: {credits}개

저장된 기록 ({records.length})

{records.length === 0 ? (
📭

아직 저장된 사주 기록이 없습니다.

나의 운세를 확인하고 평생 소장해보세요!

지금 무료로 사주 보기
) : (
{records.map((record) => (
{new Date(record.created_at).toLocaleDateString()}

{record.saju_data.birthDate.year}년 {record.saju_data.birthDate.month}월 {record.saju_data.birthDate.day}일생

🔮
{record.interpretation ? record.interpretation.replace(/[#*]/g, '').substring(0, 100) + '...' : '해석 내용 없음'}
다시 보기
))}
)}
setShowTokenModal(false)} onPurchaseComplete={async () => { setShowTokenModal(false); if (user) { const { data: profile } = await supabase .from('profiles') .select('credits') .eq('id', user.id) .single(); if (profile) setCredits(profile.credits || 0); } }} user={user} supabase={supabase} />
); }