Files
picpeak/backend/migrations/018_add_created_at_to_email_queue.js
T
paul 6c3e88a588
Test and Lint / backend-test (push) Successful in 1m8s
continuous-integration/drone/push Build is passing
Test and Lint / frontend-test (push) Successful in 2m8s
Version and Release / version-bump (push) Successful in 32s
Version and Release / trigger-drone (push) Successful in 2s
fix: production deployment issues with Traefik and database migrations
- Add missing created_at column to email_queue table
- Fix 502 Bad Gateway errors with proper Traefik routing configuration
- Create docker-compose.traefik.yml for external Traefik deployment
- Fix health check endpoint path for API path stripping
- Add PostgreSQL init script for Umami database creation
- Add comprehensive deployment guide for Traefik setup

The backend now properly handles /api prefix stripping by Traefik and
migrations run safely in production environments with existing schemas.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 08:41:11 +02:00

23 lines
673 B
JavaScript

exports.up = async function(knex) {
// Check if created_at column already exists
const hasCreatedAt = await knex.schema.hasColumn('email_queue', 'created_at');
if (!hasCreatedAt) {
await knex.schema.table('email_queue', (table) => {
table.datetime('created_at').defaultTo(knex.fn.now());
});
// Update existing rows to have a created_at value based on scheduled_at
await knex('email_queue')
.whereNull('created_at')
.update({
created_at: knex.ref('scheduled_at')
});
}
};
exports.down = async function(knex) {
await knex.schema.table('email_queue', (table) => {
table.dropColumn('created_at');
});
};