"use client"; import { useSession, signOut } from "next-auth/react"; import { useState, useEffect, FormEvent } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000/api/v1"; interface UserData { id: number; email: string; first_name: string; last_name: string; is_active: boolean; date_joined: string; } export default function ProfilePage() { const { data: session, status } = useSession(); const router = useRouter(); const [userData, setUserData] = useState(null); const [formData, setFormData] = useState({ first_name: "", last_name: "", }); const [loading, setLoading] = useState(true); const [updating, setUpdating] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(false); useEffect(() => { if (status === "unauthenticated") { router.push("/auth/login"); } }, [status, router]); useEffect(() => { const fetchUserData = async () => { if (!session?.accessToken) return; try { const response = await fetch(`${API_BASE_URL}/auth/users/me/`, { headers: { Authorization: `Bearer ${session.accessToken}`, }, }); if (response.ok) { const data = await response.json(); setUserData(data); setFormData({ first_name: data.first_name || "", last_name: data.last_name || "", }); } else if (response.status === 401) { // Token expired, logout signOut({ callbackUrl: "/auth/login" }); } } catch (err) { console.error("Error fetching user data:", err); setError("Kullanıcı bilgileri yüklenemedi."); } finally { setLoading(false); } }; if (session?.accessToken) { fetchUserData(); } }, [session]); const handleChange = (e: React.ChangeEvent) => { setFormData({ ...formData, [e.target.name]: e.target.value, }); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(""); setSuccess(false); setUpdating(true); if (!session?.accessToken) return; try { const response = await fetch(`${API_BASE_URL}/auth/users/me/`, { method: "PATCH", headers: { "Content-Type": "application/json", Authorization: `Bearer ${session.accessToken}`, }, body: JSON.stringify(formData), }); if (response.ok) { const data = await response.json(); setUserData(data); setSuccess(true); setTimeout(() => setSuccess(false), 3000); } else if (response.status === 401) { signOut({ callbackUrl: "/auth/login" }); } else { const data = await response.json(); setError(data.detail || "Profil güncellenemedi."); } } catch (err) { setError("Bir hata oluştu. Lütfen tekrar deneyin."); console.error("Update profile error:", err); } finally { setUpdating(false); } }; const handleLogout = () => { signOut({ callbackUrl: "/auth/login" }); }; if (status === "loading" || loading) { return (

Yükleniyor...

); } if (!session) { return null; } return (
{/* Header */}

Profil

Hesap bilgilerinizi görüntüleyin ve güncelleyin.

Dashboard
{/* User Info */} {userData && (
Email
{userData.email}
Üyelik Tarihi
{new Date(userData.date_joined).toLocaleDateString("tr-TR", { year: "numeric", month: "long", day: "numeric", })}
Hesap Durumu
{userData.is_active ? "Aktif" : "Pasif"}
)} {/* Update Form */}

Profil Bilgilerini Güncelle

{success && (

Profil bilgileriniz başarıyla güncellendi!

)} {error && (

{error}

)}
{/* Logout Button */}
); }