mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-31 19:59:31 -05:00
fix(entity): use TIMESTAMPTZ in Postgres and sort issue comments oldest-first (#1654)
* 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>
This commit is contained in:
@@ -3,10 +3,10 @@ import dataSource from '@server/datasource';
|
|||||||
import Media from '@server/entity/Media';
|
import Media from '@server/entity/Media';
|
||||||
import { User } from '@server/entity/User';
|
import { User } from '@server/entity/User';
|
||||||
import type { BlacklistItem } from '@server/interfaces/api/blacklistInterfaces';
|
import type { BlacklistItem } from '@server/interfaces/api/blacklistInterfaces';
|
||||||
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
import type { EntityManager } from 'typeorm';
|
import type { EntityManager } from 'typeorm';
|
||||||
import {
|
import {
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
Index,
|
Index,
|
||||||
JoinColumn,
|
JoinColumn,
|
||||||
@@ -47,7 +47,7 @@ export class Blacklist implements BlacklistItem {
|
|||||||
@Column({ nullable: true, type: 'varchar' })
|
@Column({ nullable: true, type: 'varchar' })
|
||||||
public blacklistedTags?: string;
|
public blacklistedTags?: string;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<Blacklist>) {
|
constructor(init?: Partial<Blacklist>) {
|
||||||
|
|||||||
@@ -2,13 +2,8 @@ import type { DiscoverSliderType } from '@server/constants/discover';
|
|||||||
import { defaultSliders } from '@server/constants/discover';
|
import { defaultSliders } from '@server/constants/discover';
|
||||||
import { getRepository } from '@server/datasource';
|
import { getRepository } from '@server/datasource';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
class DiscoverSlider {
|
class DiscoverSlider {
|
||||||
@@ -55,10 +50,14 @@ class DiscoverSlider {
|
|||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
public data?: string;
|
public data?: string;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<DiscoverSlider>) {
|
constructor(init?: Partial<DiscoverSlider>) {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import type { IssueType } from '@server/constants/issue';
|
import type { IssueType } from '@server/constants/issue';
|
||||||
import { IssueStatus } from '@server/constants/issue';
|
import { IssueStatus } from '@server/constants/issue';
|
||||||
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
import {
|
import {
|
||||||
|
AfterLoad,
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import IssueComment from './IssueComment';
|
import IssueComment from './IssueComment';
|
||||||
import Media from './Media';
|
import Media from './Media';
|
||||||
@@ -55,12 +55,21 @@ class Issue {
|
|||||||
})
|
})
|
||||||
public comments: IssueComment[];
|
public comments: IssueComment[];
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
|
@AfterLoad()
|
||||||
|
sortComments() {
|
||||||
|
this.comments?.sort((a, b) => a.id - b.id);
|
||||||
|
}
|
||||||
|
|
||||||
constructor(init?: Partial<Issue>) {
|
constructor(init?: Partial<Issue>) {
|
||||||
Object.assign(this, init);
|
Object.assign(this, init);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
ManyToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
import Issue from './Issue';
|
import Issue from './Issue';
|
||||||
import { User } from './User';
|
import { User } from './User';
|
||||||
|
|
||||||
@@ -28,10 +22,14 @@ class IssueComment {
|
|||||||
@Column({ type: 'text' })
|
@Column({ type: 'text' })
|
||||||
public message: string;
|
public message: string;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<IssueComment>) {
|
constructor(init?: Partial<IssueComment>) {
|
||||||
|
|||||||
@@ -15,13 +15,11 @@ import { getHostname } from '@server/utils/getHostname';
|
|||||||
import {
|
import {
|
||||||
AfterLoad,
|
AfterLoad,
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
Index,
|
Index,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
OneToOne,
|
OneToOne,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import Issue from './Issue';
|
import Issue from './Issue';
|
||||||
import { MediaRequest } from './MediaRequest';
|
import { MediaRequest } from './MediaRequest';
|
||||||
@@ -128,10 +126,14 @@ class Media {
|
|||||||
@OneToOne(() => Blacklist, (blacklist) => blacklist.media)
|
@OneToOne(() => Blacklist, (blacklist) => blacklist.media)
|
||||||
public blacklist: Promise<Blacklist>;
|
public blacklist: Promise<Blacklist>;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -13,18 +13,17 @@ import notificationManager, { Notification } from '@server/lib/notifications';
|
|||||||
import { Permission } from '@server/lib/permissions';
|
import { Permission } from '@server/lib/permissions';
|
||||||
import { getSettings } from '@server/lib/settings';
|
import { getSettings } from '@server/lib/settings';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
import { truncate } from 'lodash';
|
import { truncate } from 'lodash';
|
||||||
import {
|
import {
|
||||||
AfterInsert,
|
AfterInsert,
|
||||||
AfterUpdate,
|
AfterUpdate,
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
RelationCount,
|
RelationCount,
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import Media from './Media';
|
import Media from './Media';
|
||||||
import SeasonRequest from './SeasonRequest';
|
import SeasonRequest from './SeasonRequest';
|
||||||
@@ -535,10 +534,14 @@ export class MediaRequest {
|
|||||||
})
|
})
|
||||||
public modifiedBy?: User;
|
public modifiedBy?: User;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
@Column({ type: 'varchar' })
|
@Column({ type: 'varchar' })
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
class OverrideRule {
|
class OverrideRule {
|
||||||
@@ -38,10 +33,14 @@ class OverrideRule {
|
|||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
public tags?: string;
|
public tags?: string;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<OverrideRule>) {
|
constructor(init?: Partial<OverrideRule>) {
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
import { MediaStatus } from '@server/constants/media';
|
import { MediaStatus } from '@server/constants/media';
|
||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
ManyToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
import Media from './Media';
|
import Media from './Media';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@@ -28,10 +22,14 @@ class Season {
|
|||||||
})
|
})
|
||||||
public media: Promise<Media>;
|
public media: Promise<Media>;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<Season>) {
|
constructor(init?: Partial<Season>) {
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
import { MediaRequestStatus } from '@server/constants/media';
|
import { MediaRequestStatus } from '@server/constants/media';
|
||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
ManyToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
import { MediaRequest } from './MediaRequest';
|
import { MediaRequest } from './MediaRequest';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@@ -25,10 +19,14 @@ class SeasonRequest {
|
|||||||
})
|
})
|
||||||
public request: MediaRequest;
|
public request: MediaRequest;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<SeasonRequest>) {
|
constructor(init?: Partial<SeasonRequest>) {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { hasPermission, Permission } from '@server/lib/permissions';
|
|||||||
import { getSettings } from '@server/lib/settings';
|
import { getSettings } from '@server/lib/settings';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
import { AfterDate } from '@server/utils/dateHelpers';
|
import { AfterDate } from '@server/utils/dateHelpers';
|
||||||
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
import bcrypt from 'bcrypt';
|
import bcrypt from 'bcrypt';
|
||||||
import { randomUUID } from 'crypto';
|
import { randomUUID } from 'crypto';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
@@ -16,14 +17,12 @@ import { default as generatePassword } from 'secure-random-password';
|
|||||||
import {
|
import {
|
||||||
AfterLoad,
|
AfterLoad,
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
Not,
|
Not,
|
||||||
OneToMany,
|
OneToMany,
|
||||||
OneToOne,
|
OneToOne,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
RelationCount,
|
RelationCount,
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import Issue from './Issue';
|
import Issue from './Issue';
|
||||||
import { MediaRequest } from './MediaRequest';
|
import { MediaRequest } from './MediaRequest';
|
||||||
@@ -138,10 +137,14 @@ export class User {
|
|||||||
@OneToMany(() => Issue, (issue) => issue.createdBy, { cascade: true })
|
@OneToMany(() => Issue, (issue) => issue.createdBy, { cascade: true })
|
||||||
public createdIssues: Issue[];
|
public createdIssues: Issue[];
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
public warnings: string[] = [];
|
public warnings: string[] = [];
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
import {
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
Column,
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
|
||||||
ManyToOne,
|
|
||||||
PrimaryGeneratedColumn,
|
|
||||||
} from 'typeorm';
|
|
||||||
import { User } from './User';
|
import { User } from './User';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@@ -30,7 +25,11 @@ export class UserPushSubscription {
|
|||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
public userAgent: string;
|
public userAgent: string;
|
||||||
|
|
||||||
@CreateDateColumn({ nullable: true })
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
nullable: true,
|
||||||
|
})
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<UserPushSubscription>) {
|
constructor(init?: Partial<UserPushSubscription>) {
|
||||||
|
|||||||
@@ -5,15 +5,14 @@ import Media from '@server/entity/Media';
|
|||||||
import { User } from '@server/entity/User';
|
import { User } from '@server/entity/User';
|
||||||
import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces';
|
import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces';
|
||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
|
import { DbAwareColumn } from '@server/utils/DbColumnHelper';
|
||||||
import {
|
import {
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
|
||||||
Entity,
|
Entity,
|
||||||
Index,
|
Index,
|
||||||
ManyToOne,
|
ManyToOne,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
Unique,
|
Unique,
|
||||||
UpdateDateColumn,
|
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
import type { ZodNumber, ZodOptional, ZodString } from 'zod';
|
import type { ZodNumber, ZodOptional, ZodString } from 'zod';
|
||||||
|
|
||||||
@@ -56,10 +55,14 @@ export class Watchlist implements WatchlistItem {
|
|||||||
})
|
})
|
||||||
public media: Media;
|
public media: Media;
|
||||||
|
|
||||||
@CreateDateColumn()
|
@DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
|
||||||
public createdAt: Date;
|
public createdAt: Date;
|
||||||
|
|
||||||
@UpdateDateColumn()
|
@DbAwareColumn({
|
||||||
|
type: 'datetime',
|
||||||
|
default: () => 'CURRENT_TIMESTAMP',
|
||||||
|
onUpdate: 'CURRENT_TIMESTAMP',
|
||||||
|
})
|
||||||
public updatedAt: Date;
|
public updatedAt: Date;
|
||||||
|
|
||||||
constructor(init?: Partial<Watchlist>) {
|
constructor(init?: Partial<Watchlist>) {
|
||||||
|
|||||||
231
server/migration/postgres/1746811308203-FixIssueTimestamps.ts
Normal file
231
server/migration/postgres/1746811308203-FixIssueTimestamps.ts
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
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'
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user