PrismaP
Prisma14mo ago
4 replies
justinhandley

Optimize in a Constructor

I use prisma in a nest.js api and instantiate a globally used version in a constructor - I've been trying to get optimize to work, and while the console log says it is set up and good to go, no data ever flows through. It looks like this - any idea what I'm doing wrong, or how to do this correctly?

export class ApiCoreDataAccessService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  public queryCount: number

  constructor() {
    const config: any = {
      datasources: {
        db: { url: `${process.env.DATABASE_URL}?connection_limit=30` },
      },
      log: [
        {
          emit: 'event',
          level: 'query',
        },
      ],
    }

    console.log('process.env.DATABASE_URL', process.env.DATABASE_URL)

    super(config)
    this.queryCount = 0

    console.log('Initializing Prisma Optimize...')

    try {
      this.$extends(
        withOptimize({
          apiKey: process.env.OPTIMIZE_API_KEY,
        }),
      )
      console.log('Prisma Optimize extension initialized successfully')
    } catch (error) {
      console.error('Failed to initialize Prisma Optimize:', error)
    }
  }

  public async onModuleDestroy(): Promise<void> {
    await this.$disconnect()
  }

  public async onModuleInit(): Promise<void> {
    await this.$connect()

    if (process.env.LOG_PRISMA_QUERIES === 'true') {
      this.$on('query' as never, async (e: Prisma.QueryEvent) => {
        console.log(`QUERY: ${e.query} \n\nPARAMS: ${e.params}\n\n\n`)
      })
    }

    if (process.env.COUNT_PRISMA_QUERIES === 'true') {
      this.$on('query' as never, async () => {
        this.queryCount++
      })
    }
  }
}
Was this page helpful?