#!/usr/bin/env tsx // Test script to verify that Media can be shared across multiple albums import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() async function testMediaSharing() { console.log('Testing Media sharing across albums...\n') try { // 1. Create a test media item console.log('1. Creating test media item...') const media = await prisma.media.create({ data: { filename: 'test-shared-image.jpg', originalName: 'Test Shared Image', mimeType: 'image/jpeg', size: 1024000, url: 'https://example.com/test-shared-image.jpg', thumbnailUrl: 'https://example.com/test-shared-image-thumb.jpg', width: 1920, height: 1080, altText: 'A test image that will be shared across albums', description: 'This is a test image to verify media sharing', isPhotography: true } }) console.log(`✓ Created media with ID: ${media.id}\n`) // 2. Create two test albums console.log('2. Creating test albums...') const album1 = await prisma.album.create({ data: { slug: 'test-album-1', title: 'Test Album 1', description: 'First test album for media sharing', status: 'published' } }) console.log(`✓ Created album 1 with ID: ${album1.id}`) const album2 = await prisma.album.create({ data: { slug: 'test-album-2', title: 'Test Album 2', description: 'Second test album for media sharing', status: 'published' } }) console.log(`✓ Created album 2 with ID: ${album2.id}\n`) // 3. Add the same media to both albums console.log('3. Adding media to both albums...') const photo1 = await prisma.photo.create({ data: { albumId: album1.id, mediaId: media.id, filename: media.filename, url: media.url, thumbnailUrl: media.thumbnailUrl, width: media.width, height: media.height, caption: 'Same media in album 1', displayOrder: 1, status: 'published', showInPhotos: true } }) console.log(`✓ Added photo to album 1 with ID: ${photo1.id}`) const photo2 = await prisma.photo.create({ data: { albumId: album2.id, mediaId: media.id, filename: media.filename, url: media.url, thumbnailUrl: media.thumbnailUrl, width: media.width, height: media.height, caption: 'Same media in album 2', displayOrder: 1, status: 'published', showInPhotos: true } }) console.log(`✓ Added photo to album 2 with ID: ${photo2.id}\n`) // 4. Create media usage records console.log('4. Creating media usage records...') await prisma.mediaUsage.createMany({ data: [ { mediaId: media.id, contentType: 'album', contentId: album1.id, fieldName: 'photos' }, { mediaId: media.id, contentType: 'album', contentId: album2.id, fieldName: 'photos' } ] }) console.log('✓ Created media usage records\n') // 5. Verify the media is in both albums console.log('5. Verifying media is in both albums...') const verifyAlbum1 = await prisma.album.findUnique({ where: { id: album1.id }, include: { photos: { include: { media: true } } } }) const verifyAlbum2 = await prisma.album.findUnique({ where: { id: album2.id }, include: { photos: { include: { media: true } } } }) console.log(`✓ Album 1 has ${verifyAlbum1?.photos.length} photo(s)`) console.log(` - Photo mediaId: ${verifyAlbum1?.photos[0]?.mediaId}`) console.log(` - Media filename: ${verifyAlbum1?.photos[0]?.media?.filename}`) console.log(`✓ Album 2 has ${verifyAlbum2?.photos.length} photo(s)`) console.log(` - Photo mediaId: ${verifyAlbum2?.photos[0]?.mediaId}`) console.log(` - Media filename: ${verifyAlbum2?.photos[0]?.media?.filename}\n`) // 6. Check media usage console.log('6. Checking media usage records...') const mediaUsage = await prisma.mediaUsage.findMany({ where: { mediaId: media.id } }) console.log(`✓ Media is used in ${mediaUsage.length} places:`) mediaUsage.forEach((usage) => { console.log(` - ${usage.contentType} ID ${usage.contentId} (${usage.fieldName})`) }) // 7. Verify media can be queried with all its photos console.log('\n7. Querying media with all photos...') const mediaWithPhotos = await prisma.media.findUnique({ where: { id: media.id }, include: { photos: { include: { album: true } } } }) console.log(`✓ Media is in ${mediaWithPhotos?.photos.length} photos:`) mediaWithPhotos?.photos.forEach((photo) => { console.log(` - Photo ID ${photo.id} in album "${photo.album?.title}"`) }) console.log('\n✅ SUCCESS: Media can be shared across multiple albums!') // Cleanup console.log('\n8. Cleaning up test data...') await prisma.mediaUsage.deleteMany({ where: { mediaId: media.id } }) await prisma.photo.deleteMany({ where: { mediaId: media.id } }) await prisma.album.deleteMany({ where: { id: { in: [album1.id, album2.id] } } }) await prisma.media.delete({ where: { id: media.id } }) console.log('✓ Test data cleaned up') } catch (error) { console.error('\n❌ ERROR:', error) process.exit(1) } finally { await prisma.$disconnect() } } // Run the test testMediaSharing()