/* * This was a one time script to change the composition of the signed urls */ import { db } from '@/src/db/db_index' import { userDetails, productInfo, productTagInfo, complaints } from '@/src/db/schema'; import { eq, not, isNull } from 'drizzle-orm'; const S3_DOMAIN = 'https://s3.sgp.io.cloud.ovh.net'; const cleanImageUrl = (url: string): string => { if (url.startsWith(S3_DOMAIN)) { return url.replace(S3_DOMAIN + '/', ''); } return url; }; const cleanImageUrls = (urls: string[]): string[] => { return urls.map(cleanImageUrl); }; async function migrateUserDetails() { console.log('Migrating userDetails...'); const users = await db.select().from(userDetails).where(not(isNull(userDetails.profileImage))); console.log(`Found ${users.length} user records with profile images`); for (const user of users) { if (user.profileImage) { const cleanedUrl = cleanImageUrl(user.profileImage); await db.update(userDetails) .set({ profileImage: cleanedUrl }) .where(eq(userDetails.id, user.id)); } } console.log('userDetails migration completed'); } async function migrateProductInfo() { console.log('Migrating productInfo...'); const products = await db.select().from(productInfo).where(not(isNull(productInfo.images))); console.log(`Found ${products.length} product records with images`); for (const product of products) { if (product.images && Array.isArray(product.images)) { const cleanedUrls = cleanImageUrls(product.images); await db.update(productInfo) .set({ images: cleanedUrls }) .where(eq(productInfo.id, product.id)); } } console.log('productInfo migration completed'); } async function migrateProductTagInfo() { console.log('Migrating productTagInfo...'); const tags = await db.select().from(productTagInfo).where(not(isNull(productTagInfo.imageUrl))); console.log(`Found ${tags.length} tag records with images`); for (const tag of tags) { if (tag.imageUrl) { const cleanedUrl = cleanImageUrl(tag.imageUrl); await db.update(productTagInfo) .set({ imageUrl: cleanedUrl }) .where(eq(productTagInfo.id, tag.id)); } } console.log('productTagInfo migration completed'); } async function migrateComplaints() { console.log('Migrating complaints...'); const complaintRecords = await db.select().from(complaints).where(not(isNull(complaints.images))); console.log(`Found ${complaintRecords.length} complaint records with images`); for (const complaint of complaintRecords) { if (complaint.images && Array.isArray(complaint.images)) { const cleanedUrls = cleanImageUrls(complaint.images); await db.update(complaints) .set({ images: cleanedUrls }) .where(eq(complaints.id, complaint.id)); } } console.log('complaints migration completed'); } async function runMigration() { console.log('Starting image URL migration...'); console.log(`Removing S3 domain: ${S3_DOMAIN}`); try { await migrateUserDetails(); await migrateProductInfo(); await migrateProductTagInfo(); await migrateComplaints(); console.log('Migration completed successfully!'); } catch (error) { console.error('Migration failed:', error); throw error; } } // Run the migration runMigration() .then(() => { console.log('Process completed successfully'); process.exit(0); }) .catch((error) => { console.error('Process failed:', error); process.exit(1); });