managarten/apps-archived/uload/scripts/migrate-links.js
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

80 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
// Migration script to convert use_username links to username-prefixed short_codes
// Run this script to update existing links in the database
import PocketBase from 'pocketbase';
const pb = new PocketBase('http://localhost:8090');
async function migrate() {
try {
console.log('Starting migration...');
console.log('This script will update links with use_username=true to use the new format');
// Get all links with use_username=true
const links = await pb.collection('links').getFullList({
filter: 'use_username = true',
expand: 'user_id',
});
console.log(`Found ${links.length} links to migrate`);
let successCount = 0;
let errorCount = 0;
let skippedCount = 0;
for (const link of links) {
try {
// Get the username from the expanded user
const username = link.expand?.user_id?.username;
if (!username) {
console.error(`No username found for link ${link.id} (user: ${link.user_id})`);
errorCount++;
continue;
}
// Check if already migrated (contains slash)
if (link.short_code.includes('/')) {
console.log(`Link ${link.id} already migrated: ${link.short_code}`);
skippedCount++;
continue;
}
// Create new short_code with username prefix
const newShortCode = `${username}/${link.short_code}`;
console.log(`Updating link ${link.id}: ${link.short_code} -> ${newShortCode}`);
// Update the link
await pb.collection('links').update(link.id, {
short_code: newShortCode,
});
successCount++;
} catch (error) {
console.error(`Error migrating link ${link.id}:`, error.message);
errorCount++;
}
}
console.log('\n=== Migration Summary ===');
console.log(`✅ Successfully migrated: ${successCount} links`);
console.log(`⏭️ Skipped (already migrated): ${skippedCount} links`);
console.log(`❌ Errors: ${errorCount} links`);
if (successCount > 0) {
console.log(
'\n⚠ Important: The use_username field should be removed from the collection schema'
);
console.log('You can do this manually in PocketBase Admin UI');
}
} catch (error) {
console.error('Migration failed:', error);
process.exit(1);
}
}
// Run migration
migrate();