Update application features and add scripts (core changes)
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import { config } from 'dotenv'
|
||||
config()
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
async function getPrisma() {
|
||||
const { db } = await import('./lib/db')
|
||||
return db
|
||||
}
|
||||
|
||||
async function uploadToOpeninary(filePath: string, folder: string) {
|
||||
const fileBuffer = fs.readFileSync(filePath)
|
||||
const ext = path.extname(filePath).toLowerCase()
|
||||
let type = 'image/jpeg'
|
||||
if (ext === '.png') type = 'image/png'
|
||||
if (ext === '.webp') type = 'image/webp'
|
||||
|
||||
const blob = new Blob([fileBuffer], { type })
|
||||
const formData = new FormData()
|
||||
|
||||
formData.append('files', blob, path.basename(filePath))
|
||||
formData.append('folder', folder)
|
||||
|
||||
const res = await fetch(`${process.env.OPENINARY_API_URL}/api/upload`, {
|
||||
method: 'POST',
|
||||
headers: { Authorization: `Bearer ${process.env.OPENINARY_API_KEY}` },
|
||||
body: formData,
|
||||
})
|
||||
|
||||
if (!res.ok) {
|
||||
const errorText = await res.text()
|
||||
throw new Error('Upload başarısız: ' + errorText)
|
||||
}
|
||||
|
||||
const data = await res.json()
|
||||
return data.files[0]
|
||||
}
|
||||
|
||||
async function processFolder(prisma: any, roomName: string, folderPath: string, openinaryFolder: string) {
|
||||
console.log(`\n--- İşleniyor: ${roomName} ---`)
|
||||
const room = await prisma.room.findFirst({
|
||||
where: { nameTr: { contains: roomName } }
|
||||
})
|
||||
|
||||
if (!room) {
|
||||
console.error(`Oda bulunamadı: ${roomName}`)
|
||||
return
|
||||
}
|
||||
|
||||
console.log(`Oda bulundu: ${room.nameTr} (ID: ${room.id})`)
|
||||
|
||||
const imagesDir = path.join(__dirname, 'public', folderPath)
|
||||
if (!fs.existsSync(imagesDir)) {
|
||||
console.error(`Klasör bulunamadı: ${imagesDir}`)
|
||||
return
|
||||
}
|
||||
|
||||
const files = fs.readdirSync(imagesDir).filter(f => !f.startsWith('.'))
|
||||
const uploadedUrls: string[] = []
|
||||
|
||||
console.log(`${files.length} resim bulundu. Yükleniyor...`)
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i]
|
||||
console.log(`Yükleniyor: ${file} (${i+1}/${files.length})...`)
|
||||
try {
|
||||
const result = await uploadToOpeninary(path.join(imagesDir, file), openinaryFolder)
|
||||
let finalUrl = result.url
|
||||
if (finalUrl && finalUrl.startsWith('/')) {
|
||||
finalUrl = `${process.env.NEXT_PUBLIC_OPENINARY_URL || 'https://media.ayris.tech'}${finalUrl}`
|
||||
}
|
||||
uploadedUrls.push(finalUrl)
|
||||
console.log(` -> Başarılı: ${finalUrl}`)
|
||||
} catch (err) {
|
||||
console.error(` -> Hata:`, err)
|
||||
}
|
||||
}
|
||||
|
||||
if (uploadedUrls.length > 0) {
|
||||
console.log('Veritabanı güncelleniyor...')
|
||||
await prisma.room.update({
|
||||
where: { id: room.id },
|
||||
data: {
|
||||
imageUrl: uploadedUrls[0],
|
||||
images: uploadedUrls
|
||||
}
|
||||
})
|
||||
console.log(`${roomName} veritabanı güncellendi!`)
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const prisma = await getPrisma()
|
||||
await processFolder(prisma, 'Süit Daire 1', '1+1', 'starapart/SUITE_1_1')
|
||||
await processFolder(prisma, 'Küçük Oda 1 (3 Kişilik)', '1+0', 'starapart/STUDIO_1_0')
|
||||
await prisma.$disconnect()
|
||||
}
|
||||
|
||||
main().catch(console.error)
|
||||
Reference in New Issue
Block a user