
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck 
/*
 * WARNING: This is an internal file that is subject to change!
 *
 * 🛑 Under no circumstances should you import this file directly! 🛑
 *
 * All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file.
 * While this enables partial backward compatibility, it is not part of the stable public API.
 *
 * If you are looking for your Models, Enums, and Input Types, please import them from the respective
 * model files in the `model` directory!
 */

import * as runtime from "@prisma/client/runtime/client"
import type * as Prisma from "../models"
import { type PrismaClient } from "./class"

export type * from '../models'

export type DMMF = typeof runtime.DMMF

export type PrismaPromise<T> = runtime.Types.Public.PrismaPromise<T>

/**
 * Prisma Errors
 */

export const PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
export type PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError

export const PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
export type PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError

export const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
export type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError

export const PrismaClientInitializationError = runtime.PrismaClientInitializationError
export type PrismaClientInitializationError = runtime.PrismaClientInitializationError

export const PrismaClientValidationError = runtime.PrismaClientValidationError
export type PrismaClientValidationError = runtime.PrismaClientValidationError

/**
 * Re-export of sql-template-tag
 */
export const sql = runtime.sqltag
export const empty = runtime.empty
export const join = runtime.join
export const raw = runtime.raw
export const Sql = runtime.Sql
export type Sql = runtime.Sql



/**
 * Decimal.js
 */
export const Decimal = runtime.Decimal
export type Decimal = runtime.Decimal

export type DecimalJsLike = runtime.DecimalJsLike

/**
* Extensions
*/
export type Extension = runtime.Types.Extensions.UserArgs
export const getExtensionContext = runtime.Extensions.getExtensionContext
export type Args<T, F extends runtime.Operation> = runtime.Types.Public.Args<T, F>
export type Payload<T, F extends runtime.Operation = never> = runtime.Types.Public.Payload<T, F>
export type Result<T, A, F extends runtime.Operation> = runtime.Types.Public.Result<T, A, F>
export type Exact<A, W> = runtime.Types.Public.Exact<A, W>

export type PrismaVersion = {
  client: string
  engine: string
}

/**
 * Prisma Client JS version: 7.2.0
 * Query Engine version: 0c8ef2ce45c83248ab3df073180d5eda9e8be7a3
 */
export const prismaVersion: PrismaVersion = {
  client: "7.2.0",
  engine: "0c8ef2ce45c83248ab3df073180d5eda9e8be7a3"
}

/**
 * Utility Types
 */

export type Bytes = runtime.Bytes
export type JsonObject = runtime.JsonObject
export type JsonArray = runtime.JsonArray
export type JsonValue = runtime.JsonValue
export type InputJsonObject = runtime.InputJsonObject
export type InputJsonArray = runtime.InputJsonArray
export type InputJsonValue = runtime.InputJsonValue


export const NullTypes = {
  DbNull: runtime.NullTypes.DbNull as (new (secret: never) => typeof runtime.DbNull),
  JsonNull: runtime.NullTypes.JsonNull as (new (secret: never) => typeof runtime.JsonNull),
  AnyNull: runtime.NullTypes.AnyNull as (new (secret: never) => typeof runtime.AnyNull),
}
/**
 * Helper for filtering JSON entries that have `null` on the database (empty on the db)
 *
 * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
 */
export const DbNull = runtime.DbNull

/**
 * Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
 *
 * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
 */
export const JsonNull = runtime.JsonNull

/**
 * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
 *
 * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
 */
export const AnyNull = runtime.AnyNull


type SelectAndInclude = {
  select: any
  include: any
}

type SelectAndOmit = {
  select: any
  omit: any
}

/**
 * From T, pick a set of properties whose keys are in the union K
 */
type Prisma__Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};

export type Enumerable<T> = T | Array<T>;

/**
 * Subset
 * @desc From `T` pick properties that exist in `U`. Simple version of Intersection
 */
export type Subset<T, U> = {
  [key in keyof T]: key extends keyof U ? T[key] : never;
};

/**
 * SelectSubset
 * @desc From `T` pick properties that exist in `U`. Simple version of Intersection.
 * Additionally, it validates, if both select and include are present. If the case, it errors.
 */
export type SelectSubset<T, U> = {
  [key in keyof T]: key extends keyof U ? T[key] : never
} &
  (T extends SelectAndInclude
    ? 'Please either choose `select` or `include`.'
    : T extends SelectAndOmit
      ? 'Please either choose `select` or `omit`.'
      : {})

/**
 * Subset + Intersection
 * @desc From `T` pick properties that exist in `U` and intersect `K`
 */
export type SubsetIntersection<T, U, K> = {
  [key in keyof T]: key extends keyof U ? T[key] : never
} &
  K

type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };

/**
 * XOR is needed to have a real mutually exclusive union type
 * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
 */
export type XOR<T, U> =
  T extends object ?
  U extends object ?
    (Without<T, U> & U) | (Without<U, T> & T)
  : U : T


/**
 * Is T a Record?
 */
type IsObject<T extends any> = T extends Array<any>
? False
: T extends Date
? False
: T extends Uint8Array
? False
: T extends BigInt
? False
: T extends object
? True
: False


/**
 * If it's T[], return T
 */
export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T

/**
 * From ts-toolbelt
 */

