"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import Swal from "sweetalert2"; interface Image { id: string; originalName: string; url: string; width: number | null; height: number | null; quality: number | null; format: string; fileSize: number; createdAt: string; } export default function UploadPage() { const [file, setFile] = useState(null); const [width, setWidth] = useState(800); const [height, setHeight] = useState(600); const handleFileChange = (e: React.ChangeEvent) => { const selectedFile = e.target.files?.[0]; if (selectedFile) { setFile(selectedFile); // Resmin boyutlarını al const img = new Image(); const objectUrl = URL.createObjectURL(selectedFile); img.onload = () => { setWidth(img.naturalWidth); setHeight(img.naturalHeight); URL.revokeObjectURL(objectUrl); }; img.src = objectUrl; } }; const [quality, setQuality] = useState(90); const [format, setFormat] = useState("avif"); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(""); const [images, setImages] = useState([]); const [isAuthenticated, setIsAuthenticated] = useState(false); const [checkingAuth, setCheckingAuth] = useState(true); const router = useRouter(); useEffect(() => { const checkAuth = async () => { try { const response = await fetch("/api/auth/get-session", { credentials: "include", }); const data = await response.json(); if (!response.ok || !data.user) { router.push("/login"); return; } setIsAuthenticated(true); loadImages(); } catch (error) { console.error("Auth kontrolü başarısız:", error); router.push("/login"); } finally { setCheckingAuth(false); } }; checkAuth(); }, [router]); const loadImages = async () => { try { const response = await fetch("/api/images", { credentials: "include", cache: 'no-store', // Cache'i devre dışı bırak }); if (response.ok) { const data = await response.json(); console.log("Yüklenen resimler:", data.images?.length || 0); setImages(data.images || []); } else { console.error("Resimler yüklenemedi, status:", response.status); } } catch (error) { console.error("Resimler yüklenemedi:", error); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setSuccess(""); if (!file) { setError("Lütfen bir dosya seçin"); return; } setLoading(true); try { const formData = new FormData(); formData.append("file", file); formData.append("width", width.toString()); formData.append("height", height.toString()); formData.append("quality", quality.toString()); formData.append("format", format); const response = await fetch("/api/images/upload", { method: "POST", credentials: "include", body: formData, }); const data = await response.json(); if (!response.ok) { throw new Error(data.message || "Yükleme başarısız"); } // Formu tamamen resetle setSuccess("Resim başarıyla yüklendi!"); setFile(null); const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement; if (fileInput) { fileInput.value = ''; } // Resimleri yeniden yükle await loadImages(); // Success mesajını kısa süre sonra temizle setTimeout(() => setSuccess(""), 3000); } catch (err: any) { setError(err.message || "Bir hata oluştu"); } finally { setLoading(false); } }; const copyToClipboard = (url: string) => { navigator.clipboard.writeText(url); setSuccess("URL kopyalandı!"); setTimeout(() => setSuccess(""), 2000); }; const downloadImage = (url: string, originalName: string) => { const link = document.createElement("a"); link.href = url; link.download = originalName; document.body.appendChild(link); link.click(); document.body.removeChild(link); }; const handleDelete = async (imageId: string, originalName: string) => { const result = await Swal.fire({ title: "Emin misiniz?", text: `${originalName} adlı resmi silmek istediğinize emin misiniz?`, icon: "warning", showCancelButton: true, confirmButtonColor: "#d33", cancelButtonColor: "#3085d6", confirmButtonText: "Evet, Sil!", cancelButtonText: "İptal", }); if (result.isConfirmed) { try { console.log("Silme isteği gönderiliyor, imageId:", imageId); console.log("Image objesi:", images.find(img => img.id === imageId)); const response = await fetch(`/api/images/${encodeURIComponent(imageId)}`, { method: "DELETE", credentials: "include", }); const data = await response.json(); if (!response.ok) { console.error("Silme hatası:", data); throw new Error(data.message || "Silme işlemi başarısız"); } Swal.fire("Silindi!", "Resim başarıyla silindi.", "success"); loadImages(); } catch (error: any) { console.error("Silme hatası:", error); Swal.fire("Hata!", error.message || "Resim silinirken bir hata oluştu.", "error"); } } }; if (checkingAuth) { return (
Yükleniyor...
); } if (!isAuthenticated) { return null; } return (

Resim Yükle ve Manipüle Et

Profil Ana Sayfa
{/* Upload Form */}

Resim Yükle

{error && (
{error}
)} {success && (
{success}
)}
setWidth(parseInt(e.target.value) || 800)} min="1" className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-zinc-800 dark:text-white" />
setHeight(parseInt(e.target.value) || 600)} min="1" className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-zinc-800 dark:text-white" />
setQuality(parseInt(e.target.value) || 90)} min="1" max="100" className="mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-zinc-800 dark:text-white" />
{/* Images List */}

Yüklenen Resimler ({images.length})

{images.length === 0 ? (

Henüz resim yüklenmedi

) : (
{images.map((image) => (
{image.originalName}

{image.originalName}

Boyut: {image.width} × {image.height} px

Format: {image.format.toUpperCase()}

Dosya: {Math.round(image.fileSize / 1024)} KB

{image.quality && (

Kalite: {image.quality}%

)}
))}
)}
); }