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
- 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>
23 lines
673 B
JavaScript
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');
|
|
});
|
|
}; |