type __Either<O extends object, K extends Key> = Omit<O, K> &
  {
    // Merge all but K
    [P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities
  }[K]

type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>

type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>

type _Either<
  O extends object,
  K extends Key,
  strict extends Boolean
> = {
  1: EitherStrict<O, K>
  0: EitherLoose<O, K>
}[strict]

export type Either<
  O extends object,
  K extends Key,
  strict extends Boolean = 1
> = O extends unknown ? _Either<O, K, strict> : never

export type Union = any

export type PatchUndefined<O extends object, O1 extends object> = {
  [K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]
} & {}

/** Helper Types for "Merge" **/
export type IntersectOf<U extends Union> = (
  U extends unknown ? (k: U) => void : never
) extends (k: infer I) => void
  ? I
  : never

export type Overwrite<O extends object, O1 extends object> = {
    [K in keyof O]: K extends keyof O1 ? O1[K] : O[K];
} & {};

type _Merge<U extends object> = IntersectOf<Overwrite<U, {
    [K in keyof U]-?: At<U, K>;
}>>;

type Key = string | number | symbol;
type AtStrict<O extends object, K extends Key> = O[K & keyof O];
type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;
export type At<O extends object, K extends Key, strict extends Boolean = 1> = {
    1: AtStrict<O, K>;
    0: AtLoose<O, K>;
}[strict];

export type ComputeRaw<A extends any> = A extends Function ? A : {
  [K in keyof A]: A[K];
} & {};

export type OptionalFlat<O> = {
  [K in keyof O]?: O[K];
} & {};

type _Record<K extends keyof any, T> = {
  [P in K]: T;
};

// cause typescript not to expand types and preserve names
type NoExpand<T> = T extends unknown ? T : never;

// this type assumes the passed object is entirely optional
export type AtLeast<O extends object, K extends string> = NoExpand<
  O extends unknown
  ? | (K extends keyof O ? { [P in K]: O[P] } & O : O)
    | {[P in keyof O as P extends K ? P : never]-?: O[P]} & O
  : never>;

type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;

export type Strict<U extends object> = ComputeRaw<_Strict<U>>;
/** End Helper Types for "Merge" **/

export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;

export type Boolean = True | False

export type True = 1

export type False = 0

export type Not<B extends Boolean> = {
  0: 1
  1: 0
}[B]

export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]
  ? 0 // anything `never` is false
  : A1 extends A2
  ? 1
  : 0

export type Has<U extends Union, U1 extends Union> = Not<
  Extends<Exclude<U1, U>, U1>
>

export type Or<B1 extends Boolean, B2 extends Boolean> = {
  0: {
    0: 0
    1: 1
  }
  1: {
    0: 1
    1: 1
  }
}[B1][B2]

export type Keys<U extends Union> = U extends unknown ? keyof U : never

export type GetScalarType<T, O> = O extends object ? {
  [P in keyof T]: P extends keyof O
    ? O[P]
    : never
} : never

type FieldPaths<
  T,
  U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>
> = IsObject<T> extends True ? U : T

export type GetHavingFields<T> = {
  [K in keyof T]: Or<
    Or<Extends<'OR', K>, Extends<'AND', K>>,
    Extends<'NOT', K>
  > extends True
    ? // infer is only needed to not hit TS limit
      // based on the brilliant idea of Pierre-Antoine Mills
      // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
      T[K] extends infer TK
      ? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>
      : never
    : {} extends FieldPaths<T[K]>
    ? never
    : K
}[keyof T]

/**
 * Convert tuple to union
 */
type _TupleToUnion<T> = T extends (infer E)[] ? E : never
type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>
export type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T

/**
 * Like `Pick`, but additionally can also accept an array of keys
 */
export type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>

/**
 * Exclude all keys with underscores
 */
export type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T


export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>

type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>


export const ModelName = {
  User: 'User',
  Category: 'Category',
  Course: 'Course',
  Module: 'Module',
  Lesson: 'Lesson',
  Quiz: 'Quiz',
  Question: 'Question',
  Enrollment: 'Enrollment',
  QuizAssignment: 'QuizAssignment',
  File: 'File',
  Review: 'Review',
  Note: 'Note',
  UserProgress: 'UserProgress',
  SiteSettings: 'SiteSettings',
  Purchase: 'Purchase',
  Certificate: 'Certificate'
} as const

export type ModelName = (typeof ModelName)[keyof typeof ModelName]



export interface TypeMapCb<GlobalOmitOptions = {}> extends runtime.Types.Utils.Fn<{extArgs: runtime.Types.Extensions.InternalArgs }, runtime.Types.Utils.Record<string, any>> {
  returns: TypeMap<this['params']['extArgs'], GlobalOmitOptions>
}

