import { Prisma } from '@prisma/client'

export const extension = Prisma.defineExtension({
  name: '@prisma-extensions/find-or-create',
  model: {
    $allModels: {
      async findOrCreate<Model, Args extends object>(
        this: Model,
        args: Prisma.Exact<Args, Omit<Prisma.Args<Model, 'upsert'>, 'update'>>,
      ): Promise<Prisma.Result<Model, Args, 'findFirst'>> {
        // @ts-expect-error: Requires more types from Prisma
        return await this.upsert({
          ...args,
          update: {},
        })
      },
    },
  },
})
