
/**
 * Client
**/

import * as runtime from './runtime/client.js';
import $Types = runtime.Types // general types
import $Public = runtime.Types.Public
import $Utils = runtime.Types.Utils
import $Extensions = runtime.Types.Extensions
import $Result = runtime.Types.Result

export type PrismaPromise<T> = $Public.PrismaPromise<T>


/**
 * Model Place
 * 
 */
export type Place = $Result.DefaultSelection<Prisma.$PlacePayload>
/**
 * Model User
 * 
 */
export type User = $Result.DefaultSelection<Prisma.$UserPayload>
/**
 * Model UserFavoritePlace
 * 
 */
export type UserFavoritePlace = $Result.DefaultSelection<Prisma.$UserFavoritePlacePayload>
/**
 * Model VoiceExperience
 * 
 */
export type VoiceExperience = $Result.DefaultSelection<Prisma.$VoiceExperiencePayload>

/**
 * Enums
 */
export namespace $Enums {
  export const VoiceExperienceStatus: {
  UPLOADED: 'UPLOADED',
  TRANSCRIBING: 'TRANSCRIBING',
  TRANSCRIBED: 'TRANSCRIBED',
  ANALYZING: 'ANALYZING',
  ANALYZED: 'ANALYZED',
  FAILED: 'FAILED'
};

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

}

export type VoiceExperienceStatus = $Enums.VoiceExperienceStatus

export const VoiceExperienceStatus: typeof $Enums.VoiceExperienceStatus

/**
 * ##  Prisma Client ʲˢ
 *
 * Type-safe database client for TypeScript & Node.js
 * @example
 * ```
 * const prisma = new PrismaClient({
 *   adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL })
 * })
 * // Fetch zero or more Places
 * const places = await prisma.place.findMany()
 * ```
 *
 *
 * Read more in our [docs](https://pris.ly/d/client).
 */
export class PrismaClient<
  ClientOptions extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
  const U = 'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never,
  ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs
> {
  [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }

    /**
   * ##  Prisma Client ʲˢ
   *
   * Type-safe database client for TypeScript & Node.js
   * @example
   * ```
   * const prisma = new PrismaClient({
   *   adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL })
   * })
   * // Fetch zero or more Places
   * const places = await prisma.place.findMany()
   * ```
   *
   *
   * Read more in our [docs](https://pris.ly/d/client).
   */

  constructor(optionsArg ?: Prisma.Subset<ClientOptions, Prisma.PrismaClientOptions>);
  $on<V extends U>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;

  /**
   * Connect with the database
   */
  $connect(): $Utils.JsPromise<void>;

  /**
   * Disconnect from the database
   */
  $disconnect(): $Utils.JsPromise<void>;

/**
   * Executes a prepared raw query and returns the number of affected rows.
   * @example
   * ```
   * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://pris.ly/d/raw-queries).
   */
  $executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Executes a raw query and returns the number of affected rows.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://pris.ly/d/raw-queries).
   */
  $executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Performs a prepared raw query and returns the `SELECT` data.
   * @example
   * ```
   * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://pris.ly/d/raw-queries).
   */
  $queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;

  /**
   * Performs a raw query and returns the `SELECT` data.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://pris.ly/d/raw-queries).
   */
  $queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;


  /**
   * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
   * @example
   * ```
   * const [george, bob, alice] = await prisma.$transaction([
   *   prisma.user.create({ data: { name: 'George' } }),
   *   prisma.user.create({ data: { name: 'Bob' } }),
   *   prisma.user.create({ data: { name: 'Alice' } }),
   * ])
   * ```
   * 
   * Read more in our [docs](https://www.prisma.io/docs/orm/prisma-client/queries/transactions).
   */
  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>

  $transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => $Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<R>

  $extends: $Extensions.ExtendsHook<"extends", Prisma.TypeMapCb<ClientOptions>, ExtArgs, $Utils.Call<Prisma.TypeMapCb<ClientOptions>, {
    extArgs: ExtArgs
  }>>

      /**
   * `prisma.place`: Exposes CRUD operations for the **Place** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Places
    * const places = await prisma.place.findMany()
    * ```
    */
  get place(): Prisma.PlaceDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.user`: Exposes CRUD operations for the **User** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Users
    * const users = await prisma.user.findMany()
    * ```
    */
  get user(): Prisma.UserDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userFavoritePlace`: Exposes CRUD operations for the **UserFavoritePlace** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserFavoritePlaces
    * const userFavoritePlaces = await prisma.userFavoritePlace.findMany()
    * ```
    */
  get userFavoritePlace(): Prisma.UserFavoritePlaceDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.voiceExperience`: Exposes CRUD operations for the **VoiceExperience** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more VoiceExperiences
    * const voiceExperiences = await prisma.voiceExperience.findMany()
    * ```
    */
  get voiceExperience(): Prisma.VoiceExperienceDelegate<ExtArgs, ClientOptions>;
}

export namespace Prisma {
  export import DMMF = runtime.DMMF

  export type PrismaPromise<T> = $Public.PrismaPromise<T>

  /**
   * Validator
   */
  export import validator = runtime.Public.validator

  /**
   * Prisma Errors
   */
  export import PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
  export import PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
  export import PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
  export import PrismaClientInitializationError = runtime.PrismaClientInitializationError
  export import PrismaClientValidationError = runtime.PrismaClientValidationError

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



  /**
   * Decimal.js
   */
  export import Decimal = runtime.Decimal

  export type DecimalJsLike = runtime.DecimalJsLike

  /**
  * Extensions
  */
  export import Extension = $Extensions.UserArgs
  export import getExtensionContext = runtime.Extensions.getExtensionContext
  export import Args = $Public.Args
  export import Payload = $Public.Payload
  export import Result = $Public.Result
  export import Exact = $Public.Exact

  /**
   * Prisma Client JS version: 7.8.0
   * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a
   */
  export type PrismaVersion = {
    client: string
    engine: string
  }

  export const prismaVersion: PrismaVersion

  /**
   * Utility Types
   */


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

  /**
   * Types of the values used to represent different kinds of `null` values when working with JSON fields.
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  namespace NullTypes {
    /**
    * Type of `Prisma.DbNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.DbNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class DbNull {
      private DbNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.JsonNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.JsonNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class JsonNull {
      private JsonNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.AnyNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.AnyNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class AnyNull {
      private AnyNull: never
      private constructor()
    }
  }

  /**
   * 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: NullTypes.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: NullTypes.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: NullTypes.AnyNull

  type SelectAndInclude = {
    select: any
    include: any
  }

  type SelectAndOmit = {
    select: any
    omit: any
  }

  /**
   * Get the type of the value, that the Promise holds.
   */
  export type PromiseType<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U : T;

  /**
   * Get the return type of a function which returns a Promise.
   */
  export type PromiseReturnType<T extends (...args: any) => $Utils.JsPromise<any>> = PromiseType<ReturnType<T>>