export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
  globalOmitOptions: {
    omit: GlobalOmitOptions
  }
  meta: {
    modelProps: "user" | "category" | "course" | "module" | "lesson" | "quiz" | "question" | "enrollment" | "quizAssignment" | "file" | "review" | "note" | "userProgress" | "siteSettings" | "purchase" | "certificate"
    txIsolationLevel: TransactionIsolationLevel
  }
  model: {
    User: {
      payload: Prisma.$UserPayload<ExtArgs>
      fields: Prisma.UserFieldRefs
      operations: {
        findUnique: {
          args: Prisma.UserFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.UserFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        findFirst: {
          args: Prisma.UserFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.UserFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        findMany: {
          args: Prisma.UserFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
        }
        create: {
          args: Prisma.UserCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        createMany: {
          args: Prisma.UserCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.UserDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        update: {
          args: Prisma.UserUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        deleteMany: {
          args: Prisma.UserDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.UserUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.UserUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
        }
        aggregate: {
          args: Prisma.UserAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateUser>
        }
        groupBy: {
          args: Prisma.UserGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.UserGroupByOutputType>[]
        }
        count: {
          args: Prisma.UserCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.UserCountAggregateOutputType> | number
        }
      }
    }
    Category: {
      payload: Prisma.$CategoryPayload<ExtArgs>
      fields: Prisma.CategoryFieldRefs
      operations: {
        findUnique: {
          args: Prisma.CategoryFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.CategoryFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        findFirst: {
          args: Prisma.CategoryFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.CategoryFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        findMany: {
          args: Prisma.CategoryFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>[]
        }
        create: {
          args: Prisma.CategoryCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        createMany: {
          args: Prisma.CategoryCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.CategoryDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        update: {
          args: Prisma.CategoryUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        deleteMany: {
          args: Prisma.CategoryDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.CategoryUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.CategoryUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CategoryPayload>
        }
        aggregate: {
          args: Prisma.CategoryAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateCategory>
        }
        groupBy: {
          args: Prisma.CategoryGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CategoryGroupByOutputType>[]
        }
        count: {
          args: Prisma.CategoryCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CategoryCountAggregateOutputType> | number
        }
      }
    }
    Course: {
      payload: Prisma.$CoursePayload<ExtArgs>
      fields: Prisma.CourseFieldRefs
      operations: {
        findUnique: {
          args: Prisma.CourseFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.CourseFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        findFirst: {
          args: Prisma.CourseFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.CourseFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        findMany: {
          args: Prisma.CourseFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>[]
        }
        create: {
          args: Prisma.CourseCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        createMany: {
          args: Prisma.CourseCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.CourseDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        update: {
          args: Prisma.CourseUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        deleteMany: {
          args: Prisma.CourseDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.CourseUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.CourseUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CoursePayload>
        }
        aggregate: {
          args: Prisma.CourseAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateCourse>
        }
        groupBy: {
          args: Prisma.CourseGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CourseGroupByOutputType>[]
        }
        count: {
          args: Prisma.CourseCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CourseCountAggregateOutputType> | number
        }
      }
    }
    Module: {
      payload: Prisma.$ModulePayload<ExtArgs>
      fields: Prisma.ModuleFieldRefs
      operations: {
        findUnique: {
          args: Prisma.ModuleFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.ModuleFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        findFirst: {
          args: Prisma.ModuleFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.ModuleFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        findMany: {
          args: Prisma.ModuleFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>[]
        }
        create: {
          args: Prisma.ModuleCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        createMany: {
          args: Prisma.ModuleCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.ModuleDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        update: {
          args: Prisma.ModuleUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        deleteMany: {
          args: Prisma.ModuleDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.ModuleUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.ModuleUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ModulePayload>
        }
        aggregate: {
          args: Prisma.ModuleAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateModule>
        }
        groupBy: {
          args: Prisma.ModuleGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.ModuleGroupByOutputType>[]
        }
        count: {
          args: Prisma.ModuleCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.ModuleCountAggregateOutputType> | number
        }
      }
    }
    Lesson: {
      payload: Prisma.$LessonPayload<ExtArgs>
      fields: Prisma.LessonFieldRefs
      operations: {
        findUnique: {
          args: Prisma.LessonFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.LessonFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        findFirst: {
          args: Prisma.LessonFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.LessonFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        findMany: {
          args: Prisma.LessonFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>[]
        }
        create: {
          args: Prisma.LessonCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        createMany: {
          args: Prisma.LessonCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.LessonDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        update: {
          args: Prisma.LessonUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        deleteMany: {
          args: Prisma.LessonDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.LessonUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.LessonUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$LessonPayload>
        }
        aggregate: {
          args: Prisma.LessonAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateLesson>
        }
        groupBy: {
          args: Prisma.LessonGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.LessonGroupByOutputType>[]
        }
        count: {
          args: Prisma.LessonCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.LessonCountAggregateOutputType> | number
        }
      }
    }
    Quiz: {
      payload: Prisma.$QuizPayload<ExtArgs>
      fields: Prisma.QuizFieldRefs
      operations: {
        findUnique: {
          args: Prisma.QuizFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.QuizFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        findFirst: {
          args: Prisma.QuizFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.QuizFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        findMany: {
          args: Prisma.QuizFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>[]
        }
        create: {
          args: Prisma.QuizCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        createMany: {
          args: Prisma.QuizCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.QuizDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        update: {
          args: Prisma.QuizUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        deleteMany: {
          args: Prisma.QuizDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.QuizUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.QuizUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizPayload>
        }
        aggregate: {
          args: Prisma.QuizAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateQuiz>
        }
        groupBy: {
          args: Prisma.QuizGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuizGroupByOutputType>[]
        }
        count: {
          args: Prisma.QuizCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuizCountAggregateOutputType> | number
        }
      }
    }
    Question: {
      payload: Prisma.$QuestionPayload<ExtArgs>
      fields: Prisma.QuestionFieldRefs
      operations: {
        findUnique: {
          args: Prisma.QuestionFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.QuestionFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        findFirst: {
          args: Prisma.QuestionFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.QuestionFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        findMany: {
          args: Prisma.QuestionFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>[]
        }
        create: {
          args: Prisma.QuestionCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        createMany: {
          args: Prisma.QuestionCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.QuestionDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        update: {
          args: Prisma.QuestionUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        deleteMany: {
          args: Prisma.QuestionDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.QuestionUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.QuestionUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuestionPayload>
        }
        aggregate: {
          args: Prisma.QuestionAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateQuestion>
        }
        groupBy: {
          args: Prisma.QuestionGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuestionGroupByOutputType>[]
        }
        count: {
          args: Prisma.QuestionCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuestionCountAggregateOutputType> | number
        }
      }
    }
    Enrollment: {
      payload: Prisma.$EnrollmentPayload<ExtArgs>
      fields: Prisma.EnrollmentFieldRefs
      operations: {
        findUnique: {
          args: Prisma.EnrollmentFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.EnrollmentFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        findFirst: {
          args: Prisma.EnrollmentFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.EnrollmentFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        findMany: {
          args: Prisma.EnrollmentFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>[]
        }
        create: {
          args: Prisma.EnrollmentCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        createMany: {
          args: Prisma.EnrollmentCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.EnrollmentDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        update: {
          args: Prisma.EnrollmentUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        deleteMany: {
          args: Prisma.EnrollmentDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.EnrollmentUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.EnrollmentUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$EnrollmentPayload>
        }
        aggregate: {
          args: Prisma.EnrollmentAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateEnrollment>
        }
        groupBy: {
          args: Prisma.EnrollmentGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.EnrollmentGroupByOutputType>[]
        }
        count: {
          args: Prisma.EnrollmentCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.EnrollmentCountAggregateOutputType> | number
        }
      }
    }
    QuizAssignment: {
      payload: Prisma.$QuizAssignmentPayload<ExtArgs>
      fields: Prisma.QuizAssignmentFieldRefs
      operations: {
        findUnique: {
          args: Prisma.QuizAssignmentFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.QuizAssignmentFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        findFirst: {
          args: Prisma.QuizAssignmentFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.QuizAssignmentFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        findMany: {
          args: Prisma.QuizAssignmentFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>[]
        }
        create: {
          args: Prisma.QuizAssignmentCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        createMany: {
          args: Prisma.QuizAssignmentCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.QuizAssignmentDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        update: {
          args: Prisma.QuizAssignmentUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        deleteMany: {
          args: Prisma.QuizAssignmentDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.QuizAssignmentUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.QuizAssignmentUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$QuizAssignmentPayload>
        }
        aggregate: {
          args: Prisma.QuizAssignmentAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateQuizAssignment>
        }
        groupBy: {
          args: Prisma.QuizAssignmentGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuizAssignmentGroupByOutputType>[]
        }
        count: {
          args: Prisma.QuizAssignmentCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.QuizAssignmentCountAggregateOutputType> | number
        }
      }
    }
    File: {
      payload: Prisma.$FilePayload<ExtArgs>
      fields: Prisma.FileFieldRefs
      operations: {
        findUnique: {
          args: Prisma.FileFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.FileFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        findFirst: {
          args: Prisma.FileFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.FileFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        findMany: {
          args: Prisma.FileFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>[]
        }
        create: {
          args: Prisma.FileCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        createMany: {
          args: Prisma.FileCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.FileDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        update: {
          args: Prisma.FileUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        deleteMany: {
          args: Prisma.FileDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.FileUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.FileUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$FilePayload>
        }
        aggregate: {
          args: Prisma.FileAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateFile>
        }
        groupBy: {
          args: Prisma.FileGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.FileGroupByOutputType>[]
        }
        count: {
          args: Prisma.FileCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.FileCountAggregateOutputType> | number
        }
      }
    }
    Review: {
      payload: Prisma.$ReviewPayload<ExtArgs>
      fields: Prisma.ReviewFieldRefs
      operations: {
        findUnique: {
          args: Prisma.ReviewFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.ReviewFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        findFirst: {
          args: Prisma.ReviewFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.ReviewFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        findMany: {
          args: Prisma.ReviewFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>[]
        }
        create: {
          args: Prisma.ReviewCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        createMany: {
          args: Prisma.ReviewCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.ReviewDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        update: {
          args: Prisma.ReviewUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        deleteMany: {
          args: Prisma.ReviewDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.ReviewUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.ReviewUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$ReviewPayload>
        }
        aggregate: {
          args: Prisma.ReviewAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateReview>
        }
        groupBy: {
          args: Prisma.ReviewGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.ReviewGroupByOutputType>[]
        }
        count: {
          args: Prisma.ReviewCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.ReviewCountAggregateOutputType> | number
        }
      }
    }
    Note: {
      payload: Prisma.$NotePayload<ExtArgs>
      fields: Prisma.NoteFieldRefs
      operations: {
        findUnique: {
          args: Prisma.NoteFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.NoteFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        findFirst: {
          args: Prisma.NoteFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.NoteFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        findMany: {
          args: Prisma.NoteFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>[]
        }
        create: {
          args: Prisma.NoteCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        createMany: {
          args: Prisma.NoteCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.NoteDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        update: {
          args: Prisma.NoteUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        deleteMany: {
          args: Prisma.NoteDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.NoteUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.NoteUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$NotePayload>
        }
        aggregate: {
          args: Prisma.NoteAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateNote>
        }
        groupBy: {
          args: Prisma.NoteGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.NoteGroupByOutputType>[]
        }
        count: {
          args: Prisma.NoteCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.NoteCountAggregateOutputType> | number
        }
      }
    }
    UserProgress: {
      payload: Prisma.$UserProgressPayload<ExtArgs>
      fields: Prisma.UserProgressFieldRefs
      operations: {
        findUnique: {
          args: Prisma.UserProgressFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.UserProgressFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        findFirst: {
          args: Prisma.UserProgressFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.UserProgressFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        findMany: {
          args: Prisma.UserProgressFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>[]
        }
        create: {
          args: Prisma.UserProgressCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        createMany: {
          args: Prisma.UserProgressCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.UserProgressDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        update: {
          args: Prisma.UserProgressUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        deleteMany: {
          args: Prisma.UserProgressDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.UserProgressUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.UserProgressUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserProgressPayload>
        }
        aggregate: {
          args: Prisma.UserProgressAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateUserProgress>
        }
        groupBy: {
          args: Prisma.UserProgressGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.UserProgressGroupByOutputType>[]
        }
        count: {
          args: Prisma.UserProgressCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.UserProgressCountAggregateOutputType> | number
        }
      }
    }
    SiteSettings: {
      payload: Prisma.$SiteSettingsPayload<ExtArgs>
      fields: Prisma.SiteSettingsFieldRefs
      operations: {
        findUnique: {
          args: Prisma.SiteSettingsFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.SiteSettingsFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        findFirst: {
          args: Prisma.SiteSettingsFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.SiteSettingsFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        findMany: {
          args: Prisma.SiteSettingsFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>[]
        }
        create: {
          args: Prisma.SiteSettingsCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        createMany: {
          args: Prisma.SiteSettingsCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.SiteSettingsDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        update: {
          args: Prisma.SiteSettingsUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        deleteMany: {
          args: Prisma.SiteSettingsDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.SiteSettingsUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.SiteSettingsUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$SiteSettingsPayload>
        }
        aggregate: {
          args: Prisma.SiteSettingsAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateSiteSettings>
        }
        groupBy: {
          args: Prisma.SiteSettingsGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.SiteSettingsGroupByOutputType>[]
        }
        count: {
          args: Prisma.SiteSettingsCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.SiteSettingsCountAggregateOutputType> | number
        }
      }
    }
    Purchase: {
      payload: Prisma.$PurchasePayload<ExtArgs>
      fields: Prisma.PurchaseFieldRefs
      operations: {
        findUnique: {
          args: Prisma.PurchaseFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.PurchaseFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        findFirst: {
          args: Prisma.PurchaseFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.PurchaseFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        findMany: {
          args: Prisma.PurchaseFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>[]
        }
        create: {
          args: Prisma.PurchaseCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        createMany: {
          args: Prisma.PurchaseCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.PurchaseDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        update: {
          args: Prisma.PurchaseUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        deleteMany: {
          args: Prisma.PurchaseDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.PurchaseUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.PurchaseUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$PurchasePayload>
        }
        aggregate: {
          args: Prisma.PurchaseAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregatePurchase>
        }
        groupBy: {
          args: Prisma.PurchaseGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.PurchaseGroupByOutputType>[]
        }
        count: {
          args: Prisma.PurchaseCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.PurchaseCountAggregateOutputType> | number
        }
      }
    }
    Certificate: {
      payload: Prisma.$CertificatePayload<ExtArgs>
      fields: Prisma.CertificateFieldRefs
      operations: {
        findUnique: {
          args: Prisma.CertificateFindUniqueArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload> | null
        }
        findUniqueOrThrow: {
          args: Prisma.CertificateFindUniqueOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        findFirst: {
          args: Prisma.CertificateFindFirstArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload> | null
        }
        findFirstOrThrow: {
          args: Prisma.CertificateFindFirstOrThrowArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        findMany: {
          args: Prisma.CertificateFindManyArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>[]
        }
        create: {
          args: Prisma.CertificateCreateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        createMany: {
          args: Prisma.CertificateCreateManyArgs<ExtArgs>
          result: BatchPayload
        }
        delete: {
          args: Prisma.CertificateDeleteArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        update: {
          args: Prisma.CertificateUpdateArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        deleteMany: {
          args: Prisma.CertificateDeleteManyArgs<ExtArgs>
          result: BatchPayload
        }
        updateMany: {
          args: Prisma.CertificateUpdateManyArgs<ExtArgs>
          result: BatchPayload
        }
        upsert: {
          args: Prisma.CertificateUpsertArgs<ExtArgs>
          result: runtime.Types.Utils.PayloadToResult<Prisma.$CertificatePayload>
        }
        aggregate: {
          args: Prisma.CertificateAggregateArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.AggregateCertificate>
        }
        groupBy: {
          args: Prisma.CertificateGroupByArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CertificateGroupByOutputType>[]
        }
        count: {
          args: Prisma.CertificateCountArgs<ExtArgs>
          result: runtime.Types.Utils.Optional<Prisma.CertificateCountAggregateOutputType> | number
        }
      }
    }
  }
} & {
  other: {
    payload: any
    operations: {
      $executeRaw: {
        args: [query: TemplateStringsArray | Sql, ...values: any[]],
        result: any
      }
      $executeRawUnsafe: {
        args: [query: string, ...values: any[]],
        result: any
      }
      $queryRaw: {
        args: [query: TemplateStringsArray | Sql, ...values: any[]],
        result: any
      }
      $queryRawUnsafe: {
        args: [query: string, ...values: any[]],
        result: any
      }
    }
  }
}

/**
 * Enums
 */

export const TransactionIsolationLevel = runtime.makeStrictEnum({
  ReadUncommitted: 'ReadUncommitted',
  ReadCommitted: 'ReadCommitted',
  RepeatableRead: 'RepeatableRead',
  Serializable: 'Serializable'
} as const)

export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]


export const UserScalarFieldEnum = {
  id: 'id',
  clerkId: 'clerkId',
  email: 'email',
  role: 'role',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]


export const CategoryScalarFieldEnum = {
  id: 'id',
  name: 'name',
  icon: 'icon',
  color: 'color'
} as const

export type CategoryScalarFieldEnum = (typeof CategoryScalarFieldEnum)[keyof typeof CategoryScalarFieldEnum]


export const CourseScalarFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  price: 'price',
  level: 'level',
  imageUrl: 'imageUrl',
  published: 'published',
  categoryId: 'categoryId',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt',
  certificateEnabled: 'certificateEnabled',
  completionRule: 'completionRule',
  enrollmentType: 'enrollmentType',
  fullDescription: 'fullDescription',
  language: 'language',
  prerequisites: 'prerequisites',
  shortDescription: 'shortDescription',
  slug: 'slug',
  targetAudience: 'targetAudience',
  visibility: 'visibility',
  whatYouLearn: 'whatYouLearn',
  courseCode: 'courseCode'
} as const

export type CourseScalarFieldEnum = (typeof CourseScalarFieldEnum)[keyof typeof CourseScalarFieldEnum]


export const ModuleScalarFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  order: 'order',
  courseId: 'courseId',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type ModuleScalarFieldEnum = (typeof ModuleScalarFieldEnum)[keyof typeof ModuleScalarFieldEnum]


export const LessonScalarFieldEnum = {
  id: 'id',
  title: 'title',
  contentType: 'contentType',
  content: 'content',
  duration: 'duration',
  order: 'order',
  moduleId: 'moduleId',
  quizId: 'quizId',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type LessonScalarFieldEnum = (typeof LessonScalarFieldEnum)[keyof typeof LessonScalarFieldEnum]


export const QuizScalarFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  type: 'type',
  timeLimit: 'timeLimit',
  attemptLimit: 'attemptLimit',
  passingScore: 'passingScore',
  randomize: 'randomize',
  status: 'status',
  isFinalQuiz: 'isFinalQuiz',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type QuizScalarFieldEnum = (typeof QuizScalarFieldEnum)[keyof typeof QuizScalarFieldEnum]


export const QuestionScalarFieldEnum = {
  id: 'id',
  quizId: 'quizId',
  type: 'type',
  question: 'question',
  options: 'options',
  correctAnswer: 'correctAnswer',
  explanation: 'explanation',
  score: 'score',
  order: 'order',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type QuestionScalarFieldEnum = (typeof QuestionScalarFieldEnum)[keyof typeof QuestionScalarFieldEnum]


export const EnrollmentScalarFieldEnum = {
  id: 'id',
  userId: 'userId',
  courseId: 'courseId',
  progress: 'progress',
  courseCompleted: 'courseCompleted',
  courseCompletedAt: 'courseCompletedAt',
  finalScore: 'finalScore',
  finalPredicate: 'finalPredicate',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type EnrollmentScalarFieldEnum = (typeof EnrollmentScalarFieldEnum)[keyof typeof EnrollmentScalarFieldEnum]


export const QuizAssignmentScalarFieldEnum = {
  id: 'id',
  userId: 'userId',
  quizId: 'quizId',
  status: 'status',
  score: 'score',
  answers: 'answers',
  createdAt: 'createdAt',
  attemptedAt: 'attemptedAt',
  submittedAt: 'submittedAt',
  completedAt: 'completedAt',
  isLocked: 'isLocked'
} as const

export type QuizAssignmentScalarFieldEnum = (typeof QuizAssignmentScalarFieldEnum)[keyof typeof QuizAssignmentScalarFieldEnum]


export const FileScalarFieldEnum = {
  id: 'id',
  filename: 'filename',
  originalName: 'originalName',
  mimeType: 'mimeType',
  size: 'size',
  path: 'path',
  type: 'type',
  courseId: 'courseId',
  moduleId: 'moduleId',
  lessonId: 'lessonId',
  metadata: 'metadata',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type FileScalarFieldEnum = (typeof FileScalarFieldEnum)[keyof typeof FileScalarFieldEnum]


export const ReviewScalarFieldEnum = {
  id: 'id',
  rating: 'rating',
  comment: 'comment',
  userId: 'userId',
  courseId: 'courseId',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type ReviewScalarFieldEnum = (typeof ReviewScalarFieldEnum)[keyof typeof ReviewScalarFieldEnum]


export const NoteScalarFieldEnum = {
  id: 'id',
  content: 'content',
  userId: 'userId',
  lessonId: 'lessonId',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type NoteScalarFieldEnum = (typeof NoteScalarFieldEnum)[keyof typeof NoteScalarFieldEnum]


export const UserProgressScalarFieldEnum = {
  id: 'id',
  userId: 'userId',
  lessonId: 'lessonId',
  isCompleted: 'isCompleted',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type UserProgressScalarFieldEnum = (typeof UserProgressScalarFieldEnum)[keyof typeof UserProgressScalarFieldEnum]


export const SiteSettingsScalarFieldEnum = {
  id: 'id',
  key: 'key',
  value: 'value',
  updatedAt: 'updatedAt'
} as const

export type SiteSettingsScalarFieldEnum = (typeof SiteSettingsScalarFieldEnum)[keyof typeof SiteSettingsScalarFieldEnum]


export const PurchaseScalarFieldEnum = {
  id: 'id',
  userId: 'userId',
  courseId: 'courseId',
  price: 'price',
  status: 'status',
  paymentType: 'paymentType',
  snapToken: 'snapToken',
  createdAt: 'createdAt',
  updatedAt: 'updatedAt'
} as const

export type PurchaseScalarFieldEnum = (typeof PurchaseScalarFieldEnum)[keyof typeof PurchaseScalarFieldEnum]


export const CertificateScalarFieldEnum = {
  id: 'id',
  certificateNumber: 'certificateNumber',
  sequenceNumber: 'sequenceNumber',
  userId: 'userId',
  courseId: 'courseId',
  courseName: 'courseName',
  userName: 'userName',
  predicate: 'predicate',
  finalScore: 'finalScore',
  completedAt: 'completedAt',
  issuedAt: 'issuedAt',
  pdfUrl: 'pdfUrl',
  qrCodeData: 'qrCodeData'
} as const

export type CertificateScalarFieldEnum = (typeof CertificateScalarFieldEnum)[keyof typeof CertificateScalarFieldEnum]


export const SortOrder = {
  asc: 'asc',
  desc: 'desc'
} as const

export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]


export const UserOrderByRelevanceFieldEnum = {
  id: 'id',
  clerkId: 'clerkId',
  email: 'email',
  role: 'role'
} as const

export type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum]


export const CategoryOrderByRelevanceFieldEnum = {
  id: 'id',
  name: 'name',
  icon: 'icon',
  color: 'color'
} as const

export type CategoryOrderByRelevanceFieldEnum = (typeof CategoryOrderByRelevanceFieldEnum)[keyof typeof CategoryOrderByRelevanceFieldEnum]


export const NullsOrder = {
  first: 'first',
  last: 'last'
} as const

export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]


export const CourseOrderByRelevanceFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  level: 'level',
  imageUrl: 'imageUrl',
  categoryId: 'categoryId',
  completionRule: 'completionRule',
  enrollmentType: 'enrollmentType',
  fullDescription: 'fullDescription',
  language: 'language',
  prerequisites: 'prerequisites',
  shortDescription: 'shortDescription',
  slug: 'slug',
  targetAudience: 'targetAudience',
  visibility: 'visibility',
  whatYouLearn: 'whatYouLearn',
  courseCode: 'courseCode'
} as const

export type CourseOrderByRelevanceFieldEnum = (typeof CourseOrderByRelevanceFieldEnum)[keyof typeof CourseOrderByRelevanceFieldEnum]


export const ModuleOrderByRelevanceFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  courseId: 'courseId'
} as const

export type ModuleOrderByRelevanceFieldEnum = (typeof ModuleOrderByRelevanceFieldEnum)[keyof typeof ModuleOrderByRelevanceFieldEnum]


export const LessonOrderByRelevanceFieldEnum = {
  id: 'id',
  title: 'title',
  contentType: 'contentType',
  content: 'content',
  moduleId: 'moduleId',
  quizId: 'quizId'
} as const

export type LessonOrderByRelevanceFieldEnum = (typeof LessonOrderByRelevanceFieldEnum)[keyof typeof LessonOrderByRelevanceFieldEnum]


export const QuizOrderByRelevanceFieldEnum = {
  id: 'id',
  title: 'title',
  description: 'description',
  type: 'type',
  status: 'status'
} as const

export type QuizOrderByRelevanceFieldEnum = (typeof QuizOrderByRelevanceFieldEnum)[keyof typeof QuizOrderByRelevanceFieldEnum]


export const QuestionOrderByRelevanceFieldEnum = {
  id: 'id',
  quizId: 'quizId',
  type: 'type',
  question: 'question',
  options: 'options',
  correctAnswer: 'correctAnswer',
  explanation: 'explanation'
} as const

export type QuestionOrderByRelevanceFieldEnum = (typeof QuestionOrderByRelevanceFieldEnum)[keyof typeof QuestionOrderByRelevanceFieldEnum]


export const EnrollmentOrderByRelevanceFieldEnum = {
  id: 'id',
  userId: 'userId',
  courseId: 'courseId',
  finalPredicate: 'finalPredicate'
} as const

export type EnrollmentOrderByRelevanceFieldEnum = (typeof EnrollmentOrderByRelevanceFieldEnum)[keyof typeof EnrollmentOrderByRelevanceFieldEnum]


export const QuizAssignmentOrderByRelevanceFieldEnum = {
  id: 'id',
  userId: 'userId',
  quizId: 'quizId',
  status: 'status',
  answers: 'answers'
} as const

export type QuizAssignmentOrderByRelevanceFieldEnum = (typeof QuizAssignmentOrderByRelevanceFieldEnum)[keyof typeof QuizAssignmentOrderByRelevanceFieldEnum]


export const FileOrderByRelevanceFieldEnum = {
  id: 'id',
  filename: 'filename',
  originalName: 'originalName',
  mimeType: 'mimeType',
  path: 'path',
  type: 'type',
  courseId: 'courseId',
  moduleId: 'moduleId',
  lessonId: 'lessonId',
  metadata: 'metadata'
} as const

export type FileOrderByRelevanceFieldEnum = (typeof FileOrderByRelevanceFieldEnum)[keyof typeof FileOrderByRelevanceFieldEnum]


export const ReviewOrderByRelevanceFieldEnum = {
  id: 'id',
  comment: 'comment',
  userId: 'userId',
  courseId: 'courseId'
} as const

export type ReviewOrderByRelevanceFieldEnum = (typeof ReviewOrderByRelevanceFieldEnum)[keyof typeof ReviewOrderByRelevanceFieldEnum]


export const NoteOrderByRelevanceFieldEnum = {
  id: 'id',
  content: 'content',
  userId: 'userId',
  lessonId: 'lessonId'
} as const

export type NoteOrderByRelevanceFieldEnum = (typeof NoteOrderByRelevanceFieldEnum)[keyof typeof NoteOrderByRelevanceFieldEnum]


export const UserProgressOrderByRelevanceFieldEnum = {
  id: 'id',
  userId: 'userId',
  lessonId: 'lessonId'
} as const

export type UserProgressOrderByRelevanceFieldEnum = (typeof UserProgressOrderByRelevanceFieldEnum)[keyof typeof UserProgressOrderByRelevanceFieldEnum]


export const SiteSettingsOrderByRelevanceFieldEnum = {
  id: 'id',
  key: 'key',
  value: 'value'
} as const

export type SiteSettingsOrderByRelevanceFieldEnum = (typeof SiteSettingsOrderByRelevanceFieldEnum)[keyof typeof SiteSettingsOrderByRelevanceFieldEnum]


export const PurchaseOrderByRelevanceFieldEnum = {
  id: 'id',
  userId: 'userId',
  courseId: 'courseId',
  status: 'status',
  paymentType: 'paymentType',
  snapToken: 'snapToken'
} as const

export type PurchaseOrderByRelevanceFieldEnum = (typeof PurchaseOrderByRelevanceFieldEnum)[keyof typeof PurchaseOrderByRelevanceFieldEnum]


export const CertificateOrderByRelevanceFieldEnum = {
  id: 'id',
  certificateNumber: 'certificateNumber',
  userId: 'userId',
  courseId: 'courseId',
  courseName: 'courseName',
  userName: 'userName',
  predicate: 'predicate',
  pdfUrl: 'pdfUrl',
  qrCodeData: 'qrCodeData'
} as const

export type CertificateOrderByRelevanceFieldEnum = (typeof CertificateOrderByRelevanceFieldEnum)[keyof typeof CertificateOrderByRelevanceFieldEnum]



/**
 * Field references
 */


/**
 * Reference to a field of type 'String'
 */
export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
    


/**
 * Reference to a field of type 'DateTime'
 */
export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime'>
    


/**
 * Reference to a field of type 'Decimal'
 */
export type DecimalFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Decimal'>
    


/**
 * Reference to a field of type 'Boolean'
 */
export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Boolean'>
    


/**
 * Reference to a field of type 'Int'
 */
export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>
    


/**
 * Reference to a field of type 'Float'
 */
export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>
    

/**
 * Batch Payload for updateMany & deleteMany & createMany
 */
export type BatchPayload = {
  count: number
}

export const defineExtension = runtime.Extensions.defineExtension as unknown as runtime.Types.Extensions.ExtendsHook<"define", TypeMapCb, runtime.Types.Extensions.DefaultArgs>
export type DefaultPrismaClient = PrismaClient
export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
export type PrismaClientOptions = ({
  /**
   * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`.
   */
  adapter: runtime.SqlDriverAdapterFactory
  accelerateUrl?: never
} | {
  /**
   * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database.
   */
  accelerateUrl: string
  adapter?: never
}) & {
  /**
   * @default "colorless"
   */
  errorFormat?: ErrorFormat
  /**
   * @example
   * ```
   * // Shorthand for `emit: 'stdout'`
   * log: ['query', 'info', 'warn', 'error']
   * 
   * // Emit as events only
   * log: [
   *   { emit: 'event', level: 'query' },
   *   { emit: 'event', level: 'info' },
   *   { emit: 'event', level: 'warn' }
   *   { emit: 'event', level: 'error' }
   * ]
   * 
   * / Emit as events and log to stdout
   * og: [
   *  { emit: 'stdout', level: 'query' },
   *  { emit: 'stdout', level: 'info' },
   *  { emit: 'stdout', level: 'warn' }
   *  { emit: 'stdout', level: 'error' }
   * 
   * ```
   * Read more in our [docs](https://pris.ly/d/logging).
   */
  log?: (LogLevel | LogDefinition)[]
  /**
   * The default values for transactionOptions
   * maxWait ?= 2000
   * timeout ?= 5000
   */
  transactionOptions?: {
    maxWait?: number
    timeout?: number
    isolationLevel?: TransactionIsolationLevel
  }
  /**
   * Global configuration for omitting model fields by default.
   * 
   * @example
   * ```
   * const prisma = new PrismaClient({
   *   omit: {
   *     user: {
   *       password: true
   *     }
   *   }
   * })
   * ```
   */
  omit?: GlobalOmitConfig
  /**
   * SQL commenter plugins that add metadata to SQL queries as comments.
   * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/
   * 
   * @example
   * ```
   * const prisma = new PrismaClient({
   *   adapter,
   *   comments: [
   *     traceContext(),
   *     queryInsights(),
   *   ],
   * })
   * ```
   */
  comments?: runtime.SqlCommenterPlugin[]
}
export type GlobalOmitConfig = {
  user?: Prisma.UserOmit
  category?: Prisma.CategoryOmit
  course?: Prisma.CourseOmit
  module?: Prisma.ModuleOmit
  lesson?: Prisma.LessonOmit
  quiz?: Prisma.QuizOmit
  question?: Prisma.QuestionOmit
  enrollment?: Prisma.EnrollmentOmit
  quizAssignment?: Prisma.QuizAssignmentOmit
  file?: Prisma.FileOmit
  review?: Prisma.ReviewOmit
  note?: Prisma.NoteOmit
  userProgress?: Prisma.UserProgressOmit
  siteSettings?: Prisma.SiteSettingsOmit
  purchase?: Prisma.PurchaseOmit
  certificate?: Prisma.CertificateOmit
}

/* Types for Logging */
export type LogLevel = 'info' | 'query' | 'warn' | 'error'
export type LogDefinition = {
  level: LogLevel
  emit: 'stdout' | 'event'
}

export type CheckIsLogLevel<T> = T extends LogLevel ? T : never;

export type GetLogType<T> = CheckIsLogLevel<
  T extends LogDefinition ? T['level'] : T
>;

export type GetEvents<T extends any[]> = T extends Array<LogLevel | LogDefinition>
  ? GetLogType<T[number]>
  : never;

export type QueryEvent = {
  timestamp: Date
  query: string
  params: string
  duration: number
  target: string
}

export type LogEvent = {
  timestamp: Date
  message: string
  target: string
}
/* End Types for Logging */


export type PrismaAction =
  | 'findUnique'
  | 'findUniqueOrThrow'
  | 'findMany'
  | 'findFirst'
  | 'findFirstOrThrow'
  | 'create'
  | 'createMany'
  | 'createManyAndReturn'
  | 'update'
  | 'updateMany'
  | 'updateManyAndReturn'
  | 'upsert'
  | 'delete'
  | 'deleteMany'
  | 'executeRaw'
  | 'queryRaw'
  | 'aggregate'
  | 'count'
  | 'runCommandRaw'
  | 'findRaw'
  | 'groupBy'

/**
 * `PrismaClient` proxy available in interactive transactions.
 */
export type TransactionClient = Omit<DefaultPrismaClient, runtime.ITXClientDenyList>

