From 0b8f8728284dfe9feefe09b487f67e38b8defa16 Mon Sep 17 00:00:00 2001 From: fallenbagel <98979876+fallenbagel@users.noreply.github.com> Date: Sun, 5 Apr 2026 21:53:30 +0800 Subject: [PATCH] fix(entities): replace MySQL-only onUpdate with @UpdateDateColumn (#2823) --- server/entity/DiscoverSlider.ts | 15 ++++++++------- server/entity/Issue.ts | 9 +++------ server/entity/IssueComment.ts | 9 +++------ server/entity/Media.ts | 9 +++------ server/entity/MediaRequest.ts | 9 +++------ server/entity/OverrideRule.ts | 15 ++++++++------- server/entity/Season.ts | 9 +++------ server/entity/SeasonRequest.ts | 9 +++------ server/entity/User.ts | 9 +++------ server/entity/Watchlist.ts | 9 +++------ 10 files changed, 40 insertions(+), 62 deletions(-) diff --git a/server/entity/DiscoverSlider.ts b/server/entity/DiscoverSlider.ts index 0de0aef81..f69c6edb3 100644 --- a/server/entity/DiscoverSlider.ts +++ b/server/entity/DiscoverSlider.ts @@ -2,8 +2,13 @@ import type { DiscoverSliderType } from '@server/constants/discover'; import { defaultSliders } from '@server/constants/discover'; import { getRepository } from '@server/datasource'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; +import { + Column, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; @Entity() class DiscoverSlider { @@ -53,11 +58,7 @@ class DiscoverSlider { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Issue.ts b/server/entity/Issue.ts index 547432fa7..a79936671 100644 --- a/server/entity/Issue.ts +++ b/server/entity/Issue.ts @@ -1,6 +1,6 @@ import type { IssueType } from '@server/constants/issue'; import { IssueStatus } from '@server/constants/issue'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { AfterLoad, Column, @@ -9,6 +9,7 @@ import { ManyToOne, OneToMany, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import IssueComment from './IssueComment'; import Media from './Media'; @@ -63,11 +64,7 @@ class Issue { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; @AfterLoad() diff --git a/server/entity/IssueComment.ts b/server/entity/IssueComment.ts index 373007180..428706003 100644 --- a/server/entity/IssueComment.ts +++ b/server/entity/IssueComment.ts @@ -1,10 +1,11 @@ -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { User } from './User'; @@ -33,11 +34,7 @@ class IssueComment { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Media.ts b/server/entity/Media.ts index 3746a6c05..52dc0a4d3 100644 --- a/server/entity/Media.ts +++ b/server/entity/Media.ts @@ -10,7 +10,7 @@ import type { DownloadingItem } from '@server/lib/downloadtracker'; import downloadTracker from '@server/lib/downloadtracker'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { getHostname } from '@server/utils/getHostname'; import { AfterLoad, @@ -20,6 +20,7 @@ import { OneToMany, OneToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { MediaRequest } from './MediaRequest'; @@ -129,11 +130,7 @@ class Media { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; /** diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts index 445b9e6ac..1184af71e 100644 --- a/server/entity/MediaRequest.ts +++ b/server/entity/MediaRequest.ts @@ -13,7 +13,7 @@ import notificationManager, { Notification } from '@server/lib/notifications'; import { Permission } from '@server/lib/permissions'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { truncate } from 'lodash'; import { AfterInsert, @@ -26,6 +26,7 @@ import { OneToMany, PrimaryGeneratedColumn, RelationCount, + UpdateDateColumn, } from 'typeorm'; import Media from './Media'; import SeasonRequest from './SeasonRequest'; @@ -543,11 +544,7 @@ export class MediaRequest { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; @Column({ type: 'varchar' }) diff --git a/server/entity/OverrideRule.ts b/server/entity/OverrideRule.ts index aab72006f..4f9b1f902 100644 --- a/server/entity/OverrideRule.ts +++ b/server/entity/OverrideRule.ts @@ -1,5 +1,10 @@ -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; -import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; +import { + Column, + Entity, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; @Entity() class OverrideRule { @@ -36,11 +41,7 @@ class OverrideRule { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/Season.ts b/server/entity/Season.ts index 56afc0aa3..3e35e6c80 100644 --- a/server/entity/Season.ts +++ b/server/entity/Season.ts @@ -1,11 +1,12 @@ import { MediaStatus } from '@server/constants/media'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import Media from './Media'; @@ -32,11 +33,7 @@ class Season { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/SeasonRequest.ts b/server/entity/SeasonRequest.ts index ab3cd405b..94ef079e9 100644 --- a/server/entity/SeasonRequest.ts +++ b/server/entity/SeasonRequest.ts @@ -1,11 +1,12 @@ import { MediaRequestStatus } from '@server/constants/media'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, + UpdateDateColumn, } from 'typeorm'; import { MediaRequest } from './MediaRequest'; @@ -29,11 +30,7 @@ class SeasonRequest { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) { diff --git a/server/entity/User.ts b/server/entity/User.ts index 3965e1b3d..cec7fac4e 100644 --- a/server/entity/User.ts +++ b/server/entity/User.ts @@ -8,7 +8,7 @@ import type { PermissionCheckOptions } from '@server/lib/permissions'; import { Permission, hasPermission } from '@server/lib/permissions'; import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { AfterDate } from '@server/utils/dateHelpers'; import bcrypt from 'bcrypt'; import { randomUUID } from 'crypto'; @@ -23,6 +23,7 @@ import { OneToOne, PrimaryGeneratedColumn, RelationCount, + UpdateDateColumn, } from 'typeorm'; import Issue from './Issue'; import { MediaRequest } from './MediaRequest'; @@ -149,11 +150,7 @@ export class User { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; public warnings: string[] = []; diff --git a/server/entity/Watchlist.ts b/server/entity/Watchlist.ts index a84f0c423..e9def00f7 100644 --- a/server/entity/Watchlist.ts +++ b/server/entity/Watchlist.ts @@ -5,7 +5,7 @@ import Media from '@server/entity/Media'; import { User } from '@server/entity/User'; import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces'; import logger from '@server/logger'; -import { DbAwareColumn } from '@server/utils/DbColumnHelper'; +import { DbAwareColumn, resolveDbType } from '@server/utils/DbColumnHelper'; import { Column, Entity, @@ -13,6 +13,7 @@ import { ManyToOne, PrimaryGeneratedColumn, Unique, + UpdateDateColumn, } from 'typeorm'; import type { ZodNumber, ZodOptional, ZodString } from 'zod'; @@ -60,11 +61,7 @@ export class Watchlist implements WatchlistItem { @DbAwareColumn({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) public createdAt: Date; - @DbAwareColumn({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - onUpdate: 'CURRENT_TIMESTAMP', - }) + @UpdateDateColumn({ type: resolveDbType('datetime') }) public updatedAt: Date; constructor(init?: Partial) {