  /**
   * 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>;

  export type RequiredKeys<T> = {
    [K in keyof T]-?: {} extends Prisma__Pick<T, K> ? never : K
  }[keyof T]

  export type TruthyKeys<T> = keyof {
    [K in keyof T as T[K] extends false | undefined | null ? never : K]: K
  }

  export type TrueKeys<T> = TruthyKeys<Prisma__Pick<T, RequiredKeys<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
   */
  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]

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

  export type Union = any

  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 AtBasic<O extends object, K extends Key> = K extends keyof O ? O[K] : never;
  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
  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>>>;

  /**
  A [[Boolean]]
  */
  export type Boolean = True | False

  // /**
  // 1
  // */
  export type True = 1

  /**
  0
  */
  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

  type Cast<A, B> = A extends B ? A : B;

  export const type: unique symbol;



  /**
   * Used by group by
   */

  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

  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>
  type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T

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

  /**
   * Exclude all keys with underscores
   */
  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: {
    Place: 'Place',
    User: 'User',
    UserFavoritePlace: 'UserFavoritePlace',
    VoiceExperience: 'VoiceExperience'
  };

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



  interface TypeMapCb<ClientOptions = {}> extends $Utils.Fn<{extArgs: $Extensions.InternalArgs }, $Utils.Record<string, any>> {
    returns: Prisma.TypeMap<this['params']['extArgs'], ClientOptions extends { omit: infer OmitOptions } ? OmitOptions : {}>
  }

  export type TypeMap<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
    globalOmitOptions: {
      omit: GlobalOmitOptions
    }
    meta: {
      modelProps: "place" | "user" | "userFavoritePlace" | "voiceExperience"
      txIsolationLevel: Prisma.TransactionIsolationLevel
    }
    model: {
      Place: {
        payload: Prisma.$PlacePayload<ExtArgs>
        fields: Prisma.PlaceFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PlaceFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PlaceFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          findFirst: {
            args: Prisma.PlaceFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PlaceFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          findMany: {
            args: Prisma.PlaceFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>[]
          }
          create: {
            args: Prisma.PlaceCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          createMany: {
            args: Prisma.PlaceCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.PlaceCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>[]
          }
          delete: {
            args: Prisma.PlaceDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          update: {
            args: Prisma.PlaceUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          deleteMany: {
            args: Prisma.PlaceDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PlaceUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.PlaceUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>[]
          }
          upsert: {
            args: Prisma.PlaceUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PlacePayload>
          }
          aggregate: {
            args: Prisma.PlaceAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePlace>
          }
          groupBy: {
            args: Prisma.PlaceGroupByArgs<ExtArgs>
            result: $Utils.Optional<PlaceGroupByOutputType>[]
          }
          count: {
            args: Prisma.PlaceCountArgs<ExtArgs>
            result: $Utils.Optional<PlaceCountAggregateOutputType> | number
          }
        }
      }
      User: {
        payload: Prisma.$UserPayload<ExtArgs>
        fields: Prisma.UserFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          findFirst: {
            args: Prisma.UserFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          findMany: {
            args: Prisma.UserFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>[]
          }
          create: {
            args: Prisma.UserCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          createMany: {
            args: Prisma.UserCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.UserCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>[]
          }
          delete: {
            args: Prisma.UserDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          update: {
            args: Prisma.UserUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          deleteMany: {
            args: Prisma.UserDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.UserUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>[]
          }
          upsert: {
            args: Prisma.UserUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          aggregate: {
            args: Prisma.UserAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUser>
          }
          groupBy: {
            args: Prisma.UserGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserCountArgs<ExtArgs>
            result: $Utils.Optional<UserCountAggregateOutputType> | number
          }
        }
      }
      UserFavoritePlace: {
        payload: Prisma.$UserFavoritePlacePayload<ExtArgs>
        fields: Prisma.UserFavoritePlaceFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserFavoritePlaceFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserFavoritePlaceFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          findFirst: {
            args: Prisma.UserFavoritePlaceFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserFavoritePlaceFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          findMany: {
            args: Prisma.UserFavoritePlaceFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>[]
          }
          create: {
            args: Prisma.UserFavoritePlaceCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          createMany: {
            args: Prisma.UserFavoritePlaceCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.UserFavoritePlaceCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>[]
          }
          delete: {
            args: Prisma.UserFavoritePlaceDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          update: {
            args: Prisma.UserFavoritePlaceUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          deleteMany: {
            args: Prisma.UserFavoritePlaceDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserFavoritePlaceUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.UserFavoritePlaceUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>[]
          }
          upsert: {
            args: Prisma.UserFavoritePlaceUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserFavoritePlacePayload>
          }
          aggregate: {
            args: Prisma.UserFavoritePlaceAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserFavoritePlace>
          }
          groupBy: {
            args: Prisma.UserFavoritePlaceGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserFavoritePlaceGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserFavoritePlaceCountArgs<ExtArgs>
            result: $Utils.Optional<UserFavoritePlaceCountAggregateOutputType> | number
          }
        }
      }
      VoiceExperience: {
        payload: Prisma.$VoiceExperiencePayload<ExtArgs>
        fields: Prisma.VoiceExperienceFieldRefs
        operations: {
          findUnique: {
            args: Prisma.VoiceExperienceFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.VoiceExperienceFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          findFirst: {
            args: Prisma.VoiceExperienceFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.VoiceExperienceFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          findMany: {
            args: Prisma.VoiceExperienceFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>[]
          }
          create: {
            args: Prisma.VoiceExperienceCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          createMany: {
            args: Prisma.VoiceExperienceCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.VoiceExperienceCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>[]
          }
          delete: {
            args: Prisma.VoiceExperienceDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          update: {
            args: Prisma.VoiceExperienceUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          deleteMany: {
            args: Prisma.VoiceExperienceDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.VoiceExperienceUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.VoiceExperienceUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>[]
          }
          upsert: {
            args: Prisma.VoiceExperienceUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$VoiceExperiencePayload>
          }
          aggregate: {
            args: Prisma.VoiceExperienceAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateVoiceExperience>
          }
          groupBy: {
            args: Prisma.VoiceExperienceGroupByArgs<ExtArgs>
            result: $Utils.Optional<VoiceExperienceGroupByOutputType>[]
          }
          count: {
            args: Prisma.VoiceExperienceCountArgs<ExtArgs>
            result: $Utils.Optional<VoiceExperienceCountAggregateOutputType> | number
          }
        }
      }
    }
  } & {
    other: {
      payload: any
      operations: {
        $executeRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $executeRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
        $queryRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $queryRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
      }
    }
  }
  export const defineExtension: $Extensions.ExtendsHook<"define", Prisma.TypeMapCb, $Extensions.DefaultArgs>
  export type DefaultPrismaClient = PrismaClient
  export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
  export interface PrismaClientOptions {
    /**
     * @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?: Prisma.TransactionIsolationLevel
    }
    /**
     * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale`
     */
    adapter?: runtime.SqlDriverAdapterFactory
    /**
     * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database.
     */
    accelerateUrl?: string
    /**
     * Global configuration for omitting model fields by default.
     * 
     * @example
     * ```
     * const prisma = new PrismaClient({
     *   omit: {
     *     user: {
     *       password: true
     *     }
     *   }
     * })
     * ```
     */
    omit?: Prisma.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 = {
    place?: PlaceOmit
    user?: UserOmit
    userFavoritePlace?: UserFavoritePlaceOmit
    voiceExperience?: VoiceExperienceOmit
  }

  /* 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'

  // tested in getLogLevel.test.ts
  export function getLogLevel(log: Array<LogLevel | LogDefinition>): LogLevel | undefined;

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

  export type Datasource = {
    url?: string
  }

  /**
   * Count Types
   */


  /**
   * Count Type PlaceCountOutputType
   */

  export type PlaceCountOutputType = {
    experiences: number
    favoriteUsers: number
  }

  export type PlaceCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    experiences?: boolean | PlaceCountOutputTypeCountExperiencesArgs
    favoriteUsers?: boolean | PlaceCountOutputTypeCountFavoriteUsersArgs
  }

  // Custom InputTypes
  /**
   * PlaceCountOutputType without action
   */
  export type PlaceCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PlaceCountOutputType
     */
    select?: PlaceCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * PlaceCountOutputType without action
   */
  export type PlaceCountOutputTypeCountExperiencesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: VoiceExperienceWhereInput
  }

  /**
   * PlaceCountOutputType without action
   */
  export type PlaceCountOutputTypeCountFavoriteUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserFavoritePlaceWhereInput
  }


  /**
   * Count Type UserCountOutputType
   */

  export type UserCountOutputType = {
    voiceExperiences: number
    favoritePlaces: number
  }

  export type UserCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    voiceExperiences?: boolean | UserCountOutputTypeCountVoiceExperiencesArgs
    favoritePlaces?: boolean | UserCountOutputTypeCountFavoritePlacesArgs
  }

  // Custom InputTypes
  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCountOutputType
     */
    select?: UserCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeCountVoiceExperiencesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: VoiceExperienceWhereInput
  }

  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeCountFavoritePlacesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserFavoritePlaceWhereInput
  }


  /**
   * Models
   */

  /**
   * Model Place
   */

  export type AggregatePlace = {
    _count: PlaceCountAggregateOutputType | null
    _avg: PlaceAvgAggregateOutputType | null
    _sum: PlaceSumAggregateOutputType | null
    _min: PlaceMinAggregateOutputType | null
    _max: PlaceMaxAggregateOutputType | null
  }

  export type PlaceAvgAggregateOutputType = {
    latitude: number | null
    longitude: number | null
    googleRating: number | null
    googleUserRatingCount: number | null
  }

  export type PlaceSumAggregateOutputType = {
    latitude: number | null
    longitude: number | null
    googleRating: number | null
    googleUserRatingCount: number | null
  }

  export type PlaceMinAggregateOutputType = {
    id: string | null
    googlePlaceId: string | null
    name: string | null
    latitude: number | null
    longitude: number | null
    googlePrimaryType: string | null
    googleBusinessStatus: string | null
    googleRating: number | null
    googleUserRatingCount: number | null
    googlePayloadFetchedAt: Date | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type PlaceMaxAggregateOutputType = {
    id: string | null
    googlePlaceId: string | null
    name: string | null
    latitude: number | null
    longitude: number | null
    googlePrimaryType: string | null
    googleBusinessStatus: string | null
    googleRating: number | null
    googleUserRatingCount: number | null
    googlePayloadFetchedAt: Date | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type PlaceCountAggregateOutputType = {
    id: number
    googlePlaceId: number
    name: number
    latitude: number
    longitude: number
    googlePrimaryType: number
    googleTypes: number
    googleBusinessStatus: number
    googleRating: number
    googleUserRatingCount: number
    googleRegularOpeningHours: number
    googleCurrentOpeningHours: number
    googlePhotos: number
    googlePayload: number
    googlePayloadFetchedAt: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type PlaceAvgAggregateInputType = {
    latitude?: true
    longitude?: true
    googleRating?: true
    googleUserRatingCount?: true
  }

  export type PlaceSumAggregateInputType = {
    latitude?: true
    longitude?: true
    googleRating?: true
    googleUserRatingCount?: true
  }

  export type PlaceMinAggregateInputType = {
    id?: true
    googlePlaceId?: true
    name?: true
    latitude?: true
    longitude?: true
    googlePrimaryType?: true
    googleBusinessStatus?: true
    googleRating?: true
    googleUserRatingCount?: true
    googlePayloadFetchedAt?: true
    createdAt?: true
    updatedAt?: true
  }

  export type PlaceMaxAggregateInputType = {
    id?: true
    googlePlaceId?: true
    name?: true
    latitude?: true
    longitude?: true
    googlePrimaryType?: true
    googleBusinessStatus?: true
    googleRating?: true
    googleUserRatingCount?: true
    googlePayloadFetchedAt?: true
    createdAt?: true
    updatedAt?: true
  }

  export type PlaceCountAggregateInputType = {
    id?: true
    googlePlaceId?: true
    name?: true
    latitude?: true
    longitude?: true
    googlePrimaryType?: true
    googleTypes?: true
    googleBusinessStatus?: true
    googleRating?: true
    googleUserRatingCount?: true
    googleRegularOpeningHours?: true
    googleCurrentOpeningHours?: true
    googlePhotos?: true
    googlePayload?: true
    googlePayloadFetchedAt?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type PlaceAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Place to aggregate.
     */
    where?: PlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Places to fetch.
     */
    orderBy?: PlaceOrderByWithRelationInput | PlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Places from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Places.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Places
    **/
    _count?: true | PlaceCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PlaceAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PlaceSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PlaceMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PlaceMaxAggregateInputType
  }

  export type GetPlaceAggregateType<T extends PlaceAggregateArgs> = {
        [P in keyof T & keyof AggregatePlace]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePlace[P]>
      : GetScalarType<T[P], AggregatePlace[P]>
  }




  export type PlaceGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PlaceWhereInput
    orderBy?: PlaceOrderByWithAggregationInput | PlaceOrderByWithAggregationInput[]
    by: PlaceScalarFieldEnum[] | PlaceScalarFieldEnum
    having?: PlaceScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PlaceCountAggregateInputType | true
    _avg?: PlaceAvgAggregateInputType
    _sum?: PlaceSumAggregateInputType
    _min?: PlaceMinAggregateInputType
    _max?: PlaceMaxAggregateInputType
  }

  export type PlaceGroupByOutputType = {
    id: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType: string | null
    googleTypes: string[]
    googleBusinessStatus: string | null
    googleRating: number | null
    googleUserRatingCount: number | null
    googleRegularOpeningHours: JsonValue | null
    googleCurrentOpeningHours: JsonValue | null
    googlePhotos: JsonValue | null
    googlePayload: JsonValue | null
    googlePayloadFetchedAt: Date | null
    createdAt: Date
    updatedAt: Date
    _count: PlaceCountAggregateOutputType | null
    _avg: PlaceAvgAggregateOutputType | null
    _sum: PlaceSumAggregateOutputType | null
    _min: PlaceMinAggregateOutputType | null
    _max: PlaceMaxAggregateOutputType | null
  }

  type GetPlaceGroupByPayload<T extends PlaceGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PlaceGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PlaceGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PlaceGroupByOutputType[P]>
            : GetScalarType<T[P], PlaceGroupByOutputType[P]>
        }
      >
    >


  export type PlaceSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    googlePlaceId?: boolean
    name?: boolean
    latitude?: boolean
    longitude?: boolean
    googlePrimaryType?: boolean
    googleTypes?: boolean
    googleBusinessStatus?: boolean
    googleRating?: boolean
    googleUserRatingCount?: boolean
    googleRegularOpeningHours?: boolean
    googleCurrentOpeningHours?: boolean
    googlePhotos?: boolean
    googlePayload?: boolean
    googlePayloadFetchedAt?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    experiences?: boolean | Place$experiencesArgs<ExtArgs>
    favoriteUsers?: boolean | Place$favoriteUsersArgs<ExtArgs>
    _count?: boolean | PlaceCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["place"]>

  export type PlaceSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    googlePlaceId?: boolean
    name?: boolean
    latitude?: boolean
    longitude?: boolean
    googlePrimaryType?: boolean
    googleTypes?: boolean
    googleBusinessStatus?: boolean
    googleRating?: boolean
    googleUserRatingCount?: boolean
    googleRegularOpeningHours?: boolean
    googleCurrentOpeningHours?: boolean
    googlePhotos?: boolean
    googlePayload?: boolean
    googlePayloadFetchedAt?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["place"]>

  export type PlaceSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    googlePlaceId?: boolean
    name?: boolean
    latitude?: boolean
    longitude?: boolean
    googlePrimaryType?: boolean
    googleTypes?: boolean
    googleBusinessStatus?: boolean
    googleRating?: boolean
    googleUserRatingCount?: boolean
    googleRegularOpeningHours?: boolean
    googleCurrentOpeningHours?: boolean
    googlePhotos?: boolean
    googlePayload?: boolean
    googlePayloadFetchedAt?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["place"]>

  export type PlaceSelectScalar = {
    id?: boolean
    googlePlaceId?: boolean
    name?: boolean
    latitude?: boolean
    longitude?: boolean
    googlePrimaryType?: boolean
    googleTypes?: boolean
    googleBusinessStatus?: boolean
    googleRating?: boolean
    googleUserRatingCount?: boolean
    googleRegularOpeningHours?: boolean
    googleCurrentOpeningHours?: boolean
    googlePhotos?: boolean
    googlePayload?: boolean
    googlePayloadFetchedAt?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type PlaceOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "googlePlaceId" | "name" | "latitude" | "longitude" | "googlePrimaryType" | "googleTypes" | "googleBusinessStatus" | "googleRating" | "googleUserRatingCount" | "googleRegularOpeningHours" | "googleCurrentOpeningHours" | "googlePhotos" | "googlePayload" | "googlePayloadFetchedAt" | "createdAt" | "updatedAt", ExtArgs["result"]["place"]>
  export type PlaceInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    experiences?: boolean | Place$experiencesArgs<ExtArgs>
    favoriteUsers?: boolean | Place$favoriteUsersArgs<ExtArgs>
    _count?: boolean | PlaceCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type PlaceIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type PlaceIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $PlacePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Place"
    objects: {
      experiences: Prisma.$VoiceExperiencePayload<ExtArgs>[]
      favoriteUsers: Prisma.$UserFavoritePlacePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: string
      googlePlaceId: string
      name: string
      latitude: number
      longitude: number
      googlePrimaryType: string | null
      googleTypes: string[]
      googleBusinessStatus: string | null
      googleRating: number | null
      googleUserRatingCount: number | null
      googleRegularOpeningHours: Prisma.JsonValue | null
      googleCurrentOpeningHours: Prisma.JsonValue | null
      googlePhotos: Prisma.JsonValue | null
      googlePayload: Prisma.JsonValue | null
      googlePayloadFetchedAt: Date | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["place"]>
    composites: {}
  }

  type PlaceGetPayload<S extends boolean | null | undefined | PlaceDefaultArgs> = $Result.GetResult<Prisma.$PlacePayload, S>

  type PlaceCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PlaceFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PlaceCountAggregateInputType | true
    }

  export interface PlaceDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Place'], meta: { name: 'Place' } }
    /**
     * Find zero or one Place that matches the filter.
     * @param {PlaceFindUniqueArgs} args - Arguments to find a Place
     * @example
     * // Get one Place
     * const place = await prisma.place.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PlaceFindUniqueArgs>(args: SelectSubset<T, PlaceFindUniqueArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Place that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PlaceFindUniqueOrThrowArgs} args - Arguments to find a Place
     * @example
     * // Get one Place
     * const place = await prisma.place.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PlaceFindUniqueOrThrowArgs>(args: SelectSubset<T, PlaceFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Place that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceFindFirstArgs} args - Arguments to find a Place
     * @example
     * // Get one Place
     * const place = await prisma.place.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PlaceFindFirstArgs>(args?: SelectSubset<T, PlaceFindFirstArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Place that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceFindFirstOrThrowArgs} args - Arguments to find a Place
     * @example
     * // Get one Place
     * const place = await prisma.place.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PlaceFindFirstOrThrowArgs>(args?: SelectSubset<T, PlaceFindFirstOrThrowArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Places that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Places
     * const places = await prisma.place.findMany()
     * 
     * // Get first 10 Places
     * const places = await prisma.place.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const placeWithIdOnly = await prisma.place.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PlaceFindManyArgs>(args?: SelectSubset<T, PlaceFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Place.
     * @param {PlaceCreateArgs} args - Arguments to create a Place.
     * @example
     * // Create one Place
     * const Place = await prisma.place.create({
     *   data: {
     *     // ... data to create a Place
     *   }
     * })
     * 
     */
    create<T extends PlaceCreateArgs>(args: SelectSubset<T, PlaceCreateArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Places.
     * @param {PlaceCreateManyArgs} args - Arguments to create many Places.
     * @example
     * // Create many Places
     * const place = await prisma.place.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PlaceCreateManyArgs>(args?: SelectSubset<T, PlaceCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Places and returns the data saved in the database.
     * @param {PlaceCreateManyAndReturnArgs} args - Arguments to create many Places.
     * @example
     * // Create many Places
     * const place = await prisma.place.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Places and only return the `id`
     * const placeWithIdOnly = await prisma.place.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends PlaceCreateManyAndReturnArgs>(args?: SelectSubset<T, PlaceCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Place.
     * @param {PlaceDeleteArgs} args - Arguments to delete one Place.
     * @example
     * // Delete one Place
     * const Place = await prisma.place.delete({
     *   where: {
     *     // ... filter to delete one Place
     *   }
     * })
     * 
     */
    delete<T extends PlaceDeleteArgs>(args: SelectSubset<T, PlaceDeleteArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Place.
     * @param {PlaceUpdateArgs} args - Arguments to update one Place.
     * @example
     * // Update one Place
     * const place = await prisma.place.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PlaceUpdateArgs>(args: SelectSubset<T, PlaceUpdateArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Places.
     * @param {PlaceDeleteManyArgs} args - Arguments to filter Places to delete.
     * @example
     * // Delete a few Places
     * const { count } = await prisma.place.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PlaceDeleteManyArgs>(args?: SelectSubset<T, PlaceDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Places.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Places
     * const place = await prisma.place.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PlaceUpdateManyArgs>(args: SelectSubset<T, PlaceUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Places and returns the data updated in the database.
     * @param {PlaceUpdateManyAndReturnArgs} args - Arguments to update many Places.
     * @example
     * // Update many Places
     * const place = await prisma.place.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Places and only return the `id`
     * const placeWithIdOnly = await prisma.place.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends PlaceUpdateManyAndReturnArgs>(args: SelectSubset<T, PlaceUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one Place.
     * @param {PlaceUpsertArgs} args - Arguments to update or create a Place.
     * @example
     * // Update or create a Place
     * const place = await prisma.place.upsert({
     *   create: {
     *     // ... data to create a Place
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Place we want to update
     *   }
     * })
     */
    upsert<T extends PlaceUpsertArgs>(args: SelectSubset<T, PlaceUpsertArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Places.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceCountArgs} args - Arguments to filter Places to count.
     * @example
     * // Count the number of Places
     * const count = await prisma.place.count({
     *   where: {
     *     // ... the filter for the Places we want to count
     *   }
     * })
    **/
    count<T extends PlaceCountArgs>(
      args?: Subset<T, PlaceCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PlaceCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Place.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PlaceAggregateArgs>(args: Subset<T, PlaceAggregateArgs>): Prisma.PrismaPromise<GetPlaceAggregateType<T>>

    /**
     * Group by Place.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PlaceGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PlaceGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PlaceGroupByArgs['orderBy'] }
        : { orderBy?: PlaceGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PlaceGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPlaceGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Place model
   */
  readonly fields: PlaceFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Place.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PlaceClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    experiences<T extends Place$experiencesArgs<ExtArgs> = {}>(args?: Subset<T, Place$experiencesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    favoriteUsers<T extends Place$favoriteUsersArgs<ExtArgs> = {}>(args?: Subset<T, Place$favoriteUsersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Place model
   */
  interface PlaceFieldRefs {
    readonly id: FieldRef<"Place", 'String'>
    readonly googlePlaceId: FieldRef<"Place", 'String'>
    readonly name: FieldRef<"Place", 'String'>
    readonly latitude: FieldRef<"Place", 'Float'>
    readonly longitude: FieldRef<"Place", 'Float'>
    readonly googlePrimaryType: FieldRef<"Place", 'String'>
    readonly googleTypes: FieldRef<"Place", 'String[]'>
    readonly googleBusinessStatus: FieldRef<"Place", 'String'>
    readonly googleRating: FieldRef<"Place", 'Float'>
    readonly googleUserRatingCount: FieldRef<"Place", 'Int'>
    readonly googleRegularOpeningHours: FieldRef<"Place", 'Json'>
    readonly googleCurrentOpeningHours: FieldRef<"Place", 'Json'>
    readonly googlePhotos: FieldRef<"Place", 'Json'>
    readonly googlePayload: FieldRef<"Place", 'Json'>
    readonly googlePayloadFetchedAt: FieldRef<"Place", 'DateTime'>
    readonly createdAt: FieldRef<"Place", 'DateTime'>
    readonly updatedAt: FieldRef<"Place", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Place findUnique
   */
  export type PlaceFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter, which Place to fetch.
     */
    where: PlaceWhereUniqueInput
  }

  /**
   * Place findUniqueOrThrow
   */
  export type PlaceFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter, which Place to fetch.
     */
    where: PlaceWhereUniqueInput
  }

  /**
   * Place findFirst
   */
  export type PlaceFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter, which Place to fetch.
     */
    where?: PlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Places to fetch.
     */
    orderBy?: PlaceOrderByWithRelationInput | PlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Places.
     */
    cursor?: PlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Places from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Places.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Places.
     */
    distinct?: PlaceScalarFieldEnum | PlaceScalarFieldEnum[]
  }

  /**
   * Place findFirstOrThrow
   */
  export type PlaceFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter, which Place to fetch.
     */
    where?: PlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Places to fetch.
     */
    orderBy?: PlaceOrderByWithRelationInput | PlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Places.
     */
    cursor?: PlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Places from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Places.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Places.
     */
    distinct?: PlaceScalarFieldEnum | PlaceScalarFieldEnum[]
  }

  /**
   * Place findMany
   */
  export type PlaceFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter, which Places to fetch.
     */
    where?: PlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Places to fetch.
     */
    orderBy?: PlaceOrderByWithRelationInput | PlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Places.
     */
    cursor?: PlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Places from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Places.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Places.
     */
    distinct?: PlaceScalarFieldEnum | PlaceScalarFieldEnum[]
  }

  /**
   * Place create
   */
  export type PlaceCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * The data needed to create a Place.
     */
    data: XOR<PlaceCreateInput, PlaceUncheckedCreateInput>
  }

  /**
   * Place createMany
   */
  export type PlaceCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Places.
     */
    data: PlaceCreateManyInput | PlaceCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Place createManyAndReturn
   */
  export type PlaceCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * The data used to create many Places.
     */
    data: PlaceCreateManyInput | PlaceCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Place update
   */
  export type PlaceUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * The data needed to update a Place.
     */
    data: XOR<PlaceUpdateInput, PlaceUncheckedUpdateInput>
    /**
     * Choose, which Place to update.
     */
    where: PlaceWhereUniqueInput
  }

  /**
   * Place updateMany
   */
  export type PlaceUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Places.
     */
    data: XOR<PlaceUpdateManyMutationInput, PlaceUncheckedUpdateManyInput>
    /**
     * Filter which Places to update
     */
    where?: PlaceWhereInput
    /**
     * Limit how many Places to update.
     */
    limit?: number
  }

  /**
   * Place updateManyAndReturn
   */
  export type PlaceUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * The data used to update Places.
     */
    data: XOR<PlaceUpdateManyMutationInput, PlaceUncheckedUpdateManyInput>
    /**
     * Filter which Places to update
     */
    where?: PlaceWhereInput
    /**
     * Limit how many Places to update.
     */
    limit?: number
  }

  /**
   * Place upsert
   */
  export type PlaceUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * The filter to search for the Place to update in case it exists.
     */
    where: PlaceWhereUniqueInput
    /**
     * In case the Place found by the `where` argument doesn't exist, create a new Place with this data.
     */
    create: XOR<PlaceCreateInput, PlaceUncheckedCreateInput>
    /**
     * In case the Place was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PlaceUpdateInput, PlaceUncheckedUpdateInput>
  }

  /**
   * Place delete
   */
  export type PlaceDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
    /**
     * Filter which Place to delete.
     */
    where: PlaceWhereUniqueInput
  }

  /**
   * Place deleteMany
   */
  export type PlaceDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Places to delete
     */
    where?: PlaceWhereInput
    /**
     * Limit how many Places to delete.
     */
    limit?: number
  }

  /**
   * Place.experiences
   */
  export type Place$experiencesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    where?: VoiceExperienceWhereInput
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    cursor?: VoiceExperienceWhereUniqueInput
    take?: number
    skip?: number
    distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[]
  }

  /**
   * Place.favoriteUsers
   */
  export type Place$favoriteUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    where?: UserFavoritePlaceWhereInput
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    cursor?: UserFavoritePlaceWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[]
  }

  /**
   * Place without action
   */
  export type PlaceDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Place
     */
    select?: PlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Place
     */
    omit?: PlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PlaceInclude<ExtArgs> | null
  }


  /**
   * Model User
   */

  export type AggregateUser = {
    _count: UserCountAggregateOutputType | null
    _min: UserMinAggregateOutputType | null
    _max: UserMaxAggregateOutputType | null
  }

  export type UserMinAggregateOutputType = {
    id: string | null
    telegramId: string | null
    username: string | null
    firstName: string | null
    lastName: string | null
    photoUrl: string | null
    languageCode: string | null
    isAdmin: boolean | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type UserMaxAggregateOutputType = {
    id: string | null
    telegramId: string | null
    username: string | null
    firstName: string | null
    lastName: string | null
    photoUrl: string | null
    languageCode: string | null
    isAdmin: boolean | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type UserCountAggregateOutputType = {
    id: number
    telegramId: number
    username: number
    firstName: number
    lastName: number
    photoUrl: number
    languageCode: number
    isAdmin: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type UserMinAggregateInputType = {
    id?: true
    telegramId?: true
    username?: true
    firstName?: true
    lastName?: true
    photoUrl?: true
    languageCode?: true
    isAdmin?: true
    createdAt?: true
    updatedAt?: true
  }

  export type UserMaxAggregateInputType = {
    id?: true
    telegramId?: true
    username?: true
    firstName?: true
    lastName?: true
    photoUrl?: true
    languageCode?: true
    isAdmin?: true
    createdAt?: true
    updatedAt?: true
  }

  export type UserCountAggregateInputType = {
    id?: true
    telegramId?: true
    username?: true
    firstName?: true
    lastName?: true
    photoUrl?: true
    languageCode?: true
    isAdmin?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type UserAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which User to aggregate.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Users
    **/
    _count?: true | UserCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserMaxAggregateInputType
  }

  export type GetUserAggregateType<T extends UserAggregateArgs> = {
        [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUser[P]>
      : GetScalarType<T[P], AggregateUser[P]>
  }




  export type UserGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserWhereInput
    orderBy?: UserOrderByWithAggregationInput | UserOrderByWithAggregationInput[]
    by: UserScalarFieldEnum[] | UserScalarFieldEnum
    having?: UserScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserCountAggregateInputType | true
    _min?: UserMinAggregateInputType
    _max?: UserMaxAggregateInputType
  }

  export type UserGroupByOutputType = {
    id: string
    telegramId: string
    username: string | null
    firstName: string | null
    lastName: string | null
    photoUrl: string | null
    languageCode: string | null
    isAdmin: boolean
    createdAt: Date
    updatedAt: Date
    _count: UserCountAggregateOutputType | null
    _min: UserMinAggregateOutputType | null
    _max: UserMaxAggregateOutputType | null
  }

  type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserGroupByOutputType[P]>
            : GetScalarType<T[P], UserGroupByOutputType[P]>
        }
      >
    >


  export type UserSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    telegramId?: boolean
    username?: boolean
    firstName?: boolean
    lastName?: boolean
    photoUrl?: boolean
    languageCode?: boolean
    isAdmin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    voiceExperiences?: boolean | User$voiceExperiencesArgs<ExtArgs>
    favoritePlaces?: boolean | User$favoritePlacesArgs<ExtArgs>
    _count?: boolean | UserCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["user"]>

  export type UserSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    telegramId?: boolean
    username?: boolean
    firstName?: boolean
    lastName?: boolean
    photoUrl?: boolean
    languageCode?: boolean
    isAdmin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["user"]>

  export type UserSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    telegramId?: boolean
    username?: boolean
    firstName?: boolean
    lastName?: boolean
    photoUrl?: boolean
    languageCode?: boolean
    isAdmin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["user"]>

  export type UserSelectScalar = {
    id?: boolean
    telegramId?: boolean
    username?: boolean
    firstName?: boolean
    lastName?: boolean
    photoUrl?: boolean
    languageCode?: boolean
    isAdmin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type UserOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "telegramId" | "username" | "firstName" | "lastName" | "photoUrl" | "languageCode" | "isAdmin" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]>
  export type UserInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    voiceExperiences?: boolean | User$voiceExperiencesArgs<ExtArgs>
    favoritePlaces?: boolean | User$favoritePlacesArgs<ExtArgs>
    _count?: boolean | UserCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type UserIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type UserIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $UserPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "User"
    objects: {
      voiceExperiences: Prisma.$VoiceExperiencePayload<ExtArgs>[]
      favoritePlaces: Prisma.$UserFavoritePlacePayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: string
      telegramId: string
      username: string | null
      firstName: string | null
      lastName: string | null
      photoUrl: string | null
      languageCode: string | null
      isAdmin: boolean
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["user"]>
    composites: {}
  }

  type UserGetPayload<S extends boolean | null | undefined | UserDefaultArgs> = $Result.GetResult<Prisma.$UserPayload, S>

  type UserCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserCountAggregateInputType | true
    }

  export interface UserDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['User'], meta: { name: 'User' } }
    /**
     * Find zero or one User that matches the filter.
     * @param {UserFindUniqueArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserFindUniqueArgs>(args: SelectSubset<T, UserFindUniqueArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one User that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserFindUniqueOrThrowArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserFindUniqueOrThrowArgs>(args: SelectSubset<T, UserFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first User that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindFirstArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserFindFirstArgs>(args?: SelectSubset<T, UserFindFirstArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first User that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindFirstOrThrowArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserFindFirstOrThrowArgs>(args?: SelectSubset<T, UserFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Users that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Users
     * const users = await prisma.user.findMany()
     * 
     * // Get first 10 Users
     * const users = await prisma.user.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userWithIdOnly = await prisma.user.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserFindManyArgs>(args?: SelectSubset<T, UserFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a User.
     * @param {UserCreateArgs} args - Arguments to create a User.
     * @example
     * // Create one User
     * const User = await prisma.user.create({
     *   data: {
     *     // ... data to create a User
     *   }
     * })
     * 
     */
    create<T extends UserCreateArgs>(args: SelectSubset<T, UserCreateArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Users.
     * @param {UserCreateManyArgs} args - Arguments to create many Users.
     * @example
     * // Create many Users
     * const user = await prisma.user.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserCreateManyArgs>(args?: SelectSubset<T, UserCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many Users and returns the data saved in the database.
     * @param {UserCreateManyAndReturnArgs} args - Arguments to create many Users.
     * @example
     * // Create many Users
     * const user = await prisma.user.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Users and only return the `id`
     * const userWithIdOnly = await prisma.user.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends UserCreateManyAndReturnArgs>(args?: SelectSubset<T, UserCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a User.
     * @param {UserDeleteArgs} args - Arguments to delete one User.
     * @example
     * // Delete one User
     * const User = await prisma.user.delete({
     *   where: {
     *     // ... filter to delete one User
     *   }
     * })
     * 
     */
    delete<T extends UserDeleteArgs>(args: SelectSubset<T, UserDeleteArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one User.
     * @param {UserUpdateArgs} args - Arguments to update one User.
     * @example
     * // Update one User
     * const user = await prisma.user.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserUpdateArgs>(args: SelectSubset<T, UserUpdateArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Users.
     * @param {UserDeleteManyArgs} args - Arguments to filter Users to delete.
     * @example
     * // Delete a few Users
     * const { count } = await prisma.user.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserDeleteManyArgs>(args?: SelectSubset<T, UserDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Users.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Users
     * const user = await prisma.user.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserUpdateManyArgs>(args: SelectSubset<T, UserUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Users and returns the data updated in the database.
     * @param {UserUpdateManyAndReturnArgs} args - Arguments to update many Users.
     * @example
     * // Update many Users
     * const user = await prisma.user.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Users and only return the `id`
     * const userWithIdOnly = await prisma.user.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends UserUpdateManyAndReturnArgs>(args: SelectSubset<T, UserUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one User.
     * @param {UserUpsertArgs} args - Arguments to update or create a User.
     * @example
     * // Update or create a User
     * const user = await prisma.user.upsert({
     *   create: {
     *     // ... data to create a User
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the User we want to update
     *   }
     * })
     */
    upsert<T extends UserUpsertArgs>(args: SelectSubset<T, UserUpsertArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Users.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCountArgs} args - Arguments to filter Users to count.
     * @example
     * // Count the number of Users
     * const count = await prisma.user.count({
     *   where: {
     *     // ... the filter for the Users we want to count
     *   }
     * })
    **/
    count<T extends UserCountArgs>(
      args?: Subset<T, UserCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a User.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserAggregateArgs>(args: Subset<T, UserAggregateArgs>): Prisma.PrismaPromise<GetUserAggregateType<T>>

    /**
     * Group by User.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserGroupByArgs['orderBy'] }
        : { orderBy?: UserGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the User model
   */
  readonly fields: UserFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for User.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    voiceExperiences<T extends User$voiceExperiencesArgs<ExtArgs> = {}>(args?: Subset<T, User$voiceExperiencesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    favoritePlaces<T extends User$favoritePlacesArgs<ExtArgs> = {}>(args?: Subset<T, User$favoritePlacesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the User model
   */
  interface UserFieldRefs {
    readonly id: FieldRef<"User", 'String'>
    readonly telegramId: FieldRef<"User", 'String'>
    readonly username: FieldRef<"User", 'String'>
    readonly firstName: FieldRef<"User", 'String'>
    readonly lastName: FieldRef<"User", 'String'>
    readonly photoUrl: FieldRef<"User", 'String'>
    readonly languageCode: FieldRef<"User", 'String'>
    readonly isAdmin: FieldRef<"User", 'Boolean'>
    readonly createdAt: FieldRef<"User", 'DateTime'>
    readonly updatedAt: FieldRef<"User", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * User findUnique
   */
  export type UserFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User findUniqueOrThrow
   */
  export type UserFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User findFirst
   */
  export type UserFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Users.
     */
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User findFirstOrThrow
   */
  export type UserFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Users.
     */
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User findMany
   */
  export type UserFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which Users to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Users.
     */
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User create
   */
  export type UserCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The data needed to create a User.
     */
    data: XOR<UserCreateInput, UserUncheckedCreateInput>
  }

  /**
   * User createMany
   */
  export type UserCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Users.
     */
    data: UserCreateManyInput | UserCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * User createManyAndReturn
   */
  export type UserCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * The data used to create many Users.
     */
    data: UserCreateManyInput | UserCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * User update
   */
  export type UserUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The data needed to update a User.
     */
    data: XOR<UserUpdateInput, UserUncheckedUpdateInput>
    /**
     * Choose, which User to update.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User updateMany
   */
  export type UserUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Users.
     */
    data: XOR<UserUpdateManyMutationInput, UserUncheckedUpdateManyInput>
    /**
     * Filter which Users to update
     */
    where?: UserWhereInput
    /**
     * Limit how many Users to update.
     */
    limit?: number
  }

  /**
   * User updateManyAndReturn
   */
  export type UserUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * The data used to update Users.
     */
    data: XOR<UserUpdateManyMutationInput, UserUncheckedUpdateManyInput>
    /**
     * Filter which Users to update
     */
    where?: UserWhereInput
    /**
     * Limit how many Users to update.
     */
    limit?: number
  }

  /**
   * User upsert
   */
  export type UserUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The filter to search for the User to update in case it exists.
     */
    where: UserWhereUniqueInput
    /**
     * In case the User found by the `where` argument doesn't exist, create a new User with this data.
     */
    create: XOR<UserCreateInput, UserUncheckedCreateInput>
    /**
     * In case the User was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserUpdateInput, UserUncheckedUpdateInput>
  }

  /**
   * User delete
   */
  export type UserDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter which User to delete.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User deleteMany
   */
  export type UserDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Users to delete
     */
    where?: UserWhereInput
    /**
     * Limit how many Users to delete.
     */
    limit?: number
  }

  /**
   * User.voiceExperiences
   */
  export type User$voiceExperiencesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    where?: VoiceExperienceWhereInput
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    cursor?: VoiceExperienceWhereUniqueInput
    take?: number
    skip?: number
    distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[]
  }

  /**
   * User.favoritePlaces
   */
  export type User$favoritePlacesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    where?: UserFavoritePlaceWhereInput
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    cursor?: UserFavoritePlaceWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[]
  }

  /**
   * User without action
   */
  export type UserDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
  }


  /**
   * Model UserFavoritePlace
   */

  export type AggregateUserFavoritePlace = {
    _count: UserFavoritePlaceCountAggregateOutputType | null
    _min: UserFavoritePlaceMinAggregateOutputType | null
    _max: UserFavoritePlaceMaxAggregateOutputType | null
  }

  export type UserFavoritePlaceMinAggregateOutputType = {
    id: string | null
    userId: string | null
    placeId: string | null
    createdAt: Date | null
  }

  export type UserFavoritePlaceMaxAggregateOutputType = {
    id: string | null
    userId: string | null
    placeId: string | null
    createdAt: Date | null
  }

  export type UserFavoritePlaceCountAggregateOutputType = {
    id: number
    userId: number
    placeId: number
    createdAt: number
    _all: number
  }


  export type UserFavoritePlaceMinAggregateInputType = {
    id?: true
    userId?: true
    placeId?: true
    createdAt?: true
  }

  export type UserFavoritePlaceMaxAggregateInputType = {
    id?: true
    userId?: true
    placeId?: true
    createdAt?: true
  }

  export type UserFavoritePlaceCountAggregateInputType = {
    id?: true
    userId?: true
    placeId?: true
    createdAt?: true
    _all?: true
  }

  export type UserFavoritePlaceAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserFavoritePlace to aggregate.
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserFavoritePlaces to fetch.
     */
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserFavoritePlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserFavoritePlaces from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserFavoritePlaces.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserFavoritePlaces
    **/
    _count?: true | UserFavoritePlaceCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserFavoritePlaceMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserFavoritePlaceMaxAggregateInputType
  }

  export type GetUserFavoritePlaceAggregateType<T extends UserFavoritePlaceAggregateArgs> = {
        [P in keyof T & keyof AggregateUserFavoritePlace]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserFavoritePlace[P]>
      : GetScalarType<T[P], AggregateUserFavoritePlace[P]>
  }




  export type UserFavoritePlaceGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserFavoritePlaceWhereInput
    orderBy?: UserFavoritePlaceOrderByWithAggregationInput | UserFavoritePlaceOrderByWithAggregationInput[]
    by: UserFavoritePlaceScalarFieldEnum[] | UserFavoritePlaceScalarFieldEnum
    having?: UserFavoritePlaceScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserFavoritePlaceCountAggregateInputType | true
    _min?: UserFavoritePlaceMinAggregateInputType
    _max?: UserFavoritePlaceMaxAggregateInputType
  }

  export type UserFavoritePlaceGroupByOutputType = {
    id: string
    userId: string
    placeId: string
    createdAt: Date
    _count: UserFavoritePlaceCountAggregateOutputType | null
    _min: UserFavoritePlaceMinAggregateOutputType | null
    _max: UserFavoritePlaceMaxAggregateOutputType | null
  }

  type GetUserFavoritePlaceGroupByPayload<T extends UserFavoritePlaceGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserFavoritePlaceGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserFavoritePlaceGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserFavoritePlaceGroupByOutputType[P]>
            : GetScalarType<T[P], UserFavoritePlaceGroupByOutputType[P]>
        }
      >
    >


  export type UserFavoritePlaceSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    userId?: boolean
    placeId?: boolean
    createdAt?: boolean
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["userFavoritePlace"]>

  export type UserFavoritePlaceSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    userId?: boolean
    placeId?: boolean
    createdAt?: boolean
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["userFavoritePlace"]>

  export type UserFavoritePlaceSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    userId?: boolean
    placeId?: boolean
    createdAt?: boolean
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["userFavoritePlace"]>

  export type UserFavoritePlaceSelectScalar = {
    id?: boolean
    userId?: boolean
    placeId?: boolean
    createdAt?: boolean
  }

  export type UserFavoritePlaceOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "userId" | "placeId" | "createdAt", ExtArgs["result"]["userFavoritePlace"]>
  export type UserFavoritePlaceInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }
  export type UserFavoritePlaceIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }
  export type UserFavoritePlaceIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    user?: boolean | UserDefaultArgs<ExtArgs>
    place?: boolean | PlaceDefaultArgs<ExtArgs>
  }

  export type $UserFavoritePlacePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserFavoritePlace"
    objects: {
      user: Prisma.$UserPayload<ExtArgs>
      place: Prisma.$PlacePayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: string
      userId: string
      placeId: string
      createdAt: Date
    }, ExtArgs["result"]["userFavoritePlace"]>
    composites: {}
  }

  type UserFavoritePlaceGetPayload<S extends boolean | null | undefined | UserFavoritePlaceDefaultArgs> = $Result.GetResult<Prisma.$UserFavoritePlacePayload, S>

  type UserFavoritePlaceCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserFavoritePlaceFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserFavoritePlaceCountAggregateInputType | true
    }

  export interface UserFavoritePlaceDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserFavoritePlace'], meta: { name: 'UserFavoritePlace' } }
    /**
     * Find zero or one UserFavoritePlace that matches the filter.
     * @param {UserFavoritePlaceFindUniqueArgs} args - Arguments to find a UserFavoritePlace
     * @example
     * // Get one UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserFavoritePlaceFindUniqueArgs>(args: SelectSubset<T, UserFavoritePlaceFindUniqueArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserFavoritePlace that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserFavoritePlaceFindUniqueOrThrowArgs} args - Arguments to find a UserFavoritePlace
     * @example
     * // Get one UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserFavoritePlaceFindUniqueOrThrowArgs>(args: SelectSubset<T, UserFavoritePlaceFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserFavoritePlace that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceFindFirstArgs} args - Arguments to find a UserFavoritePlace
     * @example
     * // Get one UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserFavoritePlaceFindFirstArgs>(args?: SelectSubset<T, UserFavoritePlaceFindFirstArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserFavoritePlace that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceFindFirstOrThrowArgs} args - Arguments to find a UserFavoritePlace
     * @example
     * // Get one UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserFavoritePlaceFindFirstOrThrowArgs>(args?: SelectSubset<T, UserFavoritePlaceFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserFavoritePlaces that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserFavoritePlaces
     * const userFavoritePlaces = await prisma.userFavoritePlace.findMany()
     * 
     * // Get first 10 UserFavoritePlaces
     * const userFavoritePlaces = await prisma.userFavoritePlace.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserFavoritePlaceFindManyArgs>(args?: SelectSubset<T, UserFavoritePlaceFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserFavoritePlace.
     * @param {UserFavoritePlaceCreateArgs} args - Arguments to create a UserFavoritePlace.
     * @example
     * // Create one UserFavoritePlace
     * const UserFavoritePlace = await prisma.userFavoritePlace.create({
     *   data: {
     *     // ... data to create a UserFavoritePlace
     *   }
     * })
     * 
     */
    create<T extends UserFavoritePlaceCreateArgs>(args: SelectSubset<T, UserFavoritePlaceCreateArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserFavoritePlaces.
     * @param {UserFavoritePlaceCreateManyArgs} args - Arguments to create many UserFavoritePlaces.
     * @example
     * // Create many UserFavoritePlaces
     * const userFavoritePlace = await prisma.userFavoritePlace.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserFavoritePlaceCreateManyArgs>(args?: SelectSubset<T, UserFavoritePlaceCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many UserFavoritePlaces and returns the data saved in the database.
     * @param {UserFavoritePlaceCreateManyAndReturnArgs} args - Arguments to create many UserFavoritePlaces.
     * @example
     * // Create many UserFavoritePlaces
     * const userFavoritePlace = await prisma.userFavoritePlace.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many UserFavoritePlaces and only return the `id`
     * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends UserFavoritePlaceCreateManyAndReturnArgs>(args?: SelectSubset<T, UserFavoritePlaceCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a UserFavoritePlace.
     * @param {UserFavoritePlaceDeleteArgs} args - Arguments to delete one UserFavoritePlace.
     * @example
     * // Delete one UserFavoritePlace
     * const UserFavoritePlace = await prisma.userFavoritePlace.delete({
     *   where: {
     *     // ... filter to delete one UserFavoritePlace
     *   }
     * })
     * 
     */
    delete<T extends UserFavoritePlaceDeleteArgs>(args: SelectSubset<T, UserFavoritePlaceDeleteArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserFavoritePlace.
     * @param {UserFavoritePlaceUpdateArgs} args - Arguments to update one UserFavoritePlace.
     * @example
     * // Update one UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserFavoritePlaceUpdateArgs>(args: SelectSubset<T, UserFavoritePlaceUpdateArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserFavoritePlaces.
     * @param {UserFavoritePlaceDeleteManyArgs} args - Arguments to filter UserFavoritePlaces to delete.
     * @example
     * // Delete a few UserFavoritePlaces
     * const { count } = await prisma.userFavoritePlace.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserFavoritePlaceDeleteManyArgs>(args?: SelectSubset<T, UserFavoritePlaceDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserFavoritePlaces.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserFavoritePlaces
     * const userFavoritePlace = await prisma.userFavoritePlace.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserFavoritePlaceUpdateManyArgs>(args: SelectSubset<T, UserFavoritePlaceUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserFavoritePlaces and returns the data updated in the database.
     * @param {UserFavoritePlaceUpdateManyAndReturnArgs} args - Arguments to update many UserFavoritePlaces.
     * @example
     * // Update many UserFavoritePlaces
     * const userFavoritePlace = await prisma.userFavoritePlace.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more UserFavoritePlaces and only return the `id`
     * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends UserFavoritePlaceUpdateManyAndReturnArgs>(args: SelectSubset<T, UserFavoritePlaceUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one UserFavoritePlace.
     * @param {UserFavoritePlaceUpsertArgs} args - Arguments to update or create a UserFavoritePlace.
     * @example
     * // Update or create a UserFavoritePlace
     * const userFavoritePlace = await prisma.userFavoritePlace.upsert({
     *   create: {
     *     // ... data to create a UserFavoritePlace
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserFavoritePlace we want to update
     *   }
     * })
     */
    upsert<T extends UserFavoritePlaceUpsertArgs>(args: SelectSubset<T, UserFavoritePlaceUpsertArgs<ExtArgs>>): Prisma__UserFavoritePlaceClient<$Result.GetResult<Prisma.$UserFavoritePlacePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserFavoritePlaces.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceCountArgs} args - Arguments to filter UserFavoritePlaces to count.
     * @example
     * // Count the number of UserFavoritePlaces
     * const count = await prisma.userFavoritePlace.count({
     *   where: {
     *     // ... the filter for the UserFavoritePlaces we want to count
     *   }
     * })
    **/
    count<T extends UserFavoritePlaceCountArgs>(
      args?: Subset<T, UserFavoritePlaceCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserFavoritePlaceCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserFavoritePlace.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserFavoritePlaceAggregateArgs>(args: Subset<T, UserFavoritePlaceAggregateArgs>): Prisma.PrismaPromise<GetUserFavoritePlaceAggregateType<T>>

    /**
     * Group by UserFavoritePlace.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFavoritePlaceGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserFavoritePlaceGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserFavoritePlaceGroupByArgs['orderBy'] }
        : { orderBy?: UserFavoritePlaceGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserFavoritePlaceGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserFavoritePlaceGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserFavoritePlace model
   */
  readonly fields: UserFavoritePlaceFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserFavoritePlace.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserFavoritePlaceClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    user<T extends UserDefaultArgs<ExtArgs> = {}>(args?: Subset<T, UserDefaultArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    place<T extends PlaceDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PlaceDefaultArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserFavoritePlace model
   */
  interface UserFavoritePlaceFieldRefs {
    readonly id: FieldRef<"UserFavoritePlace", 'String'>
    readonly userId: FieldRef<"UserFavoritePlace", 'String'>
    readonly placeId: FieldRef<"UserFavoritePlace", 'String'>
    readonly createdAt: FieldRef<"UserFavoritePlace", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * UserFavoritePlace findUnique
   */
  export type UserFavoritePlaceFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter, which UserFavoritePlace to fetch.
     */
    where: UserFavoritePlaceWhereUniqueInput
  }

  /**
   * UserFavoritePlace findUniqueOrThrow
   */
  export type UserFavoritePlaceFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter, which UserFavoritePlace to fetch.
     */
    where: UserFavoritePlaceWhereUniqueInput
  }

  /**
   * UserFavoritePlace findFirst
   */
  export type UserFavoritePlaceFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter, which UserFavoritePlace to fetch.
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserFavoritePlaces to fetch.
     */
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserFavoritePlaces.
     */
    cursor?: UserFavoritePlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserFavoritePlaces from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserFavoritePlaces.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserFavoritePlaces.
     */
    distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[]
  }

  /**
   * UserFavoritePlace findFirstOrThrow
   */
  export type UserFavoritePlaceFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter, which UserFavoritePlace to fetch.
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserFavoritePlaces to fetch.
     */
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserFavoritePlaces.
     */
    cursor?: UserFavoritePlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserFavoritePlaces from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserFavoritePlaces.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserFavoritePlaces.
     */
    distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[]
  }

  /**
   * UserFavoritePlace findMany
   */
  export type UserFavoritePlaceFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter, which UserFavoritePlaces to fetch.
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserFavoritePlaces to fetch.
     */
    orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserFavoritePlaces.
     */
    cursor?: UserFavoritePlaceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserFavoritePlaces from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserFavoritePlaces.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserFavoritePlaces.
     */
    distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[]
  }

  /**
   * UserFavoritePlace create
   */
  export type UserFavoritePlaceCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * The data needed to create a UserFavoritePlace.
     */
    data: XOR<UserFavoritePlaceCreateInput, UserFavoritePlaceUncheckedCreateInput>
  }

  /**
   * UserFavoritePlace createMany
   */
  export type UserFavoritePlaceCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserFavoritePlaces.
     */
    data: UserFavoritePlaceCreateManyInput | UserFavoritePlaceCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserFavoritePlace createManyAndReturn
   */
  export type UserFavoritePlaceCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * The data used to create many UserFavoritePlaces.
     */
    data: UserFavoritePlaceCreateManyInput | UserFavoritePlaceCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * UserFavoritePlace update
   */
  export type UserFavoritePlaceUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * The data needed to update a UserFavoritePlace.
     */
    data: XOR<UserFavoritePlaceUpdateInput, UserFavoritePlaceUncheckedUpdateInput>
    /**
     * Choose, which UserFavoritePlace to update.
     */
    where: UserFavoritePlaceWhereUniqueInput
  }

  /**
   * UserFavoritePlace updateMany
   */
  export type UserFavoritePlaceUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserFavoritePlaces.
     */
    data: XOR<UserFavoritePlaceUpdateManyMutationInput, UserFavoritePlaceUncheckedUpdateManyInput>
    /**
     * Filter which UserFavoritePlaces to update
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * Limit how many UserFavoritePlaces to update.
     */
    limit?: number
  }

  /**
   * UserFavoritePlace updateManyAndReturn
   */
  export type UserFavoritePlaceUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * The data used to update UserFavoritePlaces.
     */
    data: XOR<UserFavoritePlaceUpdateManyMutationInput, UserFavoritePlaceUncheckedUpdateManyInput>
    /**
     * Filter which UserFavoritePlaces to update
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * Limit how many UserFavoritePlaces to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * UserFavoritePlace upsert
   */
  export type UserFavoritePlaceUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * The filter to search for the UserFavoritePlace to update in case it exists.
     */
    where: UserFavoritePlaceWhereUniqueInput
    /**
     * In case the UserFavoritePlace found by the `where` argument doesn't exist, create a new UserFavoritePlace with this data.
     */
    create: XOR<UserFavoritePlaceCreateInput, UserFavoritePlaceUncheckedCreateInput>
    /**
     * In case the UserFavoritePlace was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserFavoritePlaceUpdateInput, UserFavoritePlaceUncheckedUpdateInput>
  }

  /**
   * UserFavoritePlace delete
   */
  export type UserFavoritePlaceDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
    /**
     * Filter which UserFavoritePlace to delete.
     */
    where: UserFavoritePlaceWhereUniqueInput
  }

  /**
   * UserFavoritePlace deleteMany
   */
  export type UserFavoritePlaceDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserFavoritePlaces to delete
     */
    where?: UserFavoritePlaceWhereInput
    /**
     * Limit how many UserFavoritePlaces to delete.
     */
    limit?: number
  }

  /**
   * UserFavoritePlace without action
   */
  export type UserFavoritePlaceDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserFavoritePlace
     */
    select?: UserFavoritePlaceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserFavoritePlace
     */
    omit?: UserFavoritePlaceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserFavoritePlaceInclude<ExtArgs> | null
  }


  /**
   * Model VoiceExperience
   */

  export type AggregateVoiceExperience = {
    _count: VoiceExperienceCountAggregateOutputType | null
    _avg: VoiceExperienceAvgAggregateOutputType | null
    _sum: VoiceExperienceSumAggregateOutputType | null
    _min: VoiceExperienceMinAggregateOutputType | null
    _max: VoiceExperienceMaxAggregateOutputType | null
  }

  export type VoiceExperienceAvgAggregateOutputType = {
    durationSeconds: number | null
  }

  export type VoiceExperienceSumAggregateOutputType = {
    durationSeconds: number | null
  }

  export type VoiceExperienceMinAggregateOutputType = {
    id: string | null
    placeId: string | null
    userId: string | null
    durationSeconds: number | null
    audioObjectKey: string | null
    audioContentBase64: string | null
    audioMimeType: string | null
    audioAccessToken: string | null
    status: $Enums.VoiceExperienceStatus | null
    transcript: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type VoiceExperienceMaxAggregateOutputType = {
    id: string | null
    placeId: string | null
    userId: string | null
    durationSeconds: number | null
    audioObjectKey: string | null
    audioContentBase64: string | null
    audioMimeType: string | null
    audioAccessToken: string | null
    status: $Enums.VoiceExperienceStatus | null
    transcript: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type VoiceExperienceCountAggregateOutputType = {
    id: number
    placeId: number
    userId: number
    durationSeconds: number
    audioObjectKey: number
    audioContentBase64: number
    audioMimeType: number
    audioAccessToken: number
    status: number
    transcript: number
    analysis: number
    recordingPayload: number
    promptHintsShown: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type VoiceExperienceAvgAggregateInputType = {
    durationSeconds?: true
  }

  export type VoiceExperienceSumAggregateInputType = {
    durationSeconds?: true
  }

  export type VoiceExperienceMinAggregateInputType = {
    id?: true
    placeId?: true
    userId?: true
    durationSeconds?: true
    audioObjectKey?: true
    audioContentBase64?: true
    audioMimeType?: true
    audioAccessToken?: true
    status?: true
    transcript?: true
    createdAt?: true
    updatedAt?: true
  }

  export type VoiceExperienceMaxAggregateInputType = {
    id?: true
    placeId?: true
    userId?: true
    durationSeconds?: true
    audioObjectKey?: true
    audioContentBase64?: true
    audioMimeType?: true
    audioAccessToken?: true
    status?: true
    transcript?: true
    createdAt?: true
    updatedAt?: true
  }

  export type VoiceExperienceCountAggregateInputType = {
    id?: true
    placeId?: true
    userId?: true
    durationSeconds?: true
    audioObjectKey?: true
    audioContentBase64?: true
    audioMimeType?: true
    audioAccessToken?: true
    status?: true
    transcript?: true
    analysis?: true
    recordingPayload?: true
    promptHintsShown?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type VoiceExperienceAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which VoiceExperience to aggregate.
     */
    where?: VoiceExperienceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of VoiceExperiences to fetch.
     */
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: VoiceExperienceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` VoiceExperiences from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` VoiceExperiences.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned VoiceExperiences
    **/
    _count?: true | VoiceExperienceCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: VoiceExperienceAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: VoiceExperienceSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: VoiceExperienceMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: VoiceExperienceMaxAggregateInputType
  }

  export type GetVoiceExperienceAggregateType<T extends VoiceExperienceAggregateArgs> = {
        [P in keyof T & keyof AggregateVoiceExperience]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateVoiceExperience[P]>
      : GetScalarType<T[P], AggregateVoiceExperience[P]>
  }




  export type VoiceExperienceGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: VoiceExperienceWhereInput
    orderBy?: VoiceExperienceOrderByWithAggregationInput | VoiceExperienceOrderByWithAggregationInput[]
    by: VoiceExperienceScalarFieldEnum[] | VoiceExperienceScalarFieldEnum
    having?: VoiceExperienceScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: VoiceExperienceCountAggregateInputType | true
    _avg?: VoiceExperienceAvgAggregateInputType
    _sum?: VoiceExperienceSumAggregateInputType
    _min?: VoiceExperienceMinAggregateInputType
    _max?: VoiceExperienceMaxAggregateInputType
  }

  export type VoiceExperienceGroupByOutputType = {
    id: string
    placeId: string
    userId: string | null
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64: string | null
    audioMimeType: string | null
    audioAccessToken: string | null
    status: $Enums.VoiceExperienceStatus
    transcript: string | null
    analysis: JsonValue | null
    recordingPayload: JsonValue | null
    promptHintsShown: string[]
    createdAt: Date
    updatedAt: Date
    _count: VoiceExperienceCountAggregateOutputType | null
    _avg: VoiceExperienceAvgAggregateOutputType | null
    _sum: VoiceExperienceSumAggregateOutputType | null
    _min: VoiceExperienceMinAggregateOutputType | null
    _max: VoiceExperienceMaxAggregateOutputType | null
  }

  type GetVoiceExperienceGroupByPayload<T extends VoiceExperienceGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<VoiceExperienceGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof VoiceExperienceGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], VoiceExperienceGroupByOutputType[P]>
            : GetScalarType<T[P], VoiceExperienceGroupByOutputType[P]>
        }
      >
    >


  export type VoiceExperienceSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    placeId?: boolean
    userId?: boolean
    durationSeconds?: boolean
    audioObjectKey?: boolean
    audioContentBase64?: boolean
    audioMimeType?: boolean
    audioAccessToken?: boolean
    status?: boolean
    transcript?: boolean
    analysis?: boolean
    recordingPayload?: boolean
    promptHintsShown?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }, ExtArgs["result"]["voiceExperience"]>

  export type VoiceExperienceSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    placeId?: boolean
    userId?: boolean
    durationSeconds?: boolean
    audioObjectKey?: boolean
    audioContentBase64?: boolean
    audioMimeType?: boolean
    audioAccessToken?: boolean
    status?: boolean
    transcript?: boolean
    analysis?: boolean
    recordingPayload?: boolean
    promptHintsShown?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }, ExtArgs["result"]["voiceExperience"]>

  export type VoiceExperienceSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    placeId?: boolean
    userId?: boolean
    durationSeconds?: boolean
    audioObjectKey?: boolean
    audioContentBase64?: boolean
    audioMimeType?: boolean
    audioAccessToken?: boolean
    status?: boolean
    transcript?: boolean
    analysis?: boolean
    recordingPayload?: boolean
    promptHintsShown?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }, ExtArgs["result"]["voiceExperience"]>

  export type VoiceExperienceSelectScalar = {
    id?: boolean
    placeId?: boolean
    userId?: boolean
    durationSeconds?: boolean
    audioObjectKey?: boolean
    audioContentBase64?: boolean
    audioMimeType?: boolean
    audioAccessToken?: boolean
    status?: boolean
    transcript?: boolean
    analysis?: boolean
    recordingPayload?: boolean
    promptHintsShown?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type VoiceExperienceOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "placeId" | "userId" | "durationSeconds" | "audioObjectKey" | "audioContentBase64" | "audioMimeType" | "audioAccessToken" | "status" | "transcript" | "analysis" | "recordingPayload" | "promptHintsShown" | "createdAt" | "updatedAt", ExtArgs["result"]["voiceExperience"]>
  export type VoiceExperienceInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }
  export type VoiceExperienceIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }
  export type VoiceExperienceIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    place?: boolean | PlaceDefaultArgs<ExtArgs>
    user?: boolean | VoiceExperience$userArgs<ExtArgs>
  }

  export type $VoiceExperiencePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "VoiceExperience"
    objects: {
      place: Prisma.$PlacePayload<ExtArgs>
      user: Prisma.$UserPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: string
      placeId: string
      userId: string | null
      durationSeconds: number
      audioObjectKey: string
      audioContentBase64: string | null
      audioMimeType: string | null
      audioAccessToken: string | null
      status: $Enums.VoiceExperienceStatus
      transcript: string | null
      analysis: Prisma.JsonValue | null
      recordingPayload: Prisma.JsonValue | null
      promptHintsShown: string[]
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["voiceExperience"]>
    composites: {}
  }

  type VoiceExperienceGetPayload<S extends boolean | null | undefined | VoiceExperienceDefaultArgs> = $Result.GetResult<Prisma.$VoiceExperiencePayload, S>

  type VoiceExperienceCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<VoiceExperienceFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: VoiceExperienceCountAggregateInputType | true
    }

  export interface VoiceExperienceDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['VoiceExperience'], meta: { name: 'VoiceExperience' } }
    /**
     * Find zero or one VoiceExperience that matches the filter.
     * @param {VoiceExperienceFindUniqueArgs} args - Arguments to find a VoiceExperience
     * @example
     * // Get one VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends VoiceExperienceFindUniqueArgs>(args: SelectSubset<T, VoiceExperienceFindUniqueArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one VoiceExperience that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {VoiceExperienceFindUniqueOrThrowArgs} args - Arguments to find a VoiceExperience
     * @example
     * // Get one VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends VoiceExperienceFindUniqueOrThrowArgs>(args: SelectSubset<T, VoiceExperienceFindUniqueOrThrowArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first VoiceExperience that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceFindFirstArgs} args - Arguments to find a VoiceExperience
     * @example
     * // Get one VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends VoiceExperienceFindFirstArgs>(args?: SelectSubset<T, VoiceExperienceFindFirstArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first VoiceExperience that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceFindFirstOrThrowArgs} args - Arguments to find a VoiceExperience
     * @example
     * // Get one VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends VoiceExperienceFindFirstOrThrowArgs>(args?: SelectSubset<T, VoiceExperienceFindFirstOrThrowArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more VoiceExperiences that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all VoiceExperiences
     * const voiceExperiences = await prisma.voiceExperience.findMany()
     * 
     * // Get first 10 VoiceExperiences
     * const voiceExperiences = await prisma.voiceExperience.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const voiceExperienceWithIdOnly = await prisma.voiceExperience.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends VoiceExperienceFindManyArgs>(args?: SelectSubset<T, VoiceExperienceFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a VoiceExperience.
     * @param {VoiceExperienceCreateArgs} args - Arguments to create a VoiceExperience.
     * @example
     * // Create one VoiceExperience
     * const VoiceExperience = await prisma.voiceExperience.create({
     *   data: {
     *     // ... data to create a VoiceExperience
     *   }
     * })
     * 
     */
    create<T extends VoiceExperienceCreateArgs>(args: SelectSubset<T, VoiceExperienceCreateArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many VoiceExperiences.
     * @param {VoiceExperienceCreateManyArgs} args - Arguments to create many VoiceExperiences.
     * @example
     * // Create many VoiceExperiences
     * const voiceExperience = await prisma.voiceExperience.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends VoiceExperienceCreateManyArgs>(args?: SelectSubset<T, VoiceExperienceCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create many VoiceExperiences and returns the data saved in the database.
     * @param {VoiceExperienceCreateManyAndReturnArgs} args - Arguments to create many VoiceExperiences.
     * @example
     * // Create many VoiceExperiences
     * const voiceExperience = await prisma.voiceExperience.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many VoiceExperiences and only return the `id`
     * const voiceExperienceWithIdOnly = await prisma.voiceExperience.createManyAndReturn({
     *   select: { id: true },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    createManyAndReturn<T extends VoiceExperienceCreateManyAndReturnArgs>(args?: SelectSubset<T, VoiceExperienceCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a VoiceExperience.
     * @param {VoiceExperienceDeleteArgs} args - Arguments to delete one VoiceExperience.
     * @example
     * // Delete one VoiceExperience
     * const VoiceExperience = await prisma.voiceExperience.delete({
     *   where: {
     *     // ... filter to delete one VoiceExperience
     *   }
     * })
     * 
     */
    delete<T extends VoiceExperienceDeleteArgs>(args: SelectSubset<T, VoiceExperienceDeleteArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one VoiceExperience.
     * @param {VoiceExperienceUpdateArgs} args - Arguments to update one VoiceExperience.
     * @example
     * // Update one VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends VoiceExperienceUpdateArgs>(args: SelectSubset<T, VoiceExperienceUpdateArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more VoiceExperiences.
     * @param {VoiceExperienceDeleteManyArgs} args - Arguments to filter VoiceExperiences to delete.
     * @example
     * // Delete a few VoiceExperiences
     * const { count } = await prisma.voiceExperience.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends VoiceExperienceDeleteManyArgs>(args?: SelectSubset<T, VoiceExperienceDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more VoiceExperiences.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many VoiceExperiences
     * const voiceExperience = await prisma.voiceExperience.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends VoiceExperienceUpdateManyArgs>(args: SelectSubset<T, VoiceExperienceUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more VoiceExperiences and returns the data updated in the database.
     * @param {VoiceExperienceUpdateManyAndReturnArgs} args - Arguments to update many VoiceExperiences.
     * @example
     * // Update many VoiceExperiences
     * const voiceExperience = await prisma.voiceExperience.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more VoiceExperiences and only return the `id`
     * const voiceExperienceWithIdOnly = await prisma.voiceExperience.updateManyAndReturn({
     *   select: { id: true },
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * 
     */
    updateManyAndReturn<T extends VoiceExperienceUpdateManyAndReturnArgs>(args: SelectSubset<T, VoiceExperienceUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

    /**
     * Create or update one VoiceExperience.
     * @param {VoiceExperienceUpsertArgs} args - Arguments to update or create a VoiceExperience.
     * @example
     * // Update or create a VoiceExperience
     * const voiceExperience = await prisma.voiceExperience.upsert({
     *   create: {
     *     // ... data to create a VoiceExperience
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the VoiceExperience we want to update
     *   }
     * })
     */
    upsert<T extends VoiceExperienceUpsertArgs>(args: SelectSubset<T, VoiceExperienceUpsertArgs<ExtArgs>>): Prisma__VoiceExperienceClient<$Result.GetResult<Prisma.$VoiceExperiencePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of VoiceExperiences.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceCountArgs} args - Arguments to filter VoiceExperiences to count.
     * @example
     * // Count the number of VoiceExperiences
     * const count = await prisma.voiceExperience.count({
     *   where: {
     *     // ... the filter for the VoiceExperiences we want to count
     *   }
     * })
    **/
    count<T extends VoiceExperienceCountArgs>(
      args?: Subset<T, VoiceExperienceCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], VoiceExperienceCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a VoiceExperience.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends VoiceExperienceAggregateArgs>(args: Subset<T, VoiceExperienceAggregateArgs>): Prisma.PrismaPromise<GetVoiceExperienceAggregateType<T>>

    /**
     * Group by VoiceExperience.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {VoiceExperienceGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends VoiceExperienceGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: VoiceExperienceGroupByArgs['orderBy'] }
        : { orderBy?: VoiceExperienceGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, VoiceExperienceGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetVoiceExperienceGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the VoiceExperience model
   */
  readonly fields: VoiceExperienceFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for VoiceExperience.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__VoiceExperienceClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    place<T extends PlaceDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PlaceDefaultArgs<ExtArgs>>): Prisma__PlaceClient<$Result.GetResult<Prisma.$PlacePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    user<T extends VoiceExperience$userArgs<ExtArgs> = {}>(args?: Subset<T, VoiceExperience$userArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the VoiceExperience model
   */
  interface VoiceExperienceFieldRefs {
    readonly id: FieldRef<"VoiceExperience", 'String'>
    readonly placeId: FieldRef<"VoiceExperience", 'String'>
    readonly userId: FieldRef<"VoiceExperience", 'String'>
    readonly durationSeconds: FieldRef<"VoiceExperience", 'Int'>
    readonly audioObjectKey: FieldRef<"VoiceExperience", 'String'>
    readonly audioContentBase64: FieldRef<"VoiceExperience", 'String'>
    readonly audioMimeType: FieldRef<"VoiceExperience", 'String'>
    readonly audioAccessToken: FieldRef<"VoiceExperience", 'String'>
    readonly status: FieldRef<"VoiceExperience", 'VoiceExperienceStatus'>
    readonly transcript: FieldRef<"VoiceExperience", 'String'>
    readonly analysis: FieldRef<"VoiceExperience", 'Json'>
    readonly recordingPayload: FieldRef<"VoiceExperience", 'Json'>
    readonly promptHintsShown: FieldRef<"VoiceExperience", 'String[]'>
    readonly createdAt: FieldRef<"VoiceExperience", 'DateTime'>
    readonly updatedAt: FieldRef<"VoiceExperience", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * VoiceExperience findUnique
   */
  export type VoiceExperienceFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter, which VoiceExperience to fetch.
     */
    where: VoiceExperienceWhereUniqueInput
  }

  /**
   * VoiceExperience findUniqueOrThrow
   */
  export type VoiceExperienceFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter, which VoiceExperience to fetch.
     */
    where: VoiceExperienceWhereUniqueInput
  }

  /**
   * VoiceExperience findFirst
   */
  export type VoiceExperienceFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter, which VoiceExperience to fetch.
     */
    where?: VoiceExperienceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of VoiceExperiences to fetch.
     */
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for VoiceExperiences.
     */
    cursor?: VoiceExperienceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` VoiceExperiences from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` VoiceExperiences.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of VoiceExperiences.
     */
    distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[]
  }

  /**
   * VoiceExperience findFirstOrThrow
   */
  export type VoiceExperienceFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter, which VoiceExperience to fetch.
     */
    where?: VoiceExperienceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of VoiceExperiences to fetch.
     */
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for VoiceExperiences.
     */
    cursor?: VoiceExperienceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` VoiceExperiences from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` VoiceExperiences.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of VoiceExperiences.
     */
    distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[]
  }

  /**
   * VoiceExperience findMany
   */
  export type VoiceExperienceFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter, which VoiceExperiences to fetch.
     */
    where?: VoiceExperienceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of VoiceExperiences to fetch.
     */
    orderBy?: VoiceExperienceOrderByWithRelationInput | VoiceExperienceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing VoiceExperiences.
     */
    cursor?: VoiceExperienceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` VoiceExperiences from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` VoiceExperiences.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of VoiceExperiences.
     */
    distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[]
  }

  /**
   * VoiceExperience create
   */
  export type VoiceExperienceCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * The data needed to create a VoiceExperience.
     */
    data: XOR<VoiceExperienceCreateInput, VoiceExperienceUncheckedCreateInput>
  }

  /**
   * VoiceExperience createMany
   */
  export type VoiceExperienceCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many VoiceExperiences.
     */
    data: VoiceExperienceCreateManyInput | VoiceExperienceCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * VoiceExperience createManyAndReturn
   */
  export type VoiceExperienceCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * The data used to create many VoiceExperiences.
     */
    data: VoiceExperienceCreateManyInput | VoiceExperienceCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * VoiceExperience update
   */
  export type VoiceExperienceUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * The data needed to update a VoiceExperience.
     */
    data: XOR<VoiceExperienceUpdateInput, VoiceExperienceUncheckedUpdateInput>
    /**
     * Choose, which VoiceExperience to update.
     */
    where: VoiceExperienceWhereUniqueInput
  }

  /**
   * VoiceExperience updateMany
   */
  export type VoiceExperienceUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update VoiceExperiences.
     */
    data: XOR<VoiceExperienceUpdateManyMutationInput, VoiceExperienceUncheckedUpdateManyInput>
    /**
     * Filter which VoiceExperiences to update
     */
    where?: VoiceExperienceWhereInput
    /**
     * Limit how many VoiceExperiences to update.
     */
    limit?: number
  }

  /**
   * VoiceExperience updateManyAndReturn
   */
  export type VoiceExperienceUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * The data used to update VoiceExperiences.
     */
    data: XOR<VoiceExperienceUpdateManyMutationInput, VoiceExperienceUncheckedUpdateManyInput>
    /**
     * Filter which VoiceExperiences to update
     */
    where?: VoiceExperienceWhereInput
    /**
     * Limit how many VoiceExperiences to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * VoiceExperience upsert
   */
  export type VoiceExperienceUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * The filter to search for the VoiceExperience to update in case it exists.
     */
    where: VoiceExperienceWhereUniqueInput
    /**
     * In case the VoiceExperience found by the `where` argument doesn't exist, create a new VoiceExperience with this data.
     */
    create: XOR<VoiceExperienceCreateInput, VoiceExperienceUncheckedCreateInput>
    /**
     * In case the VoiceExperience was found with the provided `where` argument, update it with this data.
     */
    update: XOR<VoiceExperienceUpdateInput, VoiceExperienceUncheckedUpdateInput>
  }

  /**
   * VoiceExperience delete
   */
  export type VoiceExperienceDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
    /**
     * Filter which VoiceExperience to delete.
     */
    where: VoiceExperienceWhereUniqueInput
  }

  /**
   * VoiceExperience deleteMany
   */
  export type VoiceExperienceDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which VoiceExperiences to delete
     */
    where?: VoiceExperienceWhereInput
    /**
     * Limit how many VoiceExperiences to delete.
     */
    limit?: number
  }

  /**
   * VoiceExperience.user
   */
  export type VoiceExperience$userArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    where?: UserWhereInput
  }

  /**
   * VoiceExperience without action
   */
  export type VoiceExperienceDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the VoiceExperience
     */
    select?: VoiceExperienceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the VoiceExperience
     */
    omit?: VoiceExperienceOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: VoiceExperienceInclude<ExtArgs> | null
  }


  /**
   * Enums
   */

  export const TransactionIsolationLevel: {
    ReadUncommitted: 'ReadUncommitted',
    ReadCommitted: 'ReadCommitted',
    RepeatableRead: 'RepeatableRead',
    Serializable: 'Serializable'
  };

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


  export const PlaceScalarFieldEnum: {
    id: 'id',
    googlePlaceId: 'googlePlaceId',
    name: 'name',
    latitude: 'latitude',
    longitude: 'longitude',
    googlePrimaryType: 'googlePrimaryType',
    googleTypes: 'googleTypes',
    googleBusinessStatus: 'googleBusinessStatus',
    googleRating: 'googleRating',
    googleUserRatingCount: 'googleUserRatingCount',
    googleRegularOpeningHours: 'googleRegularOpeningHours',
    googleCurrentOpeningHours: 'googleCurrentOpeningHours',
    googlePhotos: 'googlePhotos',
    googlePayload: 'googlePayload',
    googlePayloadFetchedAt: 'googlePayloadFetchedAt',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

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


  export const UserScalarFieldEnum: {
    id: 'id',
    telegramId: 'telegramId',
    username: 'username',
    firstName: 'firstName',
    lastName: 'lastName',
    photoUrl: 'photoUrl',
    languageCode: 'languageCode',
    isAdmin: 'isAdmin',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

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


  export const UserFavoritePlaceScalarFieldEnum: {
    id: 'id',
    userId: 'userId',
    placeId: 'placeId',
    createdAt: 'createdAt'
  };

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


  export const VoiceExperienceScalarFieldEnum: {
    id: 'id',
    placeId: 'placeId',
    userId: 'userId',
    durationSeconds: 'durationSeconds',
    audioObjectKey: 'audioObjectKey',
    audioContentBase64: 'audioContentBase64',
    audioMimeType: 'audioMimeType',
    audioAccessToken: 'audioAccessToken',
    status: 'status',
    transcript: 'transcript',
    analysis: 'analysis',
    recordingPayload: 'recordingPayload',
    promptHintsShown: 'promptHintsShown',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

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


  export const SortOrder: {
    asc: 'asc',
    desc: 'desc'
  };

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


  export const NullableJsonNullValueInput: {
    DbNull: typeof DbNull,
    JsonNull: typeof JsonNull
  };

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


  export const QueryMode: {
    default: 'default',
    insensitive: 'insensitive'
  };

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


  export const JsonNullValueFilter: {
    DbNull: typeof DbNull,
    JsonNull: typeof JsonNull,
    AnyNull: typeof AnyNull
  };

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


  export const NullsOrder: {
    first: 'first',
    last: 'last'
  };

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


  /**
   * Field references
   */


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


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


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


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


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


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


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


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


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


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


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


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


  /**
   * Reference to a field of type 'VoiceExperienceStatus[]'
   */
  export type ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'VoiceExperienceStatus[]'>
    
  /**
   * Deep Input Types
   */


  export type PlaceWhereInput = {
    AND?: PlaceWhereInput | PlaceWhereInput[]
    OR?: PlaceWhereInput[]
    NOT?: PlaceWhereInput | PlaceWhereInput[]
    id?: StringFilter<"Place"> | string
    googlePlaceId?: StringFilter<"Place"> | string
    name?: StringFilter<"Place"> | string
    latitude?: FloatFilter<"Place"> | number
    longitude?: FloatFilter<"Place"> | number
    googlePrimaryType?: StringNullableFilter<"Place"> | string | null
    googleTypes?: StringNullableListFilter<"Place">
    googleBusinessStatus?: StringNullableFilter<"Place"> | string | null
    googleRating?: FloatNullableFilter<"Place"> | number | null
    googleUserRatingCount?: IntNullableFilter<"Place"> | number | null
    googleRegularOpeningHours?: JsonNullableFilter<"Place">
    googleCurrentOpeningHours?: JsonNullableFilter<"Place">
    googlePhotos?: JsonNullableFilter<"Place">
    googlePayload?: JsonNullableFilter<"Place">
    googlePayloadFetchedAt?: DateTimeNullableFilter<"Place"> | Date | string | null
    createdAt?: DateTimeFilter<"Place"> | Date | string
    updatedAt?: DateTimeFilter<"Place"> | Date | string
    experiences?: VoiceExperienceListRelationFilter
    favoriteUsers?: UserFavoritePlaceListRelationFilter
  }

  export type PlaceOrderByWithRelationInput = {
    id?: SortOrder
    googlePlaceId?: SortOrder
    name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    googlePrimaryType?: SortOrderInput | SortOrder
    googleTypes?: SortOrder
    googleBusinessStatus?: SortOrderInput | SortOrder
    googleRating?: SortOrderInput | SortOrder
    googleUserRatingCount?: SortOrderInput | SortOrder
    googleRegularOpeningHours?: SortOrderInput | SortOrder
    googleCurrentOpeningHours?: SortOrderInput | SortOrder
    googlePhotos?: SortOrderInput | SortOrder
    googlePayload?: SortOrderInput | SortOrder
    googlePayloadFetchedAt?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    experiences?: VoiceExperienceOrderByRelationAggregateInput
    favoriteUsers?: UserFavoritePlaceOrderByRelationAggregateInput
  }

  export type PlaceWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    googlePlaceId?: string
    AND?: PlaceWhereInput | PlaceWhereInput[]
    OR?: PlaceWhereInput[]
    NOT?: PlaceWhereInput | PlaceWhereInput[]
    name?: StringFilter<"Place"> | string
    latitude?: FloatFilter<"Place"> | number
    longitude?: FloatFilter<"Place"> | number
    googlePrimaryType?: StringNullableFilter<"Place"> | string | null
    googleTypes?: StringNullableListFilter<"Place">
    googleBusinessStatus?: StringNullableFilter<"Place"> | string | null
    googleRating?: FloatNullableFilter<"Place"> | number | null
    googleUserRatingCount?: IntNullableFilter<"Place"> | number | null
    googleRegularOpeningHours?: JsonNullableFilter<"Place">
    googleCurrentOpeningHours?: JsonNullableFilter<"Place">
    googlePhotos?: JsonNullableFilter<"Place">
    googlePayload?: JsonNullableFilter<"Place">
    googlePayloadFetchedAt?: DateTimeNullableFilter<"Place"> | Date | string | null
    createdAt?: DateTimeFilter<"Place"> | Date | string
    updatedAt?: DateTimeFilter<"Place"> | Date | string
    experiences?: VoiceExperienceListRelationFilter
    favoriteUsers?: UserFavoritePlaceListRelationFilter
  }, "id" | "googlePlaceId">

  export type PlaceOrderByWithAggregationInput = {
    id?: SortOrder
    googlePlaceId?: SortOrder
    name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    googlePrimaryType?: SortOrderInput | SortOrder
    googleTypes?: SortOrder
    googleBusinessStatus?: SortOrderInput | SortOrder
    googleRating?: SortOrderInput | SortOrder
    googleUserRatingCount?: SortOrderInput | SortOrder
    googleRegularOpeningHours?: SortOrderInput | SortOrder
    googleCurrentOpeningHours?: SortOrderInput | SortOrder
    googlePhotos?: SortOrderInput | SortOrder
    googlePayload?: SortOrderInput | SortOrder
    googlePayloadFetchedAt?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: PlaceCountOrderByAggregateInput
    _avg?: PlaceAvgOrderByAggregateInput
    _max?: PlaceMaxOrderByAggregateInput
    _min?: PlaceMinOrderByAggregateInput
    _sum?: PlaceSumOrderByAggregateInput
  }

  export type PlaceScalarWhereWithAggregatesInput = {
    AND?: PlaceScalarWhereWithAggregatesInput | PlaceScalarWhereWithAggregatesInput[]
    OR?: PlaceScalarWhereWithAggregatesInput[]
    NOT?: PlaceScalarWhereWithAggregatesInput | PlaceScalarWhereWithAggregatesInput[]
    id?: StringWithAggregatesFilter<"Place"> | string
    googlePlaceId?: StringWithAggregatesFilter<"Place"> | string
    name?: StringWithAggregatesFilter<"Place"> | string
    latitude?: FloatWithAggregatesFilter<"Place"> | number
    longitude?: FloatWithAggregatesFilter<"Place"> | number
    googlePrimaryType?: StringNullableWithAggregatesFilter<"Place"> | string | null
    googleTypes?: StringNullableListFilter<"Place">
    googleBusinessStatus?: StringNullableWithAggregatesFilter<"Place"> | string | null
    googleRating?: FloatNullableWithAggregatesFilter<"Place"> | number | null
    googleUserRatingCount?: IntNullableWithAggregatesFilter<"Place"> | number | null
    googleRegularOpeningHours?: JsonNullableWithAggregatesFilter<"Place">
    googleCurrentOpeningHours?: JsonNullableWithAggregatesFilter<"Place">
    googlePhotos?: JsonNullableWithAggregatesFilter<"Place">
    googlePayload?: JsonNullableWithAggregatesFilter<"Place">
    googlePayloadFetchedAt?: DateTimeNullableWithAggregatesFilter<"Place"> | Date | string | null
    createdAt?: DateTimeWithAggregatesFilter<"Place"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"Place"> | Date | string
  }

  export type UserWhereInput = {
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    id?: StringFilter<"User"> | string
    telegramId?: StringFilter<"User"> | string
    username?: StringNullableFilter<"User"> | string | null
    firstName?: StringNullableFilter<"User"> | string | null
    lastName?: StringNullableFilter<"User"> | string | null
    photoUrl?: StringNullableFilter<"User"> | string | null
    languageCode?: StringNullableFilter<"User"> | string | null
    isAdmin?: BoolFilter<"User"> | boolean
    createdAt?: DateTimeFilter<"User"> | Date | string
    updatedAt?: DateTimeFilter<"User"> | Date | string
    voiceExperiences?: VoiceExperienceListRelationFilter
    favoritePlaces?: UserFavoritePlaceListRelationFilter
  }

  export type UserOrderByWithRelationInput = {
    id?: SortOrder
    telegramId?: SortOrder
    username?: SortOrderInput | SortOrder
    firstName?: SortOrderInput | SortOrder
    lastName?: SortOrderInput | SortOrder
    photoUrl?: SortOrderInput | SortOrder
    languageCode?: SortOrderInput | SortOrder
    isAdmin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    voiceExperiences?: VoiceExperienceOrderByRelationAggregateInput
    favoritePlaces?: UserFavoritePlaceOrderByRelationAggregateInput
  }

  export type UserWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    telegramId?: string
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    username?: StringNullableFilter<"User"> | string | null
    firstName?: StringNullableFilter<"User"> | string | null
    lastName?: StringNullableFilter<"User"> | string | null
    photoUrl?: StringNullableFilter<"User"> | string | null
    languageCode?: StringNullableFilter<"User"> | string | null
    isAdmin?: BoolFilter<"User"> | boolean
    createdAt?: DateTimeFilter<"User"> | Date | string
    updatedAt?: DateTimeFilter<"User"> | Date | string
    voiceExperiences?: VoiceExperienceListRelationFilter
    favoritePlaces?: UserFavoritePlaceListRelationFilter
  }, "id" | "telegramId">

  export type UserOrderByWithAggregationInput = {
    id?: SortOrder
    telegramId?: SortOrder
    username?: SortOrderInput | SortOrder
    firstName?: SortOrderInput | SortOrder
    lastName?: SortOrderInput | SortOrder
    photoUrl?: SortOrderInput | SortOrder
    languageCode?: SortOrderInput | SortOrder
    isAdmin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: UserCountOrderByAggregateInput
    _max?: UserMaxOrderByAggregateInput
    _min?: UserMinOrderByAggregateInput
  }

  export type UserScalarWhereWithAggregatesInput = {
    AND?: UserScalarWhereWithAggregatesInput | UserScalarWhereWithAggregatesInput[]
    OR?: UserScalarWhereWithAggregatesInput[]
    NOT?: UserScalarWhereWithAggregatesInput | UserScalarWhereWithAggregatesInput[]
    id?: StringWithAggregatesFilter<"User"> | string
    telegramId?: StringWithAggregatesFilter<"User"> | string
    username?: StringNullableWithAggregatesFilter<"User"> | string | null
    firstName?: StringNullableWithAggregatesFilter<"User"> | string | null
    lastName?: StringNullableWithAggregatesFilter<"User"> | string | null
    photoUrl?: StringNullableWithAggregatesFilter<"User"> | string | null
    languageCode?: StringNullableWithAggregatesFilter<"User"> | string | null
    isAdmin?: BoolWithAggregatesFilter<"User"> | boolean
    createdAt?: DateTimeWithAggregatesFilter<"User"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"User"> | Date | string
  }

  export type UserFavoritePlaceWhereInput = {
    AND?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[]
    OR?: UserFavoritePlaceWhereInput[]
    NOT?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[]
    id?: StringFilter<"UserFavoritePlace"> | string
    userId?: StringFilter<"UserFavoritePlace"> | string
    placeId?: StringFilter<"UserFavoritePlace"> | string
    createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string
    user?: XOR<UserScalarRelationFilter, UserWhereInput>
    place?: XOR<PlaceScalarRelationFilter, PlaceWhereInput>
  }

  export type UserFavoritePlaceOrderByWithRelationInput = {
    id?: SortOrder
    userId?: SortOrder
    placeId?: SortOrder
    createdAt?: SortOrder
    user?: UserOrderByWithRelationInput
    place?: PlaceOrderByWithRelationInput
  }

  export type UserFavoritePlaceWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    userId_placeId?: UserFavoritePlaceUserIdPlaceIdCompoundUniqueInput
    AND?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[]
    OR?: UserFavoritePlaceWhereInput[]
    NOT?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[]
    userId?: StringFilter<"UserFavoritePlace"> | string
    placeId?: StringFilter<"UserFavoritePlace"> | string
    createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string
    user?: XOR<UserScalarRelationFilter, UserWhereInput>
    place?: XOR<PlaceScalarRelationFilter, PlaceWhereInput>
  }, "id" | "userId_placeId">

  export type UserFavoritePlaceOrderByWithAggregationInput = {
    id?: SortOrder
    userId?: SortOrder
    placeId?: SortOrder
    createdAt?: SortOrder
    _count?: UserFavoritePlaceCountOrderByAggregateInput
    _max?: UserFavoritePlaceMaxOrderByAggregateInput
    _min?: UserFavoritePlaceMinOrderByAggregateInput
  }

  export type UserFavoritePlaceScalarWhereWithAggregatesInput = {
    AND?: UserFavoritePlaceScalarWhereWithAggregatesInput | UserFavoritePlaceScalarWhereWithAggregatesInput[]
    OR?: UserFavoritePlaceScalarWhereWithAggregatesInput[]
    NOT?: UserFavoritePlaceScalarWhereWithAggregatesInput | UserFavoritePlaceScalarWhereWithAggregatesInput[]
    id?: StringWithAggregatesFilter<"UserFavoritePlace"> | string
    userId?: StringWithAggregatesFilter<"UserFavoritePlace"> | string
    placeId?: StringWithAggregatesFilter<"UserFavoritePlace"> | string
    createdAt?: DateTimeWithAggregatesFilter<"UserFavoritePlace"> | Date | string
  }

  export type VoiceExperienceWhereInput = {
    AND?: VoiceExperienceWhereInput | VoiceExperienceWhereInput[]
    OR?: VoiceExperienceWhereInput[]
    NOT?: VoiceExperienceWhereInput | VoiceExperienceWhereInput[]
    id?: StringFilter<"VoiceExperience"> | string
    placeId?: StringFilter<"VoiceExperience"> | string
    userId?: StringNullableFilter<"VoiceExperience"> | string | null
    durationSeconds?: IntFilter<"VoiceExperience"> | number
    audioObjectKey?: StringFilter<"VoiceExperience"> | string
    audioContentBase64?: StringNullableFilter<"VoiceExperience"> | string | null
    audioMimeType?: StringNullableFilter<"VoiceExperience"> | string | null
    audioAccessToken?: StringNullableFilter<"VoiceExperience"> | string | null
    status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus
    transcript?: StringNullableFilter<"VoiceExperience"> | string | null
    analysis?: JsonNullableFilter<"VoiceExperience">
    recordingPayload?: JsonNullableFilter<"VoiceExperience">
    promptHintsShown?: StringNullableListFilter<"VoiceExperience">
    createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string
    updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string
    place?: XOR<PlaceScalarRelationFilter, PlaceWhereInput>
    user?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }

  export type VoiceExperienceOrderByWithRelationInput = {
    id?: SortOrder
    placeId?: SortOrder
    userId?: SortOrderInput | SortOrder
    durationSeconds?: SortOrder
    audioObjectKey?: SortOrder
    audioContentBase64?: SortOrderInput | SortOrder
    audioMimeType?: SortOrderInput | SortOrder
    audioAccessToken?: SortOrderInput | SortOrder
    status?: SortOrder
    transcript?: SortOrderInput | SortOrder
    analysis?: SortOrderInput | SortOrder
    recordingPayload?: SortOrderInput | SortOrder
    promptHintsShown?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    place?: PlaceOrderByWithRelationInput
    user?: UserOrderByWithRelationInput
  }

  export type VoiceExperienceWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    audioAccessToken?: string
    AND?: VoiceExperienceWhereInput | VoiceExperienceWhereInput[]
    OR?: VoiceExperienceWhereInput[]
    NOT?: VoiceExperienceWhereInput | VoiceExperienceWhereInput[]
    placeId?: StringFilter<"VoiceExperience"> | string
    userId?: StringNullableFilter<"VoiceExperience"> | string | null
    durationSeconds?: IntFilter<"VoiceExperience"> | number
    audioObjectKey?: StringFilter<"VoiceExperience"> | string
    audioContentBase64?: StringNullableFilter<"VoiceExperience"> | string | null
    audioMimeType?: StringNullableFilter<"VoiceExperience"> | string | null
    status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus
    transcript?: StringNullableFilter<"VoiceExperience"> | string | null
    analysis?: JsonNullableFilter<"VoiceExperience">
    recordingPayload?: JsonNullableFilter<"VoiceExperience">
    promptHintsShown?: StringNullableListFilter<"VoiceExperience">
    createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string
    updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string
    place?: XOR<PlaceScalarRelationFilter, PlaceWhereInput>
    user?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }, "id" | "audioAccessToken">

  export type VoiceExperienceOrderByWithAggregationInput = {
    id?: SortOrder
    placeId?: SortOrder
    userId?: SortOrderInput | SortOrder
    durationSeconds?: SortOrder
    audioObjectKey?: SortOrder
    audioContentBase64?: SortOrderInput | SortOrder
    audioMimeType?: SortOrderInput | SortOrder
    audioAccessToken?: SortOrderInput | SortOrder
    status?: SortOrder
    transcript?: SortOrderInput | SortOrder
    analysis?: SortOrderInput | SortOrder
    recordingPayload?: SortOrderInput | SortOrder
    promptHintsShown?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: VoiceExperienceCountOrderByAggregateInput
    _avg?: VoiceExperienceAvgOrderByAggregateInput
    _max?: VoiceExperienceMaxOrderByAggregateInput
    _min?: VoiceExperienceMinOrderByAggregateInput
    _sum?: VoiceExperienceSumOrderByAggregateInput
  }

  export type VoiceExperienceScalarWhereWithAggregatesInput = {
    AND?: VoiceExperienceScalarWhereWithAggregatesInput | VoiceExperienceScalarWhereWithAggregatesInput[]
    OR?: VoiceExperienceScalarWhereWithAggregatesInput[]
    NOT?: VoiceExperienceScalarWhereWithAggregatesInput | VoiceExperienceScalarWhereWithAggregatesInput[]
    id?: StringWithAggregatesFilter<"VoiceExperience"> | string
    placeId?: StringWithAggregatesFilter<"VoiceExperience"> | string
    userId?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null
    durationSeconds?: IntWithAggregatesFilter<"VoiceExperience"> | number
    audioObjectKey?: StringWithAggregatesFilter<"VoiceExperience"> | string
    audioContentBase64?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null
    audioMimeType?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null
    audioAccessToken?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null
    status?: EnumVoiceExperienceStatusWithAggregatesFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus
    transcript?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null
    analysis?: JsonNullableWithAggregatesFilter<"VoiceExperience">
    recordingPayload?: JsonNullableWithAggregatesFilter<"VoiceExperience">
    promptHintsShown?: StringNullableListFilter<"VoiceExperience">
    createdAt?: DateTimeWithAggregatesFilter<"VoiceExperience"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"VoiceExperience"> | Date | string
  }

  export type PlaceCreateInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    experiences?: VoiceExperienceCreateNestedManyWithoutPlaceInput
    favoriteUsers?: UserFavoritePlaceCreateNestedManyWithoutPlaceInput
  }

  export type PlaceUncheckedCreateInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    experiences?: VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput
    favoriteUsers?: UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput
  }

  export type PlaceUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    experiences?: VoiceExperienceUpdateManyWithoutPlaceNestedInput
    favoriteUsers?: UserFavoritePlaceUpdateManyWithoutPlaceNestedInput
  }

  export type PlaceUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    experiences?: VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput
    favoriteUsers?: UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput
  }

  export type PlaceCreateManyInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type PlaceUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type PlaceUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserCreateInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput
    favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput
  }

  export type UserUncheckedCreateInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput
    favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput
    favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput
  }

  export type UserUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput
    favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput
  }

  export type UserCreateManyInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceCreateInput = {
    id?: string
    createdAt?: Date | string
    user: UserCreateNestedOneWithoutFavoritePlacesInput
    place: PlaceCreateNestedOneWithoutFavoriteUsersInput
  }

  export type UserFavoritePlaceUncheckedCreateInput = {
    id?: string
    userId: string
    placeId: string
    createdAt?: Date | string
  }

  export type UserFavoritePlaceUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    user?: UserUpdateOneRequiredWithoutFavoritePlacesNestedInput
    place?: PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput
  }

  export type UserFavoritePlaceUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceCreateManyInput = {
    id?: string
    userId: string
    placeId: string
    createdAt?: Date | string
  }

  export type UserFavoritePlaceUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceCreateInput = {
    id?: string
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
    place: PlaceCreateNestedOneWithoutExperiencesInput
    user?: UserCreateNestedOneWithoutVoiceExperiencesInput
  }

  export type VoiceExperienceUncheckedCreateInput = {
    id?: string
    placeId: string
    userId?: string | null
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type VoiceExperienceUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    place?: PlaceUpdateOneRequiredWithoutExperiencesNestedInput
    user?: UserUpdateOneWithoutVoiceExperiencesNestedInput
  }

  export type VoiceExperienceUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    userId?: NullableStringFieldUpdateOperationsInput | string | null
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceCreateManyInput = {
    id?: string
    placeId: string
    userId?: string | null
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type VoiceExperienceUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    userId?: NullableStringFieldUpdateOperationsInput | string | null
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[] | ListStringFieldRefInput<$PrismaModel>
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel>
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    mode?: QueryMode
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type FloatFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[] | ListFloatFieldRefInput<$PrismaModel>
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel>
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatFilter<$PrismaModel> | number
  }

  export type StringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    mode?: QueryMode
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type StringNullableListFilter<$PrismaModel = never> = {
    equals?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    has?: string | StringFieldRefInput<$PrismaModel> | null
    hasEvery?: string[] | ListStringFieldRefInput<$PrismaModel>
    hasSome?: string[] | ListStringFieldRefInput<$PrismaModel>
    isEmpty?: boolean
  }

  export type FloatNullableFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableFilter<$PrismaModel> | number | null
  }

  export type IntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }
  export type JsonNullableFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonNullableFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonNullableFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonNullableFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonNullableFilterBase<$PrismaModel>>, 'path'>>

  export type JsonNullableFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string[]
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type DateTimeNullableFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
  }

  export type DateTimeFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeFilter<$PrismaModel> | Date | string
  }

  export type VoiceExperienceListRelationFilter = {
    every?: VoiceExperienceWhereInput
    some?: VoiceExperienceWhereInput
    none?: VoiceExperienceWhereInput
  }

  export type UserFavoritePlaceListRelationFilter = {
    every?: UserFavoritePlaceWhereInput
    some?: UserFavoritePlaceWhereInput
    none?: UserFavoritePlaceWhereInput
  }

  export type SortOrderInput = {
    sort: SortOrder
    nulls?: NullsOrder
  }

  export type VoiceExperienceOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type UserFavoritePlaceOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type PlaceCountOrderByAggregateInput = {
    id?: SortOrder
    googlePlaceId?: SortOrder
    name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    googlePrimaryType?: SortOrder
    googleTypes?: SortOrder
    googleBusinessStatus?: SortOrder
    googleRating?: SortOrder
    googleUserRatingCount?: SortOrder
    googleRegularOpeningHours?: SortOrder
    googleCurrentOpeningHours?: SortOrder
    googlePhotos?: SortOrder
    googlePayload?: SortOrder
    googlePayloadFetchedAt?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type PlaceAvgOrderByAggregateInput = {
    latitude?: SortOrder
    longitude?: SortOrder
    googleRating?: SortOrder
    googleUserRatingCount?: SortOrder
  }

  export type PlaceMaxOrderByAggregateInput = {
    id?: SortOrder
    googlePlaceId?: SortOrder
    name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    googlePrimaryType?: SortOrder
    googleBusinessStatus?: SortOrder
    googleRating?: SortOrder
    googleUserRatingCount?: SortOrder
    googlePayloadFetchedAt?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type PlaceMinOrderByAggregateInput = {
    id?: SortOrder
    googlePlaceId?: SortOrder
    name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    googlePrimaryType?: SortOrder
    googleBusinessStatus?: SortOrder
    googleRating?: SortOrder
    googleUserRatingCount?: SortOrder
    googlePayloadFetchedAt?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type PlaceSumOrderByAggregateInput = {
    latitude?: SortOrder
    longitude?: SortOrder
    googleRating?: SortOrder
    googleUserRatingCount?: SortOrder
  }

  export type StringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[] | ListStringFieldRefInput<$PrismaModel>
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel>
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    mode?: QueryMode
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type FloatWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[] | ListFloatFieldRefInput<$PrismaModel>
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel>
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedFloatFilter<$PrismaModel>
    _min?: NestedFloatFilter<$PrismaModel>
    _max?: NestedFloatFilter<$PrismaModel>
  }

  export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    mode?: QueryMode
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedFloatNullableFilter<$PrismaModel>
    _min?: NestedFloatNullableFilter<$PrismaModel>
    _max?: NestedFloatNullableFilter<$PrismaModel>
  }

  export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }
  export type JsonNullableWithAggregatesFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, 'path'>>

  export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string[]
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedJsonNullableFilter<$PrismaModel>
    _max?: NestedJsonNullableFilter<$PrismaModel>
  }

  export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedDateTimeNullableFilter<$PrismaModel>
    _max?: NestedDateTimeNullableFilter<$PrismaModel>
  }

  export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedDateTimeFilter<$PrismaModel>
    _max?: NestedDateTimeFilter<$PrismaModel>
  }

  export type BoolFilter<$PrismaModel = never> = {
    equals?: boolean | BooleanFieldRefInput<$PrismaModel>
    not?: NestedBoolFilter<$PrismaModel> | boolean
  }

  export type UserCountOrderByAggregateInput = {
    id?: SortOrder
    telegramId?: SortOrder
    username?: SortOrder
    firstName?: SortOrder
    lastName?: SortOrder
    photoUrl?: SortOrder
    languageCode?: SortOrder
    isAdmin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type UserMaxOrderByAggregateInput = {
    id?: SortOrder
    telegramId?: SortOrder
    username?: SortOrder
    firstName?: SortOrder
    lastName?: SortOrder
    photoUrl?: SortOrder
    languageCode?: SortOrder
    isAdmin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type UserMinOrderByAggregateInput = {
    id?: SortOrder
    telegramId?: SortOrder
    username?: SortOrder
    firstName?: SortOrder
    lastName?: SortOrder
    photoUrl?: SortOrder
    languageCode?: SortOrder
    isAdmin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type BoolWithAggregatesFilter<$PrismaModel = never> = {
    equals?: boolean | BooleanFieldRefInput<$PrismaModel>
    not?: NestedBoolWithAggregatesFilter<$PrismaModel> | boolean
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedBoolFilter<$PrismaModel>
    _max?: NestedBoolFilter<$PrismaModel>
  }

  export type UserScalarRelationFilter = {
    is?: UserWhereInput
    isNot?: UserWhereInput
  }

  export type PlaceScalarRelationFilter = {
    is?: PlaceWhereInput
    isNot?: PlaceWhereInput
  }

  export type UserFavoritePlaceUserIdPlaceIdCompoundUniqueInput = {
    userId: string
    placeId: string
  }

  export type UserFavoritePlaceCountOrderByAggregateInput = {
    id?: SortOrder
    userId?: SortOrder
    placeId?: SortOrder
    createdAt?: SortOrder
  }

  export type UserFavoritePlaceMaxOrderByAggregateInput = {
    id?: SortOrder
    userId?: SortOrder
    placeId?: SortOrder
    createdAt?: SortOrder
  }

  export type UserFavoritePlaceMinOrderByAggregateInput = {
    id?: SortOrder
    userId?: SortOrder
    placeId?: SortOrder
    createdAt?: SortOrder
  }

  export type IntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[] | ListIntFieldRefInput<$PrismaModel>
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel>
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type EnumVoiceExperienceStatusFilter<$PrismaModel = never> = {
    equals?: $Enums.VoiceExperienceStatus | EnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    in?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    notIn?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    not?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel> | $Enums.VoiceExperienceStatus
  }

  export type UserNullableScalarRelationFilter = {
    is?: UserWhereInput | null
    isNot?: UserWhereInput | null
  }

  export type VoiceExperienceCountOrderByAggregateInput = {
    id?: SortOrder
    placeId?: SortOrder
    userId?: SortOrder
    durationSeconds?: SortOrder
    audioObjectKey?: SortOrder
    audioContentBase64?: SortOrder
    audioMimeType?: SortOrder
    audioAccessToken?: SortOrder
    status?: SortOrder
    transcript?: SortOrder
    analysis?: SortOrder
    recordingPayload?: SortOrder
    promptHintsShown?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type VoiceExperienceAvgOrderByAggregateInput = {
    durationSeconds?: SortOrder
  }

  export type VoiceExperienceMaxOrderByAggregateInput = {
    id?: SortOrder
    placeId?: SortOrder
    userId?: SortOrder
    durationSeconds?: SortOrder
    audioObjectKey?: SortOrder
    audioContentBase64?: SortOrder
    audioMimeType?: SortOrder
    audioAccessToken?: SortOrder
    status?: SortOrder
    transcript?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type VoiceExperienceMinOrderByAggregateInput = {
    id?: SortOrder
    placeId?: SortOrder
    userId?: SortOrder
    durationSeconds?: SortOrder
    audioObjectKey?: SortOrder
    audioContentBase64?: SortOrder
    audioMimeType?: SortOrder
    audioAccessToken?: SortOrder
    status?: SortOrder
    transcript?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type VoiceExperienceSumOrderByAggregateInput = {
    durationSeconds?: SortOrder
  }

  export type IntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[] | ListIntFieldRefInput<$PrismaModel>
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel>
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type EnumVoiceExperienceStatusWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.VoiceExperienceStatus | EnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    in?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    notIn?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    not?: NestedEnumVoiceExperienceStatusWithAggregatesFilter<$PrismaModel> | $Enums.VoiceExperienceStatus
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel>
    _max?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel>
  }

  export type PlaceCreategoogleTypesInput = {
    set: string[]
  }

  export type VoiceExperienceCreateNestedManyWithoutPlaceInput = {
    create?: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput> | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[]
    createMany?: VoiceExperienceCreateManyPlaceInputEnvelope
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
  }

  export type UserFavoritePlaceCreateNestedManyWithoutPlaceInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput> | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[]
    createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
  }

  export type VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput = {
    create?: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput> | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[]
    createMany?: VoiceExperienceCreateManyPlaceInputEnvelope
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
  }

  export type UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput> | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[]
    createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
  }

  export type StringFieldUpdateOperationsInput = {
    set?: string
  }

  export type FloatFieldUpdateOperationsInput = {
    set?: number
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type NullableStringFieldUpdateOperationsInput = {
    set?: string | null
  }

  export type PlaceUpdategoogleTypesInput = {
    set?: string[]
    push?: string | string[]
  }

  export type NullableFloatFieldUpdateOperationsInput = {
    set?: number | null
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type NullableIntFieldUpdateOperationsInput = {
    set?: number | null
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type NullableDateTimeFieldUpdateOperationsInput = {
    set?: Date | string | null
  }

  export type DateTimeFieldUpdateOperationsInput = {
    set?: Date | string
  }

  export type VoiceExperienceUpdateManyWithoutPlaceNestedInput = {
    create?: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput> | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[]
    upsert?: VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput | VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput[]
    createMany?: VoiceExperienceCreateManyPlaceInputEnvelope
    set?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    disconnect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    delete?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    update?: VoiceExperienceUpdateWithWhereUniqueWithoutPlaceInput | VoiceExperienceUpdateWithWhereUniqueWithoutPlaceInput[]
    updateMany?: VoiceExperienceUpdateManyWithWhereWithoutPlaceInput | VoiceExperienceUpdateManyWithWhereWithoutPlaceInput[]
    deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
  }

  export type UserFavoritePlaceUpdateManyWithoutPlaceNestedInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput> | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[]
    upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput[]
    createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope
    set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput[]
    updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput | UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput[]
    deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
  }

  export type VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput = {
    create?: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput> | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[]
    upsert?: VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput | VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput[]
    createMany?: VoiceExperienceCreateManyPlaceInputEnvelope
    set?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    disconnect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    delete?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    update?: VoiceExperienceUpdateWithWhereUniqueWithoutPlaceInput | VoiceExperienceUpdateWithWhereUniqueWithoutPlaceInput[]
    updateMany?: VoiceExperienceUpdateManyWithWhereWithoutPlaceInput | VoiceExperienceUpdateManyWithWhereWithoutPlaceInput[]
    deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
  }

  export type UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput> | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[]
    upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput[]
    createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope
    set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput[]
    updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput | UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput[]
    deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
  }

  export type VoiceExperienceCreateNestedManyWithoutUserInput = {
    create?: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput> | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[]
    createMany?: VoiceExperienceCreateManyUserInputEnvelope
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
  }

  export type UserFavoritePlaceCreateNestedManyWithoutUserInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput> | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[]
    createMany?: UserFavoritePlaceCreateManyUserInputEnvelope
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
  }

  export type VoiceExperienceUncheckedCreateNestedManyWithoutUserInput = {
    create?: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput> | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[]
    createMany?: VoiceExperienceCreateManyUserInputEnvelope
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
  }

  export type UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput> | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[]
    createMany?: UserFavoritePlaceCreateManyUserInputEnvelope
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
  }

  export type BoolFieldUpdateOperationsInput = {
    set?: boolean
  }

  export type VoiceExperienceUpdateManyWithoutUserNestedInput = {
    create?: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput> | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[]
    upsert?: VoiceExperienceUpsertWithWhereUniqueWithoutUserInput | VoiceExperienceUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: VoiceExperienceCreateManyUserInputEnvelope
    set?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    disconnect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    delete?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    update?: VoiceExperienceUpdateWithWhereUniqueWithoutUserInput | VoiceExperienceUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: VoiceExperienceUpdateManyWithWhereWithoutUserInput | VoiceExperienceUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
  }

  export type UserFavoritePlaceUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput> | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[]
    upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserFavoritePlaceCreateManyUserInputEnvelope
    set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutUserInput | UserFavoritePlaceUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
  }

  export type VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput = {
    create?: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput> | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[]
    upsert?: VoiceExperienceUpsertWithWhereUniqueWithoutUserInput | VoiceExperienceUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: VoiceExperienceCreateManyUserInputEnvelope
    set?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    disconnect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    delete?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[]
    update?: VoiceExperienceUpdateWithWhereUniqueWithoutUserInput | VoiceExperienceUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: VoiceExperienceUpdateManyWithWhereWithoutUserInput | VoiceExperienceUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
  }

  export type UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput> | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[]
    upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserFavoritePlaceCreateManyUserInputEnvelope
    set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[]
    update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutUserInput | UserFavoritePlaceUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
  }

  export type UserCreateNestedOneWithoutFavoritePlacesInput = {
    create?: XOR<UserCreateWithoutFavoritePlacesInput, UserUncheckedCreateWithoutFavoritePlacesInput>
    connectOrCreate?: UserCreateOrConnectWithoutFavoritePlacesInput
    connect?: UserWhereUniqueInput
  }

  export type PlaceCreateNestedOneWithoutFavoriteUsersInput = {
    create?: XOR<PlaceCreateWithoutFavoriteUsersInput, PlaceUncheckedCreateWithoutFavoriteUsersInput>
    connectOrCreate?: PlaceCreateOrConnectWithoutFavoriteUsersInput
    connect?: PlaceWhereUniqueInput
  }

  export type UserUpdateOneRequiredWithoutFavoritePlacesNestedInput = {
    create?: XOR<UserCreateWithoutFavoritePlacesInput, UserUncheckedCreateWithoutFavoritePlacesInput>
    connectOrCreate?: UserCreateOrConnectWithoutFavoritePlacesInput
    upsert?: UserUpsertWithoutFavoritePlacesInput
    connect?: UserWhereUniqueInput
    update?: XOR<XOR<UserUpdateToOneWithWhereWithoutFavoritePlacesInput, UserUpdateWithoutFavoritePlacesInput>, UserUncheckedUpdateWithoutFavoritePlacesInput>
  }

  export type PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput = {
    create?: XOR<PlaceCreateWithoutFavoriteUsersInput, PlaceUncheckedCreateWithoutFavoriteUsersInput>
    connectOrCreate?: PlaceCreateOrConnectWithoutFavoriteUsersInput
    upsert?: PlaceUpsertWithoutFavoriteUsersInput
    connect?: PlaceWhereUniqueInput
    update?: XOR<XOR<PlaceUpdateToOneWithWhereWithoutFavoriteUsersInput, PlaceUpdateWithoutFavoriteUsersInput>, PlaceUncheckedUpdateWithoutFavoriteUsersInput>
  }

  export type VoiceExperienceCreatepromptHintsShownInput = {
    set: string[]
  }

  export type PlaceCreateNestedOneWithoutExperiencesInput = {
    create?: XOR<PlaceCreateWithoutExperiencesInput, PlaceUncheckedCreateWithoutExperiencesInput>
    connectOrCreate?: PlaceCreateOrConnectWithoutExperiencesInput
    connect?: PlaceWhereUniqueInput
  }

  export type UserCreateNestedOneWithoutVoiceExperiencesInput = {
    create?: XOR<UserCreateWithoutVoiceExperiencesInput, UserUncheckedCreateWithoutVoiceExperiencesInput>
    connectOrCreate?: UserCreateOrConnectWithoutVoiceExperiencesInput
    connect?: UserWhereUniqueInput
  }

  export type IntFieldUpdateOperationsInput = {
    set?: number
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type EnumVoiceExperienceStatusFieldUpdateOperationsInput = {
    set?: $Enums.VoiceExperienceStatus
  }

  export type VoiceExperienceUpdatepromptHintsShownInput = {
    set?: string[]
    push?: string | string[]
  }

  export type PlaceUpdateOneRequiredWithoutExperiencesNestedInput = {
    create?: XOR<PlaceCreateWithoutExperiencesInput, PlaceUncheckedCreateWithoutExperiencesInput>
    connectOrCreate?: PlaceCreateOrConnectWithoutExperiencesInput
    upsert?: PlaceUpsertWithoutExperiencesInput
    connect?: PlaceWhereUniqueInput
    update?: XOR<XOR<PlaceUpdateToOneWithWhereWithoutExperiencesInput, PlaceUpdateWithoutExperiencesInput>, PlaceUncheckedUpdateWithoutExperiencesInput>
  }

  export type UserUpdateOneWithoutVoiceExperiencesNestedInput = {
    create?: XOR<UserCreateWithoutVoiceExperiencesInput, UserUncheckedCreateWithoutVoiceExperiencesInput>
    connectOrCreate?: UserCreateOrConnectWithoutVoiceExperiencesInput
    upsert?: UserUpsertWithoutVoiceExperiencesInput
    disconnect?: UserWhereInput | boolean
    delete?: UserWhereInput | boolean
    connect?: UserWhereUniqueInput
    update?: XOR<XOR<UserUpdateToOneWithWhereWithoutVoiceExperiencesInput, UserUpdateWithoutVoiceExperiencesInput>, UserUncheckedUpdateWithoutVoiceExperiencesInput>
  }

  export type NestedStringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[] | ListStringFieldRefInput<$PrismaModel>
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel>
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type NestedFloatFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[] | ListFloatFieldRefInput<$PrismaModel>
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel>
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatFilter<$PrismaModel> | number
  }

  export type NestedStringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type NestedFloatNullableFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableFilter<$PrismaModel> | number | null
  }

  export type NestedIntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }

  export type NestedDateTimeNullableFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
  }

  export type NestedDateTimeFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeFilter<$PrismaModel> | Date | string
  }

  export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[] | ListStringFieldRefInput<$PrismaModel>
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel>
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type NestedIntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[] | ListIntFieldRefInput<$PrismaModel>
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel>
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type NestedFloatWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[] | ListFloatFieldRefInput<$PrismaModel>
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel>
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedFloatFilter<$PrismaModel>
    _min?: NestedFloatFilter<$PrismaModel>
    _max?: NestedFloatFilter<$PrismaModel>
  }

  export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    notIn?: string[] | ListStringFieldRefInput<$PrismaModel> | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type NestedFloatNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedFloatNullableFilter<$PrismaModel>
    _min?: NestedFloatNullableFilter<$PrismaModel>
    _max?: NestedFloatNullableFilter<$PrismaModel>
  }

  export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }
  export type NestedJsonNullableFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<NestedJsonNullableFilterBase<$PrismaModel>>, Exclude<keyof Required<NestedJsonNullableFilterBase<$PrismaModel>>, 'path'>>,
        Required<NestedJsonNullableFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<NestedJsonNullableFilterBase<$PrismaModel>>, 'path'>>

  export type NestedJsonNullableFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string[]
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel>
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedDateTimeNullableFilter<$PrismaModel>
    _max?: NestedDateTimeNullableFilter<$PrismaModel>
  }

  export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel>
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedDateTimeFilter<$PrismaModel>
    _max?: NestedDateTimeFilter<$PrismaModel>
  }

  export type NestedBoolFilter<$PrismaModel = never> = {
    equals?: boolean | BooleanFieldRefInput<$PrismaModel>
    not?: NestedBoolFilter<$PrismaModel> | boolean
  }

  export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = {
    equals?: boolean | BooleanFieldRefInput<$PrismaModel>
    not?: NestedBoolWithAggregatesFilter<$PrismaModel> | boolean
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedBoolFilter<$PrismaModel>
    _max?: NestedBoolFilter<$PrismaModel>
  }

  export type NestedEnumVoiceExperienceStatusFilter<$PrismaModel = never> = {
    equals?: $Enums.VoiceExperienceStatus | EnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    in?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    notIn?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    not?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel> | $Enums.VoiceExperienceStatus
  }

  export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[] | ListIntFieldRefInput<$PrismaModel>
    notIn?: number[] | ListIntFieldRefInput<$PrismaModel>
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type NestedEnumVoiceExperienceStatusWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.VoiceExperienceStatus | EnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    in?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    notIn?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel>
    not?: NestedEnumVoiceExperienceStatusWithAggregatesFilter<$PrismaModel> | $Enums.VoiceExperienceStatus
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel>
    _max?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel>
  }

  export type VoiceExperienceCreateWithoutPlaceInput = {
    id?: string
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
    user?: UserCreateNestedOneWithoutVoiceExperiencesInput
  }

  export type VoiceExperienceUncheckedCreateWithoutPlaceInput = {
    id?: string
    userId?: string | null
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type VoiceExperienceCreateOrConnectWithoutPlaceInput = {
    where: VoiceExperienceWhereUniqueInput
    create: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput>
  }

  export type VoiceExperienceCreateManyPlaceInputEnvelope = {
    data: VoiceExperienceCreateManyPlaceInput | VoiceExperienceCreateManyPlaceInput[]
    skipDuplicates?: boolean
  }

  export type UserFavoritePlaceCreateWithoutPlaceInput = {
    id?: string
    createdAt?: Date | string
    user: UserCreateNestedOneWithoutFavoritePlacesInput
  }

  export type UserFavoritePlaceUncheckedCreateWithoutPlaceInput = {
    id?: string
    userId: string
    createdAt?: Date | string
  }

  export type UserFavoritePlaceCreateOrConnectWithoutPlaceInput = {
    where: UserFavoritePlaceWhereUniqueInput
    create: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput>
  }

  export type UserFavoritePlaceCreateManyPlaceInputEnvelope = {
    data: UserFavoritePlaceCreateManyPlaceInput | UserFavoritePlaceCreateManyPlaceInput[]
    skipDuplicates?: boolean
  }

  export type VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput = {
    where: VoiceExperienceWhereUniqueInput
    update: XOR<VoiceExperienceUpdateWithoutPlaceInput, VoiceExperienceUncheckedUpdateWithoutPlaceInput>
    create: XOR<VoiceExperienceCreateWithoutPlaceInput, VoiceExperienceUncheckedCreateWithoutPlaceInput>
  }

  export type VoiceExperienceUpdateWithWhereUniqueWithoutPlaceInput = {
    where: VoiceExperienceWhereUniqueInput
    data: XOR<VoiceExperienceUpdateWithoutPlaceInput, VoiceExperienceUncheckedUpdateWithoutPlaceInput>
  }

  export type VoiceExperienceUpdateManyWithWhereWithoutPlaceInput = {
    where: VoiceExperienceScalarWhereInput
    data: XOR<VoiceExperienceUpdateManyMutationInput, VoiceExperienceUncheckedUpdateManyWithoutPlaceInput>
  }

  export type VoiceExperienceScalarWhereInput = {
    AND?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
    OR?: VoiceExperienceScalarWhereInput[]
    NOT?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[]
    id?: StringFilter<"VoiceExperience"> | string
    placeId?: StringFilter<"VoiceExperience"> | string
    userId?: StringNullableFilter<"VoiceExperience"> | string | null
    durationSeconds?: IntFilter<"VoiceExperience"> | number
    audioObjectKey?: StringFilter<"VoiceExperience"> | string
    audioContentBase64?: StringNullableFilter<"VoiceExperience"> | string | null
    audioMimeType?: StringNullableFilter<"VoiceExperience"> | string | null
    audioAccessToken?: StringNullableFilter<"VoiceExperience"> | string | null
    status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus
    transcript?: StringNullableFilter<"VoiceExperience"> | string | null
    analysis?: JsonNullableFilter<"VoiceExperience">
    recordingPayload?: JsonNullableFilter<"VoiceExperience">
    promptHintsShown?: StringNullableListFilter<"VoiceExperience">
    createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string
    updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string
  }

  export type UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput = {
    where: UserFavoritePlaceWhereUniqueInput
    update: XOR<UserFavoritePlaceUpdateWithoutPlaceInput, UserFavoritePlaceUncheckedUpdateWithoutPlaceInput>
    create: XOR<UserFavoritePlaceCreateWithoutPlaceInput, UserFavoritePlaceUncheckedCreateWithoutPlaceInput>
  }

  export type UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput = {
    where: UserFavoritePlaceWhereUniqueInput
    data: XOR<UserFavoritePlaceUpdateWithoutPlaceInput, UserFavoritePlaceUncheckedUpdateWithoutPlaceInput>
  }

  export type UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput = {
    where: UserFavoritePlaceScalarWhereInput
    data: XOR<UserFavoritePlaceUpdateManyMutationInput, UserFavoritePlaceUncheckedUpdateManyWithoutPlaceInput>
  }

  export type UserFavoritePlaceScalarWhereInput = {
    AND?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
    OR?: UserFavoritePlaceScalarWhereInput[]
    NOT?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[]
    id?: StringFilter<"UserFavoritePlace"> | string
    userId?: StringFilter<"UserFavoritePlace"> | string
    placeId?: StringFilter<"UserFavoritePlace"> | string
    createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string
  }

  export type VoiceExperienceCreateWithoutUserInput = {
    id?: string
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
    place: PlaceCreateNestedOneWithoutExperiencesInput
  }

  export type VoiceExperienceUncheckedCreateWithoutUserInput = {
    id?: string
    placeId: string
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type VoiceExperienceCreateOrConnectWithoutUserInput = {
    where: VoiceExperienceWhereUniqueInput
    create: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput>
  }

  export type VoiceExperienceCreateManyUserInputEnvelope = {
    data: VoiceExperienceCreateManyUserInput | VoiceExperienceCreateManyUserInput[]
    skipDuplicates?: boolean
  }

  export type UserFavoritePlaceCreateWithoutUserInput = {
    id?: string
    createdAt?: Date | string
    place: PlaceCreateNestedOneWithoutFavoriteUsersInput
  }

  export type UserFavoritePlaceUncheckedCreateWithoutUserInput = {
    id?: string
    placeId: string
    createdAt?: Date | string
  }

  export type UserFavoritePlaceCreateOrConnectWithoutUserInput = {
    where: UserFavoritePlaceWhereUniqueInput
    create: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput>
  }

  export type UserFavoritePlaceCreateManyUserInputEnvelope = {
    data: UserFavoritePlaceCreateManyUserInput | UserFavoritePlaceCreateManyUserInput[]
    skipDuplicates?: boolean
  }

  export type VoiceExperienceUpsertWithWhereUniqueWithoutUserInput = {
    where: VoiceExperienceWhereUniqueInput
    update: XOR<VoiceExperienceUpdateWithoutUserInput, VoiceExperienceUncheckedUpdateWithoutUserInput>
    create: XOR<VoiceExperienceCreateWithoutUserInput, VoiceExperienceUncheckedCreateWithoutUserInput>
  }

  export type VoiceExperienceUpdateWithWhereUniqueWithoutUserInput = {
    where: VoiceExperienceWhereUniqueInput
    data: XOR<VoiceExperienceUpdateWithoutUserInput, VoiceExperienceUncheckedUpdateWithoutUserInput>
  }

  export type VoiceExperienceUpdateManyWithWhereWithoutUserInput = {
    where: VoiceExperienceScalarWhereInput
    data: XOR<VoiceExperienceUpdateManyMutationInput, VoiceExperienceUncheckedUpdateManyWithoutUserInput>
  }

  export type UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput = {
    where: UserFavoritePlaceWhereUniqueInput
    update: XOR<UserFavoritePlaceUpdateWithoutUserInput, UserFavoritePlaceUncheckedUpdateWithoutUserInput>
    create: XOR<UserFavoritePlaceCreateWithoutUserInput, UserFavoritePlaceUncheckedCreateWithoutUserInput>
  }

  export type UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput = {
    where: UserFavoritePlaceWhereUniqueInput
    data: XOR<UserFavoritePlaceUpdateWithoutUserInput, UserFavoritePlaceUncheckedUpdateWithoutUserInput>
  }

  export type UserFavoritePlaceUpdateManyWithWhereWithoutUserInput = {
    where: UserFavoritePlaceScalarWhereInput
    data: XOR<UserFavoritePlaceUpdateManyMutationInput, UserFavoritePlaceUncheckedUpdateManyWithoutUserInput>
  }

  export type UserCreateWithoutFavoritePlacesInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput
  }

  export type UserUncheckedCreateWithoutFavoritePlacesInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutFavoritePlacesInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutFavoritePlacesInput, UserUncheckedCreateWithoutFavoritePlacesInput>
  }

  export type PlaceCreateWithoutFavoriteUsersInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    experiences?: VoiceExperienceCreateNestedManyWithoutPlaceInput
  }

  export type PlaceUncheckedCreateWithoutFavoriteUsersInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    experiences?: VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput
  }

  export type PlaceCreateOrConnectWithoutFavoriteUsersInput = {
    where: PlaceWhereUniqueInput
    create: XOR<PlaceCreateWithoutFavoriteUsersInput, PlaceUncheckedCreateWithoutFavoriteUsersInput>
  }

  export type UserUpsertWithoutFavoritePlacesInput = {
    update: XOR<UserUpdateWithoutFavoritePlacesInput, UserUncheckedUpdateWithoutFavoritePlacesInput>
    create: XOR<UserCreateWithoutFavoritePlacesInput, UserUncheckedCreateWithoutFavoritePlacesInput>
    where?: UserWhereInput
  }

  export type UserUpdateToOneWithWhereWithoutFavoritePlacesInput = {
    where?: UserWhereInput
    data: XOR<UserUpdateWithoutFavoritePlacesInput, UserUncheckedUpdateWithoutFavoritePlacesInput>
  }

  export type UserUpdateWithoutFavoritePlacesInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput
  }

  export type UserUncheckedUpdateWithoutFavoritePlacesInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput
  }

  export type PlaceUpsertWithoutFavoriteUsersInput = {
    update: XOR<PlaceUpdateWithoutFavoriteUsersInput, PlaceUncheckedUpdateWithoutFavoriteUsersInput>
    create: XOR<PlaceCreateWithoutFavoriteUsersInput, PlaceUncheckedCreateWithoutFavoriteUsersInput>
    where?: PlaceWhereInput
  }

  export type PlaceUpdateToOneWithWhereWithoutFavoriteUsersInput = {
    where?: PlaceWhereInput
    data: XOR<PlaceUpdateWithoutFavoriteUsersInput, PlaceUncheckedUpdateWithoutFavoriteUsersInput>
  }

  export type PlaceUpdateWithoutFavoriteUsersInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    experiences?: VoiceExperienceUpdateManyWithoutPlaceNestedInput
  }

  export type PlaceUncheckedUpdateWithoutFavoriteUsersInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    experiences?: VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput
  }

  export type PlaceCreateWithoutExperiencesInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    favoriteUsers?: UserFavoritePlaceCreateNestedManyWithoutPlaceInput
  }

  export type PlaceUncheckedCreateWithoutExperiencesInput = {
    id?: string
    googlePlaceId: string
    name: string
    latitude: number
    longitude: number
    googlePrimaryType?: string | null
    googleTypes?: PlaceCreategoogleTypesInput | string[]
    googleBusinessStatus?: string | null
    googleRating?: number | null
    googleUserRatingCount?: number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    favoriteUsers?: UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput
  }

  export type PlaceCreateOrConnectWithoutExperiencesInput = {
    where: PlaceWhereUniqueInput
    create: XOR<PlaceCreateWithoutExperiencesInput, PlaceUncheckedCreateWithoutExperiencesInput>
  }

  export type UserCreateWithoutVoiceExperiencesInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput
  }

  export type UserUncheckedCreateWithoutVoiceExperiencesInput = {
    id?: string
    telegramId: string
    username?: string | null
    firstName?: string | null
    lastName?: string | null
    photoUrl?: string | null
    languageCode?: string | null
    isAdmin?: boolean
    createdAt?: Date | string
    updatedAt?: Date | string
    favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutVoiceExperiencesInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutVoiceExperiencesInput, UserUncheckedCreateWithoutVoiceExperiencesInput>
  }

  export type PlaceUpsertWithoutExperiencesInput = {
    update: XOR<PlaceUpdateWithoutExperiencesInput, PlaceUncheckedUpdateWithoutExperiencesInput>
    create: XOR<PlaceCreateWithoutExperiencesInput, PlaceUncheckedCreateWithoutExperiencesInput>
    where?: PlaceWhereInput
  }

  export type PlaceUpdateToOneWithWhereWithoutExperiencesInput = {
    where?: PlaceWhereInput
    data: XOR<PlaceUpdateWithoutExperiencesInput, PlaceUncheckedUpdateWithoutExperiencesInput>
  }

  export type PlaceUpdateWithoutExperiencesInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    favoriteUsers?: UserFavoritePlaceUpdateManyWithoutPlaceNestedInput
  }

  export type PlaceUncheckedUpdateWithoutExperiencesInput = {
    id?: StringFieldUpdateOperationsInput | string
    googlePlaceId?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    latitude?: FloatFieldUpdateOperationsInput | number
    longitude?: FloatFieldUpdateOperationsInput | number
    googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null
    googleTypes?: PlaceUpdategoogleTypesInput | string[]
    googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null
    googleRating?: NullableFloatFieldUpdateOperationsInput | number | null
    googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null
    googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue
    googlePhotos?: NullableJsonNullValueInput | InputJsonValue
    googlePayload?: NullableJsonNullValueInput | InputJsonValue
    googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    favoriteUsers?: UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput
  }

  export type UserUpsertWithoutVoiceExperiencesInput = {
    update: XOR<UserUpdateWithoutVoiceExperiencesInput, UserUncheckedUpdateWithoutVoiceExperiencesInput>
    create: XOR<UserCreateWithoutVoiceExperiencesInput, UserUncheckedCreateWithoutVoiceExperiencesInput>
    where?: UserWhereInput
  }

  export type UserUpdateToOneWithWhereWithoutVoiceExperiencesInput = {
    where?: UserWhereInput
    data: XOR<UserUpdateWithoutVoiceExperiencesInput, UserUncheckedUpdateWithoutVoiceExperiencesInput>
  }

  export type UserUpdateWithoutVoiceExperiencesInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput
  }

  export type UserUncheckedUpdateWithoutVoiceExperiencesInput = {
    id?: StringFieldUpdateOperationsInput | string
    telegramId?: StringFieldUpdateOperationsInput | string
    username?: NullableStringFieldUpdateOperationsInput | string | null
    firstName?: NullableStringFieldUpdateOperationsInput | string | null
    lastName?: NullableStringFieldUpdateOperationsInput | string | null
    photoUrl?: NullableStringFieldUpdateOperationsInput | string | null
    languageCode?: NullableStringFieldUpdateOperationsInput | string | null
    isAdmin?: BoolFieldUpdateOperationsInput | boolean
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput
  }

  export type VoiceExperienceCreateManyPlaceInput = {
    id?: string
    userId?: string | null
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserFavoritePlaceCreateManyPlaceInput = {
    id?: string
    userId: string
    createdAt?: Date | string
  }

  export type VoiceExperienceUpdateWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    user?: UserUpdateOneWithoutVoiceExperiencesNestedInput
  }

  export type VoiceExperienceUncheckedUpdateWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: NullableStringFieldUpdateOperationsInput | string | null
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceUncheckedUpdateManyWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: NullableStringFieldUpdateOperationsInput | string | null
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceUpdateWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    user?: UserUpdateOneRequiredWithoutFavoritePlacesNestedInput
  }

  export type UserFavoritePlaceUncheckedUpdateWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceUncheckedUpdateManyWithoutPlaceInput = {
    id?: StringFieldUpdateOperationsInput | string
    userId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceCreateManyUserInput = {
    id?: string
    placeId: string
    durationSeconds: number
    audioObjectKey: string
    audioContentBase64?: string | null
    audioMimeType?: string | null
    audioAccessToken?: string | null
    status?: $Enums.VoiceExperienceStatus
    transcript?: string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[]
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserFavoritePlaceCreateManyUserInput = {
    id?: string
    placeId: string
    createdAt?: Date | string
  }

  export type VoiceExperienceUpdateWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    place?: PlaceUpdateOneRequiredWithoutExperiencesNestedInput
  }

  export type VoiceExperienceUncheckedUpdateWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type VoiceExperienceUncheckedUpdateManyWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    durationSeconds?: IntFieldUpdateOperationsInput | number
    audioObjectKey?: StringFieldUpdateOperationsInput | string
    audioContentBase64?: NullableStringFieldUpdateOperationsInput | string | null
    audioMimeType?: NullableStringFieldUpdateOperationsInput | string | null
    audioAccessToken?: NullableStringFieldUpdateOperationsInput | string | null
    status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus
    transcript?: NullableStringFieldUpdateOperationsInput | string | null
    analysis?: NullableJsonNullValueInput | InputJsonValue
    recordingPayload?: NullableJsonNullValueInput | InputJsonValue
    promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[]
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceUpdateWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    place?: PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput
  }

  export type UserFavoritePlaceUncheckedUpdateWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserFavoritePlaceUncheckedUpdateManyWithoutUserInput = {
    id?: StringFieldUpdateOperationsInput | string
    placeId?: StringFieldUpdateOperationsInput | string
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }



  /**
   * Batch Payload for updateMany & deleteMany & createMany
   */

  export type BatchPayload = {
    count: number
  }

  /**
   * DMMF
   */
  export const dmmf: runtime.BaseDMMF
}