From afb5b6e17c3d5a093546d773a51de7235abbc243 Mon Sep 17 00:00:00 2001 From: fallenbagel <98979876+Fallenbagel@users.noreply.github.com> Date: Mon, 31 Aug 2026 14:06:43 +0800 Subject: [PATCH] fix(datasource): break import cycle mistyping postgres timestamps 3375 replaced the entity globs with static imports, which hoist above the isPgsql declaration at the bottom of datasouce.ts. Entities therefore loaded while isPgsql was still undefined, and since resolveDbType runs as a decorator argument at class-definition time, every datatime column resolved to the sqlite type and Postgres refused to start. Moved isPgsql into an import-free module so reading it never depends on datasource.ts having finished evaluating. fix #3448 --- server/datasource.ts | 3 +-- server/index.ts | 3 ++- server/utils/DbColumnHelper.ts | 2 +- server/utils/dbType.ts | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 server/utils/dbType.ts diff --git a/server/datasource.ts b/server/datasource.ts index 26f564d19c..a87920f839 100644 --- a/server/datasource.ts +++ b/server/datasource.ts @@ -16,6 +16,7 @@ import { IssueCommentSubscriber } from '@server/subscriber/IssueCommentSubscribe import { IssueSubscriber } from '@server/subscriber/IssueSubscriber'; import { MediaRequestSubscriber } from '@server/subscriber/MediaRequestSubscriber'; import { MediaSubscriber } from '@server/subscriber/MediaSubscriber'; +import { isPgsql } from '@server/utils/dbType'; import fs from 'fs'; import type { TlsOptions } from 'tls'; import type { DataSourceOptions, EntityTarget, Repository } from 'typeorm'; @@ -170,8 +171,6 @@ const postgresProdConfig: DataSourceOptions = { subscribers, }; -export const isPgsql = process.env.DB_TYPE === 'postgres'; - function getDataSource(): DataSourceOptions { if (process.env.NODE_ENV === 'test') { return testConfig; diff --git a/server/index.ts b/server/index.ts index f37c734704..19626a27c3 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,6 +1,6 @@ import csurf from '@dr.pogodin/csurf'; import PlexAPI from '@server/api/plexapi'; -import dataSource, { getRepository, isPgsql } from '@server/datasource'; +import dataSource, { getRepository } from '@server/datasource'; import DiscoverSlider from '@server/entity/DiscoverSlider'; import { Session } from '@server/entity/Session'; import { User } from '@server/entity/User'; @@ -29,6 +29,7 @@ import { getAppVersion } from '@server/utils/appVersion'; import createCustomProxyAgent, { setForceIpv4First, } from '@server/utils/customProxyAgent'; +import { isPgsql } from '@server/utils/dbType'; import { initializeDnsCache } from '@server/utils/dnsCache'; import restartFlag from '@server/utils/restartFlag'; import '@server/utils/userAgent'; diff --git a/server/utils/DbColumnHelper.ts b/server/utils/DbColumnHelper.ts index 1c030b92d2..6039270476 100644 --- a/server/utils/DbColumnHelper.ts +++ b/server/utils/DbColumnHelper.ts @@ -1,4 +1,4 @@ -import { isPgsql } from '@server/datasource'; +import { isPgsql } from '@server/utils/dbType'; import type { ColumnOptions, ColumnType } from 'typeorm'; import { Column } from 'typeorm'; const pgTypeMapping: { [key: string]: ColumnType } = { diff --git a/server/utils/dbType.ts b/server/utils/dbType.ts new file mode 100644 index 0000000000..d4cd2bf52c --- /dev/null +++ b/server/utils/dbType.ts @@ -0,0 +1,2 @@ +// Must stay import-free, entity decorators read this during datasource evaluation +export const isPgsql = process.env.DB_TYPE === 'postgres';