mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-24 02:39:18 -05:00
* fix(entity): use TIMESTAMPTZ in Postgres and sort issue comments oldest-first Switch key datetime columns to TIMESTAMPTZ for proper UTC handling (“just now”) and sort issue comments on load so the original description stays first and in proper sorted order in fix-pgsql-timezone fixes #1569, fixes #1568 * refactor(migration): manually rewrite pgsql migration to preserve existing data Typeorm generated migration was dropping the entire column thus leading to data loss so this is an attempt at manually rewriting the migration to preserve the data * refactor(migrations): rename to be consistent with other migration files * fix: use id to order instead of createdAt to avoid non-existant createdAt --------- Co-authored-by: Gauthier <mail@gauthierth.fr>
232 lines
7.8 KiB
TypeScript
232 lines
7.8 KiB
TypeScript
import type { MigrationInterface, QueryRunner } from 'typeorm';
|
|
|
|
export class FixIssueTimestamps1746811308203 implements MigrationInterface {
|
|
name = 'FixIssueTimestamps1746811308203';
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE "watchlist"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "watchlist"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "override_rule"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "override_rule"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season_request"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season_request"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media_request"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media_request"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user_push_subscription"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "blacklist"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue_comment"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue_comment"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "discover_slider"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "discover_slider"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE "discover_slider"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "discover_slider"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue_comment"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue_comment"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "issue"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "blacklist"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "user_push_subscription"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media_request"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "media_request"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season_request"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "season_request"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "override_rule"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "override_rule"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "watchlist"
|
|
ALTER COLUMN "updatedAt" TYPE TIMESTAMP
|
|
USING "updatedAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
await queryRunner.query(`
|
|
ALTER TABLE "watchlist"
|
|
ALTER COLUMN "createdAt" TYPE TIMESTAMP
|
|
USING "createdAt" AT TIME ZONE 'UTC'
|
|
`);
|
|
}
|
|
}
|