first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:14:08 +03:00
commit b2825e1698
41 changed files with 14258 additions and 0 deletions

107
app/profile/page.tsx Normal file
View File

@@ -0,0 +1,107 @@
"use client";
import React, { useEffect, useState } from "react";
import { useSession } from "next-auth/react";
import Link from "next/link";
import { getCookieSession, type AuthUser } from "@/lib/auth-api";
export default function ProfilePage() {
const { data: session, status } = useSession();
const [cookieUser, setCookieUser] = useState<AuthUser | null | undefined>(undefined);
useEffect(() => {
getCookieSession().then((s) =>
setCookieUser(s.loggedIn && s.user ? s.user : null)
);
}, []);
const loading = status === "loading" || cookieUser === undefined;
if (loading) {
return (
<div className="container mx-auto flex min-h-[60vh] items-center justify-center px-4">
<p className="text-neutral-500">Yükleniyor...</p>
</div>
);
}
if (session?.user) {
const u = session.user;
return (
<div className="container mx-auto max-w-lg px-4 py-12">
<h1 className="text-2xl font-bold text-neutral-900 dark:text-white">
Profil
</h1>
<div className="mt-6 rounded-xl border border-neutral-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-900">
<p className="text-sm text-neutral-500 dark:text-neutral-400">
{u.email ?? u.name ?? "Oturum açıldı"}
</p>
{u.name && (
<p className="mt-1 font-medium text-neutral-900 dark:text-white">
{u.name}
</p>
)}
</div>
<p className="mt-4 text-sm text-neutral-500 dark:text-neutral-400">
<Link href="/" className="text-blue-600 hover:underline dark:text-blue-400">
Ana sayfaya dön
</Link>
</p>
</div>
);
}
if (cookieUser) {
const u = cookieUser;
return (
<div className="container mx-auto max-w-lg px-4 py-12">
<h1 className="text-2xl font-bold text-neutral-900 dark:text-white">
Profil
</h1>
<div className="mt-6 rounded-xl border border-neutral-200 bg-white p-6 dark:border-neutral-800 dark:bg-neutral-900">
<p className="text-sm text-neutral-500 dark:text-neutral-400">
{u.email}
</p>
<p className="mt-1 font-medium text-neutral-900 dark:text-white">
{u.first_name} {u.last_name}
</p>
{u.username && (
<p className="mt-1 text-sm text-neutral-600 dark:text-neutral-400">
@{u.username}
</p>
)}
</div>
<p className="mt-4 text-sm text-neutral-500 dark:text-neutral-400">
<Link href="/" className="text-blue-600 hover:underline dark:text-blue-400">
Ana sayfaya dön
</Link>
</p>
</div>
);
}
return (
<div className="container mx-auto max-w-lg px-4 py-12">
<h1 className="text-2xl font-bold text-neutral-900 dark:text-white">
Profil
</h1>
<p className="mt-4 text-neutral-600 dark:text-neutral-400">
Bu sayfayı görmek için giriş yapmalısınız.
</p>
<div className="mt-4 flex gap-3">
<Link
href="/auth/login"
className="text-sm font-medium text-blue-600 hover:underline dark:text-blue-400"
>
Giriş yap
</Link>
<Link
href="/auth/register"
className="text-sm font-medium text-blue-600 hover:underline dark:text-blue-400"
>
Kayıt ol
</Link>
</div>
</div>
);
}