6c82958c79
- Implement React frontend with TypeScript and Tailwind CSS - Add scrappbook.de-inspired UI design with photo galleries - Implement authentication, photo viewing, and download features - Add Docker Swarm configuration with Traefik reverse proxy - Set up Drone CI/CD pipeline for automated deployments - Add monitoring stack with Prometheus and Grafana - Create comprehensive deployment documentation - Add simple local development setup with docker-compose.local.yml Features: - Password-protected galleries with expiration warnings - Responsive photo grid with lightbox viewer - Bulk download functionality - Hot reload development environment - Email testing with Mailhog - Production-ready deployment scripts 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
const bcrypt = require('bcrypt');
|
|
const { db, initializeDatabase } = require('../src/database/db');
|
|
|
|
async function runMigrations() {
|
|
console.log('Running database migrations...');
|
|
|
|
try {
|
|
// Initialize tables
|
|
await initializeDatabase();
|
|
|
|
// Create default admin user if none exists
|
|
const adminExists = await db('admin_users').first();
|
|
if (!adminExists) {
|
|
const defaultPassword = 'admin123'; // Change this!
|
|
const passwordHash = await bcrypt.hash(defaultPassword, 10);
|
|
|
|
await db('admin_users').insert({
|
|
username: 'admin',
|
|
email: 'admin@example.com',
|
|
password_hash: passwordHash
|
|
});
|
|
|
|
console.log('Default admin user created:');
|
|
console.log('Username: admin');
|
|
console.log('Password: admin123');
|
|
console.log('⚠️ Please change this password immediately!');
|
|
}
|
|
|
|
console.log('Migrations completed successfully');
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('Migration failed:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
runMigrations();
|