86 lines
2.8 KiB
JavaScript
86 lines
2.8 KiB
JavaScript
const cloudinary = require('cloudinary').v2;
|
|
require('dotenv').config({ path: '.env.local' });
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
cloudinary.config({
|
|
cloud_name: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME,
|
|
api_key: process.env.CLOUDINARY_API_KEY,
|
|
api_secret: process.env.CLOUDINARY_API_SECRET
|
|
});
|
|
|
|
const CLOUDINARY_ROOT = 'salhotel';
|
|
|
|
async function uploadFile(filePath, cloudinaryFolder) {
|
|
console.log(`Uploading ${filePath} to ${cloudinaryFolder}...`);
|
|
try {
|
|
const result = await cloudinary.uploader.upload(filePath, {
|
|
folder: `${CLOUDINARY_ROOT}/${cloudinaryFolder}`,
|
|
use_filename: true,
|
|
unique_filename: false,
|
|
overwrite: true
|
|
});
|
|
console.log(`Successfully uploaded: ${result.public_id}`);
|
|
return {
|
|
localPath: filePath,
|
|
url: result.secure_url,
|
|
publicId: result.public_id
|
|
};
|
|
} catch (e) {
|
|
console.error(`Failed to upload ${filePath}:`, e.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async function scanAndUpload(dir, currentCloudinaryPath = '') {
|
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
let results = [];
|
|
|
|
for (const entry of entries) {
|
|
const fullPath = path.join(dir, entry.name);
|
|
|
|
if (entry.isDirectory()) {
|
|
// Normalize folder names for Cloudinary (e.g., konaklama -> rooms)
|
|
let nextCloudinaryPath = currentCloudinaryPath;
|
|
const folderName = entry.name.toLowerCase();
|
|
|
|
if (folderName === 'konaklama') nextCloudinaryPath = ''; // Root konaklama
|
|
else if (folderName === 'odalar') nextCloudinaryPath = 'rooms';
|
|
else if (folderName === 'rezidans') nextCloudinaryPath = 'residence';
|
|
else if (folderName === 'restaurant') nextCloudinaryPath = 'dining';
|
|
else {
|
|
nextCloudinaryPath = currentCloudinaryPath ? `${currentCloudinaryPath}/${folderName}` : folderName;
|
|
}
|
|
|
|
const recursiveResults = await scanAndUpload(fullPath, nextCloudinaryPath);
|
|
results = results.concat(recursiveResults);
|
|
} else {
|
|
const ext = path.extname(entry.name).toLowerCase();
|
|
if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
|
|
const uploadResult = await uploadFile(fullPath, currentCloudinaryPath);
|
|
if (uploadResult) {
|
|
results.push(uploadResult);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return results;
|
|
}
|
|
|
|
async function main() {
|
|
const docsDir = path.join(process.cwd(), 'docs');
|
|
if (!fs.existsSync(docsDir)) {
|
|
console.error('Docs directory not found!');
|
|
return;
|
|
}
|
|
|
|
console.log('--- Starting Resort Photos Upload ---');
|
|
const allUploads = await scanAndUpload(docsDir);
|
|
|
|
fs.writeFileSync('scratch/resort_upload_report.json', JSON.stringify(allUploads, null, 2));
|
|
console.log(`\nUpload completed! ${allUploads.length} images processed.`);
|
|
console.log('Report saved to scratch/resort_upload_report.json');
|
|
}
|
|
|
|
main();
|