zeroant-common
Version:
Common modules for zeroant
39 lines (31 loc) • 953 B
text/typescript
import { AddonPlugin } from 'zeroant-factory/addon.plugin'
import { DBConfig } from '../config/db.config.js'
import { PrismaClient } from '@prisma/client'
export class DBPlugin extends AddonPlugin {
protected _dataSource: PrismaClient
async initialize() {
const prisma = new PrismaClient()
this._dataSource = prisma
}
get repositories(): PrismaClient {
return this._dataSource
}
repository<T extends keyof PrismaClient>(repository: T): PrismaClient[T] {
return this.repositories[repository]
}
call<T extends keyof PrismaClient>(repository: T) {
return this.repository(repository)
}
clone() {
const options = this.context.config.addons.lazyGet(DBConfig).options
const dataSource = new PrismaClient(options)
return dataSource
}
destroy() {
const prisma = this._dataSource
prisma.$disconnect().catch((e: any) => this.context.log.info(e))
}
close(): void {
this.destroy()
}
}