const url = require('url'); function getDatabaseName(databaseUrl) { try { const parsed = new url.URL(databaseUrl); // pathname like "/dbname"; strip leading '/' const dbPath = parsed.pathname || ''; const dbName = dbPath.startsWith('/') ? dbPath.slice(1) : dbPath; return dbName.split('?')[0]; } catch { // Fallback: basic parsing const parts = (databaseUrl || '').split('/'); return (parts[parts.length - 1] || '').split('?')[0]; } } async function setupUtf8mb4(prisma) { const databaseUrl = process.env.DATABASE_URL || ''; // SQLite için bu fonksiyonu atla if (databaseUrl.includes('sqlite') || databaseUrl.includes('.db')) { console.log('ℹ️ SQLite kullanılıyor. UTF8MB4 kurulumu atlandı.'); return; } const dbName = getDatabaseName(databaseUrl); if (!dbName) { console.warn('⚠️ DATABASE_URL bulunamadı veya veritabanı adı çözümlenemedi. UTF8MB4 kurulumu atlandı.'); return; } // Only run for MySQL/MariaDB try { await prisma.$executeRawUnsafe(`ALTER DATABASE \`${dbName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`); console.log('✅ Veritabanı varsayılan karakter seti/collation utf8mb4 olarak ayarlandı.'); } catch (err) { console.warn('⚠️ Veritabanı charset ayarlanırken hata oluştu:', err?.message || err); } try { await prisma.$executeRawUnsafe('ALTER TABLE `categories` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); console.log('✅ `categories` tablosu utf8mb4 olarak dönüştürüldü.'); } catch (err) { console.warn('⚠️ `categories` tablosu dönüştürülürken hata oluştu:', err?.message || err); } } module.exports = { setupUtf8mb4 };