From e7fdf037c4b132afca958ee3425ce9f3c31df4a2 Mon Sep 17 00:00:00 2001 From: ChipGPT Date: Thu, 17 Jul 2025 10:52:59 -0500 Subject: [PATCH 1/3] Add model association override --- packages/adapter-sequelize/src/index.ts | 28 ++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/adapter-sequelize/src/index.ts b/packages/adapter-sequelize/src/index.ts index 7499085809..b9e69b9658 100644 --- a/packages/adapter-sequelize/src/index.ts +++ b/packages/adapter-sequelize/src/index.ts @@ -56,13 +56,31 @@ export interface SequelizeAdapterOptions { Session: ModelCtor VerificationToken: ModelCtor }> + /** + * Override the default model {@link https://sequelize.org/docs/v6/core-concepts/assocs/ associations} + * + * Default Associations: + * ```ts + * Account.belongsTo(User, { onDelete: "cascade" }) + * Session.belongsTo(User, { onDelete: "cascade" }) + * ``` + * + * Example: + * ```ts + * (User, Account, Session) => { + * Account.belongsTo(User, { onDelete: "cascade", foreignKey: "userId", as: 'user' }); + * Session.belongsTo(User, { onDelete: "cascade", foreignKey: "userId", as: 'user' }); + * } + * ``` + */ + associations?: async (User: UserInstance, Account: AccountInstance, Session: SessionInstance, VerificationToken: VerificationTokenInstance) => void } export default function SequelizeAdapter( client: Sequelize, options?: SequelizeAdapterOptions ): Adapter { - const { models, synchronize = true } = options ?? {} + const { models, synchronize = true, associations } = options ?? {} const defaultModelOptions = { underscored: true, timestamps: false } const { User, Account, Session, VerificationToken } = { User: @@ -111,8 +129,12 @@ export default function SequelizeAdapter( } } - Account.belongsTo(User, { onDelete: "cascade" }) - Session.belongsTo(User, { onDelete: "cascade" }) + if (associations) { + await associations(); + } else { + Account.belongsTo(User, { onDelete: "cascade" }) + Session.belongsTo(User, { onDelete: "cascade" }) + } return { async createUser(user) { From 11f3438ce626a0bf132ed9d39768eaa9fc3974da Mon Sep 17 00:00:00 2001 From: ChipGPT Date: Thu, 17 Jul 2025 12:38:17 -0500 Subject: [PATCH 2/3] Should not be async --- packages/adapter-sequelize/src/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/adapter-sequelize/src/index.ts b/packages/adapter-sequelize/src/index.ts index b9e69b9658..dbd2258216 100644 --- a/packages/adapter-sequelize/src/index.ts +++ b/packages/adapter-sequelize/src/index.ts @@ -55,7 +55,7 @@ export interface SequelizeAdapterOptions { Account: ModelCtor Session: ModelCtor VerificationToken: ModelCtor - }> + }>, /** * Override the default model {@link https://sequelize.org/docs/v6/core-concepts/assocs/ associations} * @@ -73,7 +73,7 @@ export interface SequelizeAdapterOptions { * } * ``` */ - associations?: async (User: UserInstance, Account: AccountInstance, Session: SessionInstance, VerificationToken: VerificationTokenInstance) => void + associations?: (User: UserInstance, Account: AccountInstance, Session: SessionInstance, VerificationToken: VerificationTokenInstance) => void } export default function SequelizeAdapter( @@ -130,7 +130,7 @@ export default function SequelizeAdapter( } if (associations) { - await associations(); + associations(); } else { Account.belongsTo(User, { onDelete: "cascade" }) Session.belongsTo(User, { onDelete: "cascade" }) From 935df4f9c924e76937adf00802cc33d96130e005 Mon Sep 17 00:00:00 2001 From: ChipGPT Date: Thu, 17 Jul 2025 12:44:32 -0500 Subject: [PATCH 3/3] Fix associations call --- packages/adapter-sequelize/src/index.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/adapter-sequelize/src/index.ts b/packages/adapter-sequelize/src/index.ts index dbd2258216..9778469444 100644 --- a/packages/adapter-sequelize/src/index.ts +++ b/packages/adapter-sequelize/src/index.ts @@ -55,7 +55,7 @@ export interface SequelizeAdapterOptions { Account: ModelCtor Session: ModelCtor VerificationToken: ModelCtor - }>, + }>; /** * Override the default model {@link https://sequelize.org/docs/v6/core-concepts/assocs/ associations} * @@ -73,7 +73,12 @@ export interface SequelizeAdapterOptions { * } * ``` */ - associations?: (User: UserInstance, Account: AccountInstance, Session: SessionInstance, VerificationToken: VerificationTokenInstance) => void + associations?: ( + User: ModelCtor, + Account: ModelCtor, + Session: ModelCtor, + VerificationToken: ModelCtor + ) => void; } export default function SequelizeAdapter( @@ -130,10 +135,10 @@ export default function SequelizeAdapter( } if (associations) { - associations(); + associations(User, Account, Session, VerificationToken); } else { - Account.belongsTo(User, { onDelete: "cascade" }) - Session.belongsTo(User, { onDelete: "cascade" }) + Account.belongsTo(User, { onDelete: 'cascade' }); + Session.belongsTo(User, { onDelete: 'cascade' }); } return {