From 56b379560fe014c0bf1c4d72bd5b0c5b6e43e0fd Mon Sep 17 00:00:00 2001 From: chufan Date: Tue, 14 Jan 2025 20:46:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(@142vip/egg):=20=E5=AE=8C=E5=96=84`Sequeli?= =?UTF-8?q?zeORM`=E5=9F=BA=E7=A1=80=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/egg/src/orm/sequelize.ts | 47 ++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/packages/egg/src/orm/sequelize.ts b/packages/egg/src/orm/sequelize.ts index 510dcf7..a0cddfa 100644 --- a/packages/egg/src/orm/sequelize.ts +++ b/packages/egg/src/orm/sequelize.ts @@ -1,4 +1,5 @@ -import { DataTypes } from 'sequelize' +import type { Options } from 'sequelize' +import { DataTypes, Sequelize } from 'sequelize' export const BaseSequelizeOptions = { // 全局默认配置 @@ -58,3 +59,47 @@ export const VipSequelize = { BaseEntity: BaseSequelizeEntity, createEntity: createSequelizeEntity, } + +export interface SequelizeOptions extends Options { + connectUri?: string + Sequelize: typeof Sequelize +} + +/** + * Sequelize基础类 + */ +export class SequelizeORM { + private readonly options: SequelizeOptions + private sequelize: Sequelize + constructor(options: SequelizeOptions) { + this.options = options + this.sequelize = this.getConnect() + } + + /** + * 连接 + */ + getConnect() { + if (this.sequelize == null) { + const _Sequelize = this.options.Sequelize || Sequelize + this.sequelize = this.options.connectUri != null + ? new _Sequelize(this.options.connectUri, this.options) + : new _Sequelize(this.options) + } + return this.sequelize + } + + /** + * 连接重试 + */ + public async retry() { + await this.sequelize.authenticate() + } + + /** + * 关闭连接 + */ + public async disconnect() { + await this.sequelize.close() + } +}