
/**
 * Client
**/

import * as runtime from './runtime/library.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 User
 * 
 */
export type User = $Result.DefaultSelection<Prisma.$UserPayload>
/**
 * Model Site
 * 
 */
export type Site = $Result.DefaultSelection<Prisma.$SitePayload>
/**
 * Model Network
 * 
 */
export type Network = $Result.DefaultSelection<Prisma.$NetworkPayload>
/**
 * Model Server
 * 
 */
export type Server = $Result.DefaultSelection<Prisma.$ServerPayload>
/**
 * Model ServerMonitoring
 * 
 */
export type ServerMonitoring = $Result.DefaultSelection<Prisma.$ServerMonitoringPayload>
/**
 * Model Application
 * 
 */
export type Application = $Result.DefaultSelection<Prisma.$ApplicationPayload>
/**
 * Model ApplicationMonitoring
 * 
 */
export type ApplicationMonitoring = $Result.DefaultSelection<Prisma.$ApplicationMonitoringPayload>
/**
 * Model ServerMonitoringNotification
 * 
 */
export type ServerMonitoringNotification = $Result.DefaultSelection<Prisma.$ServerMonitoringNotificationPayload>
/**
 * Model ApplicationMonitoringNotification
 * 
 */
export type ApplicationMonitoringNotification = $Result.DefaultSelection<Prisma.$ApplicationMonitoringNotificationPayload>
/**
 * Model NotificationProvider
 * 
 */
export type NotificationProvider = $Result.DefaultSelection<Prisma.$NotificationProviderPayload>
/**
 * Model NotificationTest
 * 
 */
export type NotificationTest = $Result.DefaultSelection<Prisma.$NotificationTestPayload>

/**
 * Enums
 */
export namespace $Enums {
  export const NotificationType: {
  TELEGRAM: 'TELEGRAM'
};

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

}

export type NotificationType = $Enums.NotificationType

export const NotificationType: typeof $Enums.NotificationType

/**
 * ##  Prisma Client ʲˢ
 *
 * Type-safe database client for TypeScript & Node.js
 * @example
 * ```
 * const prisma = new PrismaClient()
 * // Fetch zero or more Users
 * const users = await prisma.user.findMany()
 * ```
 *
 *
 * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
 */
export class PrismaClient<
  ClientOptions extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
  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()
   * // Fetch zero or more Users
   * const users = await prisma.user.findMany()
   * ```
   *
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-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>;

  /**
   * Add a middleware
   * @deprecated since 4.16.0. For new code, prefer client extensions instead.
   * @see https://pris.ly/d/extensions
   */
  $use(cb: Prisma.Middleware): 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://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $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://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $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://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $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://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $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/concepts/components/prisma-client/transactions).
   */
  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { 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.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.site`: Exposes CRUD operations for the **Site** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Sites
    * const sites = await prisma.site.findMany()
    * ```
    */
  get site(): Prisma.SiteDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.network`: Exposes CRUD operations for the **Network** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Networks
    * const networks = await prisma.network.findMany()
    * ```
    */
  get network(): Prisma.NetworkDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.server`: Exposes CRUD operations for the **Server** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Servers
    * const servers = await prisma.server.findMany()
    * ```
    */
  get server(): Prisma.ServerDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.serverMonitoring`: Exposes CRUD operations for the **ServerMonitoring** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ServerMonitorings
    * const serverMonitorings = await prisma.serverMonitoring.findMany()
    * ```
    */
  get serverMonitoring(): Prisma.ServerMonitoringDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.application`: Exposes CRUD operations for the **Application** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Applications
    * const applications = await prisma.application.findMany()
    * ```
    */
  get application(): Prisma.ApplicationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.applicationMonitoring`: Exposes CRUD operations for the **ApplicationMonitoring** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ApplicationMonitorings
    * const applicationMonitorings = await prisma.applicationMonitoring.findMany()
    * ```
    */
  get applicationMonitoring(): Prisma.ApplicationMonitoringDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.serverMonitoringNotification`: Exposes CRUD operations for the **ServerMonitoringNotification** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ServerMonitoringNotifications
    * const serverMonitoringNotifications = await prisma.serverMonitoringNotification.findMany()
    * ```
    */
  get serverMonitoringNotification(): Prisma.ServerMonitoringNotificationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.applicationMonitoringNotification`: Exposes CRUD operations for the **ApplicationMonitoringNotification** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ApplicationMonitoringNotifications
    * const applicationMonitoringNotifications = await prisma.applicationMonitoringNotification.findMany()
    * ```
    */
  get applicationMonitoringNotification(): Prisma.ApplicationMonitoringNotificationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.notificationProvider`: Exposes CRUD operations for the **NotificationProvider** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more NotificationProviders
    * const notificationProviders = await prisma.notificationProvider.findMany()
    * ```
    */
  get notificationProvider(): Prisma.NotificationProviderDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.notificationTest`: Exposes CRUD operations for the **NotificationTest** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more NotificationTests
    * const notificationTests = await prisma.notificationTest.findMany()
    * ```
    */
  get notificationTest(): Prisma.NotificationTestDelegate<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

  /**
   * Metrics
   */
  export type Metrics = runtime.Metrics
  export type Metric<T> = runtime.Metric<T>
  export type MetricHistogram = runtime.MetricHistogram
  export type MetricHistogramBucket = runtime.MetricHistogramBucket

  /**
  * 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: 6.8.2
   * Query Engine version: 2060c79ba17c6bb9f5823312b6f6b7f4a845738e
   */
  export type PrismaVersion = {
    client: string
  }

  export const prismaVersion: PrismaVersion

  /**
   * Utility Types
   */


  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: {
    User: 'User',
    Site: 'Site',
    Network: 'Network',
    Server: 'Server',
    ServerMonitoring: 'ServerMonitoring',
    Application: 'Application',
    ApplicationMonitoring: 'ApplicationMonitoring',
    ServerMonitoringNotification: 'ServerMonitoringNotification',
    ApplicationMonitoringNotification: 'ApplicationMonitoringNotification',
    NotificationProvider: 'NotificationProvider',
    NotificationTest: 'NotificationTest'
  };

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


  export type Datasources = {
    db?: Datasource
  }

  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: "user" | "site" | "network" | "server" | "serverMonitoring" | "application" | "applicationMonitoring" | "serverMonitoringNotification" | "applicationMonitoringNotification" | "notificationProvider" | "notificationTest"
      txIsolationLevel: Prisma.TransactionIsolationLevel
    }
    model: {
      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
          }
        }
      }
      Site: {
        payload: Prisma.$SitePayload<ExtArgs>
        fields: Prisma.SiteFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SiteFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SiteFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          findFirst: {
            args: Prisma.SiteFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SiteFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          findMany: {
            args: Prisma.SiteFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>[]
          }
          create: {
            args: Prisma.SiteCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          createMany: {
            args: Prisma.SiteCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.SiteCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>[]
          }
          delete: {
            args: Prisma.SiteDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          update: {
            args: Prisma.SiteUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          deleteMany: {
            args: Prisma.SiteDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SiteUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.SiteUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>[]
          }
          upsert: {
            args: Prisma.SiteUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SitePayload>
          }
          aggregate: {
            args: Prisma.SiteAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSite>
          }
          groupBy: {
            args: Prisma.SiteGroupByArgs<ExtArgs>
            result: $Utils.Optional<SiteGroupByOutputType>[]
          }
          count: {
            args: Prisma.SiteCountArgs<ExtArgs>
            result: $Utils.Optional<SiteCountAggregateOutputType> | number
          }
        }
      }
      Network: {
        payload: Prisma.$NetworkPayload<ExtArgs>
        fields: Prisma.NetworkFieldRefs
        operations: {
          findUnique: {
            args: Prisma.NetworkFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.NetworkFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          findFirst: {
            args: Prisma.NetworkFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.NetworkFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          findMany: {
            args: Prisma.NetworkFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>[]
          }
          create: {
            args: Prisma.NetworkCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          createMany: {
            args: Prisma.NetworkCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.NetworkCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>[]
          }
          delete: {
            args: Prisma.NetworkDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          update: {
            args: Prisma.NetworkUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          deleteMany: {
            args: Prisma.NetworkDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.NetworkUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.NetworkUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>[]
          }
          upsert: {
            args: Prisma.NetworkUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NetworkPayload>
          }
          aggregate: {
            args: Prisma.NetworkAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateNetwork>
          }
          groupBy: {
            args: Prisma.NetworkGroupByArgs<ExtArgs>
            result: $Utils.Optional<NetworkGroupByOutputType>[]
          }
          count: {
            args: Prisma.NetworkCountArgs<ExtArgs>
            result: $Utils.Optional<NetworkCountAggregateOutputType> | number
          }
        }
      }
      Server: {
        payload: Prisma.$ServerPayload<ExtArgs>
        fields: Prisma.ServerFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ServerFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ServerFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          findFirst: {
            args: Prisma.ServerFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ServerFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          findMany: {
            args: Prisma.ServerFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>[]
          }
          create: {
            args: Prisma.ServerCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          createMany: {
            args: Prisma.ServerCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ServerCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>[]
          }
          delete: {
            args: Prisma.ServerDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          update: {
            args: Prisma.ServerUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          deleteMany: {
            args: Prisma.ServerDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ServerUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ServerUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>[]
          }
          upsert: {
            args: Prisma.ServerUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerPayload>
          }
          aggregate: {
            args: Prisma.ServerAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateServer>
          }
          groupBy: {
            args: Prisma.ServerGroupByArgs<ExtArgs>
            result: $Utils.Optional<ServerGroupByOutputType>[]
          }
          count: {
            args: Prisma.ServerCountArgs<ExtArgs>
            result: $Utils.Optional<ServerCountAggregateOutputType> | number
          }
        }
      }
      ServerMonitoring: {
        payload: Prisma.$ServerMonitoringPayload<ExtArgs>
        fields: Prisma.ServerMonitoringFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ServerMonitoringFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ServerMonitoringFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          findFirst: {
            args: Prisma.ServerMonitoringFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ServerMonitoringFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          findMany: {
            args: Prisma.ServerMonitoringFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>[]
          }
          create: {
            args: Prisma.ServerMonitoringCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          createMany: {
            args: Prisma.ServerMonitoringCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ServerMonitoringCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>[]
          }
          delete: {
            args: Prisma.ServerMonitoringDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          update: {
            args: Prisma.ServerMonitoringUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          deleteMany: {
            args: Prisma.ServerMonitoringDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ServerMonitoringUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ServerMonitoringUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>[]
          }
          upsert: {
            args: Prisma.ServerMonitoringUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringPayload>
          }
          aggregate: {
            args: Prisma.ServerMonitoringAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateServerMonitoring>
          }
          groupBy: {
            args: Prisma.ServerMonitoringGroupByArgs<ExtArgs>
            result: $Utils.Optional<ServerMonitoringGroupByOutputType>[]
          }
          count: {
            args: Prisma.ServerMonitoringCountArgs<ExtArgs>
            result: $Utils.Optional<ServerMonitoringCountAggregateOutputType> | number
          }
        }
      }
      Application: {
        payload: Prisma.$ApplicationPayload<ExtArgs>
        fields: Prisma.ApplicationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ApplicationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ApplicationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          findFirst: {
            args: Prisma.ApplicationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ApplicationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          findMany: {
            args: Prisma.ApplicationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>[]
          }
          create: {
            args: Prisma.ApplicationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          createMany: {
            args: Prisma.ApplicationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ApplicationCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>[]
          }
          delete: {
            args: Prisma.ApplicationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          update: {
            args: Prisma.ApplicationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          deleteMany: {
            args: Prisma.ApplicationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ApplicationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ApplicationUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>[]
          }
          upsert: {
            args: Prisma.ApplicationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationPayload>
          }
          aggregate: {
            args: Prisma.ApplicationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateApplication>
          }
          groupBy: {
            args: Prisma.ApplicationGroupByArgs<ExtArgs>
            result: $Utils.Optional<ApplicationGroupByOutputType>[]
          }
          count: {
            args: Prisma.ApplicationCountArgs<ExtArgs>
            result: $Utils.Optional<ApplicationCountAggregateOutputType> | number
          }
        }
      }
      ApplicationMonitoring: {
        payload: Prisma.$ApplicationMonitoringPayload<ExtArgs>
        fields: Prisma.ApplicationMonitoringFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ApplicationMonitoringFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ApplicationMonitoringFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          findFirst: {
            args: Prisma.ApplicationMonitoringFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ApplicationMonitoringFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          findMany: {
            args: Prisma.ApplicationMonitoringFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>[]
          }
          create: {
            args: Prisma.ApplicationMonitoringCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          createMany: {
            args: Prisma.ApplicationMonitoringCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ApplicationMonitoringCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>[]
          }
          delete: {
            args: Prisma.ApplicationMonitoringDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          update: {
            args: Prisma.ApplicationMonitoringUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          deleteMany: {
            args: Prisma.ApplicationMonitoringDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ApplicationMonitoringUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ApplicationMonitoringUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>[]
          }
          upsert: {
            args: Prisma.ApplicationMonitoringUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringPayload>
          }
          aggregate: {
            args: Prisma.ApplicationMonitoringAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateApplicationMonitoring>
          }
          groupBy: {
            args: Prisma.ApplicationMonitoringGroupByArgs<ExtArgs>
            result: $Utils.Optional<ApplicationMonitoringGroupByOutputType>[]
          }
          count: {
            args: Prisma.ApplicationMonitoringCountArgs<ExtArgs>
            result: $Utils.Optional<ApplicationMonitoringCountAggregateOutputType> | number
          }
        }
      }
      ServerMonitoringNotification: {
        payload: Prisma.$ServerMonitoringNotificationPayload<ExtArgs>
        fields: Prisma.ServerMonitoringNotificationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ServerMonitoringNotificationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ServerMonitoringNotificationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          findFirst: {
            args: Prisma.ServerMonitoringNotificationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ServerMonitoringNotificationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          findMany: {
            args: Prisma.ServerMonitoringNotificationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>[]
          }
          create: {
            args: Prisma.ServerMonitoringNotificationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          createMany: {
            args: Prisma.ServerMonitoringNotificationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ServerMonitoringNotificationCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>[]
          }
          delete: {
            args: Prisma.ServerMonitoringNotificationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          update: {
            args: Prisma.ServerMonitoringNotificationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          deleteMany: {
            args: Prisma.ServerMonitoringNotificationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ServerMonitoringNotificationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ServerMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>[]
          }
          upsert: {
            args: Prisma.ServerMonitoringNotificationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ServerMonitoringNotificationPayload>
          }
          aggregate: {
            args: Prisma.ServerMonitoringNotificationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateServerMonitoringNotification>
          }
          groupBy: {
            args: Prisma.ServerMonitoringNotificationGroupByArgs<ExtArgs>
            result: $Utils.Optional<ServerMonitoringNotificationGroupByOutputType>[]
          }
          count: {
            args: Prisma.ServerMonitoringNotificationCountArgs<ExtArgs>
            result: $Utils.Optional<ServerMonitoringNotificationCountAggregateOutputType> | number
          }
        }
      }
      ApplicationMonitoringNotification: {
        payload: Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>
        fields: Prisma.ApplicationMonitoringNotificationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ApplicationMonitoringNotificationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ApplicationMonitoringNotificationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          findFirst: {
            args: Prisma.ApplicationMonitoringNotificationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ApplicationMonitoringNotificationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          findMany: {
            args: Prisma.ApplicationMonitoringNotificationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>[]
          }
          create: {
            args: Prisma.ApplicationMonitoringNotificationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          createMany: {
            args: Prisma.ApplicationMonitoringNotificationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.ApplicationMonitoringNotificationCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>[]
          }
          delete: {
            args: Prisma.ApplicationMonitoringNotificationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          update: {
            args: Prisma.ApplicationMonitoringNotificationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          deleteMany: {
            args: Prisma.ApplicationMonitoringNotificationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ApplicationMonitoringNotificationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.ApplicationMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>[]
          }
          upsert: {
            args: Prisma.ApplicationMonitoringNotificationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ApplicationMonitoringNotificationPayload>
          }
          aggregate: {
            args: Prisma.ApplicationMonitoringNotificationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateApplicationMonitoringNotification>
          }
          groupBy: {
            args: Prisma.ApplicationMonitoringNotificationGroupByArgs<ExtArgs>
            result: $Utils.Optional<ApplicationMonitoringNotificationGroupByOutputType>[]
          }
          count: {
            args: Prisma.ApplicationMonitoringNotificationCountArgs<ExtArgs>
            result: $Utils.Optional<ApplicationMonitoringNotificationCountAggregateOutputType> | number
          }
        }
      }
      NotificationProvider: {
        payload: Prisma.$NotificationProviderPayload<ExtArgs>
        fields: Prisma.NotificationProviderFieldRefs
        operations: {
          findUnique: {
            args: Prisma.NotificationProviderFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.NotificationProviderFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          findFirst: {
            args: Prisma.NotificationProviderFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.NotificationProviderFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          findMany: {
            args: Prisma.NotificationProviderFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>[]
          }
          create: {
            args: Prisma.NotificationProviderCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          createMany: {
            args: Prisma.NotificationProviderCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.NotificationProviderCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>[]
          }
          delete: {
            args: Prisma.NotificationProviderDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          update: {
            args: Prisma.NotificationProviderUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          deleteMany: {
            args: Prisma.NotificationProviderDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.NotificationProviderUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.NotificationProviderUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>[]
          }
          upsert: {
            args: Prisma.NotificationProviderUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationProviderPayload>
          }
          aggregate: {
            args: Prisma.NotificationProviderAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateNotificationProvider>
          }
          groupBy: {
            args: Prisma.NotificationProviderGroupByArgs<ExtArgs>
            result: $Utils.Optional<NotificationProviderGroupByOutputType>[]
          }
          count: {
            args: Prisma.NotificationProviderCountArgs<ExtArgs>
            result: $Utils.Optional<NotificationProviderCountAggregateOutputType> | number
          }
        }
      }
      NotificationTest: {
        payload: Prisma.$NotificationTestPayload<ExtArgs>
        fields: Prisma.NotificationTestFieldRefs
        operations: {
          findUnique: {
            args: Prisma.NotificationTestFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.NotificationTestFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          findFirst: {
            args: Prisma.NotificationTestFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.NotificationTestFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          findMany: {
            args: Prisma.NotificationTestFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>[]
          }
          create: {
            args: Prisma.NotificationTestCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          createMany: {
            args: Prisma.NotificationTestCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          createManyAndReturn: {
            args: Prisma.NotificationTestCreateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>[]
          }
          delete: {
            args: Prisma.NotificationTestDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          update: {
            args: Prisma.NotificationTestUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          deleteMany: {
            args: Prisma.NotificationTestDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.NotificationTestUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateManyAndReturn: {
            args: Prisma.NotificationTestUpdateManyAndReturnArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>[]
          }
          upsert: {
            args: Prisma.NotificationTestUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$NotificationTestPayload>
          }
          aggregate: {
            args: Prisma.NotificationTestAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateNotificationTest>
          }
          groupBy: {
            args: Prisma.NotificationTestGroupByArgs<ExtArgs>
            result: $Utils.Optional<NotificationTestGroupByOutputType>[]
          }
          count: {
            args: Prisma.NotificationTestCountArgs<ExtArgs>
            result: $Utils.Optional<NotificationTestCountAggregateOutputType> | 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 {
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasources?: Datasources
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasourceUrl?: string
    /**
     * @default "colorless"
     */
    errorFormat?: ErrorFormat
    /**
     * @example
     * ```
     * // Defaults to stdout
     * log: ['query', 'info', 'warn', 'error']
     * 
     * // Emit as events
     * log: [
     *   { emit: 'stdout', level: 'query' },
     *   { emit: 'stdout', level: 'info' },
     *   { emit: 'stdout', level: 'warn' }
     *   { emit: 'stdout', level: 'error' }
     * ]
     * ```
     * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).
     */
    log?: (LogLevel | LogDefinition)[]
    /**
     * The default values for transactionOptions
     * maxWait ?= 2000
     * timeout ?= 5000
     */
    transactionOptions?: {
      maxWait?: number
      timeout?: number
      isolationLevel?: Prisma.TransactionIsolationLevel
    }
    /**
     * Global configuration for omitting model fields by default.
     * 
     * @example
     * ```
     * const prisma = new PrismaClient({
     *   omit: {
     *     user: {
     *       password: true
     *     }
     *   }
     * })
     * ```
     */
    omit?: Prisma.GlobalOmitConfig
  }
  export type GlobalOmitConfig = {
    user?: UserOmit
    site?: SiteOmit
    network?: NetworkOmit
    server?: ServerOmit
    serverMonitoring?: ServerMonitoringOmit
    application?: ApplicationOmit
    applicationMonitoring?: ApplicationMonitoringOmit
    serverMonitoringNotification?: ServerMonitoringNotificationOmit
    applicationMonitoringNotification?: ApplicationMonitoringNotificationOmit
    notificationProvider?: NotificationProviderOmit
    notificationTest?: NotificationTestOmit
  }

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

  export type GetLogType<T extends LogLevel | LogDefinition> = T extends LogDefinition ? T['emit'] extends 'event' ? T['level'] : never : never
  export type GetEvents<T extends any> = T extends Array<LogLevel | LogDefinition> ?
    GetLogType<T[0]> | GetLogType<T[1]> | GetLogType<T[2]> | GetLogType<T[3]>
    : 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'

  /**
   * These options are being passed into the middleware as "params"
   */
  export type MiddlewareParams = {
    model?: ModelName
    action: PrismaAction
    args: any
    dataPath: string[]
    runInTransaction: boolean
  }

  /**
   * The `T` type makes sure, that the `return proceed` is not forgotten in the middleware implementation
   */
  export type Middleware<T = any> = (
    params: MiddlewareParams,
    next: (params: MiddlewareParams) => $Utils.JsPromise<T>,
  ) => $Utils.JsPromise<T>

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

  export type SiteCountOutputType = {
    networks: number
  }

  export type SiteCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    networks?: boolean | SiteCountOutputTypeCountNetworksArgs
  }

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

  /**
   * SiteCountOutputType without action
   */
  export type SiteCountOutputTypeCountNetworksArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: NetworkWhereInput
  }


  /**
   * Count Type NetworkCountOutputType
   */

  export type NetworkCountOutputType = {
    servers: number
  }

  export type NetworkCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    servers?: boolean | NetworkCountOutputTypeCountServersArgs
  }

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

  /**
   * NetworkCountOutputType without action
   */
  export type NetworkCountOutputTypeCountServersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ServerWhereInput
  }


  /**
   * Count Type ServerCountOutputType
   */

  export type ServerCountOutputType = {
    monitoringData: number
    applications: number
  }

  export type ServerCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    monitoringData?: boolean | ServerCountOutputTypeCountMonitoringDataArgs
    applications?: boolean | ServerCountOutputTypeCountApplicationsArgs
  }

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

  /**
   * ServerCountOutputType without action
   */
  export type ServerCountOutputTypeCountMonitoringDataArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ServerMonitoringWhereInput
  }

  /**
   * ServerCountOutputType without action
   */
  export type ServerCountOutputTypeCountApplicationsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ApplicationWhereInput
  }


  /**
   * Count Type ApplicationCountOutputType
   */

  export type ApplicationCountOutputType = {
    monitoringData: number
  }

  export type ApplicationCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    monitoringData?: boolean | ApplicationCountOutputTypeCountMonitoringDataArgs
  }

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

  /**
   * ApplicationCountOutputType without action
   */
  export type ApplicationCountOutputTypeCountMonitoringDataArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ApplicationMonitoringWhereInput
  }


  /**
   * Count Type NotificationProviderCountOutputType
   */

  export type NotificationProviderCountOutputType = {
    tests: number
  }

  export type NotificationProviderCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    tests?: boolean | NotificationProviderCountOutputTypeCountTestsArgs
  }

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

  /**
   * NotificationProviderCountOutputType without action
   */
  export type NotificationProviderCountOutputTypeCountTestsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: NotificationTestWhereInput
  }


  /**
   * Models
   */

  /**
   * Model User
   */

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

  export type UserMinAggregateOutputType = {
    id: string | null
    username: string | null
    name: string | null
    email: string | null
    password: string | null
    lastLogin: Date | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type UserMaxAggregateOutputType = {
    id: string | null
    username: string | null
    name: string | null
    email: string | null
    password: string | null
    lastLogin: Date | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type UserCountAggregateOutputType = {
    id: number
    username: number
    name: number
    email: number
    password: number
    lastLogin: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type UserMinAggregateInputType = {
    id?: true
    username?: true
    name?: true
    email?: true
    password?: true
    lastLogin?: true
    createdAt?: true
    updatedAt?: true
  }

  export type UserMaxAggregateInputType = {
    id?: true
    username?: true
    name?: true
    email?: true
    password?: true
    lastLogin?: true
    createdAt?: true
    updatedAt?: true
  }

  export type UserCountAggregateInputType = {
    id?: true
    username?: true
    name?: true
    email?: true
    password?: true
    lastLogin?: 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
    username: string
    name: string
    email: string
    password: string
    lastLogin: Date | null
    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
    username?: boolean
    name?: boolean
    email?: boolean
    password?: boolean
    lastLogin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["user"]>

  export type UserSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    username?: boolean
    name?: boolean
    email?: boolean
    password?: boolean
    lastLogin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["user"]>

  export type UserSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    username?: boolean
    name?: boolean
    email?: boolean
    password?: boolean
    lastLogin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }, ExtArgs["result"]["user"]>

  export type UserSelectScalar = {
    id?: boolean
    username?: boolean
    name?: boolean
    email?: boolean
    password?: boolean
    lastLogin?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type UserOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "username" | "name" | "email" | "password" | "lastLogin" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]>

  export type $UserPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "User"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: string
      username: string
      name: string
      email: string
      password: string
      lastLogin: Date | null
      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"
    /**
     * 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 username: FieldRef<"User", 'String'>
    readonly name: FieldRef<"User", 'String'>
    readonly email: FieldRef<"User", 'String'>
    readonly password: FieldRef<"User", 'String'>
    readonly lastLogin: FieldRef<"User", 'DateTime'>
    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
    /**
     * 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
    /**
     * 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
    /**
     * 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
    /**
     * 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
    /**
     * 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
    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
    /**
     * 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
    /**
     * 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
    /**
     * 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
    /**
     * 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 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
  }


  /**
   * Model Site
   */

  export type AggregateSite = {
    _count: SiteCountAggregateOutputType | null
    _avg: SiteAvgAggregateOutputType | null
    _sum: SiteSumAggregateOutputType | null
    _min: SiteMinAggregateOutputType | null
    _max: SiteMaxAggregateOutputType | null
  }

  export type SiteAvgAggregateOutputType = {
    id: number | null
  }

  export type SiteSumAggregateOutputType = {
    id: number | null
  }

  export type SiteMinAggregateOutputType = {
    id: number | null
    name: string | null
    description: string | null
  }

  export type SiteMaxAggregateOutputType = {
    id: number | null
    name: string | null
    description: string | null
  }

  export type SiteCountAggregateOutputType = {
    id: number
    name: number
    description: number
    _all: number
  }


  export type SiteAvgAggregateInputType = {
    id?: true
  }

  export type SiteSumAggregateInputType = {
    id?: true
  }

  export type SiteMinAggregateInputType = {
    id?: true
    name?: true
    description?: true
  }

  export type SiteMaxAggregateInputType = {
    id?: true
    name?: true
    description?: true
  }

  export type SiteCountAggregateInputType = {
    id?: true
    name?: true
    description?: true
    _all?: true
  }

  export type SiteAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Site to aggregate.
     */
    where?: SiteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sites to fetch.
     */
    orderBy?: SiteOrderByWithRelationInput | SiteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SiteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sites 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` Sites.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Sites
    **/
    _count?: true | SiteCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SiteAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SiteSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SiteMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SiteMaxAggregateInputType
  }

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




  export type SiteGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SiteWhereInput
    orderBy?: SiteOrderByWithAggregationInput | SiteOrderByWithAggregationInput[]
    by: SiteScalarFieldEnum[] | SiteScalarFieldEnum
    having?: SiteScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SiteCountAggregateInputType | true
    _avg?: SiteAvgAggregateInputType
    _sum?: SiteSumAggregateInputType
    _min?: SiteMinAggregateInputType
    _max?: SiteMaxAggregateInputType
  }

  export type SiteGroupByOutputType = {
    id: number
    name: string
    description: string | null
    _count: SiteCountAggregateOutputType | null
    _avg: SiteAvgAggregateOutputType | null
    _sum: SiteSumAggregateOutputType | null
    _min: SiteMinAggregateOutputType | null
    _max: SiteMaxAggregateOutputType | null
  }

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


  export type SiteSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    description?: boolean
    networks?: boolean | Site$networksArgs<ExtArgs>
    _count?: boolean | SiteCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["site"]>

  export type SiteSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    description?: boolean
  }, ExtArgs["result"]["site"]>

  export type SiteSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    description?: boolean
  }, ExtArgs["result"]["site"]>

  export type SiteSelectScalar = {
    id?: boolean
    name?: boolean
    description?: boolean
  }

  export type SiteOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "description", ExtArgs["result"]["site"]>
  export type SiteInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    networks?: boolean | Site$networksArgs<ExtArgs>
    _count?: boolean | SiteCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type SiteIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type SiteIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $SitePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Site"
    objects: {
      networks: Prisma.$NetworkPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      description: string | null
    }, ExtArgs["result"]["site"]>
    composites: {}
  }

  type SiteGetPayload<S extends boolean | null | undefined | SiteDefaultArgs> = $Result.GetResult<Prisma.$SitePayload, S>

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

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

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

    /**
     * Find the first Site 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 {SiteFindFirstArgs} args - Arguments to find a Site
     * @example
     * // Get one Site
     * const site = await prisma.site.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SiteFindFirstArgs>(args?: SelectSubset<T, SiteFindFirstArgs<ExtArgs>>): Prisma__SiteClient<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Site 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 {SiteFindFirstOrThrowArgs} args - Arguments to find a Site
     * @example
     * // Get one Site
     * const site = await prisma.site.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SiteFindFirstOrThrowArgs>(args?: SelectSubset<T, SiteFindFirstOrThrowArgs<ExtArgs>>): Prisma__SiteClient<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Sites 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 {SiteFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Sites
     * const sites = await prisma.site.findMany()
     * 
     * // Get first 10 Sites
     * const sites = await prisma.site.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const siteWithIdOnly = await prisma.site.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SiteFindManyArgs>(args?: SelectSubset<T, SiteFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Site.
     * @param {SiteCreateArgs} args - Arguments to create a Site.
     * @example
     * // Create one Site
     * const Site = await prisma.site.create({
     *   data: {
     *     // ... data to create a Site
     *   }
     * })
     * 
     */
    create<T extends SiteCreateArgs>(args: SelectSubset<T, SiteCreateArgs<ExtArgs>>): Prisma__SiteClient<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many Sites and returns the data saved in the database.
     * @param {SiteCreateManyAndReturnArgs} args - Arguments to create many Sites.
     * @example
     * // Create many Sites
     * const site = await prisma.site.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Sites and only return the `id`
     * const siteWithIdOnly = await prisma.site.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 SiteCreateManyAndReturnArgs>(args?: SelectSubset<T, SiteCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Site.
     * @param {SiteDeleteArgs} args - Arguments to delete one Site.
     * @example
     * // Delete one Site
     * const Site = await prisma.site.delete({
     *   where: {
     *     // ... filter to delete one Site
     *   }
     * })
     * 
     */
    delete<T extends SiteDeleteArgs>(args: SelectSubset<T, SiteDeleteArgs<ExtArgs>>): Prisma__SiteClient<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more Sites and returns the data updated in the database.
     * @param {SiteUpdateManyAndReturnArgs} args - Arguments to update many Sites.
     * @example
     * // Update many Sites
     * const site = await prisma.site.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Sites and only return the `id`
     * const siteWithIdOnly = await prisma.site.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 SiteUpdateManyAndReturnArgs>(args: SelectSubset<T, SiteUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a Site.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SiteAggregateArgs} 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 SiteAggregateArgs>(args: Subset<T, SiteAggregateArgs>): Prisma.PrismaPromise<GetSiteAggregateType<T>>

    /**
     * Group by Site.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SiteGroupByArgs} 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 SiteGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SiteGroupByArgs['orderBy'] }
        : { orderBy?: SiteGroupByArgs['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, SiteGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSiteGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Site model
   */
  readonly fields: SiteFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Site.
   * 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__SiteClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    networks<T extends Site$networksArgs<ExtArgs> = {}>(args?: Subset<T, Site$networksArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NetworkPayload<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 Site model
   */
  interface SiteFieldRefs {
    readonly id: FieldRef<"Site", 'Int'>
    readonly name: FieldRef<"Site", 'String'>
    readonly description: FieldRef<"Site", 'String'>
  }
    

  // Custom InputTypes
  /**
   * Site findUnique
   */
  export type SiteFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter, which Site to fetch.
     */
    where: SiteWhereUniqueInput
  }

  /**
   * Site findUniqueOrThrow
   */
  export type SiteFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter, which Site to fetch.
     */
    where: SiteWhereUniqueInput
  }

  /**
   * Site findFirst
   */
  export type SiteFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter, which Site to fetch.
     */
    where?: SiteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sites to fetch.
     */
    orderBy?: SiteOrderByWithRelationInput | SiteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Sites.
     */
    cursor?: SiteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sites 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` Sites.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Sites.
     */
    distinct?: SiteScalarFieldEnum | SiteScalarFieldEnum[]
  }

  /**
   * Site findFirstOrThrow
   */
  export type SiteFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter, which Site to fetch.
     */
    where?: SiteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sites to fetch.
     */
    orderBy?: SiteOrderByWithRelationInput | SiteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Sites.
     */
    cursor?: SiteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sites 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` Sites.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Sites.
     */
    distinct?: SiteScalarFieldEnum | SiteScalarFieldEnum[]
  }

  /**
   * Site findMany
   */
  export type SiteFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter, which Sites to fetch.
     */
    where?: SiteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sites to fetch.
     */
    orderBy?: SiteOrderByWithRelationInput | SiteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Sites.
     */
    cursor?: SiteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sites 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` Sites.
     */
    skip?: number
    distinct?: SiteScalarFieldEnum | SiteScalarFieldEnum[]
  }

  /**
   * Site create
   */
  export type SiteCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * The data needed to create a Site.
     */
    data: XOR<SiteCreateInput, SiteUncheckedCreateInput>
  }

  /**
   * Site createMany
   */
  export type SiteCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Sites.
     */
    data: SiteCreateManyInput | SiteCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Site createManyAndReturn
   */
  export type SiteCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * The data used to create many Sites.
     */
    data: SiteCreateManyInput | SiteCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Site update
   */
  export type SiteUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * The data needed to update a Site.
     */
    data: XOR<SiteUpdateInput, SiteUncheckedUpdateInput>
    /**
     * Choose, which Site to update.
     */
    where: SiteWhereUniqueInput
  }

  /**
   * Site updateMany
   */
  export type SiteUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Sites.
     */
    data: XOR<SiteUpdateManyMutationInput, SiteUncheckedUpdateManyInput>
    /**
     * Filter which Sites to update
     */
    where?: SiteWhereInput
    /**
     * Limit how many Sites to update.
     */
    limit?: number
  }

  /**
   * Site updateManyAndReturn
   */
  export type SiteUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * The data used to update Sites.
     */
    data: XOR<SiteUpdateManyMutationInput, SiteUncheckedUpdateManyInput>
    /**
     * Filter which Sites to update
     */
    where?: SiteWhereInput
    /**
     * Limit how many Sites to update.
     */
    limit?: number
  }

  /**
   * Site upsert
   */
  export type SiteUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * The filter to search for the Site to update in case it exists.
     */
    where: SiteWhereUniqueInput
    /**
     * In case the Site found by the `where` argument doesn't exist, create a new Site with this data.
     */
    create: XOR<SiteCreateInput, SiteUncheckedCreateInput>
    /**
     * In case the Site was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SiteUpdateInput, SiteUncheckedUpdateInput>
  }

  /**
   * Site delete
   */
  export type SiteDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Site
     */
    select?: SiteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Site
     */
    omit?: SiteOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SiteInclude<ExtArgs> | null
    /**
     * Filter which Site to delete.
     */
    where: SiteWhereUniqueInput
  }

  /**
   * Site deleteMany
   */
  export type SiteDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Sites to delete
     */
    where?: SiteWhereInput
    /**
     * Limit how many Sites to delete.
     */
    limit?: number
  }

  /**
   * Site.networks
   */
  export type Site$networksArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    where?: NetworkWhereInput
    orderBy?: NetworkOrderByWithRelationInput | NetworkOrderByWithRelationInput[]
    cursor?: NetworkWhereUniqueInput
    take?: number
    skip?: number
    distinct?: NetworkScalarFieldEnum | NetworkScalarFieldEnum[]
  }

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


  /**
   * Model Network
   */

  export type AggregateNetwork = {
    _count: NetworkCountAggregateOutputType | null
    _avg: NetworkAvgAggregateOutputType | null
    _sum: NetworkSumAggregateOutputType | null
    _min: NetworkMinAggregateOutputType | null
    _max: NetworkMaxAggregateOutputType | null
  }

  export type NetworkAvgAggregateOutputType = {
    id: number | null
    siteId: number | null
  }

  export type NetworkSumAggregateOutputType = {
    id: number | null
    siteId: number | null
  }

  export type NetworkMinAggregateOutputType = {
    id: number | null
    siteId: number | null
    name: string | null
    ipv4Subnet: string | null
    ipv6Subnet: string | null
    gateway: string | null
  }

  export type NetworkMaxAggregateOutputType = {
    id: number | null
    siteId: number | null
    name: string | null
    ipv4Subnet: string | null
    ipv6Subnet: string | null
    gateway: string | null
  }

  export type NetworkCountAggregateOutputType = {
    id: number
    siteId: number
    name: number
    ipv4Subnet: number
    ipv6Subnet: number
    gateway: number
    _all: number
  }


  export type NetworkAvgAggregateInputType = {
    id?: true
    siteId?: true
  }

  export type NetworkSumAggregateInputType = {
    id?: true
    siteId?: true
  }

  export type NetworkMinAggregateInputType = {
    id?: true
    siteId?: true
    name?: true
    ipv4Subnet?: true
    ipv6Subnet?: true
    gateway?: true
  }

  export type NetworkMaxAggregateInputType = {
    id?: true
    siteId?: true
    name?: true
    ipv4Subnet?: true
    ipv6Subnet?: true
    gateway?: true
  }

  export type NetworkCountAggregateInputType = {
    id?: true
    siteId?: true
    name?: true
    ipv4Subnet?: true
    ipv6Subnet?: true
    gateway?: true
    _all?: true
  }

  export type NetworkAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Network to aggregate.
     */
    where?: NetworkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Networks to fetch.
     */
    orderBy?: NetworkOrderByWithRelationInput | NetworkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: NetworkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Networks 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` Networks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Networks
    **/
    _count?: true | NetworkCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: NetworkAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: NetworkSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: NetworkMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: NetworkMaxAggregateInputType
  }

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




  export type NetworkGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: NetworkWhereInput
    orderBy?: NetworkOrderByWithAggregationInput | NetworkOrderByWithAggregationInput[]
    by: NetworkScalarFieldEnum[] | NetworkScalarFieldEnum
    having?: NetworkScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: NetworkCountAggregateInputType | true
    _avg?: NetworkAvgAggregateInputType
    _sum?: NetworkSumAggregateInputType
    _min?: NetworkMinAggregateInputType
    _max?: NetworkMaxAggregateInputType
  }

  export type NetworkGroupByOutputType = {
    id: number
    siteId: number
    name: string
    ipv4Subnet: string | null
    ipv6Subnet: string | null
    gateway: string | null
    _count: NetworkCountAggregateOutputType | null
    _avg: NetworkAvgAggregateOutputType | null
    _sum: NetworkSumAggregateOutputType | null
    _min: NetworkMinAggregateOutputType | null
    _max: NetworkMaxAggregateOutputType | null
  }

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


  export type NetworkSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    siteId?: boolean
    name?: boolean
    ipv4Subnet?: boolean
    ipv6Subnet?: boolean
    gateway?: boolean
    site?: boolean | SiteDefaultArgs<ExtArgs>
    servers?: boolean | Network$serversArgs<ExtArgs>
    _count?: boolean | NetworkCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["network"]>

  export type NetworkSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    siteId?: boolean
    name?: boolean
    ipv4Subnet?: boolean
    ipv6Subnet?: boolean
    gateway?: boolean
    site?: boolean | SiteDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["network"]>

  export type NetworkSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    siteId?: boolean
    name?: boolean
    ipv4Subnet?: boolean
    ipv6Subnet?: boolean
    gateway?: boolean
    site?: boolean | SiteDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["network"]>

  export type NetworkSelectScalar = {
    id?: boolean
    siteId?: boolean
    name?: boolean
    ipv4Subnet?: boolean
    ipv6Subnet?: boolean
    gateway?: boolean
  }

  export type NetworkOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "siteId" | "name" | "ipv4Subnet" | "ipv6Subnet" | "gateway", ExtArgs["result"]["network"]>
  export type NetworkInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    site?: boolean | SiteDefaultArgs<ExtArgs>
    servers?: boolean | Network$serversArgs<ExtArgs>
    _count?: boolean | NetworkCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type NetworkIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    site?: boolean | SiteDefaultArgs<ExtArgs>
  }
  export type NetworkIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    site?: boolean | SiteDefaultArgs<ExtArgs>
  }

  export type $NetworkPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Network"
    objects: {
      site: Prisma.$SitePayload<ExtArgs>
      servers: Prisma.$ServerPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      siteId: number
      name: string
      ipv4Subnet: string | null
      ipv6Subnet: string | null
      gateway: string | null
    }, ExtArgs["result"]["network"]>
    composites: {}
  }

  type NetworkGetPayload<S extends boolean | null | undefined | NetworkDefaultArgs> = $Result.GetResult<Prisma.$NetworkPayload, S>

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

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

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

    /**
     * Find the first Network 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 {NetworkFindFirstArgs} args - Arguments to find a Network
     * @example
     * // Get one Network
     * const network = await prisma.network.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends NetworkFindFirstArgs>(args?: SelectSubset<T, NetworkFindFirstArgs<ExtArgs>>): Prisma__NetworkClient<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Network 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 {NetworkFindFirstOrThrowArgs} args - Arguments to find a Network
     * @example
     * // Get one Network
     * const network = await prisma.network.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends NetworkFindFirstOrThrowArgs>(args?: SelectSubset<T, NetworkFindFirstOrThrowArgs<ExtArgs>>): Prisma__NetworkClient<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Networks 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 {NetworkFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Networks
     * const networks = await prisma.network.findMany()
     * 
     * // Get first 10 Networks
     * const networks = await prisma.network.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const networkWithIdOnly = await prisma.network.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends NetworkFindManyArgs>(args?: SelectSubset<T, NetworkFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Network.
     * @param {NetworkCreateArgs} args - Arguments to create a Network.
     * @example
     * // Create one Network
     * const Network = await prisma.network.create({
     *   data: {
     *     // ... data to create a Network
     *   }
     * })
     * 
     */
    create<T extends NetworkCreateArgs>(args: SelectSubset<T, NetworkCreateArgs<ExtArgs>>): Prisma__NetworkClient<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many Networks and returns the data saved in the database.
     * @param {NetworkCreateManyAndReturnArgs} args - Arguments to create many Networks.
     * @example
     * // Create many Networks
     * const network = await prisma.network.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Networks and only return the `id`
     * const networkWithIdOnly = await prisma.network.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 NetworkCreateManyAndReturnArgs>(args?: SelectSubset<T, NetworkCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Network.
     * @param {NetworkDeleteArgs} args - Arguments to delete one Network.
     * @example
     * // Delete one Network
     * const Network = await prisma.network.delete({
     *   where: {
     *     // ... filter to delete one Network
     *   }
     * })
     * 
     */
    delete<T extends NetworkDeleteArgs>(args: SelectSubset<T, NetworkDeleteArgs<ExtArgs>>): Prisma__NetworkClient<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more Networks and returns the data updated in the database.
     * @param {NetworkUpdateManyAndReturnArgs} args - Arguments to update many Networks.
     * @example
     * // Update many Networks
     * const network = await prisma.network.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Networks and only return the `id`
     * const networkWithIdOnly = await prisma.network.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 NetworkUpdateManyAndReturnArgs>(args: SelectSubset<T, NetworkUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a Network.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NetworkAggregateArgs} 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 NetworkAggregateArgs>(args: Subset<T, NetworkAggregateArgs>): Prisma.PrismaPromise<GetNetworkAggregateType<T>>

    /**
     * Group by Network.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NetworkGroupByArgs} 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 NetworkGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: NetworkGroupByArgs['orderBy'] }
        : { orderBy?: NetworkGroupByArgs['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, NetworkGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetNetworkGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Network model
   */
  readonly fields: NetworkFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Network.
   * 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__NetworkClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    site<T extends SiteDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SiteDefaultArgs<ExtArgs>>): Prisma__SiteClient<$Result.GetResult<Prisma.$SitePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    servers<T extends Network$serversArgs<ExtArgs> = {}>(args?: Subset<T, Network$serversArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerPayload<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 Network model
   */
  interface NetworkFieldRefs {
    readonly id: FieldRef<"Network", 'Int'>
    readonly siteId: FieldRef<"Network", 'Int'>
    readonly name: FieldRef<"Network", 'String'>
    readonly ipv4Subnet: FieldRef<"Network", 'String'>
    readonly ipv6Subnet: FieldRef<"Network", 'String'>
    readonly gateway: FieldRef<"Network", 'String'>
  }
    

  // Custom InputTypes
  /**
   * Network findUnique
   */
  export type NetworkFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter, which Network to fetch.
     */
    where: NetworkWhereUniqueInput
  }

  /**
   * Network findUniqueOrThrow
   */
  export type NetworkFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter, which Network to fetch.
     */
    where: NetworkWhereUniqueInput
  }

  /**
   * Network findFirst
   */
  export type NetworkFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter, which Network to fetch.
     */
    where?: NetworkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Networks to fetch.
     */
    orderBy?: NetworkOrderByWithRelationInput | NetworkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Networks.
     */
    cursor?: NetworkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Networks 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` Networks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Networks.
     */
    distinct?: NetworkScalarFieldEnum | NetworkScalarFieldEnum[]
  }

  /**
   * Network findFirstOrThrow
   */
  export type NetworkFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter, which Network to fetch.
     */
    where?: NetworkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Networks to fetch.
     */
    orderBy?: NetworkOrderByWithRelationInput | NetworkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Networks.
     */
    cursor?: NetworkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Networks 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` Networks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Networks.
     */
    distinct?: NetworkScalarFieldEnum | NetworkScalarFieldEnum[]
  }

  /**
   * Network findMany
   */
  export type NetworkFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter, which Networks to fetch.
     */
    where?: NetworkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Networks to fetch.
     */
    orderBy?: NetworkOrderByWithRelationInput | NetworkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Networks.
     */
    cursor?: NetworkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Networks 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` Networks.
     */
    skip?: number
    distinct?: NetworkScalarFieldEnum | NetworkScalarFieldEnum[]
  }

  /**
   * Network create
   */
  export type NetworkCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * The data needed to create a Network.
     */
    data: XOR<NetworkCreateInput, NetworkUncheckedCreateInput>
  }

  /**
   * Network createMany
   */
  export type NetworkCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Networks.
     */
    data: NetworkCreateManyInput | NetworkCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Network createManyAndReturn
   */
  export type NetworkCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * The data used to create many Networks.
     */
    data: NetworkCreateManyInput | NetworkCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * Network update
   */
  export type NetworkUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * The data needed to update a Network.
     */
    data: XOR<NetworkUpdateInput, NetworkUncheckedUpdateInput>
    /**
     * Choose, which Network to update.
     */
    where: NetworkWhereUniqueInput
  }

  /**
   * Network updateMany
   */
  export type NetworkUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Networks.
     */
    data: XOR<NetworkUpdateManyMutationInput, NetworkUncheckedUpdateManyInput>
    /**
     * Filter which Networks to update
     */
    where?: NetworkWhereInput
    /**
     * Limit how many Networks to update.
     */
    limit?: number
  }

  /**
   * Network updateManyAndReturn
   */
  export type NetworkUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * The data used to update Networks.
     */
    data: XOR<NetworkUpdateManyMutationInput, NetworkUncheckedUpdateManyInput>
    /**
     * Filter which Networks to update
     */
    where?: NetworkWhereInput
    /**
     * Limit how many Networks to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * Network upsert
   */
  export type NetworkUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * The filter to search for the Network to update in case it exists.
     */
    where: NetworkWhereUniqueInput
    /**
     * In case the Network found by the `where` argument doesn't exist, create a new Network with this data.
     */
    create: XOR<NetworkCreateInput, NetworkUncheckedCreateInput>
    /**
     * In case the Network was found with the provided `where` argument, update it with this data.
     */
    update: XOR<NetworkUpdateInput, NetworkUncheckedUpdateInput>
  }

  /**
   * Network delete
   */
  export type NetworkDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Network
     */
    select?: NetworkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Network
     */
    omit?: NetworkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NetworkInclude<ExtArgs> | null
    /**
     * Filter which Network to delete.
     */
    where: NetworkWhereUniqueInput
  }

  /**
   * Network deleteMany
   */
  export type NetworkDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Networks to delete
     */
    where?: NetworkWhereInput
    /**
     * Limit how many Networks to delete.
     */
    limit?: number
  }

  /**
   * Network.servers
   */
  export type Network$serversArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    where?: ServerWhereInput
    orderBy?: ServerOrderByWithRelationInput | ServerOrderByWithRelationInput[]
    cursor?: ServerWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ServerScalarFieldEnum | ServerScalarFieldEnum[]
  }

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


  /**
   * Model Server
   */

  export type AggregateServer = {
    _count: ServerCountAggregateOutputType | null
    _avg: ServerAvgAggregateOutputType | null
    _sum: ServerSumAggregateOutputType | null
    _min: ServerMinAggregateOutputType | null
    _max: ServerMaxAggregateOutputType | null
  }

  export type ServerAvgAggregateOutputType = {
    id: number | null
    networkId: number | null
  }

  export type ServerSumAggregateOutputType = {
    id: number | null
    networkId: number | null
  }

  export type ServerMinAggregateOutputType = {
    id: number | null
    networkId: number | null
    name: string | null
    description: string | null
    icon: string | null
    ipv4Address: string | null
    osDetails: string | null
    cpuDetails: string | null
    gpuDetails: string | null
    memoryDetails: string | null
    storageDetails: string | null
    managementUrl: string | null
    monitoring: boolean | null
    monitoringUrl: string | null
  }

  export type ServerMaxAggregateOutputType = {
    id: number | null
    networkId: number | null
    name: string | null
    description: string | null
    icon: string | null
    ipv4Address: string | null
    osDetails: string | null
    cpuDetails: string | null
    gpuDetails: string | null
    memoryDetails: string | null
    storageDetails: string | null
    managementUrl: string | null
    monitoring: boolean | null
    monitoringUrl: string | null
  }

  export type ServerCountAggregateOutputType = {
    id: number
    networkId: number
    name: number
    description: number
    icon: number
    ipv4Address: number
    osDetails: number
    cpuDetails: number
    gpuDetails: number
    memoryDetails: number
    storageDetails: number
    managementUrl: number
    monitoring: number
    monitoringUrl: number
    _all: number
  }


  export type ServerAvgAggregateInputType = {
    id?: true
    networkId?: true
  }

  export type ServerSumAggregateInputType = {
    id?: true
    networkId?: true
  }

  export type ServerMinAggregateInputType = {
    id?: true
    networkId?: true
    name?: true
    description?: true
    icon?: true
    ipv4Address?: true
    osDetails?: true
    cpuDetails?: true
    gpuDetails?: true
    memoryDetails?: true
    storageDetails?: true
    managementUrl?: true
    monitoring?: true
    monitoringUrl?: true
  }

  export type ServerMaxAggregateInputType = {
    id?: true
    networkId?: true
    name?: true
    description?: true
    icon?: true
    ipv4Address?: true
    osDetails?: true
    cpuDetails?: true
    gpuDetails?: true
    memoryDetails?: true
    storageDetails?: true
    managementUrl?: true
    monitoring?: true
    monitoringUrl?: true
  }

  export type ServerCountAggregateInputType = {
    id?: true
    networkId?: true
    name?: true
    description?: true
    icon?: true
    ipv4Address?: true
    osDetails?: true
    cpuDetails?: true
    gpuDetails?: true
    memoryDetails?: true
    storageDetails?: true
    managementUrl?: true
    monitoring?: true
    monitoringUrl?: true
    _all?: true
  }

  export type ServerAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Server to aggregate.
     */
    where?: ServerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Servers to fetch.
     */
    orderBy?: ServerOrderByWithRelationInput | ServerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ServerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Servers 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` Servers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Servers
    **/
    _count?: true | ServerCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ServerAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ServerSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ServerMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ServerMaxAggregateInputType
  }

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




  export type ServerGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ServerWhereInput
    orderBy?: ServerOrderByWithAggregationInput | ServerOrderByWithAggregationInput[]
    by: ServerScalarFieldEnum[] | ServerScalarFieldEnum
    having?: ServerScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ServerCountAggregateInputType | true
    _avg?: ServerAvgAggregateInputType
    _sum?: ServerSumAggregateInputType
    _min?: ServerMinAggregateInputType
    _max?: ServerMaxAggregateInputType
  }

  export type ServerGroupByOutputType = {
    id: number
    networkId: number
    name: string
    description: string | null
    icon: string | null
    ipv4Address: string | null
    osDetails: string | null
    cpuDetails: string | null
    gpuDetails: string | null
    memoryDetails: string | null
    storageDetails: string | null
    managementUrl: string | null
    monitoring: boolean
    monitoringUrl: string | null
    _count: ServerCountAggregateOutputType | null
    _avg: ServerAvgAggregateOutputType | null
    _sum: ServerSumAggregateOutputType | null
    _min: ServerMinAggregateOutputType | null
    _max: ServerMaxAggregateOutputType | null
  }

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


  export type ServerSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    networkId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    ipv4Address?: boolean
    osDetails?: boolean
    cpuDetails?: boolean
    gpuDetails?: boolean
    memoryDetails?: boolean
    storageDetails?: boolean
    managementUrl?: boolean
    monitoring?: boolean
    monitoringUrl?: boolean
    network?: boolean | NetworkDefaultArgs<ExtArgs>
    monitoringData?: boolean | Server$monitoringDataArgs<ExtArgs>
    applications?: boolean | Server$applicationsArgs<ExtArgs>
    _count?: boolean | ServerCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["server"]>

  export type ServerSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    networkId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    ipv4Address?: boolean
    osDetails?: boolean
    cpuDetails?: boolean
    gpuDetails?: boolean
    memoryDetails?: boolean
    storageDetails?: boolean
    managementUrl?: boolean
    monitoring?: boolean
    monitoringUrl?: boolean
    network?: boolean | NetworkDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["server"]>

  export type ServerSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    networkId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    ipv4Address?: boolean
    osDetails?: boolean
    cpuDetails?: boolean
    gpuDetails?: boolean
    memoryDetails?: boolean
    storageDetails?: boolean
    managementUrl?: boolean
    monitoring?: boolean
    monitoringUrl?: boolean
    network?: boolean | NetworkDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["server"]>

  export type ServerSelectScalar = {
    id?: boolean
    networkId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    ipv4Address?: boolean
    osDetails?: boolean
    cpuDetails?: boolean
    gpuDetails?: boolean
    memoryDetails?: boolean
    storageDetails?: boolean
    managementUrl?: boolean
    monitoring?: boolean
    monitoringUrl?: boolean
  }

  export type ServerOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "networkId" | "name" | "description" | "icon" | "ipv4Address" | "osDetails" | "cpuDetails" | "gpuDetails" | "memoryDetails" | "storageDetails" | "managementUrl" | "monitoring" | "monitoringUrl", ExtArgs["result"]["server"]>
  export type ServerInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    network?: boolean | NetworkDefaultArgs<ExtArgs>
    monitoringData?: boolean | Server$monitoringDataArgs<ExtArgs>
    applications?: boolean | Server$applicationsArgs<ExtArgs>
    _count?: boolean | ServerCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type ServerIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    network?: boolean | NetworkDefaultArgs<ExtArgs>
  }
  export type ServerIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    network?: boolean | NetworkDefaultArgs<ExtArgs>
  }

  export type $ServerPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Server"
    objects: {
      network: Prisma.$NetworkPayload<ExtArgs>
      monitoringData: Prisma.$ServerMonitoringPayload<ExtArgs>[]
      applications: Prisma.$ApplicationPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      networkId: number
      name: string
      description: string | null
      icon: string | null
      ipv4Address: string | null
      osDetails: string | null
      cpuDetails: string | null
      gpuDetails: string | null
      memoryDetails: string | null
      storageDetails: string | null
      managementUrl: string | null
      monitoring: boolean
      monitoringUrl: string | null
    }, ExtArgs["result"]["server"]>
    composites: {}
  }

  type ServerGetPayload<S extends boolean | null | undefined | ServerDefaultArgs> = $Result.GetResult<Prisma.$ServerPayload, S>

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

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

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

    /**
     * Find the first Server 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 {ServerFindFirstArgs} args - Arguments to find a Server
     * @example
     * // Get one Server
     * const server = await prisma.server.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ServerFindFirstArgs>(args?: SelectSubset<T, ServerFindFirstArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Server 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 {ServerFindFirstOrThrowArgs} args - Arguments to find a Server
     * @example
     * // Get one Server
     * const server = await prisma.server.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ServerFindFirstOrThrowArgs>(args?: SelectSubset<T, ServerFindFirstOrThrowArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Servers 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 {ServerFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Servers
     * const servers = await prisma.server.findMany()
     * 
     * // Get first 10 Servers
     * const servers = await prisma.server.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const serverWithIdOnly = await prisma.server.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ServerFindManyArgs>(args?: SelectSubset<T, ServerFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Server.
     * @param {ServerCreateArgs} args - Arguments to create a Server.
     * @example
     * // Create one Server
     * const Server = await prisma.server.create({
     *   data: {
     *     // ... data to create a Server
     *   }
     * })
     * 
     */
    create<T extends ServerCreateArgs>(args: SelectSubset<T, ServerCreateArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many Servers and returns the data saved in the database.
     * @param {ServerCreateManyAndReturnArgs} args - Arguments to create many Servers.
     * @example
     * // Create many Servers
     * const server = await prisma.server.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Servers and only return the `id`
     * const serverWithIdOnly = await prisma.server.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 ServerCreateManyAndReturnArgs>(args?: SelectSubset<T, ServerCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Server.
     * @param {ServerDeleteArgs} args - Arguments to delete one Server.
     * @example
     * // Delete one Server
     * const Server = await prisma.server.delete({
     *   where: {
     *     // ... filter to delete one Server
     *   }
     * })
     * 
     */
    delete<T extends ServerDeleteArgs>(args: SelectSubset<T, ServerDeleteArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more Servers and returns the data updated in the database.
     * @param {ServerUpdateManyAndReturnArgs} args - Arguments to update many Servers.
     * @example
     * // Update many Servers
     * const server = await prisma.server.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Servers and only return the `id`
     * const serverWithIdOnly = await prisma.server.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 ServerUpdateManyAndReturnArgs>(args: SelectSubset<T, ServerUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a Server.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerAggregateArgs} 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 ServerAggregateArgs>(args: Subset<T, ServerAggregateArgs>): Prisma.PrismaPromise<GetServerAggregateType<T>>

    /**
     * Group by Server.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerGroupByArgs} 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 ServerGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ServerGroupByArgs['orderBy'] }
        : { orderBy?: ServerGroupByArgs['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, ServerGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetServerGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Server model
   */
  readonly fields: ServerFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Server.
   * 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__ServerClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    network<T extends NetworkDefaultArgs<ExtArgs> = {}>(args?: Subset<T, NetworkDefaultArgs<ExtArgs>>): Prisma__NetworkClient<$Result.GetResult<Prisma.$NetworkPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    monitoringData<T extends Server$monitoringDataArgs<ExtArgs> = {}>(args?: Subset<T, Server$monitoringDataArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    applications<T extends Server$applicationsArgs<ExtArgs> = {}>(args?: Subset<T, Server$applicationsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationPayload<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 Server model
   */
  interface ServerFieldRefs {
    readonly id: FieldRef<"Server", 'Int'>
    readonly networkId: FieldRef<"Server", 'Int'>
    readonly name: FieldRef<"Server", 'String'>
    readonly description: FieldRef<"Server", 'String'>
    readonly icon: FieldRef<"Server", 'String'>
    readonly ipv4Address: FieldRef<"Server", 'String'>
    readonly osDetails: FieldRef<"Server", 'String'>
    readonly cpuDetails: FieldRef<"Server", 'String'>
    readonly gpuDetails: FieldRef<"Server", 'String'>
    readonly memoryDetails: FieldRef<"Server", 'String'>
    readonly storageDetails: FieldRef<"Server", 'String'>
    readonly managementUrl: FieldRef<"Server", 'String'>
    readonly monitoring: FieldRef<"Server", 'Boolean'>
    readonly monitoringUrl: FieldRef<"Server", 'String'>
  }
    

  // Custom InputTypes
  /**
   * Server findUnique
   */
  export type ServerFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter, which Server to fetch.
     */
    where: ServerWhereUniqueInput
  }

  /**
   * Server findUniqueOrThrow
   */
  export type ServerFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter, which Server to fetch.
     */
    where: ServerWhereUniqueInput
  }

  /**
   * Server findFirst
   */
  export type ServerFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter, which Server to fetch.
     */
    where?: ServerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Servers to fetch.
     */
    orderBy?: ServerOrderByWithRelationInput | ServerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Servers.
     */
    cursor?: ServerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Servers 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` Servers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Servers.
     */
    distinct?: ServerScalarFieldEnum | ServerScalarFieldEnum[]
  }

  /**
   * Server findFirstOrThrow
   */
  export type ServerFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter, which Server to fetch.
     */
    where?: ServerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Servers to fetch.
     */
    orderBy?: ServerOrderByWithRelationInput | ServerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Servers.
     */
    cursor?: ServerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Servers 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` Servers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Servers.
     */
    distinct?: ServerScalarFieldEnum | ServerScalarFieldEnum[]
  }

  /**
   * Server findMany
   */
  export type ServerFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter, which Servers to fetch.
     */
    where?: ServerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Servers to fetch.
     */
    orderBy?: ServerOrderByWithRelationInput | ServerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Servers.
     */
    cursor?: ServerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Servers 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` Servers.
     */
    skip?: number
    distinct?: ServerScalarFieldEnum | ServerScalarFieldEnum[]
  }

  /**
   * Server create
   */
  export type ServerCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * The data needed to create a Server.
     */
    data: XOR<ServerCreateInput, ServerUncheckedCreateInput>
  }

  /**
   * Server createMany
   */
  export type ServerCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Servers.
     */
    data: ServerCreateManyInput | ServerCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Server createManyAndReturn
   */
  export type ServerCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * The data used to create many Servers.
     */
    data: ServerCreateManyInput | ServerCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * Server update
   */
  export type ServerUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * The data needed to update a Server.
     */
    data: XOR<ServerUpdateInput, ServerUncheckedUpdateInput>
    /**
     * Choose, which Server to update.
     */
    where: ServerWhereUniqueInput
  }

  /**
   * Server updateMany
   */
  export type ServerUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Servers.
     */
    data: XOR<ServerUpdateManyMutationInput, ServerUncheckedUpdateManyInput>
    /**
     * Filter which Servers to update
     */
    where?: ServerWhereInput
    /**
     * Limit how many Servers to update.
     */
    limit?: number
  }

  /**
   * Server updateManyAndReturn
   */
  export type ServerUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * The data used to update Servers.
     */
    data: XOR<ServerUpdateManyMutationInput, ServerUncheckedUpdateManyInput>
    /**
     * Filter which Servers to update
     */
    where?: ServerWhereInput
    /**
     * Limit how many Servers to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * Server upsert
   */
  export type ServerUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * The filter to search for the Server to update in case it exists.
     */
    where: ServerWhereUniqueInput
    /**
     * In case the Server found by the `where` argument doesn't exist, create a new Server with this data.
     */
    create: XOR<ServerCreateInput, ServerUncheckedCreateInput>
    /**
     * In case the Server was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ServerUpdateInput, ServerUncheckedUpdateInput>
  }

  /**
   * Server delete
   */
  export type ServerDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Server
     */
    select?: ServerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Server
     */
    omit?: ServerOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerInclude<ExtArgs> | null
    /**
     * Filter which Server to delete.
     */
    where: ServerWhereUniqueInput
  }

  /**
   * Server deleteMany
   */
  export type ServerDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Servers to delete
     */
    where?: ServerWhereInput
    /**
     * Limit how many Servers to delete.
     */
    limit?: number
  }

  /**
   * Server.monitoringData
   */
  export type Server$monitoringDataArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    where?: ServerMonitoringWhereInput
    orderBy?: ServerMonitoringOrderByWithRelationInput | ServerMonitoringOrderByWithRelationInput[]
    cursor?: ServerMonitoringWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ServerMonitoringScalarFieldEnum | ServerMonitoringScalarFieldEnum[]
  }

  /**
   * Server.applications
   */
  export type Server$applicationsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    where?: ApplicationWhereInput
    orderBy?: ApplicationOrderByWithRelationInput | ApplicationOrderByWithRelationInput[]
    cursor?: ApplicationWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ApplicationScalarFieldEnum | ApplicationScalarFieldEnum[]
  }

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


  /**
   * Model ServerMonitoring
   */

  export type AggregateServerMonitoring = {
    _count: ServerMonitoringCountAggregateOutputType | null
    _avg: ServerMonitoringAvgAggregateOutputType | null
    _sum: ServerMonitoringSumAggregateOutputType | null
    _min: ServerMonitoringMinAggregateOutputType | null
    _max: ServerMonitoringMaxAggregateOutputType | null
  }

  export type ServerMonitoringAvgAggregateOutputType = {
    id: number | null
    serverId: number | null
    cpuPercentUsage: number | null
    gpuPercentUsage: number | null
    memoryUsage: number | null
    memoryPercentUsage: number | null
    diskUsage: number | null
    diskPercentUsage: number | null
    temperature: number | null
    uptimeSeconds: number | null
  }

  export type ServerMonitoringSumAggregateOutputType = {
    id: number | null
    serverId: number | null
    cpuPercentUsage: number | null
    gpuPercentUsage: number | null
    memoryUsage: number | null
    memoryPercentUsage: number | null
    diskUsage: number | null
    diskPercentUsage: number | null
    temperature: number | null
    uptimeSeconds: number | null
  }

  export type ServerMonitoringMinAggregateOutputType = {
    id: number | null
    serverId: number | null
    cpuPercentUsage: number | null
    gpuPercentUsage: number | null
    memoryUsage: number | null
    memoryPercentUsage: number | null
    diskUsage: number | null
    diskPercentUsage: number | null
    temperature: number | null
    online: boolean | null
    uptimeSeconds: number | null
    timestamp: Date | null
  }

  export type ServerMonitoringMaxAggregateOutputType = {
    id: number | null
    serverId: number | null
    cpuPercentUsage: number | null
    gpuPercentUsage: number | null
    memoryUsage: number | null
    memoryPercentUsage: number | null
    diskUsage: number | null
    diskPercentUsage: number | null
    temperature: number | null
    online: boolean | null
    uptimeSeconds: number | null
    timestamp: Date | null
  }

  export type ServerMonitoringCountAggregateOutputType = {
    id: number
    serverId: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: number
    uptimeSeconds: number
    timestamp: number
    _all: number
  }


  export type ServerMonitoringAvgAggregateInputType = {
    id?: true
    serverId?: true
    cpuPercentUsage?: true
    gpuPercentUsage?: true
    memoryUsage?: true
    memoryPercentUsage?: true
    diskUsage?: true
    diskPercentUsage?: true
    temperature?: true
    uptimeSeconds?: true
  }

  export type ServerMonitoringSumAggregateInputType = {
    id?: true
    serverId?: true
    cpuPercentUsage?: true
    gpuPercentUsage?: true
    memoryUsage?: true
    memoryPercentUsage?: true
    diskUsage?: true
    diskPercentUsage?: true
    temperature?: true
    uptimeSeconds?: true
  }

  export type ServerMonitoringMinAggregateInputType = {
    id?: true
    serverId?: true
    cpuPercentUsage?: true
    gpuPercentUsage?: true
    memoryUsage?: true
    memoryPercentUsage?: true
    diskUsage?: true
    diskPercentUsage?: true
    temperature?: true
    online?: true
    uptimeSeconds?: true
    timestamp?: true
  }

  export type ServerMonitoringMaxAggregateInputType = {
    id?: true
    serverId?: true
    cpuPercentUsage?: true
    gpuPercentUsage?: true
    memoryUsage?: true
    memoryPercentUsage?: true
    diskUsage?: true
    diskPercentUsage?: true
    temperature?: true
    online?: true
    uptimeSeconds?: true
    timestamp?: true
  }

  export type ServerMonitoringCountAggregateInputType = {
    id?: true
    serverId?: true
    cpuPercentUsage?: true
    gpuPercentUsage?: true
    memoryUsage?: true
    memoryPercentUsage?: true
    diskUsage?: true
    diskPercentUsage?: true
    temperature?: true
    online?: true
    uptimeSeconds?: true
    timestamp?: true
    _all?: true
  }

  export type ServerMonitoringAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ServerMonitoring to aggregate.
     */
    where?: ServerMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitorings to fetch.
     */
    orderBy?: ServerMonitoringOrderByWithRelationInput | ServerMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ServerMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitorings 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` ServerMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ServerMonitorings
    **/
    _count?: true | ServerMonitoringCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ServerMonitoringAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ServerMonitoringSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ServerMonitoringMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ServerMonitoringMaxAggregateInputType
  }

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




  export type ServerMonitoringGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ServerMonitoringWhereInput
    orderBy?: ServerMonitoringOrderByWithAggregationInput | ServerMonitoringOrderByWithAggregationInput[]
    by: ServerMonitoringScalarFieldEnum[] | ServerMonitoringScalarFieldEnum
    having?: ServerMonitoringScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ServerMonitoringCountAggregateInputType | true
    _avg?: ServerMonitoringAvgAggregateInputType
    _sum?: ServerMonitoringSumAggregateInputType
    _min?: ServerMonitoringMinAggregateInputType
    _max?: ServerMonitoringMaxAggregateInputType
  }

  export type ServerMonitoringGroupByOutputType = {
    id: number
    serverId: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp: Date
    _count: ServerMonitoringCountAggregateOutputType | null
    _avg: ServerMonitoringAvgAggregateOutputType | null
    _sum: ServerMonitoringSumAggregateOutputType | null
    _min: ServerMonitoringMinAggregateOutputType | null
    _max: ServerMonitoringMaxAggregateOutputType | null
  }

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


  export type ServerMonitoringSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    cpuPercentUsage?: boolean
    gpuPercentUsage?: boolean
    memoryUsage?: boolean
    memoryPercentUsage?: boolean
    diskUsage?: boolean
    diskPercentUsage?: boolean
    temperature?: boolean
    online?: boolean
    uptimeSeconds?: boolean
    timestamp?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["serverMonitoring"]>

  export type ServerMonitoringSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    cpuPercentUsage?: boolean
    gpuPercentUsage?: boolean
    memoryUsage?: boolean
    memoryPercentUsage?: boolean
    diskUsage?: boolean
    diskPercentUsage?: boolean
    temperature?: boolean
    online?: boolean
    uptimeSeconds?: boolean
    timestamp?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["serverMonitoring"]>

  export type ServerMonitoringSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    cpuPercentUsage?: boolean
    gpuPercentUsage?: boolean
    memoryUsage?: boolean
    memoryPercentUsage?: boolean
    diskUsage?: boolean
    diskPercentUsage?: boolean
    temperature?: boolean
    online?: boolean
    uptimeSeconds?: boolean
    timestamp?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["serverMonitoring"]>

  export type ServerMonitoringSelectScalar = {
    id?: boolean
    serverId?: boolean
    cpuPercentUsage?: boolean
    gpuPercentUsage?: boolean
    memoryUsage?: boolean
    memoryPercentUsage?: boolean
    diskUsage?: boolean
    diskPercentUsage?: boolean
    temperature?: boolean
    online?: boolean
    uptimeSeconds?: boolean
    timestamp?: boolean
  }

  export type ServerMonitoringOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "serverId" | "cpuPercentUsage" | "gpuPercentUsage" | "memoryUsage" | "memoryPercentUsage" | "diskUsage" | "diskPercentUsage" | "temperature" | "online" | "uptimeSeconds" | "timestamp", ExtArgs["result"]["serverMonitoring"]>
  export type ServerMonitoringInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }
  export type ServerMonitoringIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }
  export type ServerMonitoringIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }

  export type $ServerMonitoringPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ServerMonitoring"
    objects: {
      server: Prisma.$ServerPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      serverId: number
      cpuPercentUsage: number
      gpuPercentUsage: number
      memoryUsage: number
      memoryPercentUsage: number
      diskUsage: number
      diskPercentUsage: number
      temperature: number
      online: boolean
      uptimeSeconds: number
      timestamp: Date
    }, ExtArgs["result"]["serverMonitoring"]>
    composites: {}
  }

  type ServerMonitoringGetPayload<S extends boolean | null | undefined | ServerMonitoringDefaultArgs> = $Result.GetResult<Prisma.$ServerMonitoringPayload, S>

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

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

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

    /**
     * Find the first ServerMonitoring 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 {ServerMonitoringFindFirstArgs} args - Arguments to find a ServerMonitoring
     * @example
     * // Get one ServerMonitoring
     * const serverMonitoring = await prisma.serverMonitoring.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ServerMonitoringFindFirstArgs>(args?: SelectSubset<T, ServerMonitoringFindFirstArgs<ExtArgs>>): Prisma__ServerMonitoringClient<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ServerMonitoring 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 {ServerMonitoringFindFirstOrThrowArgs} args - Arguments to find a ServerMonitoring
     * @example
     * // Get one ServerMonitoring
     * const serverMonitoring = await prisma.serverMonitoring.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ServerMonitoringFindFirstOrThrowArgs>(args?: SelectSubset<T, ServerMonitoringFindFirstOrThrowArgs<ExtArgs>>): Prisma__ServerMonitoringClient<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ServerMonitorings 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 {ServerMonitoringFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ServerMonitorings
     * const serverMonitorings = await prisma.serverMonitoring.findMany()
     * 
     * // Get first 10 ServerMonitorings
     * const serverMonitorings = await prisma.serverMonitoring.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const serverMonitoringWithIdOnly = await prisma.serverMonitoring.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ServerMonitoringFindManyArgs>(args?: SelectSubset<T, ServerMonitoringFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ServerMonitoring.
     * @param {ServerMonitoringCreateArgs} args - Arguments to create a ServerMonitoring.
     * @example
     * // Create one ServerMonitoring
     * const ServerMonitoring = await prisma.serverMonitoring.create({
     *   data: {
     *     // ... data to create a ServerMonitoring
     *   }
     * })
     * 
     */
    create<T extends ServerMonitoringCreateArgs>(args: SelectSubset<T, ServerMonitoringCreateArgs<ExtArgs>>): Prisma__ServerMonitoringClient<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many ServerMonitorings and returns the data saved in the database.
     * @param {ServerMonitoringCreateManyAndReturnArgs} args - Arguments to create many ServerMonitorings.
     * @example
     * // Create many ServerMonitorings
     * const serverMonitoring = await prisma.serverMonitoring.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many ServerMonitorings and only return the `id`
     * const serverMonitoringWithIdOnly = await prisma.serverMonitoring.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 ServerMonitoringCreateManyAndReturnArgs>(args?: SelectSubset<T, ServerMonitoringCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a ServerMonitoring.
     * @param {ServerMonitoringDeleteArgs} args - Arguments to delete one ServerMonitoring.
     * @example
     * // Delete one ServerMonitoring
     * const ServerMonitoring = await prisma.serverMonitoring.delete({
     *   where: {
     *     // ... filter to delete one ServerMonitoring
     *   }
     * })
     * 
     */
    delete<T extends ServerMonitoringDeleteArgs>(args: SelectSubset<T, ServerMonitoringDeleteArgs<ExtArgs>>): Prisma__ServerMonitoringClient<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more ServerMonitorings and returns the data updated in the database.
     * @param {ServerMonitoringUpdateManyAndReturnArgs} args - Arguments to update many ServerMonitorings.
     * @example
     * // Update many ServerMonitorings
     * const serverMonitoring = await prisma.serverMonitoring.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more ServerMonitorings and only return the `id`
     * const serverMonitoringWithIdOnly = await prisma.serverMonitoring.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 ServerMonitoringUpdateManyAndReturnArgs>(args: SelectSubset<T, ServerMonitoringUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a ServerMonitoring.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerMonitoringAggregateArgs} 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 ServerMonitoringAggregateArgs>(args: Subset<T, ServerMonitoringAggregateArgs>): Prisma.PrismaPromise<GetServerMonitoringAggregateType<T>>

    /**
     * Group by ServerMonitoring.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerMonitoringGroupByArgs} 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 ServerMonitoringGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ServerMonitoringGroupByArgs['orderBy'] }
        : { orderBy?: ServerMonitoringGroupByArgs['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, ServerMonitoringGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetServerMonitoringGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ServerMonitoring model
   */
  readonly fields: ServerMonitoringFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ServerMonitoring.
   * 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__ServerMonitoringClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    server<T extends ServerDefaultArgs<ExtArgs> = {}>(args?: Subset<T, ServerDefaultArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<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 ServerMonitoring model
   */
  interface ServerMonitoringFieldRefs {
    readonly id: FieldRef<"ServerMonitoring", 'Int'>
    readonly serverId: FieldRef<"ServerMonitoring", 'Int'>
    readonly cpuPercentUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly gpuPercentUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly memoryUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly memoryPercentUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly diskUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly diskPercentUsage: FieldRef<"ServerMonitoring", 'Float'>
    readonly temperature: FieldRef<"ServerMonitoring", 'Float'>
    readonly online: FieldRef<"ServerMonitoring", 'Boolean'>
    readonly uptimeSeconds: FieldRef<"ServerMonitoring", 'Int'>
    readonly timestamp: FieldRef<"ServerMonitoring", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ServerMonitoring findUnique
   */
  export type ServerMonitoringFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ServerMonitoring to fetch.
     */
    where: ServerMonitoringWhereUniqueInput
  }

  /**
   * ServerMonitoring findUniqueOrThrow
   */
  export type ServerMonitoringFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ServerMonitoring to fetch.
     */
    where: ServerMonitoringWhereUniqueInput
  }

  /**
   * ServerMonitoring findFirst
   */
  export type ServerMonitoringFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ServerMonitoring to fetch.
     */
    where?: ServerMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitorings to fetch.
     */
    orderBy?: ServerMonitoringOrderByWithRelationInput | ServerMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ServerMonitorings.
     */
    cursor?: ServerMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitorings 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` ServerMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ServerMonitorings.
     */
    distinct?: ServerMonitoringScalarFieldEnum | ServerMonitoringScalarFieldEnum[]
  }

  /**
   * ServerMonitoring findFirstOrThrow
   */
  export type ServerMonitoringFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ServerMonitoring to fetch.
     */
    where?: ServerMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitorings to fetch.
     */
    orderBy?: ServerMonitoringOrderByWithRelationInput | ServerMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ServerMonitorings.
     */
    cursor?: ServerMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitorings 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` ServerMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ServerMonitorings.
     */
    distinct?: ServerMonitoringScalarFieldEnum | ServerMonitoringScalarFieldEnum[]
  }

  /**
   * ServerMonitoring findMany
   */
  export type ServerMonitoringFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ServerMonitorings to fetch.
     */
    where?: ServerMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitorings to fetch.
     */
    orderBy?: ServerMonitoringOrderByWithRelationInput | ServerMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ServerMonitorings.
     */
    cursor?: ServerMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitorings 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` ServerMonitorings.
     */
    skip?: number
    distinct?: ServerMonitoringScalarFieldEnum | ServerMonitoringScalarFieldEnum[]
  }

  /**
   * ServerMonitoring create
   */
  export type ServerMonitoringCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * The data needed to create a ServerMonitoring.
     */
    data: XOR<ServerMonitoringCreateInput, ServerMonitoringUncheckedCreateInput>
  }

  /**
   * ServerMonitoring createMany
   */
  export type ServerMonitoringCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ServerMonitorings.
     */
    data: ServerMonitoringCreateManyInput | ServerMonitoringCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ServerMonitoring createManyAndReturn
   */
  export type ServerMonitoringCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * The data used to create many ServerMonitorings.
     */
    data: ServerMonitoringCreateManyInput | ServerMonitoringCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * ServerMonitoring update
   */
  export type ServerMonitoringUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * The data needed to update a ServerMonitoring.
     */
    data: XOR<ServerMonitoringUpdateInput, ServerMonitoringUncheckedUpdateInput>
    /**
     * Choose, which ServerMonitoring to update.
     */
    where: ServerMonitoringWhereUniqueInput
  }

  /**
   * ServerMonitoring updateMany
   */
  export type ServerMonitoringUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ServerMonitorings.
     */
    data: XOR<ServerMonitoringUpdateManyMutationInput, ServerMonitoringUncheckedUpdateManyInput>
    /**
     * Filter which ServerMonitorings to update
     */
    where?: ServerMonitoringWhereInput
    /**
     * Limit how many ServerMonitorings to update.
     */
    limit?: number
  }

  /**
   * ServerMonitoring updateManyAndReturn
   */
  export type ServerMonitoringUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * The data used to update ServerMonitorings.
     */
    data: XOR<ServerMonitoringUpdateManyMutationInput, ServerMonitoringUncheckedUpdateManyInput>
    /**
     * Filter which ServerMonitorings to update
     */
    where?: ServerMonitoringWhereInput
    /**
     * Limit how many ServerMonitorings to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * ServerMonitoring upsert
   */
  export type ServerMonitoringUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * The filter to search for the ServerMonitoring to update in case it exists.
     */
    where: ServerMonitoringWhereUniqueInput
    /**
     * In case the ServerMonitoring found by the `where` argument doesn't exist, create a new ServerMonitoring with this data.
     */
    create: XOR<ServerMonitoringCreateInput, ServerMonitoringUncheckedCreateInput>
    /**
     * In case the ServerMonitoring was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ServerMonitoringUpdateInput, ServerMonitoringUncheckedUpdateInput>
  }

  /**
   * ServerMonitoring delete
   */
  export type ServerMonitoringDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoring
     */
    select?: ServerMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoring
     */
    omit?: ServerMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ServerMonitoringInclude<ExtArgs> | null
    /**
     * Filter which ServerMonitoring to delete.
     */
    where: ServerMonitoringWhereUniqueInput
  }

  /**
   * ServerMonitoring deleteMany
   */
  export type ServerMonitoringDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ServerMonitorings to delete
     */
    where?: ServerMonitoringWhereInput
    /**
     * Limit how many ServerMonitorings to delete.
     */
    limit?: number
  }

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


  /**
   * Model Application
   */

  export type AggregateApplication = {
    _count: ApplicationCountAggregateOutputType | null
    _avg: ApplicationAvgAggregateOutputType | null
    _sum: ApplicationSumAggregateOutputType | null
    _min: ApplicationMinAggregateOutputType | null
    _max: ApplicationMaxAggregateOutputType | null
  }

  export type ApplicationAvgAggregateOutputType = {
    id: number | null
    serverId: number | null
  }

  export type ApplicationSumAggregateOutputType = {
    id: number | null
    serverId: number | null
  }

  export type ApplicationMinAggregateOutputType = {
    id: number | null
    serverId: number | null
    name: string | null
    description: string | null
    icon: string | null
    url: string | null
    monitoring: boolean | null
  }

  export type ApplicationMaxAggregateOutputType = {
    id: number | null
    serverId: number | null
    name: string | null
    description: string | null
    icon: string | null
    url: string | null
    monitoring: boolean | null
  }

  export type ApplicationCountAggregateOutputType = {
    id: number
    serverId: number
    name: number
    description: number
    icon: number
    url: number
    monitoring: number
    _all: number
  }


  export type ApplicationAvgAggregateInputType = {
    id?: true
    serverId?: true
  }

  export type ApplicationSumAggregateInputType = {
    id?: true
    serverId?: true
  }

  export type ApplicationMinAggregateInputType = {
    id?: true
    serverId?: true
    name?: true
    description?: true
    icon?: true
    url?: true
    monitoring?: true
  }

  export type ApplicationMaxAggregateInputType = {
    id?: true
    serverId?: true
    name?: true
    description?: true
    icon?: true
    url?: true
    monitoring?: true
  }

  export type ApplicationCountAggregateInputType = {
    id?: true
    serverId?: true
    name?: true
    description?: true
    icon?: true
    url?: true
    monitoring?: true
    _all?: true
  }

  export type ApplicationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Application to aggregate.
     */
    where?: ApplicationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Applications to fetch.
     */
    orderBy?: ApplicationOrderByWithRelationInput | ApplicationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ApplicationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Applications 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` Applications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Applications
    **/
    _count?: true | ApplicationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ApplicationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ApplicationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ApplicationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ApplicationMaxAggregateInputType
  }

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




  export type ApplicationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ApplicationWhereInput
    orderBy?: ApplicationOrderByWithAggregationInput | ApplicationOrderByWithAggregationInput[]
    by: ApplicationScalarFieldEnum[] | ApplicationScalarFieldEnum
    having?: ApplicationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ApplicationCountAggregateInputType | true
    _avg?: ApplicationAvgAggregateInputType
    _sum?: ApplicationSumAggregateInputType
    _min?: ApplicationMinAggregateInputType
    _max?: ApplicationMaxAggregateInputType
  }

  export type ApplicationGroupByOutputType = {
    id: number
    serverId: number
    name: string
    description: string | null
    icon: string | null
    url: string | null
    monitoring: boolean
    _count: ApplicationCountAggregateOutputType | null
    _avg: ApplicationAvgAggregateOutputType | null
    _sum: ApplicationSumAggregateOutputType | null
    _min: ApplicationMinAggregateOutputType | null
    _max: ApplicationMaxAggregateOutputType | null
  }

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


  export type ApplicationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    url?: boolean
    monitoring?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
    monitoringData?: boolean | Application$monitoringDataArgs<ExtArgs>
    _count?: boolean | ApplicationCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["application"]>

  export type ApplicationSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    url?: boolean
    monitoring?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["application"]>

  export type ApplicationSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serverId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    url?: boolean
    monitoring?: boolean
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["application"]>

  export type ApplicationSelectScalar = {
    id?: boolean
    serverId?: boolean
    name?: boolean
    description?: boolean
    icon?: boolean
    url?: boolean
    monitoring?: boolean
  }

  export type ApplicationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "serverId" | "name" | "description" | "icon" | "url" | "monitoring", ExtArgs["result"]["application"]>
  export type ApplicationInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
    monitoringData?: boolean | Application$monitoringDataArgs<ExtArgs>
    _count?: boolean | ApplicationCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type ApplicationIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }
  export type ApplicationIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    server?: boolean | ServerDefaultArgs<ExtArgs>
  }

  export type $ApplicationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Application"
    objects: {
      server: Prisma.$ServerPayload<ExtArgs>
      monitoringData: Prisma.$ApplicationMonitoringPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      serverId: number
      name: string
      description: string | null
      icon: string | null
      url: string | null
      monitoring: boolean
    }, ExtArgs["result"]["application"]>
    composites: {}
  }

  type ApplicationGetPayload<S extends boolean | null | undefined | ApplicationDefaultArgs> = $Result.GetResult<Prisma.$ApplicationPayload, S>

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

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

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

    /**
     * Find the first Application 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 {ApplicationFindFirstArgs} args - Arguments to find a Application
     * @example
     * // Get one Application
     * const application = await prisma.application.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ApplicationFindFirstArgs>(args?: SelectSubset<T, ApplicationFindFirstArgs<ExtArgs>>): Prisma__ApplicationClient<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Application 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 {ApplicationFindFirstOrThrowArgs} args - Arguments to find a Application
     * @example
     * // Get one Application
     * const application = await prisma.application.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ApplicationFindFirstOrThrowArgs>(args?: SelectSubset<T, ApplicationFindFirstOrThrowArgs<ExtArgs>>): Prisma__ApplicationClient<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Applications 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 {ApplicationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Applications
     * const applications = await prisma.application.findMany()
     * 
     * // Get first 10 Applications
     * const applications = await prisma.application.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const applicationWithIdOnly = await prisma.application.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ApplicationFindManyArgs>(args?: SelectSubset<T, ApplicationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Application.
     * @param {ApplicationCreateArgs} args - Arguments to create a Application.
     * @example
     * // Create one Application
     * const Application = await prisma.application.create({
     *   data: {
     *     // ... data to create a Application
     *   }
     * })
     * 
     */
    create<T extends ApplicationCreateArgs>(args: SelectSubset<T, ApplicationCreateArgs<ExtArgs>>): Prisma__ApplicationClient<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many Applications and returns the data saved in the database.
     * @param {ApplicationCreateManyAndReturnArgs} args - Arguments to create many Applications.
     * @example
     * // Create many Applications
     * const application = await prisma.application.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many Applications and only return the `id`
     * const applicationWithIdOnly = await prisma.application.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 ApplicationCreateManyAndReturnArgs>(args?: SelectSubset<T, ApplicationCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a Application.
     * @param {ApplicationDeleteArgs} args - Arguments to delete one Application.
     * @example
     * // Delete one Application
     * const Application = await prisma.application.delete({
     *   where: {
     *     // ... filter to delete one Application
     *   }
     * })
     * 
     */
    delete<T extends ApplicationDeleteArgs>(args: SelectSubset<T, ApplicationDeleteArgs<ExtArgs>>): Prisma__ApplicationClient<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more Applications and returns the data updated in the database.
     * @param {ApplicationUpdateManyAndReturnArgs} args - Arguments to update many Applications.
     * @example
     * // Update many Applications
     * const application = await prisma.application.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more Applications and only return the `id`
     * const applicationWithIdOnly = await prisma.application.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 ApplicationUpdateManyAndReturnArgs>(args: SelectSubset<T, ApplicationUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a Application.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationAggregateArgs} 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 ApplicationAggregateArgs>(args: Subset<T, ApplicationAggregateArgs>): Prisma.PrismaPromise<GetApplicationAggregateType<T>>

    /**
     * Group by Application.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationGroupByArgs} 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 ApplicationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ApplicationGroupByArgs['orderBy'] }
        : { orderBy?: ApplicationGroupByArgs['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, ApplicationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetApplicationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Application model
   */
  readonly fields: ApplicationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Application.
   * 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__ApplicationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    server<T extends ServerDefaultArgs<ExtArgs> = {}>(args?: Subset<T, ServerDefaultArgs<ExtArgs>>): Prisma__ServerClient<$Result.GetResult<Prisma.$ServerPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    monitoringData<T extends Application$monitoringDataArgs<ExtArgs> = {}>(args?: Subset<T, Application$monitoringDataArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<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 Application model
   */
  interface ApplicationFieldRefs {
    readonly id: FieldRef<"Application", 'Int'>
    readonly serverId: FieldRef<"Application", 'Int'>
    readonly name: FieldRef<"Application", 'String'>
    readonly description: FieldRef<"Application", 'String'>
    readonly icon: FieldRef<"Application", 'String'>
    readonly url: FieldRef<"Application", 'String'>
    readonly monitoring: FieldRef<"Application", 'Boolean'>
  }
    

  // Custom InputTypes
  /**
   * Application findUnique
   */
  export type ApplicationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter, which Application to fetch.
     */
    where: ApplicationWhereUniqueInput
  }

  /**
   * Application findUniqueOrThrow
   */
  export type ApplicationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter, which Application to fetch.
     */
    where: ApplicationWhereUniqueInput
  }

  /**
   * Application findFirst
   */
  export type ApplicationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter, which Application to fetch.
     */
    where?: ApplicationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Applications to fetch.
     */
    orderBy?: ApplicationOrderByWithRelationInput | ApplicationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Applications.
     */
    cursor?: ApplicationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Applications 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` Applications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Applications.
     */
    distinct?: ApplicationScalarFieldEnum | ApplicationScalarFieldEnum[]
  }

  /**
   * Application findFirstOrThrow
   */
  export type ApplicationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter, which Application to fetch.
     */
    where?: ApplicationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Applications to fetch.
     */
    orderBy?: ApplicationOrderByWithRelationInput | ApplicationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Applications.
     */
    cursor?: ApplicationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Applications 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` Applications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Applications.
     */
    distinct?: ApplicationScalarFieldEnum | ApplicationScalarFieldEnum[]
  }

  /**
   * Application findMany
   */
  export type ApplicationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter, which Applications to fetch.
     */
    where?: ApplicationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Applications to fetch.
     */
    orderBy?: ApplicationOrderByWithRelationInput | ApplicationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Applications.
     */
    cursor?: ApplicationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Applications 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` Applications.
     */
    skip?: number
    distinct?: ApplicationScalarFieldEnum | ApplicationScalarFieldEnum[]
  }

  /**
   * Application create
   */
  export type ApplicationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * The data needed to create a Application.
     */
    data: XOR<ApplicationCreateInput, ApplicationUncheckedCreateInput>
  }

  /**
   * Application createMany
   */
  export type ApplicationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Applications.
     */
    data: ApplicationCreateManyInput | ApplicationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Application createManyAndReturn
   */
  export type ApplicationCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * The data used to create many Applications.
     */
    data: ApplicationCreateManyInput | ApplicationCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * Application update
   */
  export type ApplicationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * The data needed to update a Application.
     */
    data: XOR<ApplicationUpdateInput, ApplicationUncheckedUpdateInput>
    /**
     * Choose, which Application to update.
     */
    where: ApplicationWhereUniqueInput
  }

  /**
   * Application updateMany
   */
  export type ApplicationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Applications.
     */
    data: XOR<ApplicationUpdateManyMutationInput, ApplicationUncheckedUpdateManyInput>
    /**
     * Filter which Applications to update
     */
    where?: ApplicationWhereInput
    /**
     * Limit how many Applications to update.
     */
    limit?: number
  }

  /**
   * Application updateManyAndReturn
   */
  export type ApplicationUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * The data used to update Applications.
     */
    data: XOR<ApplicationUpdateManyMutationInput, ApplicationUncheckedUpdateManyInput>
    /**
     * Filter which Applications to update
     */
    where?: ApplicationWhereInput
    /**
     * Limit how many Applications to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * Application upsert
   */
  export type ApplicationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * The filter to search for the Application to update in case it exists.
     */
    where: ApplicationWhereUniqueInput
    /**
     * In case the Application found by the `where` argument doesn't exist, create a new Application with this data.
     */
    create: XOR<ApplicationCreateInput, ApplicationUncheckedCreateInput>
    /**
     * In case the Application was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ApplicationUpdateInput, ApplicationUncheckedUpdateInput>
  }

  /**
   * Application delete
   */
  export type ApplicationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Application
     */
    select?: ApplicationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Application
     */
    omit?: ApplicationOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationInclude<ExtArgs> | null
    /**
     * Filter which Application to delete.
     */
    where: ApplicationWhereUniqueInput
  }

  /**
   * Application deleteMany
   */
  export type ApplicationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Applications to delete
     */
    where?: ApplicationWhereInput
    /**
     * Limit how many Applications to delete.
     */
    limit?: number
  }

  /**
   * Application.monitoringData
   */
  export type Application$monitoringDataArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    where?: ApplicationMonitoringWhereInput
    orderBy?: ApplicationMonitoringOrderByWithRelationInput | ApplicationMonitoringOrderByWithRelationInput[]
    cursor?: ApplicationMonitoringWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ApplicationMonitoringScalarFieldEnum | ApplicationMonitoringScalarFieldEnum[]
  }

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


  /**
   * Model ApplicationMonitoring
   */

  export type AggregateApplicationMonitoring = {
    _count: ApplicationMonitoringCountAggregateOutputType | null
    _avg: ApplicationMonitoringAvgAggregateOutputType | null
    _sum: ApplicationMonitoringSumAggregateOutputType | null
    _min: ApplicationMonitoringMinAggregateOutputType | null
    _max: ApplicationMonitoringMaxAggregateOutputType | null
  }

  export type ApplicationMonitoringAvgAggregateOutputType = {
    id: number | null
    applicationId: number | null
    latency: number | null
  }

  export type ApplicationMonitoringSumAggregateOutputType = {
    id: number | null
    applicationId: number | null
    latency: number | null
  }

  export type ApplicationMonitoringMinAggregateOutputType = {
    id: number | null
    applicationId: number | null
    online: boolean | null
    latency: number | null
    timestamp: Date | null
  }

  export type ApplicationMonitoringMaxAggregateOutputType = {
    id: number | null
    applicationId: number | null
    online: boolean | null
    latency: number | null
    timestamp: Date | null
  }

  export type ApplicationMonitoringCountAggregateOutputType = {
    id: number
    applicationId: number
    online: number
    latency: number
    timestamp: number
    _all: number
  }


  export type ApplicationMonitoringAvgAggregateInputType = {
    id?: true
    applicationId?: true
    latency?: true
  }

  export type ApplicationMonitoringSumAggregateInputType = {
    id?: true
    applicationId?: true
    latency?: true
  }

  export type ApplicationMonitoringMinAggregateInputType = {
    id?: true
    applicationId?: true
    online?: true
    latency?: true
    timestamp?: true
  }

  export type ApplicationMonitoringMaxAggregateInputType = {
    id?: true
    applicationId?: true
    online?: true
    latency?: true
    timestamp?: true
  }

  export type ApplicationMonitoringCountAggregateInputType = {
    id?: true
    applicationId?: true
    online?: true
    latency?: true
    timestamp?: true
    _all?: true
  }

  export type ApplicationMonitoringAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ApplicationMonitoring to aggregate.
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitorings to fetch.
     */
    orderBy?: ApplicationMonitoringOrderByWithRelationInput | ApplicationMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ApplicationMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitorings 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` ApplicationMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ApplicationMonitorings
    **/
    _count?: true | ApplicationMonitoringCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ApplicationMonitoringAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ApplicationMonitoringSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ApplicationMonitoringMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ApplicationMonitoringMaxAggregateInputType
  }

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




  export type ApplicationMonitoringGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ApplicationMonitoringWhereInput
    orderBy?: ApplicationMonitoringOrderByWithAggregationInput | ApplicationMonitoringOrderByWithAggregationInput[]
    by: ApplicationMonitoringScalarFieldEnum[] | ApplicationMonitoringScalarFieldEnum
    having?: ApplicationMonitoringScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ApplicationMonitoringCountAggregateInputType | true
    _avg?: ApplicationMonitoringAvgAggregateInputType
    _sum?: ApplicationMonitoringSumAggregateInputType
    _min?: ApplicationMonitoringMinAggregateInputType
    _max?: ApplicationMonitoringMaxAggregateInputType
  }

  export type ApplicationMonitoringGroupByOutputType = {
    id: number
    applicationId: number
    online: boolean
    latency: number
    timestamp: Date
    _count: ApplicationMonitoringCountAggregateOutputType | null
    _avg: ApplicationMonitoringAvgAggregateOutputType | null
    _sum: ApplicationMonitoringSumAggregateOutputType | null
    _min: ApplicationMonitoringMinAggregateOutputType | null
    _max: ApplicationMonitoringMaxAggregateOutputType | null
  }

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


  export type ApplicationMonitoringSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    applicationId?: boolean
    online?: boolean
    latency?: boolean
    timestamp?: boolean
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["applicationMonitoring"]>

  export type ApplicationMonitoringSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    applicationId?: boolean
    online?: boolean
    latency?: boolean
    timestamp?: boolean
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["applicationMonitoring"]>

  export type ApplicationMonitoringSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    applicationId?: boolean
    online?: boolean
    latency?: boolean
    timestamp?: boolean
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["applicationMonitoring"]>

  export type ApplicationMonitoringSelectScalar = {
    id?: boolean
    applicationId?: boolean
    online?: boolean
    latency?: boolean
    timestamp?: boolean
  }

  export type ApplicationMonitoringOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "applicationId" | "online" | "latency" | "timestamp", ExtArgs["result"]["applicationMonitoring"]>
  export type ApplicationMonitoringInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }
  export type ApplicationMonitoringIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }
  export type ApplicationMonitoringIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    application?: boolean | ApplicationDefaultArgs<ExtArgs>
  }

  export type $ApplicationMonitoringPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ApplicationMonitoring"
    objects: {
      application: Prisma.$ApplicationPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      applicationId: number
      online: boolean
      latency: number
      timestamp: Date
    }, ExtArgs["result"]["applicationMonitoring"]>
    composites: {}
  }

  type ApplicationMonitoringGetPayload<S extends boolean | null | undefined | ApplicationMonitoringDefaultArgs> = $Result.GetResult<Prisma.$ApplicationMonitoringPayload, S>

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

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

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

    /**
     * Find the first ApplicationMonitoring 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 {ApplicationMonitoringFindFirstArgs} args - Arguments to find a ApplicationMonitoring
     * @example
     * // Get one ApplicationMonitoring
     * const applicationMonitoring = await prisma.applicationMonitoring.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ApplicationMonitoringFindFirstArgs>(args?: SelectSubset<T, ApplicationMonitoringFindFirstArgs<ExtArgs>>): Prisma__ApplicationMonitoringClient<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ApplicationMonitoring 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 {ApplicationMonitoringFindFirstOrThrowArgs} args - Arguments to find a ApplicationMonitoring
     * @example
     * // Get one ApplicationMonitoring
     * const applicationMonitoring = await prisma.applicationMonitoring.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ApplicationMonitoringFindFirstOrThrowArgs>(args?: SelectSubset<T, ApplicationMonitoringFindFirstOrThrowArgs<ExtArgs>>): Prisma__ApplicationMonitoringClient<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ApplicationMonitorings 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 {ApplicationMonitoringFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ApplicationMonitorings
     * const applicationMonitorings = await prisma.applicationMonitoring.findMany()
     * 
     * // Get first 10 ApplicationMonitorings
     * const applicationMonitorings = await prisma.applicationMonitoring.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const applicationMonitoringWithIdOnly = await prisma.applicationMonitoring.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ApplicationMonitoringFindManyArgs>(args?: SelectSubset<T, ApplicationMonitoringFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ApplicationMonitoring.
     * @param {ApplicationMonitoringCreateArgs} args - Arguments to create a ApplicationMonitoring.
     * @example
     * // Create one ApplicationMonitoring
     * const ApplicationMonitoring = await prisma.applicationMonitoring.create({
     *   data: {
     *     // ... data to create a ApplicationMonitoring
     *   }
     * })
     * 
     */
    create<T extends ApplicationMonitoringCreateArgs>(args: SelectSubset<T, ApplicationMonitoringCreateArgs<ExtArgs>>): Prisma__ApplicationMonitoringClient<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many ApplicationMonitorings and returns the data saved in the database.
     * @param {ApplicationMonitoringCreateManyAndReturnArgs} args - Arguments to create many ApplicationMonitorings.
     * @example
     * // Create many ApplicationMonitorings
     * const applicationMonitoring = await prisma.applicationMonitoring.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many ApplicationMonitorings and only return the `id`
     * const applicationMonitoringWithIdOnly = await prisma.applicationMonitoring.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 ApplicationMonitoringCreateManyAndReturnArgs>(args?: SelectSubset<T, ApplicationMonitoringCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a ApplicationMonitoring.
     * @param {ApplicationMonitoringDeleteArgs} args - Arguments to delete one ApplicationMonitoring.
     * @example
     * // Delete one ApplicationMonitoring
     * const ApplicationMonitoring = await prisma.applicationMonitoring.delete({
     *   where: {
     *     // ... filter to delete one ApplicationMonitoring
     *   }
     * })
     * 
     */
    delete<T extends ApplicationMonitoringDeleteArgs>(args: SelectSubset<T, ApplicationMonitoringDeleteArgs<ExtArgs>>): Prisma__ApplicationMonitoringClient<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more ApplicationMonitorings and returns the data updated in the database.
     * @param {ApplicationMonitoringUpdateManyAndReturnArgs} args - Arguments to update many ApplicationMonitorings.
     * @example
     * // Update many ApplicationMonitorings
     * const applicationMonitoring = await prisma.applicationMonitoring.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more ApplicationMonitorings and only return the `id`
     * const applicationMonitoringWithIdOnly = await prisma.applicationMonitoring.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 ApplicationMonitoringUpdateManyAndReturnArgs>(args: SelectSubset<T, ApplicationMonitoringUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a ApplicationMonitoring.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationMonitoringAggregateArgs} 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 ApplicationMonitoringAggregateArgs>(args: Subset<T, ApplicationMonitoringAggregateArgs>): Prisma.PrismaPromise<GetApplicationMonitoringAggregateType<T>>

    /**
     * Group by ApplicationMonitoring.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationMonitoringGroupByArgs} 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 ApplicationMonitoringGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ApplicationMonitoringGroupByArgs['orderBy'] }
        : { orderBy?: ApplicationMonitoringGroupByArgs['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, ApplicationMonitoringGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetApplicationMonitoringGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ApplicationMonitoring model
   */
  readonly fields: ApplicationMonitoringFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ApplicationMonitoring.
   * 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__ApplicationMonitoringClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    application<T extends ApplicationDefaultArgs<ExtArgs> = {}>(args?: Subset<T, ApplicationDefaultArgs<ExtArgs>>): Prisma__ApplicationClient<$Result.GetResult<Prisma.$ApplicationPayload<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 ApplicationMonitoring model
   */
  interface ApplicationMonitoringFieldRefs {
    readonly id: FieldRef<"ApplicationMonitoring", 'Int'>
    readonly applicationId: FieldRef<"ApplicationMonitoring", 'Int'>
    readonly online: FieldRef<"ApplicationMonitoring", 'Boolean'>
    readonly latency: FieldRef<"ApplicationMonitoring", 'Float'>
    readonly timestamp: FieldRef<"ApplicationMonitoring", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ApplicationMonitoring findUnique
   */
  export type ApplicationMonitoringFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoring to fetch.
     */
    where: ApplicationMonitoringWhereUniqueInput
  }

  /**
   * ApplicationMonitoring findUniqueOrThrow
   */
  export type ApplicationMonitoringFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoring to fetch.
     */
    where: ApplicationMonitoringWhereUniqueInput
  }

  /**
   * ApplicationMonitoring findFirst
   */
  export type ApplicationMonitoringFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoring to fetch.
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitorings to fetch.
     */
    orderBy?: ApplicationMonitoringOrderByWithRelationInput | ApplicationMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ApplicationMonitorings.
     */
    cursor?: ApplicationMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitorings 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` ApplicationMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ApplicationMonitorings.
     */
    distinct?: ApplicationMonitoringScalarFieldEnum | ApplicationMonitoringScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoring findFirstOrThrow
   */
  export type ApplicationMonitoringFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoring to fetch.
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitorings to fetch.
     */
    orderBy?: ApplicationMonitoringOrderByWithRelationInput | ApplicationMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ApplicationMonitorings.
     */
    cursor?: ApplicationMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitorings 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` ApplicationMonitorings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ApplicationMonitorings.
     */
    distinct?: ApplicationMonitoringScalarFieldEnum | ApplicationMonitoringScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoring findMany
   */
  export type ApplicationMonitoringFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitorings to fetch.
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitorings to fetch.
     */
    orderBy?: ApplicationMonitoringOrderByWithRelationInput | ApplicationMonitoringOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ApplicationMonitorings.
     */
    cursor?: ApplicationMonitoringWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitorings 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` ApplicationMonitorings.
     */
    skip?: number
    distinct?: ApplicationMonitoringScalarFieldEnum | ApplicationMonitoringScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoring create
   */
  export type ApplicationMonitoringCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * The data needed to create a ApplicationMonitoring.
     */
    data: XOR<ApplicationMonitoringCreateInput, ApplicationMonitoringUncheckedCreateInput>
  }

  /**
   * ApplicationMonitoring createMany
   */
  export type ApplicationMonitoringCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ApplicationMonitorings.
     */
    data: ApplicationMonitoringCreateManyInput | ApplicationMonitoringCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ApplicationMonitoring createManyAndReturn
   */
  export type ApplicationMonitoringCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * The data used to create many ApplicationMonitorings.
     */
    data: ApplicationMonitoringCreateManyInput | ApplicationMonitoringCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * ApplicationMonitoring update
   */
  export type ApplicationMonitoringUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * The data needed to update a ApplicationMonitoring.
     */
    data: XOR<ApplicationMonitoringUpdateInput, ApplicationMonitoringUncheckedUpdateInput>
    /**
     * Choose, which ApplicationMonitoring to update.
     */
    where: ApplicationMonitoringWhereUniqueInput
  }

  /**
   * ApplicationMonitoring updateMany
   */
  export type ApplicationMonitoringUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ApplicationMonitorings.
     */
    data: XOR<ApplicationMonitoringUpdateManyMutationInput, ApplicationMonitoringUncheckedUpdateManyInput>
    /**
     * Filter which ApplicationMonitorings to update
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * Limit how many ApplicationMonitorings to update.
     */
    limit?: number
  }

  /**
   * ApplicationMonitoring updateManyAndReturn
   */
  export type ApplicationMonitoringUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * The data used to update ApplicationMonitorings.
     */
    data: XOR<ApplicationMonitoringUpdateManyMutationInput, ApplicationMonitoringUncheckedUpdateManyInput>
    /**
     * Filter which ApplicationMonitorings to update
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * Limit how many ApplicationMonitorings to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * ApplicationMonitoring upsert
   */
  export type ApplicationMonitoringUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * The filter to search for the ApplicationMonitoring to update in case it exists.
     */
    where: ApplicationMonitoringWhereUniqueInput
    /**
     * In case the ApplicationMonitoring found by the `where` argument doesn't exist, create a new ApplicationMonitoring with this data.
     */
    create: XOR<ApplicationMonitoringCreateInput, ApplicationMonitoringUncheckedCreateInput>
    /**
     * In case the ApplicationMonitoring was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ApplicationMonitoringUpdateInput, ApplicationMonitoringUncheckedUpdateInput>
  }

  /**
   * ApplicationMonitoring delete
   */
  export type ApplicationMonitoringDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoring
     */
    select?: ApplicationMonitoringSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoring
     */
    omit?: ApplicationMonitoringOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ApplicationMonitoringInclude<ExtArgs> | null
    /**
     * Filter which ApplicationMonitoring to delete.
     */
    where: ApplicationMonitoringWhereUniqueInput
  }

  /**
   * ApplicationMonitoring deleteMany
   */
  export type ApplicationMonitoringDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ApplicationMonitorings to delete
     */
    where?: ApplicationMonitoringWhereInput
    /**
     * Limit how many ApplicationMonitorings to delete.
     */
    limit?: number
  }

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


  /**
   * Model ServerMonitoringNotification
   */

  export type AggregateServerMonitoringNotification = {
    _count: ServerMonitoringNotificationCountAggregateOutputType | null
    _avg: ServerMonitoringNotificationAvgAggregateOutputType | null
    _sum: ServerMonitoringNotificationSumAggregateOutputType | null
    _min: ServerMonitoringNotificationMinAggregateOutputType | null
    _max: ServerMonitoringNotificationMaxAggregateOutputType | null
  }

  export type ServerMonitoringNotificationAvgAggregateOutputType = {
    id: number | null
    cpuLimit: number | null
    gpuLimit: number | null
    memoryLimit: number | null
    diskLimit: number | null
    temperatureLimit: number | null
  }

  export type ServerMonitoringNotificationSumAggregateOutputType = {
    id: number | null
    cpuLimit: number | null
    gpuLimit: number | null
    memoryLimit: number | null
    diskLimit: number | null
    temperatureLimit: number | null
  }

  export type ServerMonitoringNotificationMinAggregateOutputType = {
    id: number | null
    statusChange: boolean | null
    cpuLimit: number | null
    gpuLimit: number | null
    memoryLimit: number | null
    diskLimit: number | null
    temperatureLimit: number | null
  }

  export type ServerMonitoringNotificationMaxAggregateOutputType = {
    id: number | null
    statusChange: boolean | null
    cpuLimit: number | null
    gpuLimit: number | null
    memoryLimit: number | null
    diskLimit: number | null
    temperatureLimit: number | null
  }

  export type ServerMonitoringNotificationCountAggregateOutputType = {
    id: number
    statusChange: number
    cpuLimit: number
    gpuLimit: number
    memoryLimit: number
    diskLimit: number
    temperatureLimit: number
    _all: number
  }


  export type ServerMonitoringNotificationAvgAggregateInputType = {
    id?: true
    cpuLimit?: true
    gpuLimit?: true
    memoryLimit?: true
    diskLimit?: true
    temperatureLimit?: true
  }

  export type ServerMonitoringNotificationSumAggregateInputType = {
    id?: true
    cpuLimit?: true
    gpuLimit?: true
    memoryLimit?: true
    diskLimit?: true
    temperatureLimit?: true
  }

  export type ServerMonitoringNotificationMinAggregateInputType = {
    id?: true
    statusChange?: true
    cpuLimit?: true
    gpuLimit?: true
    memoryLimit?: true
    diskLimit?: true
    temperatureLimit?: true
  }

  export type ServerMonitoringNotificationMaxAggregateInputType = {
    id?: true
    statusChange?: true
    cpuLimit?: true
    gpuLimit?: true
    memoryLimit?: true
    diskLimit?: true
    temperatureLimit?: true
  }

  export type ServerMonitoringNotificationCountAggregateInputType = {
    id?: true
    statusChange?: true
    cpuLimit?: true
    gpuLimit?: true
    memoryLimit?: true
    diskLimit?: true
    temperatureLimit?: true
    _all?: true
  }

  export type ServerMonitoringNotificationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ServerMonitoringNotification to aggregate.
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitoringNotifications to fetch.
     */
    orderBy?: ServerMonitoringNotificationOrderByWithRelationInput | ServerMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ServerMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitoringNotifications 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` ServerMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ServerMonitoringNotifications
    **/
    _count?: true | ServerMonitoringNotificationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ServerMonitoringNotificationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ServerMonitoringNotificationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ServerMonitoringNotificationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ServerMonitoringNotificationMaxAggregateInputType
  }

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




  export type ServerMonitoringNotificationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ServerMonitoringNotificationWhereInput
    orderBy?: ServerMonitoringNotificationOrderByWithAggregationInput | ServerMonitoringNotificationOrderByWithAggregationInput[]
    by: ServerMonitoringNotificationScalarFieldEnum[] | ServerMonitoringNotificationScalarFieldEnum
    having?: ServerMonitoringNotificationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ServerMonitoringNotificationCountAggregateInputType | true
    _avg?: ServerMonitoringNotificationAvgAggregateInputType
    _sum?: ServerMonitoringNotificationSumAggregateInputType
    _min?: ServerMonitoringNotificationMinAggregateInputType
    _max?: ServerMonitoringNotificationMaxAggregateInputType
  }

  export type ServerMonitoringNotificationGroupByOutputType = {
    id: number
    statusChange: boolean
    cpuLimit: number
    gpuLimit: number
    memoryLimit: number
    diskLimit: number
    temperatureLimit: number
    _count: ServerMonitoringNotificationCountAggregateOutputType | null
    _avg: ServerMonitoringNotificationAvgAggregateOutputType | null
    _sum: ServerMonitoringNotificationSumAggregateOutputType | null
    _min: ServerMonitoringNotificationMinAggregateOutputType | null
    _max: ServerMonitoringNotificationMaxAggregateOutputType | null
  }

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


  export type ServerMonitoringNotificationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    cpuLimit?: boolean
    gpuLimit?: boolean
    memoryLimit?: boolean
    diskLimit?: boolean
    temperatureLimit?: boolean
  }, ExtArgs["result"]["serverMonitoringNotification"]>

  export type ServerMonitoringNotificationSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    cpuLimit?: boolean
    gpuLimit?: boolean
    memoryLimit?: boolean
    diskLimit?: boolean
    temperatureLimit?: boolean
  }, ExtArgs["result"]["serverMonitoringNotification"]>

  export type ServerMonitoringNotificationSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    cpuLimit?: boolean
    gpuLimit?: boolean
    memoryLimit?: boolean
    diskLimit?: boolean
    temperatureLimit?: boolean
  }, ExtArgs["result"]["serverMonitoringNotification"]>

  export type ServerMonitoringNotificationSelectScalar = {
    id?: boolean
    statusChange?: boolean
    cpuLimit?: boolean
    gpuLimit?: boolean
    memoryLimit?: boolean
    diskLimit?: boolean
    temperatureLimit?: boolean
  }

  export type ServerMonitoringNotificationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "statusChange" | "cpuLimit" | "gpuLimit" | "memoryLimit" | "diskLimit" | "temperatureLimit", ExtArgs["result"]["serverMonitoringNotification"]>

  export type $ServerMonitoringNotificationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ServerMonitoringNotification"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      statusChange: boolean
      cpuLimit: number
      gpuLimit: number
      memoryLimit: number
      diskLimit: number
      temperatureLimit: number
    }, ExtArgs["result"]["serverMonitoringNotification"]>
    composites: {}
  }

  type ServerMonitoringNotificationGetPayload<S extends boolean | null | undefined | ServerMonitoringNotificationDefaultArgs> = $Result.GetResult<Prisma.$ServerMonitoringNotificationPayload, S>

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

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

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

    /**
     * Find the first ServerMonitoringNotification 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 {ServerMonitoringNotificationFindFirstArgs} args - Arguments to find a ServerMonitoringNotification
     * @example
     * // Get one ServerMonitoringNotification
     * const serverMonitoringNotification = await prisma.serverMonitoringNotification.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ServerMonitoringNotificationFindFirstArgs>(args?: SelectSubset<T, ServerMonitoringNotificationFindFirstArgs<ExtArgs>>): Prisma__ServerMonitoringNotificationClient<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ServerMonitoringNotification 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 {ServerMonitoringNotificationFindFirstOrThrowArgs} args - Arguments to find a ServerMonitoringNotification
     * @example
     * // Get one ServerMonitoringNotification
     * const serverMonitoringNotification = await prisma.serverMonitoringNotification.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ServerMonitoringNotificationFindFirstOrThrowArgs>(args?: SelectSubset<T, ServerMonitoringNotificationFindFirstOrThrowArgs<ExtArgs>>): Prisma__ServerMonitoringNotificationClient<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ServerMonitoringNotifications 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 {ServerMonitoringNotificationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ServerMonitoringNotifications
     * const serverMonitoringNotifications = await prisma.serverMonitoringNotification.findMany()
     * 
     * // Get first 10 ServerMonitoringNotifications
     * const serverMonitoringNotifications = await prisma.serverMonitoringNotification.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const serverMonitoringNotificationWithIdOnly = await prisma.serverMonitoringNotification.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ServerMonitoringNotificationFindManyArgs>(args?: SelectSubset<T, ServerMonitoringNotificationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ServerMonitoringNotification.
     * @param {ServerMonitoringNotificationCreateArgs} args - Arguments to create a ServerMonitoringNotification.
     * @example
     * // Create one ServerMonitoringNotification
     * const ServerMonitoringNotification = await prisma.serverMonitoringNotification.create({
     *   data: {
     *     // ... data to create a ServerMonitoringNotification
     *   }
     * })
     * 
     */
    create<T extends ServerMonitoringNotificationCreateArgs>(args: SelectSubset<T, ServerMonitoringNotificationCreateArgs<ExtArgs>>): Prisma__ServerMonitoringNotificationClient<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many ServerMonitoringNotifications and returns the data saved in the database.
     * @param {ServerMonitoringNotificationCreateManyAndReturnArgs} args - Arguments to create many ServerMonitoringNotifications.
     * @example
     * // Create many ServerMonitoringNotifications
     * const serverMonitoringNotification = await prisma.serverMonitoringNotification.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many ServerMonitoringNotifications and only return the `id`
     * const serverMonitoringNotificationWithIdOnly = await prisma.serverMonitoringNotification.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 ServerMonitoringNotificationCreateManyAndReturnArgs>(args?: SelectSubset<T, ServerMonitoringNotificationCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a ServerMonitoringNotification.
     * @param {ServerMonitoringNotificationDeleteArgs} args - Arguments to delete one ServerMonitoringNotification.
     * @example
     * // Delete one ServerMonitoringNotification
     * const ServerMonitoringNotification = await prisma.serverMonitoringNotification.delete({
     *   where: {
     *     // ... filter to delete one ServerMonitoringNotification
     *   }
     * })
     * 
     */
    delete<T extends ServerMonitoringNotificationDeleteArgs>(args: SelectSubset<T, ServerMonitoringNotificationDeleteArgs<ExtArgs>>): Prisma__ServerMonitoringNotificationClient<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more ServerMonitoringNotifications and returns the data updated in the database.
     * @param {ServerMonitoringNotificationUpdateManyAndReturnArgs} args - Arguments to update many ServerMonitoringNotifications.
     * @example
     * // Update many ServerMonitoringNotifications
     * const serverMonitoringNotification = await prisma.serverMonitoringNotification.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more ServerMonitoringNotifications and only return the `id`
     * const serverMonitoringNotificationWithIdOnly = await prisma.serverMonitoringNotification.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 ServerMonitoringNotificationUpdateManyAndReturnArgs>(args: SelectSubset<T, ServerMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ServerMonitoringNotificationPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a ServerMonitoringNotification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerMonitoringNotificationAggregateArgs} 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 ServerMonitoringNotificationAggregateArgs>(args: Subset<T, ServerMonitoringNotificationAggregateArgs>): Prisma.PrismaPromise<GetServerMonitoringNotificationAggregateType<T>>

    /**
     * Group by ServerMonitoringNotification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ServerMonitoringNotificationGroupByArgs} 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 ServerMonitoringNotificationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ServerMonitoringNotificationGroupByArgs['orderBy'] }
        : { orderBy?: ServerMonitoringNotificationGroupByArgs['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, ServerMonitoringNotificationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetServerMonitoringNotificationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ServerMonitoringNotification model
   */
  readonly fields: ServerMonitoringNotificationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ServerMonitoringNotification.
   * 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__ServerMonitoringNotificationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * 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 ServerMonitoringNotification model
   */
  interface ServerMonitoringNotificationFieldRefs {
    readonly id: FieldRef<"ServerMonitoringNotification", 'Int'>
    readonly statusChange: FieldRef<"ServerMonitoringNotification", 'Boolean'>
    readonly cpuLimit: FieldRef<"ServerMonitoringNotification", 'Float'>
    readonly gpuLimit: FieldRef<"ServerMonitoringNotification", 'Float'>
    readonly memoryLimit: FieldRef<"ServerMonitoringNotification", 'Float'>
    readonly diskLimit: FieldRef<"ServerMonitoringNotification", 'Float'>
    readonly temperatureLimit: FieldRef<"ServerMonitoringNotification", 'Float'>
  }
    

  // Custom InputTypes
  /**
   * ServerMonitoringNotification findUnique
   */
  export type ServerMonitoringNotificationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ServerMonitoringNotification to fetch.
     */
    where: ServerMonitoringNotificationWhereUniqueInput
  }

  /**
   * ServerMonitoringNotification findUniqueOrThrow
   */
  export type ServerMonitoringNotificationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ServerMonitoringNotification to fetch.
     */
    where: ServerMonitoringNotificationWhereUniqueInput
  }

  /**
   * ServerMonitoringNotification findFirst
   */
  export type ServerMonitoringNotificationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ServerMonitoringNotification to fetch.
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitoringNotifications to fetch.
     */
    orderBy?: ServerMonitoringNotificationOrderByWithRelationInput | ServerMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ServerMonitoringNotifications.
     */
    cursor?: ServerMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitoringNotifications 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` ServerMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ServerMonitoringNotifications.
     */
    distinct?: ServerMonitoringNotificationScalarFieldEnum | ServerMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ServerMonitoringNotification findFirstOrThrow
   */
  export type ServerMonitoringNotificationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ServerMonitoringNotification to fetch.
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitoringNotifications to fetch.
     */
    orderBy?: ServerMonitoringNotificationOrderByWithRelationInput | ServerMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ServerMonitoringNotifications.
     */
    cursor?: ServerMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitoringNotifications 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` ServerMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ServerMonitoringNotifications.
     */
    distinct?: ServerMonitoringNotificationScalarFieldEnum | ServerMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ServerMonitoringNotification findMany
   */
  export type ServerMonitoringNotificationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ServerMonitoringNotifications to fetch.
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ServerMonitoringNotifications to fetch.
     */
    orderBy?: ServerMonitoringNotificationOrderByWithRelationInput | ServerMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ServerMonitoringNotifications.
     */
    cursor?: ServerMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ServerMonitoringNotifications 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` ServerMonitoringNotifications.
     */
    skip?: number
    distinct?: ServerMonitoringNotificationScalarFieldEnum | ServerMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ServerMonitoringNotification create
   */
  export type ServerMonitoringNotificationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data needed to create a ServerMonitoringNotification.
     */
    data: XOR<ServerMonitoringNotificationCreateInput, ServerMonitoringNotificationUncheckedCreateInput>
  }

  /**
   * ServerMonitoringNotification createMany
   */
  export type ServerMonitoringNotificationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ServerMonitoringNotifications.
     */
    data: ServerMonitoringNotificationCreateManyInput | ServerMonitoringNotificationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ServerMonitoringNotification createManyAndReturn
   */
  export type ServerMonitoringNotificationCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data used to create many ServerMonitoringNotifications.
     */
    data: ServerMonitoringNotificationCreateManyInput | ServerMonitoringNotificationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ServerMonitoringNotification update
   */
  export type ServerMonitoringNotificationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data needed to update a ServerMonitoringNotification.
     */
    data: XOR<ServerMonitoringNotificationUpdateInput, ServerMonitoringNotificationUncheckedUpdateInput>
    /**
     * Choose, which ServerMonitoringNotification to update.
     */
    where: ServerMonitoringNotificationWhereUniqueInput
  }

  /**
   * ServerMonitoringNotification updateMany
   */
  export type ServerMonitoringNotificationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ServerMonitoringNotifications.
     */
    data: XOR<ServerMonitoringNotificationUpdateManyMutationInput, ServerMonitoringNotificationUncheckedUpdateManyInput>
    /**
     * Filter which ServerMonitoringNotifications to update
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * Limit how many ServerMonitoringNotifications to update.
     */
    limit?: number
  }

  /**
   * ServerMonitoringNotification updateManyAndReturn
   */
  export type ServerMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data used to update ServerMonitoringNotifications.
     */
    data: XOR<ServerMonitoringNotificationUpdateManyMutationInput, ServerMonitoringNotificationUncheckedUpdateManyInput>
    /**
     * Filter which ServerMonitoringNotifications to update
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * Limit how many ServerMonitoringNotifications to update.
     */
    limit?: number
  }

  /**
   * ServerMonitoringNotification upsert
   */
  export type ServerMonitoringNotificationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The filter to search for the ServerMonitoringNotification to update in case it exists.
     */
    where: ServerMonitoringNotificationWhereUniqueInput
    /**
     * In case the ServerMonitoringNotification found by the `where` argument doesn't exist, create a new ServerMonitoringNotification with this data.
     */
    create: XOR<ServerMonitoringNotificationCreateInput, ServerMonitoringNotificationUncheckedCreateInput>
    /**
     * In case the ServerMonitoringNotification was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ServerMonitoringNotificationUpdateInput, ServerMonitoringNotificationUncheckedUpdateInput>
  }

  /**
   * ServerMonitoringNotification delete
   */
  export type ServerMonitoringNotificationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter which ServerMonitoringNotification to delete.
     */
    where: ServerMonitoringNotificationWhereUniqueInput
  }

  /**
   * ServerMonitoringNotification deleteMany
   */
  export type ServerMonitoringNotificationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ServerMonitoringNotifications to delete
     */
    where?: ServerMonitoringNotificationWhereInput
    /**
     * Limit how many ServerMonitoringNotifications to delete.
     */
    limit?: number
  }

  /**
   * ServerMonitoringNotification without action
   */
  export type ServerMonitoringNotificationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ServerMonitoringNotification
     */
    select?: ServerMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ServerMonitoringNotification
     */
    omit?: ServerMonitoringNotificationOmit<ExtArgs> | null
  }


  /**
   * Model ApplicationMonitoringNotification
   */

  export type AggregateApplicationMonitoringNotification = {
    _count: ApplicationMonitoringNotificationCountAggregateOutputType | null
    _avg: ApplicationMonitoringNotificationAvgAggregateOutputType | null
    _sum: ApplicationMonitoringNotificationSumAggregateOutputType | null
    _min: ApplicationMonitoringNotificationMinAggregateOutputType | null
    _max: ApplicationMonitoringNotificationMaxAggregateOutputType | null
  }

  export type ApplicationMonitoringNotificationAvgAggregateOutputType = {
    id: number | null
    latencyLimit: number | null
  }

  export type ApplicationMonitoringNotificationSumAggregateOutputType = {
    id: number | null
    latencyLimit: number | null
  }

  export type ApplicationMonitoringNotificationMinAggregateOutputType = {
    id: number | null
    statusChange: boolean | null
    latencyLimit: number | null
  }

  export type ApplicationMonitoringNotificationMaxAggregateOutputType = {
    id: number | null
    statusChange: boolean | null
    latencyLimit: number | null
  }

  export type ApplicationMonitoringNotificationCountAggregateOutputType = {
    id: number
    statusChange: number
    latencyLimit: number
    _all: number
  }


  export type ApplicationMonitoringNotificationAvgAggregateInputType = {
    id?: true
    latencyLimit?: true
  }

  export type ApplicationMonitoringNotificationSumAggregateInputType = {
    id?: true
    latencyLimit?: true
  }

  export type ApplicationMonitoringNotificationMinAggregateInputType = {
    id?: true
    statusChange?: true
    latencyLimit?: true
  }

  export type ApplicationMonitoringNotificationMaxAggregateInputType = {
    id?: true
    statusChange?: true
    latencyLimit?: true
  }

  export type ApplicationMonitoringNotificationCountAggregateInputType = {
    id?: true
    statusChange?: true
    latencyLimit?: true
    _all?: true
  }

  export type ApplicationMonitoringNotificationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ApplicationMonitoringNotification to aggregate.
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitoringNotifications to fetch.
     */
    orderBy?: ApplicationMonitoringNotificationOrderByWithRelationInput | ApplicationMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ApplicationMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitoringNotifications 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` ApplicationMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ApplicationMonitoringNotifications
    **/
    _count?: true | ApplicationMonitoringNotificationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ApplicationMonitoringNotificationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ApplicationMonitoringNotificationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ApplicationMonitoringNotificationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ApplicationMonitoringNotificationMaxAggregateInputType
  }

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




  export type ApplicationMonitoringNotificationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ApplicationMonitoringNotificationWhereInput
    orderBy?: ApplicationMonitoringNotificationOrderByWithAggregationInput | ApplicationMonitoringNotificationOrderByWithAggregationInput[]
    by: ApplicationMonitoringNotificationScalarFieldEnum[] | ApplicationMonitoringNotificationScalarFieldEnum
    having?: ApplicationMonitoringNotificationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ApplicationMonitoringNotificationCountAggregateInputType | true
    _avg?: ApplicationMonitoringNotificationAvgAggregateInputType
    _sum?: ApplicationMonitoringNotificationSumAggregateInputType
    _min?: ApplicationMonitoringNotificationMinAggregateInputType
    _max?: ApplicationMonitoringNotificationMaxAggregateInputType
  }

  export type ApplicationMonitoringNotificationGroupByOutputType = {
    id: number
    statusChange: boolean
    latencyLimit: number
    _count: ApplicationMonitoringNotificationCountAggregateOutputType | null
    _avg: ApplicationMonitoringNotificationAvgAggregateOutputType | null
    _sum: ApplicationMonitoringNotificationSumAggregateOutputType | null
    _min: ApplicationMonitoringNotificationMinAggregateOutputType | null
    _max: ApplicationMonitoringNotificationMaxAggregateOutputType | null
  }

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


  export type ApplicationMonitoringNotificationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    latencyLimit?: boolean
  }, ExtArgs["result"]["applicationMonitoringNotification"]>

  export type ApplicationMonitoringNotificationSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    latencyLimit?: boolean
  }, ExtArgs["result"]["applicationMonitoringNotification"]>

  export type ApplicationMonitoringNotificationSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    statusChange?: boolean
    latencyLimit?: boolean
  }, ExtArgs["result"]["applicationMonitoringNotification"]>

  export type ApplicationMonitoringNotificationSelectScalar = {
    id?: boolean
    statusChange?: boolean
    latencyLimit?: boolean
  }

  export type ApplicationMonitoringNotificationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "statusChange" | "latencyLimit", ExtArgs["result"]["applicationMonitoringNotification"]>

  export type $ApplicationMonitoringNotificationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ApplicationMonitoringNotification"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      statusChange: boolean
      latencyLimit: number
    }, ExtArgs["result"]["applicationMonitoringNotification"]>
    composites: {}
  }

  type ApplicationMonitoringNotificationGetPayload<S extends boolean | null | undefined | ApplicationMonitoringNotificationDefaultArgs> = $Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload, S>

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

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

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

    /**
     * Find the first ApplicationMonitoringNotification 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 {ApplicationMonitoringNotificationFindFirstArgs} args - Arguments to find a ApplicationMonitoringNotification
     * @example
     * // Get one ApplicationMonitoringNotification
     * const applicationMonitoringNotification = await prisma.applicationMonitoringNotification.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ApplicationMonitoringNotificationFindFirstArgs>(args?: SelectSubset<T, ApplicationMonitoringNotificationFindFirstArgs<ExtArgs>>): Prisma__ApplicationMonitoringNotificationClient<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ApplicationMonitoringNotification 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 {ApplicationMonitoringNotificationFindFirstOrThrowArgs} args - Arguments to find a ApplicationMonitoringNotification
     * @example
     * // Get one ApplicationMonitoringNotification
     * const applicationMonitoringNotification = await prisma.applicationMonitoringNotification.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ApplicationMonitoringNotificationFindFirstOrThrowArgs>(args?: SelectSubset<T, ApplicationMonitoringNotificationFindFirstOrThrowArgs<ExtArgs>>): Prisma__ApplicationMonitoringNotificationClient<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ApplicationMonitoringNotifications 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 {ApplicationMonitoringNotificationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ApplicationMonitoringNotifications
     * const applicationMonitoringNotifications = await prisma.applicationMonitoringNotification.findMany()
     * 
     * // Get first 10 ApplicationMonitoringNotifications
     * const applicationMonitoringNotifications = await prisma.applicationMonitoringNotification.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const applicationMonitoringNotificationWithIdOnly = await prisma.applicationMonitoringNotification.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ApplicationMonitoringNotificationFindManyArgs>(args?: SelectSubset<T, ApplicationMonitoringNotificationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ApplicationMonitoringNotification.
     * @param {ApplicationMonitoringNotificationCreateArgs} args - Arguments to create a ApplicationMonitoringNotification.
     * @example
     * // Create one ApplicationMonitoringNotification
     * const ApplicationMonitoringNotification = await prisma.applicationMonitoringNotification.create({
     *   data: {
     *     // ... data to create a ApplicationMonitoringNotification
     *   }
     * })
     * 
     */
    create<T extends ApplicationMonitoringNotificationCreateArgs>(args: SelectSubset<T, ApplicationMonitoringNotificationCreateArgs<ExtArgs>>): Prisma__ApplicationMonitoringNotificationClient<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many ApplicationMonitoringNotifications and returns the data saved in the database.
     * @param {ApplicationMonitoringNotificationCreateManyAndReturnArgs} args - Arguments to create many ApplicationMonitoringNotifications.
     * @example
     * // Create many ApplicationMonitoringNotifications
     * const applicationMonitoringNotification = await prisma.applicationMonitoringNotification.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many ApplicationMonitoringNotifications and only return the `id`
     * const applicationMonitoringNotificationWithIdOnly = await prisma.applicationMonitoringNotification.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 ApplicationMonitoringNotificationCreateManyAndReturnArgs>(args?: SelectSubset<T, ApplicationMonitoringNotificationCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a ApplicationMonitoringNotification.
     * @param {ApplicationMonitoringNotificationDeleteArgs} args - Arguments to delete one ApplicationMonitoringNotification.
     * @example
     * // Delete one ApplicationMonitoringNotification
     * const ApplicationMonitoringNotification = await prisma.applicationMonitoringNotification.delete({
     *   where: {
     *     // ... filter to delete one ApplicationMonitoringNotification
     *   }
     * })
     * 
     */
    delete<T extends ApplicationMonitoringNotificationDeleteArgs>(args: SelectSubset<T, ApplicationMonitoringNotificationDeleteArgs<ExtArgs>>): Prisma__ApplicationMonitoringNotificationClient<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more ApplicationMonitoringNotifications and returns the data updated in the database.
     * @param {ApplicationMonitoringNotificationUpdateManyAndReturnArgs} args - Arguments to update many ApplicationMonitoringNotifications.
     * @example
     * // Update many ApplicationMonitoringNotifications
     * const applicationMonitoringNotification = await prisma.applicationMonitoringNotification.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more ApplicationMonitoringNotifications and only return the `id`
     * const applicationMonitoringNotificationWithIdOnly = await prisma.applicationMonitoringNotification.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 ApplicationMonitoringNotificationUpdateManyAndReturnArgs>(args: SelectSubset<T, ApplicationMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ApplicationMonitoringNotificationPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a ApplicationMonitoringNotification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationMonitoringNotificationAggregateArgs} 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 ApplicationMonitoringNotificationAggregateArgs>(args: Subset<T, ApplicationMonitoringNotificationAggregateArgs>): Prisma.PrismaPromise<GetApplicationMonitoringNotificationAggregateType<T>>

    /**
     * Group by ApplicationMonitoringNotification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ApplicationMonitoringNotificationGroupByArgs} 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 ApplicationMonitoringNotificationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ApplicationMonitoringNotificationGroupByArgs['orderBy'] }
        : { orderBy?: ApplicationMonitoringNotificationGroupByArgs['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, ApplicationMonitoringNotificationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetApplicationMonitoringNotificationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ApplicationMonitoringNotification model
   */
  readonly fields: ApplicationMonitoringNotificationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ApplicationMonitoringNotification.
   * 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__ApplicationMonitoringNotificationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * 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 ApplicationMonitoringNotification model
   */
  interface ApplicationMonitoringNotificationFieldRefs {
    readonly id: FieldRef<"ApplicationMonitoringNotification", 'Int'>
    readonly statusChange: FieldRef<"ApplicationMonitoringNotification", 'Boolean'>
    readonly latencyLimit: FieldRef<"ApplicationMonitoringNotification", 'Float'>
  }
    

  // Custom InputTypes
  /**
   * ApplicationMonitoringNotification findUnique
   */
  export type ApplicationMonitoringNotificationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoringNotification to fetch.
     */
    where: ApplicationMonitoringNotificationWhereUniqueInput
  }

  /**
   * ApplicationMonitoringNotification findUniqueOrThrow
   */
  export type ApplicationMonitoringNotificationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoringNotification to fetch.
     */
    where: ApplicationMonitoringNotificationWhereUniqueInput
  }

  /**
   * ApplicationMonitoringNotification findFirst
   */
  export type ApplicationMonitoringNotificationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoringNotification to fetch.
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitoringNotifications to fetch.
     */
    orderBy?: ApplicationMonitoringNotificationOrderByWithRelationInput | ApplicationMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ApplicationMonitoringNotifications.
     */
    cursor?: ApplicationMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitoringNotifications 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` ApplicationMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ApplicationMonitoringNotifications.
     */
    distinct?: ApplicationMonitoringNotificationScalarFieldEnum | ApplicationMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoringNotification findFirstOrThrow
   */
  export type ApplicationMonitoringNotificationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoringNotification to fetch.
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitoringNotifications to fetch.
     */
    orderBy?: ApplicationMonitoringNotificationOrderByWithRelationInput | ApplicationMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ApplicationMonitoringNotifications.
     */
    cursor?: ApplicationMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitoringNotifications 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` ApplicationMonitoringNotifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ApplicationMonitoringNotifications.
     */
    distinct?: ApplicationMonitoringNotificationScalarFieldEnum | ApplicationMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoringNotification findMany
   */
  export type ApplicationMonitoringNotificationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter, which ApplicationMonitoringNotifications to fetch.
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ApplicationMonitoringNotifications to fetch.
     */
    orderBy?: ApplicationMonitoringNotificationOrderByWithRelationInput | ApplicationMonitoringNotificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ApplicationMonitoringNotifications.
     */
    cursor?: ApplicationMonitoringNotificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ApplicationMonitoringNotifications 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` ApplicationMonitoringNotifications.
     */
    skip?: number
    distinct?: ApplicationMonitoringNotificationScalarFieldEnum | ApplicationMonitoringNotificationScalarFieldEnum[]
  }

  /**
   * ApplicationMonitoringNotification create
   */
  export type ApplicationMonitoringNotificationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data needed to create a ApplicationMonitoringNotification.
     */
    data: XOR<ApplicationMonitoringNotificationCreateInput, ApplicationMonitoringNotificationUncheckedCreateInput>
  }

  /**
   * ApplicationMonitoringNotification createMany
   */
  export type ApplicationMonitoringNotificationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ApplicationMonitoringNotifications.
     */
    data: ApplicationMonitoringNotificationCreateManyInput | ApplicationMonitoringNotificationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ApplicationMonitoringNotification createManyAndReturn
   */
  export type ApplicationMonitoringNotificationCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data used to create many ApplicationMonitoringNotifications.
     */
    data: ApplicationMonitoringNotificationCreateManyInput | ApplicationMonitoringNotificationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ApplicationMonitoringNotification update
   */
  export type ApplicationMonitoringNotificationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data needed to update a ApplicationMonitoringNotification.
     */
    data: XOR<ApplicationMonitoringNotificationUpdateInput, ApplicationMonitoringNotificationUncheckedUpdateInput>
    /**
     * Choose, which ApplicationMonitoringNotification to update.
     */
    where: ApplicationMonitoringNotificationWhereUniqueInput
  }

  /**
   * ApplicationMonitoringNotification updateMany
   */
  export type ApplicationMonitoringNotificationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ApplicationMonitoringNotifications.
     */
    data: XOR<ApplicationMonitoringNotificationUpdateManyMutationInput, ApplicationMonitoringNotificationUncheckedUpdateManyInput>
    /**
     * Filter which ApplicationMonitoringNotifications to update
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * Limit how many ApplicationMonitoringNotifications to update.
     */
    limit?: number
  }

  /**
   * ApplicationMonitoringNotification updateManyAndReturn
   */
  export type ApplicationMonitoringNotificationUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The data used to update ApplicationMonitoringNotifications.
     */
    data: XOR<ApplicationMonitoringNotificationUpdateManyMutationInput, ApplicationMonitoringNotificationUncheckedUpdateManyInput>
    /**
     * Filter which ApplicationMonitoringNotifications to update
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * Limit how many ApplicationMonitoringNotifications to update.
     */
    limit?: number
  }

  /**
   * ApplicationMonitoringNotification upsert
   */
  export type ApplicationMonitoringNotificationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * The filter to search for the ApplicationMonitoringNotification to update in case it exists.
     */
    where: ApplicationMonitoringNotificationWhereUniqueInput
    /**
     * In case the ApplicationMonitoringNotification found by the `where` argument doesn't exist, create a new ApplicationMonitoringNotification with this data.
     */
    create: XOR<ApplicationMonitoringNotificationCreateInput, ApplicationMonitoringNotificationUncheckedCreateInput>
    /**
     * In case the ApplicationMonitoringNotification was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ApplicationMonitoringNotificationUpdateInput, ApplicationMonitoringNotificationUncheckedUpdateInput>
  }

  /**
   * ApplicationMonitoringNotification delete
   */
  export type ApplicationMonitoringNotificationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
    /**
     * Filter which ApplicationMonitoringNotification to delete.
     */
    where: ApplicationMonitoringNotificationWhereUniqueInput
  }

  /**
   * ApplicationMonitoringNotification deleteMany
   */
  export type ApplicationMonitoringNotificationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ApplicationMonitoringNotifications to delete
     */
    where?: ApplicationMonitoringNotificationWhereInput
    /**
     * Limit how many ApplicationMonitoringNotifications to delete.
     */
    limit?: number
  }

  /**
   * ApplicationMonitoringNotification without action
   */
  export type ApplicationMonitoringNotificationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ApplicationMonitoringNotification
     */
    select?: ApplicationMonitoringNotificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ApplicationMonitoringNotification
     */
    omit?: ApplicationMonitoringNotificationOmit<ExtArgs> | null
  }


  /**
   * Model NotificationProvider
   */

  export type AggregateNotificationProvider = {
    _count: NotificationProviderCountAggregateOutputType | null
    _avg: NotificationProviderAvgAggregateOutputType | null
    _sum: NotificationProviderSumAggregateOutputType | null
    _min: NotificationProviderMinAggregateOutputType | null
    _max: NotificationProviderMaxAggregateOutputType | null
  }

  export type NotificationProviderAvgAggregateOutputType = {
    id: number | null
  }

  export type NotificationProviderSumAggregateOutputType = {
    id: number | null
  }

  export type NotificationProviderMinAggregateOutputType = {
    id: number | null
    name: string | null
    type: $Enums.NotificationType | null
  }

  export type NotificationProviderMaxAggregateOutputType = {
    id: number | null
    name: string | null
    type: $Enums.NotificationType | null
  }

  export type NotificationProviderCountAggregateOutputType = {
    id: number
    name: number
    type: number
    config: number
    _all: number
  }


  export type NotificationProviderAvgAggregateInputType = {
    id?: true
  }

  export type NotificationProviderSumAggregateInputType = {
    id?: true
  }

  export type NotificationProviderMinAggregateInputType = {
    id?: true
    name?: true
    type?: true
  }

  export type NotificationProviderMaxAggregateInputType = {
    id?: true
    name?: true
    type?: true
  }

  export type NotificationProviderCountAggregateInputType = {
    id?: true
    name?: true
    type?: true
    config?: true
    _all?: true
  }

  export type NotificationProviderAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which NotificationProvider to aggregate.
     */
    where?: NotificationProviderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationProviders to fetch.
     */
    orderBy?: NotificationProviderOrderByWithRelationInput | NotificationProviderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: NotificationProviderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationProviders 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` NotificationProviders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned NotificationProviders
    **/
    _count?: true | NotificationProviderCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: NotificationProviderAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: NotificationProviderSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: NotificationProviderMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: NotificationProviderMaxAggregateInputType
  }

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




  export type NotificationProviderGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: NotificationProviderWhereInput
    orderBy?: NotificationProviderOrderByWithAggregationInput | NotificationProviderOrderByWithAggregationInput[]
    by: NotificationProviderScalarFieldEnum[] | NotificationProviderScalarFieldEnum
    having?: NotificationProviderScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: NotificationProviderCountAggregateInputType | true
    _avg?: NotificationProviderAvgAggregateInputType
    _sum?: NotificationProviderSumAggregateInputType
    _min?: NotificationProviderMinAggregateInputType
    _max?: NotificationProviderMaxAggregateInputType
  }

  export type NotificationProviderGroupByOutputType = {
    id: number
    name: string
    type: $Enums.NotificationType
    config: JsonValue
    _count: NotificationProviderCountAggregateOutputType | null
    _avg: NotificationProviderAvgAggregateOutputType | null
    _sum: NotificationProviderSumAggregateOutputType | null
    _min: NotificationProviderMinAggregateOutputType | null
    _max: NotificationProviderMaxAggregateOutputType | null
  }

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


  export type NotificationProviderSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    type?: boolean
    config?: boolean
    tests?: boolean | NotificationProvider$testsArgs<ExtArgs>
    _count?: boolean | NotificationProviderCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["notificationProvider"]>

  export type NotificationProviderSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    type?: boolean
    config?: boolean
  }, ExtArgs["result"]["notificationProvider"]>

  export type NotificationProviderSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    type?: boolean
    config?: boolean
  }, ExtArgs["result"]["notificationProvider"]>

  export type NotificationProviderSelectScalar = {
    id?: boolean
    name?: boolean
    type?: boolean
    config?: boolean
  }

  export type NotificationProviderOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "type" | "config", ExtArgs["result"]["notificationProvider"]>
  export type NotificationProviderInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    tests?: boolean | NotificationProvider$testsArgs<ExtArgs>
    _count?: boolean | NotificationProviderCountOutputTypeDefaultArgs<ExtArgs>
  }
  export type NotificationProviderIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}
  export type NotificationProviderIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {}

  export type $NotificationProviderPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "NotificationProvider"
    objects: {
      tests: Prisma.$NotificationTestPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      type: $Enums.NotificationType
      config: Prisma.JsonValue
    }, ExtArgs["result"]["notificationProvider"]>
    composites: {}
  }

  type NotificationProviderGetPayload<S extends boolean | null | undefined | NotificationProviderDefaultArgs> = $Result.GetResult<Prisma.$NotificationProviderPayload, S>

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

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

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

    /**
     * Find the first NotificationProvider 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 {NotificationProviderFindFirstArgs} args - Arguments to find a NotificationProvider
     * @example
     * // Get one NotificationProvider
     * const notificationProvider = await prisma.notificationProvider.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends NotificationProviderFindFirstArgs>(args?: SelectSubset<T, NotificationProviderFindFirstArgs<ExtArgs>>): Prisma__NotificationProviderClient<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first NotificationProvider 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 {NotificationProviderFindFirstOrThrowArgs} args - Arguments to find a NotificationProvider
     * @example
     * // Get one NotificationProvider
     * const notificationProvider = await prisma.notificationProvider.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends NotificationProviderFindFirstOrThrowArgs>(args?: SelectSubset<T, NotificationProviderFindFirstOrThrowArgs<ExtArgs>>): Prisma__NotificationProviderClient<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more NotificationProviders 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 {NotificationProviderFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all NotificationProviders
     * const notificationProviders = await prisma.notificationProvider.findMany()
     * 
     * // Get first 10 NotificationProviders
     * const notificationProviders = await prisma.notificationProvider.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const notificationProviderWithIdOnly = await prisma.notificationProvider.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends NotificationProviderFindManyArgs>(args?: SelectSubset<T, NotificationProviderFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a NotificationProvider.
     * @param {NotificationProviderCreateArgs} args - Arguments to create a NotificationProvider.
     * @example
     * // Create one NotificationProvider
     * const NotificationProvider = await prisma.notificationProvider.create({
     *   data: {
     *     // ... data to create a NotificationProvider
     *   }
     * })
     * 
     */
    create<T extends NotificationProviderCreateArgs>(args: SelectSubset<T, NotificationProviderCreateArgs<ExtArgs>>): Prisma__NotificationProviderClient<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many NotificationProviders and returns the data saved in the database.
     * @param {NotificationProviderCreateManyAndReturnArgs} args - Arguments to create many NotificationProviders.
     * @example
     * // Create many NotificationProviders
     * const notificationProvider = await prisma.notificationProvider.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many NotificationProviders and only return the `id`
     * const notificationProviderWithIdOnly = await prisma.notificationProvider.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 NotificationProviderCreateManyAndReturnArgs>(args?: SelectSubset<T, NotificationProviderCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a NotificationProvider.
     * @param {NotificationProviderDeleteArgs} args - Arguments to delete one NotificationProvider.
     * @example
     * // Delete one NotificationProvider
     * const NotificationProvider = await prisma.notificationProvider.delete({
     *   where: {
     *     // ... filter to delete one NotificationProvider
     *   }
     * })
     * 
     */
    delete<T extends NotificationProviderDeleteArgs>(args: SelectSubset<T, NotificationProviderDeleteArgs<ExtArgs>>): Prisma__NotificationProviderClient<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more NotificationProviders and returns the data updated in the database.
     * @param {NotificationProviderUpdateManyAndReturnArgs} args - Arguments to update many NotificationProviders.
     * @example
     * // Update many NotificationProviders
     * const notificationProvider = await prisma.notificationProvider.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more NotificationProviders and only return the `id`
     * const notificationProviderWithIdOnly = await prisma.notificationProvider.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 NotificationProviderUpdateManyAndReturnArgs>(args: SelectSubset<T, NotificationProviderUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationProviderPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a NotificationProvider.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NotificationProviderAggregateArgs} 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 NotificationProviderAggregateArgs>(args: Subset<T, NotificationProviderAggregateArgs>): Prisma.PrismaPromise<GetNotificationProviderAggregateType<T>>

    /**
     * Group by NotificationProvider.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NotificationProviderGroupByArgs} 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 NotificationProviderGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: NotificationProviderGroupByArgs['orderBy'] }
        : { orderBy?: NotificationProviderGroupByArgs['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, NotificationProviderGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetNotificationProviderGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the NotificationProvider model
   */
  readonly fields: NotificationProviderFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for NotificationProvider.
   * 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__NotificationProviderClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    tests<T extends NotificationProvider$testsArgs<ExtArgs> = {}>(args?: Subset<T, NotificationProvider$testsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationTestPayload<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 NotificationProvider model
   */
  interface NotificationProviderFieldRefs {
    readonly id: FieldRef<"NotificationProvider", 'Int'>
    readonly name: FieldRef<"NotificationProvider", 'String'>
    readonly type: FieldRef<"NotificationProvider", 'NotificationType'>
    readonly config: FieldRef<"NotificationProvider", 'Json'>
  }
    

  // Custom InputTypes
  /**
   * NotificationProvider findUnique
   */
  export type NotificationProviderFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter, which NotificationProvider to fetch.
     */
    where: NotificationProviderWhereUniqueInput
  }

  /**
   * NotificationProvider findUniqueOrThrow
   */
  export type NotificationProviderFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter, which NotificationProvider to fetch.
     */
    where: NotificationProviderWhereUniqueInput
  }

  /**
   * NotificationProvider findFirst
   */
  export type NotificationProviderFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter, which NotificationProvider to fetch.
     */
    where?: NotificationProviderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationProviders to fetch.
     */
    orderBy?: NotificationProviderOrderByWithRelationInput | NotificationProviderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for NotificationProviders.
     */
    cursor?: NotificationProviderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationProviders 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` NotificationProviders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of NotificationProviders.
     */
    distinct?: NotificationProviderScalarFieldEnum | NotificationProviderScalarFieldEnum[]
  }

  /**
   * NotificationProvider findFirstOrThrow
   */
  export type NotificationProviderFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter, which NotificationProvider to fetch.
     */
    where?: NotificationProviderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationProviders to fetch.
     */
    orderBy?: NotificationProviderOrderByWithRelationInput | NotificationProviderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for NotificationProviders.
     */
    cursor?: NotificationProviderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationProviders 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` NotificationProviders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of NotificationProviders.
     */
    distinct?: NotificationProviderScalarFieldEnum | NotificationProviderScalarFieldEnum[]
  }

  /**
   * NotificationProvider findMany
   */
  export type NotificationProviderFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter, which NotificationProviders to fetch.
     */
    where?: NotificationProviderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationProviders to fetch.
     */
    orderBy?: NotificationProviderOrderByWithRelationInput | NotificationProviderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing NotificationProviders.
     */
    cursor?: NotificationProviderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationProviders 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` NotificationProviders.
     */
    skip?: number
    distinct?: NotificationProviderScalarFieldEnum | NotificationProviderScalarFieldEnum[]
  }

  /**
   * NotificationProvider create
   */
  export type NotificationProviderCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * The data needed to create a NotificationProvider.
     */
    data: XOR<NotificationProviderCreateInput, NotificationProviderUncheckedCreateInput>
  }

  /**
   * NotificationProvider createMany
   */
  export type NotificationProviderCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many NotificationProviders.
     */
    data: NotificationProviderCreateManyInput | NotificationProviderCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * NotificationProvider createManyAndReturn
   */
  export type NotificationProviderCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * The data used to create many NotificationProviders.
     */
    data: NotificationProviderCreateManyInput | NotificationProviderCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * NotificationProvider update
   */
  export type NotificationProviderUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * The data needed to update a NotificationProvider.
     */
    data: XOR<NotificationProviderUpdateInput, NotificationProviderUncheckedUpdateInput>
    /**
     * Choose, which NotificationProvider to update.
     */
    where: NotificationProviderWhereUniqueInput
  }

  /**
   * NotificationProvider updateMany
   */
  export type NotificationProviderUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update NotificationProviders.
     */
    data: XOR<NotificationProviderUpdateManyMutationInput, NotificationProviderUncheckedUpdateManyInput>
    /**
     * Filter which NotificationProviders to update
     */
    where?: NotificationProviderWhereInput
    /**
     * Limit how many NotificationProviders to update.
     */
    limit?: number
  }

  /**
   * NotificationProvider updateManyAndReturn
   */
  export type NotificationProviderUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * The data used to update NotificationProviders.
     */
    data: XOR<NotificationProviderUpdateManyMutationInput, NotificationProviderUncheckedUpdateManyInput>
    /**
     * Filter which NotificationProviders to update
     */
    where?: NotificationProviderWhereInput
    /**
     * Limit how many NotificationProviders to update.
     */
    limit?: number
  }

  /**
   * NotificationProvider upsert
   */
  export type NotificationProviderUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * The filter to search for the NotificationProvider to update in case it exists.
     */
    where: NotificationProviderWhereUniqueInput
    /**
     * In case the NotificationProvider found by the `where` argument doesn't exist, create a new NotificationProvider with this data.
     */
    create: XOR<NotificationProviderCreateInput, NotificationProviderUncheckedCreateInput>
    /**
     * In case the NotificationProvider was found with the provided `where` argument, update it with this data.
     */
    update: XOR<NotificationProviderUpdateInput, NotificationProviderUncheckedUpdateInput>
  }

  /**
   * NotificationProvider delete
   */
  export type NotificationProviderDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationProvider
     */
    select?: NotificationProviderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationProvider
     */
    omit?: NotificationProviderOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationProviderInclude<ExtArgs> | null
    /**
     * Filter which NotificationProvider to delete.
     */
    where: NotificationProviderWhereUniqueInput
  }

  /**
   * NotificationProvider deleteMany
   */
  export type NotificationProviderDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which NotificationProviders to delete
     */
    where?: NotificationProviderWhereInput
    /**
     * Limit how many NotificationProviders to delete.
     */
    limit?: number
  }

  /**
   * NotificationProvider.tests
   */
  export type NotificationProvider$testsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    where?: NotificationTestWhereInput
    orderBy?: NotificationTestOrderByWithRelationInput | NotificationTestOrderByWithRelationInput[]
    cursor?: NotificationTestWhereUniqueInput
    take?: number
    skip?: number
    distinct?: NotificationTestScalarFieldEnum | NotificationTestScalarFieldEnum[]
  }

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


  /**
   * Model NotificationTest
   */

  export type AggregateNotificationTest = {
    _count: NotificationTestCountAggregateOutputType | null
    _avg: NotificationTestAvgAggregateOutputType | null
    _sum: NotificationTestSumAggregateOutputType | null
    _min: NotificationTestMinAggregateOutputType | null
    _max: NotificationTestMaxAggregateOutputType | null
  }

  export type NotificationTestAvgAggregateOutputType = {
    id: number | null
    notificationProviderId: number | null
  }

  export type NotificationTestSumAggregateOutputType = {
    id: number | null
    notificationProviderId: number | null
  }

  export type NotificationTestMinAggregateOutputType = {
    id: number | null
    notificationProviderId: number | null
    success: boolean | null
  }

  export type NotificationTestMaxAggregateOutputType = {
    id: number | null
    notificationProviderId: number | null
    success: boolean | null
  }

  export type NotificationTestCountAggregateOutputType = {
    id: number
    notificationProviderId: number
    success: number
    _all: number
  }


  export type NotificationTestAvgAggregateInputType = {
    id?: true
    notificationProviderId?: true
  }

  export type NotificationTestSumAggregateInputType = {
    id?: true
    notificationProviderId?: true
  }

  export type NotificationTestMinAggregateInputType = {
    id?: true
    notificationProviderId?: true
    success?: true
  }

  export type NotificationTestMaxAggregateInputType = {
    id?: true
    notificationProviderId?: true
    success?: true
  }

  export type NotificationTestCountAggregateInputType = {
    id?: true
    notificationProviderId?: true
    success?: true
    _all?: true
  }

  export type NotificationTestAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which NotificationTest to aggregate.
     */
    where?: NotificationTestWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationTests to fetch.
     */
    orderBy?: NotificationTestOrderByWithRelationInput | NotificationTestOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: NotificationTestWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationTests 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` NotificationTests.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned NotificationTests
    **/
    _count?: true | NotificationTestCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: NotificationTestAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: NotificationTestSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: NotificationTestMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: NotificationTestMaxAggregateInputType
  }

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




  export type NotificationTestGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: NotificationTestWhereInput
    orderBy?: NotificationTestOrderByWithAggregationInput | NotificationTestOrderByWithAggregationInput[]
    by: NotificationTestScalarFieldEnum[] | NotificationTestScalarFieldEnum
    having?: NotificationTestScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: NotificationTestCountAggregateInputType | true
    _avg?: NotificationTestAvgAggregateInputType
    _sum?: NotificationTestSumAggregateInputType
    _min?: NotificationTestMinAggregateInputType
    _max?: NotificationTestMaxAggregateInputType
  }

  export type NotificationTestGroupByOutputType = {
    id: number
    notificationProviderId: number
    success: boolean
    _count: NotificationTestCountAggregateOutputType | null
    _avg: NotificationTestAvgAggregateOutputType | null
    _sum: NotificationTestSumAggregateOutputType | null
    _min: NotificationTestMinAggregateOutputType | null
    _max: NotificationTestMaxAggregateOutputType | null
  }

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


  export type NotificationTestSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    notificationProviderId?: boolean
    success?: boolean
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["notificationTest"]>

  export type NotificationTestSelectCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    notificationProviderId?: boolean
    success?: boolean
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["notificationTest"]>

  export type NotificationTestSelectUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    notificationProviderId?: boolean
    success?: boolean
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["notificationTest"]>

  export type NotificationTestSelectScalar = {
    id?: boolean
    notificationProviderId?: boolean
    success?: boolean
  }

  export type NotificationTestOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "notificationProviderId" | "success", ExtArgs["result"]["notificationTest"]>
  export type NotificationTestInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }
  export type NotificationTestIncludeCreateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }
  export type NotificationTestIncludeUpdateManyAndReturn<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    notificationProvider?: boolean | NotificationProviderDefaultArgs<ExtArgs>
  }

  export type $NotificationTestPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "NotificationTest"
    objects: {
      notificationProvider: Prisma.$NotificationProviderPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      notificationProviderId: number
      success: boolean
    }, ExtArgs["result"]["notificationTest"]>
    composites: {}
  }

  type NotificationTestGetPayload<S extends boolean | null | undefined | NotificationTestDefaultArgs> = $Result.GetResult<Prisma.$NotificationTestPayload, S>

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

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

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

    /**
     * Find the first NotificationTest 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 {NotificationTestFindFirstArgs} args - Arguments to find a NotificationTest
     * @example
     * // Get one NotificationTest
     * const notificationTest = await prisma.notificationTest.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends NotificationTestFindFirstArgs>(args?: SelectSubset<T, NotificationTestFindFirstArgs<ExtArgs>>): Prisma__NotificationTestClient<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first NotificationTest 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 {NotificationTestFindFirstOrThrowArgs} args - Arguments to find a NotificationTest
     * @example
     * // Get one NotificationTest
     * const notificationTest = await prisma.notificationTest.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends NotificationTestFindFirstOrThrowArgs>(args?: SelectSubset<T, NotificationTestFindFirstOrThrowArgs<ExtArgs>>): Prisma__NotificationTestClient<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more NotificationTests 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 {NotificationTestFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all NotificationTests
     * const notificationTests = await prisma.notificationTest.findMany()
     * 
     * // Get first 10 NotificationTests
     * const notificationTests = await prisma.notificationTest.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const notificationTestWithIdOnly = await prisma.notificationTest.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends NotificationTestFindManyArgs>(args?: SelectSubset<T, NotificationTestFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a NotificationTest.
     * @param {NotificationTestCreateArgs} args - Arguments to create a NotificationTest.
     * @example
     * // Create one NotificationTest
     * const NotificationTest = await prisma.notificationTest.create({
     *   data: {
     *     // ... data to create a NotificationTest
     *   }
     * })
     * 
     */
    create<T extends NotificationTestCreateArgs>(args: SelectSubset<T, NotificationTestCreateArgs<ExtArgs>>): Prisma__NotificationTestClient<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

    /**
     * Create many NotificationTests and returns the data saved in the database.
     * @param {NotificationTestCreateManyAndReturnArgs} args - Arguments to create many NotificationTests.
     * @example
     * // Create many NotificationTests
     * const notificationTest = await prisma.notificationTest.createManyAndReturn({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Create many NotificationTests and only return the `id`
     * const notificationTestWithIdOnly = await prisma.notificationTest.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 NotificationTestCreateManyAndReturnArgs>(args?: SelectSubset<T, NotificationTestCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>

    /**
     * Delete a NotificationTest.
     * @param {NotificationTestDeleteArgs} args - Arguments to delete one NotificationTest.
     * @example
     * // Delete one NotificationTest
     * const NotificationTest = await prisma.notificationTest.delete({
     *   where: {
     *     // ... filter to delete one NotificationTest
     *   }
     * })
     * 
     */
    delete<T extends NotificationTestDeleteArgs>(args: SelectSubset<T, NotificationTestDeleteArgs<ExtArgs>>): Prisma__NotificationTestClient<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

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

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

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

    /**
     * Update zero or more NotificationTests and returns the data updated in the database.
     * @param {NotificationTestUpdateManyAndReturnArgs} args - Arguments to update many NotificationTests.
     * @example
     * // Update many NotificationTests
     * const notificationTest = await prisma.notificationTest.updateManyAndReturn({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     * 
     * // Update zero or more NotificationTests and only return the `id`
     * const notificationTestWithIdOnly = await prisma.notificationTest.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 NotificationTestUpdateManyAndReturnArgs>(args: SelectSubset<T, NotificationTestUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$NotificationTestPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>

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


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

    /**
     * Allows you to perform aggregations operations on a NotificationTest.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NotificationTestAggregateArgs} 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 NotificationTestAggregateArgs>(args: Subset<T, NotificationTestAggregateArgs>): Prisma.PrismaPromise<GetNotificationTestAggregateType<T>>

    /**
     * Group by NotificationTest.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {NotificationTestGroupByArgs} 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 NotificationTestGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: NotificationTestGroupByArgs['orderBy'] }
        : { orderBy?: NotificationTestGroupByArgs['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, NotificationTestGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetNotificationTestGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the NotificationTest model
   */
  readonly fields: NotificationTestFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for NotificationTest.
   * 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__NotificationTestClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    notificationProvider<T extends NotificationProviderDefaultArgs<ExtArgs> = {}>(args?: Subset<T, NotificationProviderDefaultArgs<ExtArgs>>): Prisma__NotificationProviderClient<$Result.GetResult<Prisma.$NotificationProviderPayload<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 NotificationTest model
   */
  interface NotificationTestFieldRefs {
    readonly id: FieldRef<"NotificationTest", 'Int'>
    readonly notificationProviderId: FieldRef<"NotificationTest", 'Int'>
    readonly success: FieldRef<"NotificationTest", 'Boolean'>
  }
    

  // Custom InputTypes
  /**
   * NotificationTest findUnique
   */
  export type NotificationTestFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter, which NotificationTest to fetch.
     */
    where: NotificationTestWhereUniqueInput
  }

  /**
   * NotificationTest findUniqueOrThrow
   */
  export type NotificationTestFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter, which NotificationTest to fetch.
     */
    where: NotificationTestWhereUniqueInput
  }

  /**
   * NotificationTest findFirst
   */
  export type NotificationTestFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter, which NotificationTest to fetch.
     */
    where?: NotificationTestWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationTests to fetch.
     */
    orderBy?: NotificationTestOrderByWithRelationInput | NotificationTestOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for NotificationTests.
     */
    cursor?: NotificationTestWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationTests 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` NotificationTests.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of NotificationTests.
     */
    distinct?: NotificationTestScalarFieldEnum | NotificationTestScalarFieldEnum[]
  }

  /**
   * NotificationTest findFirstOrThrow
   */
  export type NotificationTestFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter, which NotificationTest to fetch.
     */
    where?: NotificationTestWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationTests to fetch.
     */
    orderBy?: NotificationTestOrderByWithRelationInput | NotificationTestOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for NotificationTests.
     */
    cursor?: NotificationTestWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationTests 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` NotificationTests.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of NotificationTests.
     */
    distinct?: NotificationTestScalarFieldEnum | NotificationTestScalarFieldEnum[]
  }

  /**
   * NotificationTest findMany
   */
  export type NotificationTestFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter, which NotificationTests to fetch.
     */
    where?: NotificationTestWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of NotificationTests to fetch.
     */
    orderBy?: NotificationTestOrderByWithRelationInput | NotificationTestOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing NotificationTests.
     */
    cursor?: NotificationTestWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` NotificationTests 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` NotificationTests.
     */
    skip?: number
    distinct?: NotificationTestScalarFieldEnum | NotificationTestScalarFieldEnum[]
  }

  /**
   * NotificationTest create
   */
  export type NotificationTestCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * The data needed to create a NotificationTest.
     */
    data: XOR<NotificationTestCreateInput, NotificationTestUncheckedCreateInput>
  }

  /**
   * NotificationTest createMany
   */
  export type NotificationTestCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many NotificationTests.
     */
    data: NotificationTestCreateManyInput | NotificationTestCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * NotificationTest createManyAndReturn
   */
  export type NotificationTestCreateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelectCreateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * The data used to create many NotificationTests.
     */
    data: NotificationTestCreateManyInput | NotificationTestCreateManyInput[]
    skipDuplicates?: boolean
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestIncludeCreateManyAndReturn<ExtArgs> | null
  }

  /**
   * NotificationTest update
   */
  export type NotificationTestUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * The data needed to update a NotificationTest.
     */
    data: XOR<NotificationTestUpdateInput, NotificationTestUncheckedUpdateInput>
    /**
     * Choose, which NotificationTest to update.
     */
    where: NotificationTestWhereUniqueInput
  }

  /**
   * NotificationTest updateMany
   */
  export type NotificationTestUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update NotificationTests.
     */
    data: XOR<NotificationTestUpdateManyMutationInput, NotificationTestUncheckedUpdateManyInput>
    /**
     * Filter which NotificationTests to update
     */
    where?: NotificationTestWhereInput
    /**
     * Limit how many NotificationTests to update.
     */
    limit?: number
  }

  /**
   * NotificationTest updateManyAndReturn
   */
  export type NotificationTestUpdateManyAndReturnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelectUpdateManyAndReturn<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * The data used to update NotificationTests.
     */
    data: XOR<NotificationTestUpdateManyMutationInput, NotificationTestUncheckedUpdateManyInput>
    /**
     * Filter which NotificationTests to update
     */
    where?: NotificationTestWhereInput
    /**
     * Limit how many NotificationTests to update.
     */
    limit?: number
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestIncludeUpdateManyAndReturn<ExtArgs> | null
  }

  /**
   * NotificationTest upsert
   */
  export type NotificationTestUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * The filter to search for the NotificationTest to update in case it exists.
     */
    where: NotificationTestWhereUniqueInput
    /**
     * In case the NotificationTest found by the `where` argument doesn't exist, create a new NotificationTest with this data.
     */
    create: XOR<NotificationTestCreateInput, NotificationTestUncheckedCreateInput>
    /**
     * In case the NotificationTest was found with the provided `where` argument, update it with this data.
     */
    update: XOR<NotificationTestUpdateInput, NotificationTestUncheckedUpdateInput>
  }

  /**
   * NotificationTest delete
   */
  export type NotificationTestDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the NotificationTest
     */
    select?: NotificationTestSelect<ExtArgs> | null
    /**
     * Omit specific fields from the NotificationTest
     */
    omit?: NotificationTestOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: NotificationTestInclude<ExtArgs> | null
    /**
     * Filter which NotificationTest to delete.
     */
    where: NotificationTestWhereUniqueInput
  }

  /**
   * NotificationTest deleteMany
   */
  export type NotificationTestDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which NotificationTests to delete
     */
    where?: NotificationTestWhereInput
    /**
     * Limit how many NotificationTests to delete.
     */
    limit?: number
  }

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


  /**
   * Enums
   */

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

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


  export const UserScalarFieldEnum: {
    id: 'id',
    username: 'username',
    name: 'name',
    email: 'email',
    password: 'password',
    lastLogin: 'lastLogin',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

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


  export const SiteScalarFieldEnum: {
    id: 'id',
    name: 'name',
    description: 'description'
  };

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


  export const NetworkScalarFieldEnum: {
    id: 'id',
    siteId: 'siteId',
    name: 'name',
    ipv4Subnet: 'ipv4Subnet',
    ipv6Subnet: 'ipv6Subnet',
    gateway: 'gateway'
  };

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


  export const ServerScalarFieldEnum: {
    id: 'id',
    networkId: 'networkId',
    name: 'name',
    description: 'description',
    icon: 'icon',
    ipv4Address: 'ipv4Address',
    osDetails: 'osDetails',
    cpuDetails: 'cpuDetails',
    gpuDetails: 'gpuDetails',
    memoryDetails: 'memoryDetails',
    storageDetails: 'storageDetails',
    managementUrl: 'managementUrl',
    monitoring: 'monitoring',
    monitoringUrl: 'monitoringUrl'
  };

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


  export const ServerMonitoringScalarFieldEnum: {
    id: 'id',
    serverId: 'serverId',
    cpuPercentUsage: 'cpuPercentUsage',
    gpuPercentUsage: 'gpuPercentUsage',
    memoryUsage: 'memoryUsage',
    memoryPercentUsage: 'memoryPercentUsage',
    diskUsage: 'diskUsage',
    diskPercentUsage: 'diskPercentUsage',
    temperature: 'temperature',
    online: 'online',
    uptimeSeconds: 'uptimeSeconds',
    timestamp: 'timestamp'
  };

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


  export const ApplicationScalarFieldEnum: {
    id: 'id',
    serverId: 'serverId',
    name: 'name',
    description: 'description',
    icon: 'icon',
    url: 'url',
    monitoring: 'monitoring'
  };

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


  export const ApplicationMonitoringScalarFieldEnum: {
    id: 'id',
    applicationId: 'applicationId',
    online: 'online',
    latency: 'latency',
    timestamp: 'timestamp'
  };

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


  export const ServerMonitoringNotificationScalarFieldEnum: {
    id: 'id',
    statusChange: 'statusChange',
    cpuLimit: 'cpuLimit',
    gpuLimit: 'gpuLimit',
    memoryLimit: 'memoryLimit',
    diskLimit: 'diskLimit',
    temperatureLimit: 'temperatureLimit'
  };

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


  export const ApplicationMonitoringNotificationScalarFieldEnum: {
    id: 'id',
    statusChange: 'statusChange',
    latencyLimit: 'latencyLimit'
  };

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


  export const NotificationProviderScalarFieldEnum: {
    id: 'id',
    name: 'name',
    type: 'type',
    config: 'config'
  };

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


  export const NotificationTestScalarFieldEnum: {
    id: 'id',
    notificationProviderId: 'notificationProviderId',
    success: 'success'
  };

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


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

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


  export const JsonNullValueInput: {
    JsonNull: typeof JsonNull
  };

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


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

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


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

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


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

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


  /**
   * 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 '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 '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 'Boolean'
   */
  export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Boolean'>
    


  /**
   * 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 'NotificationType'
   */
  export type EnumNotificationTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'NotificationType'>
    


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


  /**
   * 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'>
    
  /**
   * Deep Input Types
   */


  export type UserWhereInput = {
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    id?: StringFilter<"User"> | string
    username?: StringFilter<"User"> | string
    name?: StringFilter<"User"> | string
    email?: StringFilter<"User"> | string
    password?: StringFilter<"User"> | string
    lastLogin?: DateTimeNullableFilter<"User"> | Date | string | null
    createdAt?: DateTimeFilter<"User"> | Date | string
    updatedAt?: DateTimeFilter<"User"> | Date | string
  }

  export type UserOrderByWithRelationInput = {
    id?: SortOrder
    username?: SortOrder
    name?: SortOrder
    email?: SortOrder
    password?: SortOrder
    lastLogin?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type UserWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    username?: string
    email?: string
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    name?: StringFilter<"User"> | string
    password?: StringFilter<"User"> | string
    lastLogin?: DateTimeNullableFilter<"User"> | Date | string | null
    createdAt?: DateTimeFilter<"User"> | Date | string
    updatedAt?: DateTimeFilter<"User"> | Date | string
  }, "id" | "username" | "email">

  export type UserOrderByWithAggregationInput = {
    id?: SortOrder
    username?: SortOrder
    name?: SortOrder
    email?: SortOrder
    password?: SortOrder
    lastLogin?: SortOrderInput | 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
    username?: StringWithAggregatesFilter<"User"> | string
    name?: StringWithAggregatesFilter<"User"> | string
    email?: StringWithAggregatesFilter<"User"> | string
    password?: StringWithAggregatesFilter<"User"> | string
    lastLogin?: DateTimeNullableWithAggregatesFilter<"User"> | Date | string | null
    createdAt?: DateTimeWithAggregatesFilter<"User"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"User"> | Date | string
  }

  export type SiteWhereInput = {
    AND?: SiteWhereInput | SiteWhereInput[]
    OR?: SiteWhereInput[]
    NOT?: SiteWhereInput | SiteWhereInput[]
    id?: IntFilter<"Site"> | number
    name?: StringFilter<"Site"> | string
    description?: StringNullableFilter<"Site"> | string | null
    networks?: NetworkListRelationFilter
  }

  export type SiteOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    networks?: NetworkOrderByRelationAggregateInput
  }

  export type SiteWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SiteWhereInput | SiteWhereInput[]
    OR?: SiteWhereInput[]
    NOT?: SiteWhereInput | SiteWhereInput[]
    name?: StringFilter<"Site"> | string
    description?: StringNullableFilter<"Site"> | string | null
    networks?: NetworkListRelationFilter
  }, "id">

  export type SiteOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    _count?: SiteCountOrderByAggregateInput
    _avg?: SiteAvgOrderByAggregateInput
    _max?: SiteMaxOrderByAggregateInput
    _min?: SiteMinOrderByAggregateInput
    _sum?: SiteSumOrderByAggregateInput
  }

  export type SiteScalarWhereWithAggregatesInput = {
    AND?: SiteScalarWhereWithAggregatesInput | SiteScalarWhereWithAggregatesInput[]
    OR?: SiteScalarWhereWithAggregatesInput[]
    NOT?: SiteScalarWhereWithAggregatesInput | SiteScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Site"> | number
    name?: StringWithAggregatesFilter<"Site"> | string
    description?: StringNullableWithAggregatesFilter<"Site"> | string | null
  }

  export type NetworkWhereInput = {
    AND?: NetworkWhereInput | NetworkWhereInput[]
    OR?: NetworkWhereInput[]
    NOT?: NetworkWhereInput | NetworkWhereInput[]
    id?: IntFilter<"Network"> | number
    siteId?: IntFilter<"Network"> | number
    name?: StringFilter<"Network"> | string
    ipv4Subnet?: StringNullableFilter<"Network"> | string | null
    ipv6Subnet?: StringNullableFilter<"Network"> | string | null
    gateway?: StringNullableFilter<"Network"> | string | null
    site?: XOR<SiteScalarRelationFilter, SiteWhereInput>
    servers?: ServerListRelationFilter
  }

  export type NetworkOrderByWithRelationInput = {
    id?: SortOrder
    siteId?: SortOrder
    name?: SortOrder
    ipv4Subnet?: SortOrderInput | SortOrder
    ipv6Subnet?: SortOrderInput | SortOrder
    gateway?: SortOrderInput | SortOrder
    site?: SiteOrderByWithRelationInput
    servers?: ServerOrderByRelationAggregateInput
  }

  export type NetworkWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: NetworkWhereInput | NetworkWhereInput[]
    OR?: NetworkWhereInput[]
    NOT?: NetworkWhereInput | NetworkWhereInput[]
    siteId?: IntFilter<"Network"> | number
    name?: StringFilter<"Network"> | string
    ipv4Subnet?: StringNullableFilter<"Network"> | string | null
    ipv6Subnet?: StringNullableFilter<"Network"> | string | null
    gateway?: StringNullableFilter<"Network"> | string | null
    site?: XOR<SiteScalarRelationFilter, SiteWhereInput>
    servers?: ServerListRelationFilter
  }, "id">

  export type NetworkOrderByWithAggregationInput = {
    id?: SortOrder
    siteId?: SortOrder
    name?: SortOrder
    ipv4Subnet?: SortOrderInput | SortOrder
    ipv6Subnet?: SortOrderInput | SortOrder
    gateway?: SortOrderInput | SortOrder
    _count?: NetworkCountOrderByAggregateInput
    _avg?: NetworkAvgOrderByAggregateInput
    _max?: NetworkMaxOrderByAggregateInput
    _min?: NetworkMinOrderByAggregateInput
    _sum?: NetworkSumOrderByAggregateInput
  }

  export type NetworkScalarWhereWithAggregatesInput = {
    AND?: NetworkScalarWhereWithAggregatesInput | NetworkScalarWhereWithAggregatesInput[]
    OR?: NetworkScalarWhereWithAggregatesInput[]
    NOT?: NetworkScalarWhereWithAggregatesInput | NetworkScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Network"> | number
    siteId?: IntWithAggregatesFilter<"Network"> | number
    name?: StringWithAggregatesFilter<"Network"> | string
    ipv4Subnet?: StringNullableWithAggregatesFilter<"Network"> | string | null
    ipv6Subnet?: StringNullableWithAggregatesFilter<"Network"> | string | null
    gateway?: StringNullableWithAggregatesFilter<"Network"> | string | null
  }

  export type ServerWhereInput = {
    AND?: ServerWhereInput | ServerWhereInput[]
    OR?: ServerWhereInput[]
    NOT?: ServerWhereInput | ServerWhereInput[]
    id?: IntFilter<"Server"> | number
    networkId?: IntFilter<"Server"> | number
    name?: StringFilter<"Server"> | string
    description?: StringNullableFilter<"Server"> | string | null
    icon?: StringNullableFilter<"Server"> | string | null
    ipv4Address?: StringNullableFilter<"Server"> | string | null
    osDetails?: StringNullableFilter<"Server"> | string | null
    cpuDetails?: StringNullableFilter<"Server"> | string | null
    gpuDetails?: StringNullableFilter<"Server"> | string | null
    memoryDetails?: StringNullableFilter<"Server"> | string | null
    storageDetails?: StringNullableFilter<"Server"> | string | null
    managementUrl?: StringNullableFilter<"Server"> | string | null
    monitoring?: BoolFilter<"Server"> | boolean
    monitoringUrl?: StringNullableFilter<"Server"> | string | null
    network?: XOR<NetworkScalarRelationFilter, NetworkWhereInput>
    monitoringData?: ServerMonitoringListRelationFilter
    applications?: ApplicationListRelationFilter
  }

  export type ServerOrderByWithRelationInput = {
    id?: SortOrder
    networkId?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    icon?: SortOrderInput | SortOrder
    ipv4Address?: SortOrderInput | SortOrder
    osDetails?: SortOrderInput | SortOrder
    cpuDetails?: SortOrderInput | SortOrder
    gpuDetails?: SortOrderInput | SortOrder
    memoryDetails?: SortOrderInput | SortOrder
    storageDetails?: SortOrderInput | SortOrder
    managementUrl?: SortOrderInput | SortOrder
    monitoring?: SortOrder
    monitoringUrl?: SortOrderInput | SortOrder
    network?: NetworkOrderByWithRelationInput
    monitoringData?: ServerMonitoringOrderByRelationAggregateInput
    applications?: ApplicationOrderByRelationAggregateInput
  }

  export type ServerWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ServerWhereInput | ServerWhereInput[]
    OR?: ServerWhereInput[]
    NOT?: ServerWhereInput | ServerWhereInput[]
    networkId?: IntFilter<"Server"> | number
    name?: StringFilter<"Server"> | string
    description?: StringNullableFilter<"Server"> | string | null
    icon?: StringNullableFilter<"Server"> | string | null
    ipv4Address?: StringNullableFilter<"Server"> | string | null
    osDetails?: StringNullableFilter<"Server"> | string | null
    cpuDetails?: StringNullableFilter<"Server"> | string | null
    gpuDetails?: StringNullableFilter<"Server"> | string | null
    memoryDetails?: StringNullableFilter<"Server"> | string | null
    storageDetails?: StringNullableFilter<"Server"> | string | null
    managementUrl?: StringNullableFilter<"Server"> | string | null
    monitoring?: BoolFilter<"Server"> | boolean
    monitoringUrl?: StringNullableFilter<"Server"> | string | null
    network?: XOR<NetworkScalarRelationFilter, NetworkWhereInput>
    monitoringData?: ServerMonitoringListRelationFilter
    applications?: ApplicationListRelationFilter
  }, "id">

  export type ServerOrderByWithAggregationInput = {
    id?: SortOrder
    networkId?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    icon?: SortOrderInput | SortOrder
    ipv4Address?: SortOrderInput | SortOrder
    osDetails?: SortOrderInput | SortOrder
    cpuDetails?: SortOrderInput | SortOrder
    gpuDetails?: SortOrderInput | SortOrder
    memoryDetails?: SortOrderInput | SortOrder
    storageDetails?: SortOrderInput | SortOrder
    managementUrl?: SortOrderInput | SortOrder
    monitoring?: SortOrder
    monitoringUrl?: SortOrderInput | SortOrder
    _count?: ServerCountOrderByAggregateInput
    _avg?: ServerAvgOrderByAggregateInput
    _max?: ServerMaxOrderByAggregateInput
    _min?: ServerMinOrderByAggregateInput
    _sum?: ServerSumOrderByAggregateInput
  }

  export type ServerScalarWhereWithAggregatesInput = {
    AND?: ServerScalarWhereWithAggregatesInput | ServerScalarWhereWithAggregatesInput[]
    OR?: ServerScalarWhereWithAggregatesInput[]
    NOT?: ServerScalarWhereWithAggregatesInput | ServerScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Server"> | number
    networkId?: IntWithAggregatesFilter<"Server"> | number
    name?: StringWithAggregatesFilter<"Server"> | string
    description?: StringNullableWithAggregatesFilter<"Server"> | string | null
    icon?: StringNullableWithAggregatesFilter<"Server"> | string | null
    ipv4Address?: StringNullableWithAggregatesFilter<"Server"> | string | null
    osDetails?: StringNullableWithAggregatesFilter<"Server"> | string | null
    cpuDetails?: StringNullableWithAggregatesFilter<"Server"> | string | null
    gpuDetails?: StringNullableWithAggregatesFilter<"Server"> | string | null
    memoryDetails?: StringNullableWithAggregatesFilter<"Server"> | string | null
    storageDetails?: StringNullableWithAggregatesFilter<"Server"> | string | null
    managementUrl?: StringNullableWithAggregatesFilter<"Server"> | string | null
    monitoring?: BoolWithAggregatesFilter<"Server"> | boolean
    monitoringUrl?: StringNullableWithAggregatesFilter<"Server"> | string | null
  }

  export type ServerMonitoringWhereInput = {
    AND?: ServerMonitoringWhereInput | ServerMonitoringWhereInput[]
    OR?: ServerMonitoringWhereInput[]
    NOT?: ServerMonitoringWhereInput | ServerMonitoringWhereInput[]
    id?: IntFilter<"ServerMonitoring"> | number
    serverId?: IntFilter<"ServerMonitoring"> | number
    cpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    gpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    diskUsage?: FloatFilter<"ServerMonitoring"> | number
    diskPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    temperature?: FloatFilter<"ServerMonitoring"> | number
    online?: BoolFilter<"ServerMonitoring"> | boolean
    uptimeSeconds?: IntFilter<"ServerMonitoring"> | number
    timestamp?: DateTimeFilter<"ServerMonitoring"> | Date | string
    server?: XOR<ServerScalarRelationFilter, ServerWhereInput>
  }

  export type ServerMonitoringOrderByWithRelationInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    online?: SortOrder
    uptimeSeconds?: SortOrder
    timestamp?: SortOrder
    server?: ServerOrderByWithRelationInput
  }

  export type ServerMonitoringWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ServerMonitoringWhereInput | ServerMonitoringWhereInput[]
    OR?: ServerMonitoringWhereInput[]
    NOT?: ServerMonitoringWhereInput | ServerMonitoringWhereInput[]
    serverId?: IntFilter<"ServerMonitoring"> | number
    cpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    gpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    diskUsage?: FloatFilter<"ServerMonitoring"> | number
    diskPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    temperature?: FloatFilter<"ServerMonitoring"> | number
    online?: BoolFilter<"ServerMonitoring"> | boolean
    uptimeSeconds?: IntFilter<"ServerMonitoring"> | number
    timestamp?: DateTimeFilter<"ServerMonitoring"> | Date | string
    server?: XOR<ServerScalarRelationFilter, ServerWhereInput>
  }, "id">

  export type ServerMonitoringOrderByWithAggregationInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    online?: SortOrder
    uptimeSeconds?: SortOrder
    timestamp?: SortOrder
    _count?: ServerMonitoringCountOrderByAggregateInput
    _avg?: ServerMonitoringAvgOrderByAggregateInput
    _max?: ServerMonitoringMaxOrderByAggregateInput
    _min?: ServerMonitoringMinOrderByAggregateInput
    _sum?: ServerMonitoringSumOrderByAggregateInput
  }

  export type ServerMonitoringScalarWhereWithAggregatesInput = {
    AND?: ServerMonitoringScalarWhereWithAggregatesInput | ServerMonitoringScalarWhereWithAggregatesInput[]
    OR?: ServerMonitoringScalarWhereWithAggregatesInput[]
    NOT?: ServerMonitoringScalarWhereWithAggregatesInput | ServerMonitoringScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ServerMonitoring"> | number
    serverId?: IntWithAggregatesFilter<"ServerMonitoring"> | number
    cpuPercentUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    gpuPercentUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    memoryUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    memoryPercentUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    diskUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    diskPercentUsage?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    temperature?: FloatWithAggregatesFilter<"ServerMonitoring"> | number
    online?: BoolWithAggregatesFilter<"ServerMonitoring"> | boolean
    uptimeSeconds?: IntWithAggregatesFilter<"ServerMonitoring"> | number
    timestamp?: DateTimeWithAggregatesFilter<"ServerMonitoring"> | Date | string
  }

  export type ApplicationWhereInput = {
    AND?: ApplicationWhereInput | ApplicationWhereInput[]
    OR?: ApplicationWhereInput[]
    NOT?: ApplicationWhereInput | ApplicationWhereInput[]
    id?: IntFilter<"Application"> | number
    serverId?: IntFilter<"Application"> | number
    name?: StringFilter<"Application"> | string
    description?: StringNullableFilter<"Application"> | string | null
    icon?: StringNullableFilter<"Application"> | string | null
    url?: StringNullableFilter<"Application"> | string | null
    monitoring?: BoolFilter<"Application"> | boolean
    server?: XOR<ServerScalarRelationFilter, ServerWhereInput>
    monitoringData?: ApplicationMonitoringListRelationFilter
  }

  export type ApplicationOrderByWithRelationInput = {
    id?: SortOrder
    serverId?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    icon?: SortOrderInput | SortOrder
    url?: SortOrderInput | SortOrder
    monitoring?: SortOrder
    server?: ServerOrderByWithRelationInput
    monitoringData?: ApplicationMonitoringOrderByRelationAggregateInput
  }

  export type ApplicationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ApplicationWhereInput | ApplicationWhereInput[]
    OR?: ApplicationWhereInput[]
    NOT?: ApplicationWhereInput | ApplicationWhereInput[]
    serverId?: IntFilter<"Application"> | number
    name?: StringFilter<"Application"> | string
    description?: StringNullableFilter<"Application"> | string | null
    icon?: StringNullableFilter<"Application"> | string | null
    url?: StringNullableFilter<"Application"> | string | null
    monitoring?: BoolFilter<"Application"> | boolean
    server?: XOR<ServerScalarRelationFilter, ServerWhereInput>
    monitoringData?: ApplicationMonitoringListRelationFilter
  }, "id">

  export type ApplicationOrderByWithAggregationInput = {
    id?: SortOrder
    serverId?: SortOrder
    name?: SortOrder
    description?: SortOrderInput | SortOrder
    icon?: SortOrderInput | SortOrder
    url?: SortOrderInput | SortOrder
    monitoring?: SortOrder
    _count?: ApplicationCountOrderByAggregateInput
    _avg?: ApplicationAvgOrderByAggregateInput
    _max?: ApplicationMaxOrderByAggregateInput
    _min?: ApplicationMinOrderByAggregateInput
    _sum?: ApplicationSumOrderByAggregateInput
  }

  export type ApplicationScalarWhereWithAggregatesInput = {
    AND?: ApplicationScalarWhereWithAggregatesInput | ApplicationScalarWhereWithAggregatesInput[]
    OR?: ApplicationScalarWhereWithAggregatesInput[]
    NOT?: ApplicationScalarWhereWithAggregatesInput | ApplicationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Application"> | number
    serverId?: IntWithAggregatesFilter<"Application"> | number
    name?: StringWithAggregatesFilter<"Application"> | string
    description?: StringNullableWithAggregatesFilter<"Application"> | string | null
    icon?: StringNullableWithAggregatesFilter<"Application"> | string | null
    url?: StringNullableWithAggregatesFilter<"Application"> | string | null
    monitoring?: BoolWithAggregatesFilter<"Application"> | boolean
  }

  export type ApplicationMonitoringWhereInput = {
    AND?: ApplicationMonitoringWhereInput | ApplicationMonitoringWhereInput[]
    OR?: ApplicationMonitoringWhereInput[]
    NOT?: ApplicationMonitoringWhereInput | ApplicationMonitoringWhereInput[]
    id?: IntFilter<"ApplicationMonitoring"> | number
    applicationId?: IntFilter<"ApplicationMonitoring"> | number
    online?: BoolFilter<"ApplicationMonitoring"> | boolean
    latency?: FloatFilter<"ApplicationMonitoring"> | number
    timestamp?: DateTimeFilter<"ApplicationMonitoring"> | Date | string
    application?: XOR<ApplicationScalarRelationFilter, ApplicationWhereInput>
  }

  export type ApplicationMonitoringOrderByWithRelationInput = {
    id?: SortOrder
    applicationId?: SortOrder
    online?: SortOrder
    latency?: SortOrder
    timestamp?: SortOrder
    application?: ApplicationOrderByWithRelationInput
  }

  export type ApplicationMonitoringWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ApplicationMonitoringWhereInput | ApplicationMonitoringWhereInput[]
    OR?: ApplicationMonitoringWhereInput[]
    NOT?: ApplicationMonitoringWhereInput | ApplicationMonitoringWhereInput[]
    applicationId?: IntFilter<"ApplicationMonitoring"> | number
    online?: BoolFilter<"ApplicationMonitoring"> | boolean
    latency?: FloatFilter<"ApplicationMonitoring"> | number
    timestamp?: DateTimeFilter<"ApplicationMonitoring"> | Date | string
    application?: XOR<ApplicationScalarRelationFilter, ApplicationWhereInput>
  }, "id">

  export type ApplicationMonitoringOrderByWithAggregationInput = {
    id?: SortOrder
    applicationId?: SortOrder
    online?: SortOrder
    latency?: SortOrder
    timestamp?: SortOrder
    _count?: ApplicationMonitoringCountOrderByAggregateInput
    _avg?: ApplicationMonitoringAvgOrderByAggregateInput
    _max?: ApplicationMonitoringMaxOrderByAggregateInput
    _min?: ApplicationMonitoringMinOrderByAggregateInput
    _sum?: ApplicationMonitoringSumOrderByAggregateInput
  }

  export type ApplicationMonitoringScalarWhereWithAggregatesInput = {
    AND?: ApplicationMonitoringScalarWhereWithAggregatesInput | ApplicationMonitoringScalarWhereWithAggregatesInput[]
    OR?: ApplicationMonitoringScalarWhereWithAggregatesInput[]
    NOT?: ApplicationMonitoringScalarWhereWithAggregatesInput | ApplicationMonitoringScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ApplicationMonitoring"> | number
    applicationId?: IntWithAggregatesFilter<"ApplicationMonitoring"> | number
    online?: BoolWithAggregatesFilter<"ApplicationMonitoring"> | boolean
    latency?: FloatWithAggregatesFilter<"ApplicationMonitoring"> | number
    timestamp?: DateTimeWithAggregatesFilter<"ApplicationMonitoring"> | Date | string
  }

  export type ServerMonitoringNotificationWhereInput = {
    AND?: ServerMonitoringNotificationWhereInput | ServerMonitoringNotificationWhereInput[]
    OR?: ServerMonitoringNotificationWhereInput[]
    NOT?: ServerMonitoringNotificationWhereInput | ServerMonitoringNotificationWhereInput[]
    id?: IntFilter<"ServerMonitoringNotification"> | number
    statusChange?: BoolFilter<"ServerMonitoringNotification"> | boolean
    cpuLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    gpuLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    memoryLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    diskLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    temperatureLimit?: FloatFilter<"ServerMonitoringNotification"> | number
  }

  export type ServerMonitoringNotificationOrderByWithRelationInput = {
    id?: SortOrder
    statusChange?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ServerMonitoringNotificationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ServerMonitoringNotificationWhereInput | ServerMonitoringNotificationWhereInput[]
    OR?: ServerMonitoringNotificationWhereInput[]
    NOT?: ServerMonitoringNotificationWhereInput | ServerMonitoringNotificationWhereInput[]
    statusChange?: BoolFilter<"ServerMonitoringNotification"> | boolean
    cpuLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    gpuLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    memoryLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    diskLimit?: FloatFilter<"ServerMonitoringNotification"> | number
    temperatureLimit?: FloatFilter<"ServerMonitoringNotification"> | number
  }, "id">

  export type ServerMonitoringNotificationOrderByWithAggregationInput = {
    id?: SortOrder
    statusChange?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
    _count?: ServerMonitoringNotificationCountOrderByAggregateInput
    _avg?: ServerMonitoringNotificationAvgOrderByAggregateInput
    _max?: ServerMonitoringNotificationMaxOrderByAggregateInput
    _min?: ServerMonitoringNotificationMinOrderByAggregateInput
    _sum?: ServerMonitoringNotificationSumOrderByAggregateInput
  }

  export type ServerMonitoringNotificationScalarWhereWithAggregatesInput = {
    AND?: ServerMonitoringNotificationScalarWhereWithAggregatesInput | ServerMonitoringNotificationScalarWhereWithAggregatesInput[]
    OR?: ServerMonitoringNotificationScalarWhereWithAggregatesInput[]
    NOT?: ServerMonitoringNotificationScalarWhereWithAggregatesInput | ServerMonitoringNotificationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ServerMonitoringNotification"> | number
    statusChange?: BoolWithAggregatesFilter<"ServerMonitoringNotification"> | boolean
    cpuLimit?: FloatWithAggregatesFilter<"ServerMonitoringNotification"> | number
    gpuLimit?: FloatWithAggregatesFilter<"ServerMonitoringNotification"> | number
    memoryLimit?: FloatWithAggregatesFilter<"ServerMonitoringNotification"> | number
    diskLimit?: FloatWithAggregatesFilter<"ServerMonitoringNotification"> | number
    temperatureLimit?: FloatWithAggregatesFilter<"ServerMonitoringNotification"> | number
  }

  export type ApplicationMonitoringNotificationWhereInput = {
    AND?: ApplicationMonitoringNotificationWhereInput | ApplicationMonitoringNotificationWhereInput[]
    OR?: ApplicationMonitoringNotificationWhereInput[]
    NOT?: ApplicationMonitoringNotificationWhereInput | ApplicationMonitoringNotificationWhereInput[]
    id?: IntFilter<"ApplicationMonitoringNotification"> | number
    statusChange?: BoolFilter<"ApplicationMonitoringNotification"> | boolean
    latencyLimit?: FloatFilter<"ApplicationMonitoringNotification"> | number
  }

  export type ApplicationMonitoringNotificationOrderByWithRelationInput = {
    id?: SortOrder
    statusChange?: SortOrder
    latencyLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ApplicationMonitoringNotificationWhereInput | ApplicationMonitoringNotificationWhereInput[]
    OR?: ApplicationMonitoringNotificationWhereInput[]
    NOT?: ApplicationMonitoringNotificationWhereInput | ApplicationMonitoringNotificationWhereInput[]
    statusChange?: BoolFilter<"ApplicationMonitoringNotification"> | boolean
    latencyLimit?: FloatFilter<"ApplicationMonitoringNotification"> | number
  }, "id">

  export type ApplicationMonitoringNotificationOrderByWithAggregationInput = {
    id?: SortOrder
    statusChange?: SortOrder
    latencyLimit?: SortOrder
    _count?: ApplicationMonitoringNotificationCountOrderByAggregateInput
    _avg?: ApplicationMonitoringNotificationAvgOrderByAggregateInput
    _max?: ApplicationMonitoringNotificationMaxOrderByAggregateInput
    _min?: ApplicationMonitoringNotificationMinOrderByAggregateInput
    _sum?: ApplicationMonitoringNotificationSumOrderByAggregateInput
  }

  export type ApplicationMonitoringNotificationScalarWhereWithAggregatesInput = {
    AND?: ApplicationMonitoringNotificationScalarWhereWithAggregatesInput | ApplicationMonitoringNotificationScalarWhereWithAggregatesInput[]
    OR?: ApplicationMonitoringNotificationScalarWhereWithAggregatesInput[]
    NOT?: ApplicationMonitoringNotificationScalarWhereWithAggregatesInput | ApplicationMonitoringNotificationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ApplicationMonitoringNotification"> | number
    statusChange?: BoolWithAggregatesFilter<"ApplicationMonitoringNotification"> | boolean
    latencyLimit?: FloatWithAggregatesFilter<"ApplicationMonitoringNotification"> | number
  }

  export type NotificationProviderWhereInput = {
    AND?: NotificationProviderWhereInput | NotificationProviderWhereInput[]
    OR?: NotificationProviderWhereInput[]
    NOT?: NotificationProviderWhereInput | NotificationProviderWhereInput[]
    id?: IntFilter<"NotificationProvider"> | number
    name?: StringFilter<"NotificationProvider"> | string
    type?: EnumNotificationTypeFilter<"NotificationProvider"> | $Enums.NotificationType
    config?: JsonFilter<"NotificationProvider">
    tests?: NotificationTestListRelationFilter
  }

  export type NotificationProviderOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    type?: SortOrder
    config?: SortOrder
    tests?: NotificationTestOrderByRelationAggregateInput
  }

  export type NotificationProviderWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: NotificationProviderWhereInput | NotificationProviderWhereInput[]
    OR?: NotificationProviderWhereInput[]
    NOT?: NotificationProviderWhereInput | NotificationProviderWhereInput[]
    name?: StringFilter<"NotificationProvider"> | string
    type?: EnumNotificationTypeFilter<"NotificationProvider"> | $Enums.NotificationType
    config?: JsonFilter<"NotificationProvider">
    tests?: NotificationTestListRelationFilter
  }, "id">

  export type NotificationProviderOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    type?: SortOrder
    config?: SortOrder
    _count?: NotificationProviderCountOrderByAggregateInput
    _avg?: NotificationProviderAvgOrderByAggregateInput
    _max?: NotificationProviderMaxOrderByAggregateInput
    _min?: NotificationProviderMinOrderByAggregateInput
    _sum?: NotificationProviderSumOrderByAggregateInput
  }

  export type NotificationProviderScalarWhereWithAggregatesInput = {
    AND?: NotificationProviderScalarWhereWithAggregatesInput | NotificationProviderScalarWhereWithAggregatesInput[]
    OR?: NotificationProviderScalarWhereWithAggregatesInput[]
    NOT?: NotificationProviderScalarWhereWithAggregatesInput | NotificationProviderScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"NotificationProvider"> | number
    name?: StringWithAggregatesFilter<"NotificationProvider"> | string
    type?: EnumNotificationTypeWithAggregatesFilter<"NotificationProvider"> | $Enums.NotificationType
    config?: JsonWithAggregatesFilter<"NotificationProvider">
  }

  export type NotificationTestWhereInput = {
    AND?: NotificationTestWhereInput | NotificationTestWhereInput[]
    OR?: NotificationTestWhereInput[]
    NOT?: NotificationTestWhereInput | NotificationTestWhereInput[]
    id?: IntFilter<"NotificationTest"> | number
    notificationProviderId?: IntFilter<"NotificationTest"> | number
    success?: BoolFilter<"NotificationTest"> | boolean
    notificationProvider?: XOR<NotificationProviderScalarRelationFilter, NotificationProviderWhereInput>
  }

  export type NotificationTestOrderByWithRelationInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
    success?: SortOrder
    notificationProvider?: NotificationProviderOrderByWithRelationInput
  }

  export type NotificationTestWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: NotificationTestWhereInput | NotificationTestWhereInput[]
    OR?: NotificationTestWhereInput[]
    NOT?: NotificationTestWhereInput | NotificationTestWhereInput[]
    notificationProviderId?: IntFilter<"NotificationTest"> | number
    success?: BoolFilter<"NotificationTest"> | boolean
    notificationProvider?: XOR<NotificationProviderScalarRelationFilter, NotificationProviderWhereInput>
  }, "id">

  export type NotificationTestOrderByWithAggregationInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
    success?: SortOrder
    _count?: NotificationTestCountOrderByAggregateInput
    _avg?: NotificationTestAvgOrderByAggregateInput
    _max?: NotificationTestMaxOrderByAggregateInput
    _min?: NotificationTestMinOrderByAggregateInput
    _sum?: NotificationTestSumOrderByAggregateInput
  }

  export type NotificationTestScalarWhereWithAggregatesInput = {
    AND?: NotificationTestScalarWhereWithAggregatesInput | NotificationTestScalarWhereWithAggregatesInput[]
    OR?: NotificationTestScalarWhereWithAggregatesInput[]
    NOT?: NotificationTestScalarWhereWithAggregatesInput | NotificationTestScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"NotificationTest"> | number
    notificationProviderId?: IntWithAggregatesFilter<"NotificationTest"> | number
    success?: BoolWithAggregatesFilter<"NotificationTest"> | boolean
  }

  export type UserCreateInput = {
    id?: string
    username: string
    name: string
    email: string
    password: string
    lastLogin?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserUncheckedCreateInput = {
    id?: string
    username: string
    name: string
    email: string
    password: string
    lastLogin?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    username?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    email?: StringFieldUpdateOperationsInput | string
    password?: StringFieldUpdateOperationsInput | string
    lastLogin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    username?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    email?: StringFieldUpdateOperationsInput | string
    password?: StringFieldUpdateOperationsInput | string
    lastLogin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserCreateManyInput = {
    id?: string
    username: string
    name: string
    email: string
    password: string
    lastLogin?: Date | string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type UserUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    username?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    email?: StringFieldUpdateOperationsInput | string
    password?: StringFieldUpdateOperationsInput | string
    lastLogin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type UserUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    username?: StringFieldUpdateOperationsInput | string
    name?: StringFieldUpdateOperationsInput | string
    email?: StringFieldUpdateOperationsInput | string
    password?: StringFieldUpdateOperationsInput | string
    lastLogin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type SiteCreateInput = {
    name: string
    description?: string | null
    networks?: NetworkCreateNestedManyWithoutSiteInput
  }

  export type SiteUncheckedCreateInput = {
    id?: number
    name: string
    description?: string | null
    networks?: NetworkUncheckedCreateNestedManyWithoutSiteInput
  }

  export type SiteUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    networks?: NetworkUpdateManyWithoutSiteNestedInput
  }

  export type SiteUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    networks?: NetworkUncheckedUpdateManyWithoutSiteNestedInput
  }

  export type SiteCreateManyInput = {
    id?: number
    name: string
    description?: string | null
  }

  export type SiteUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type SiteUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type NetworkCreateInput = {
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
    site: SiteCreateNestedOneWithoutNetworksInput
    servers?: ServerCreateNestedManyWithoutNetworkInput
  }

  export type NetworkUncheckedCreateInput = {
    id?: number
    siteId: number
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
    servers?: ServerUncheckedCreateNestedManyWithoutNetworkInput
  }

  export type NetworkUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
    site?: SiteUpdateOneRequiredWithoutNetworksNestedInput
    servers?: ServerUpdateManyWithoutNetworkNestedInput
  }

  export type NetworkUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    siteId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
    servers?: ServerUncheckedUpdateManyWithoutNetworkNestedInput
  }

  export type NetworkCreateManyInput = {
    id?: number
    siteId: number
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
  }

  export type NetworkUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type NetworkUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    siteId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerCreateInput = {
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    network: NetworkCreateNestedOneWithoutServersInput
    monitoringData?: ServerMonitoringCreateNestedManyWithoutServerInput
    applications?: ApplicationCreateNestedManyWithoutServerInput
  }

  export type ServerUncheckedCreateInput = {
    id?: number
    networkId: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    monitoringData?: ServerMonitoringUncheckedCreateNestedManyWithoutServerInput
    applications?: ApplicationUncheckedCreateNestedManyWithoutServerInput
  }

  export type ServerUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    network?: NetworkUpdateOneRequiredWithoutServersNestedInput
    monitoringData?: ServerMonitoringUpdateManyWithoutServerNestedInput
    applications?: ApplicationUpdateManyWithoutServerNestedInput
  }

  export type ServerUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    networkId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoringData?: ServerMonitoringUncheckedUpdateManyWithoutServerNestedInput
    applications?: ApplicationUncheckedUpdateManyWithoutServerNestedInput
  }

  export type ServerCreateManyInput = {
    id?: number
    networkId: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
  }

  export type ServerUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    networkId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerMonitoringCreateInput = {
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
    server: ServerCreateNestedOneWithoutMonitoringDataInput
  }

  export type ServerMonitoringUncheckedCreateInput = {
    id?: number
    serverId: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
  }

  export type ServerMonitoringUpdateInput = {
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
    server?: ServerUpdateOneRequiredWithoutMonitoringDataNestedInput
  }

  export type ServerMonitoringUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    serverId?: IntFieldUpdateOperationsInput | number
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ServerMonitoringCreateManyInput = {
    id?: number
    serverId: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
  }

  export type ServerMonitoringUpdateManyMutationInput = {
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ServerMonitoringUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    serverId?: IntFieldUpdateOperationsInput | number
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationCreateInput = {
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
    server: ServerCreateNestedOneWithoutApplicationsInput
    monitoringData?: ApplicationMonitoringCreateNestedManyWithoutApplicationInput
  }

  export type ApplicationUncheckedCreateInput = {
    id?: number
    serverId: number
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
    monitoringData?: ApplicationMonitoringUncheckedCreateNestedManyWithoutApplicationInput
  }

  export type ApplicationUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    server?: ServerUpdateOneRequiredWithoutApplicationsNestedInput
    monitoringData?: ApplicationMonitoringUpdateManyWithoutApplicationNestedInput
  }

  export type ApplicationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    serverId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringData?: ApplicationMonitoringUncheckedUpdateManyWithoutApplicationNestedInput
  }

  export type ApplicationCreateManyInput = {
    id?: number
    serverId: number
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
  }

  export type ApplicationUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
  }

  export type ApplicationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    serverId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
  }

  export type ApplicationMonitoringCreateInput = {
    online: boolean
    latency: number
    timestamp?: Date | string
    application: ApplicationCreateNestedOneWithoutMonitoringDataInput
  }

  export type ApplicationMonitoringUncheckedCreateInput = {
    id?: number
    applicationId: number
    online: boolean
    latency: number
    timestamp?: Date | string
  }

  export type ApplicationMonitoringUpdateInput = {
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
    application?: ApplicationUpdateOneRequiredWithoutMonitoringDataNestedInput
  }

  export type ApplicationMonitoringUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    applicationId?: IntFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationMonitoringCreateManyInput = {
    id?: number
    applicationId: number
    online: boolean
    latency: number
    timestamp?: Date | string
  }

  export type ApplicationMonitoringUpdateManyMutationInput = {
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationMonitoringUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    applicationId?: IntFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ServerMonitoringNotificationCreateInput = {
    statusChange: boolean
    cpuLimit: number
    gpuLimit: number
    memoryLimit: number
    diskLimit: number
    temperatureLimit: number
  }

  export type ServerMonitoringNotificationUncheckedCreateInput = {
    id?: number
    statusChange: boolean
    cpuLimit: number
    gpuLimit: number
    memoryLimit: number
    diskLimit: number
    temperatureLimit: number
  }

  export type ServerMonitoringNotificationUpdateInput = {
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    cpuLimit?: FloatFieldUpdateOperationsInput | number
    gpuLimit?: FloatFieldUpdateOperationsInput | number
    memoryLimit?: FloatFieldUpdateOperationsInput | number
    diskLimit?: FloatFieldUpdateOperationsInput | number
    temperatureLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ServerMonitoringNotificationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    cpuLimit?: FloatFieldUpdateOperationsInput | number
    gpuLimit?: FloatFieldUpdateOperationsInput | number
    memoryLimit?: FloatFieldUpdateOperationsInput | number
    diskLimit?: FloatFieldUpdateOperationsInput | number
    temperatureLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ServerMonitoringNotificationCreateManyInput = {
    id?: number
    statusChange: boolean
    cpuLimit: number
    gpuLimit: number
    memoryLimit: number
    diskLimit: number
    temperatureLimit: number
  }

  export type ServerMonitoringNotificationUpdateManyMutationInput = {
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    cpuLimit?: FloatFieldUpdateOperationsInput | number
    gpuLimit?: FloatFieldUpdateOperationsInput | number
    memoryLimit?: FloatFieldUpdateOperationsInput | number
    diskLimit?: FloatFieldUpdateOperationsInput | number
    temperatureLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ServerMonitoringNotificationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    cpuLimit?: FloatFieldUpdateOperationsInput | number
    gpuLimit?: FloatFieldUpdateOperationsInput | number
    memoryLimit?: FloatFieldUpdateOperationsInput | number
    diskLimit?: FloatFieldUpdateOperationsInput | number
    temperatureLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ApplicationMonitoringNotificationCreateInput = {
    statusChange: boolean
    latencyLimit: number
  }

  export type ApplicationMonitoringNotificationUncheckedCreateInput = {
    id?: number
    statusChange: boolean
    latencyLimit: number
  }

  export type ApplicationMonitoringNotificationUpdateInput = {
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    latencyLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ApplicationMonitoringNotificationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    latencyLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ApplicationMonitoringNotificationCreateManyInput = {
    id?: number
    statusChange: boolean
    latencyLimit: number
  }

  export type ApplicationMonitoringNotificationUpdateManyMutationInput = {
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    latencyLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type ApplicationMonitoringNotificationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    statusChange?: BoolFieldUpdateOperationsInput | boolean
    latencyLimit?: FloatFieldUpdateOperationsInput | number
  }

  export type NotificationProviderCreateInput = {
    name: string
    type: $Enums.NotificationType
    config: JsonNullValueInput | InputJsonValue
    tests?: NotificationTestCreateNestedManyWithoutNotificationProviderInput
  }

  export type NotificationProviderUncheckedCreateInput = {
    id?: number
    name: string
    type: $Enums.NotificationType
    config: JsonNullValueInput | InputJsonValue
    tests?: NotificationTestUncheckedCreateNestedManyWithoutNotificationProviderInput
  }

  export type NotificationProviderUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
    tests?: NotificationTestUpdateManyWithoutNotificationProviderNestedInput
  }

  export type NotificationProviderUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
    tests?: NotificationTestUncheckedUpdateManyWithoutNotificationProviderNestedInput
  }

  export type NotificationProviderCreateManyInput = {
    id?: number
    name: string
    type: $Enums.NotificationType
    config: JsonNullValueInput | InputJsonValue
  }

  export type NotificationProviderUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
  }

  export type NotificationProviderUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
  }

  export type NotificationTestCreateInput = {
    success: boolean
    notificationProvider: NotificationProviderCreateNestedOneWithoutTestsInput
  }

  export type NotificationTestUncheckedCreateInput = {
    id?: number
    notificationProviderId: number
    success: boolean
  }

  export type NotificationTestUpdateInput = {
    success?: BoolFieldUpdateOperationsInput | boolean
    notificationProvider?: NotificationProviderUpdateOneRequiredWithoutTestsNestedInput
  }

  export type NotificationTestUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    notificationProviderId?: IntFieldUpdateOperationsInput | number
    success?: BoolFieldUpdateOperationsInput | boolean
  }

  export type NotificationTestCreateManyInput = {
    id?: number
    notificationProviderId: number
    success: boolean
  }

  export type NotificationTestUpdateManyMutationInput = {
    success?: BoolFieldUpdateOperationsInput | boolean
  }

  export type NotificationTestUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    notificationProviderId?: IntFieldUpdateOperationsInput | number
    success?: BoolFieldUpdateOperationsInput | boolean
  }

  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 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 SortOrderInput = {
    sort: SortOrder
    nulls?: NullsOrder
  }

  export type UserCountOrderByAggregateInput = {
    id?: SortOrder
    username?: SortOrder
    name?: SortOrder
    email?: SortOrder
    password?: SortOrder
    lastLogin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type UserMaxOrderByAggregateInput = {
    id?: SortOrder
    username?: SortOrder
    name?: SortOrder
    email?: SortOrder
    password?: SortOrder
    lastLogin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type UserMinOrderByAggregateInput = {
    id?: SortOrder
    username?: SortOrder
    name?: SortOrder
    email?: SortOrder
    password?: SortOrder
    lastLogin?: SortOrder
    createdAt?: SortOrder
    updatedAt?: 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 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 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 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 NetworkListRelationFilter = {
    every?: NetworkWhereInput
    some?: NetworkWhereInput
    none?: NetworkWhereInput
  }

  export type NetworkOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type SiteCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    description?: SortOrder
  }

  export type SiteAvgOrderByAggregateInput = {
    id?: SortOrder
  }

  export type SiteMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    description?: SortOrder
  }

  export type SiteMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    description?: SortOrder
  }

  export type SiteSumOrderByAggregateInput = {
    id?: 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 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 SiteScalarRelationFilter = {
    is?: SiteWhereInput
    isNot?: SiteWhereInput
  }

  export type ServerListRelationFilter = {
    every?: ServerWhereInput
    some?: ServerWhereInput
    none?: ServerWhereInput
  }

  export type ServerOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type NetworkCountOrderByAggregateInput = {
    id?: SortOrder
    siteId?: SortOrder
    name?: SortOrder
    ipv4Subnet?: SortOrder
    ipv6Subnet?: SortOrder
    gateway?: SortOrder
  }

  export type NetworkAvgOrderByAggregateInput = {
    id?: SortOrder
    siteId?: SortOrder
  }

  export type NetworkMaxOrderByAggregateInput = {
    id?: SortOrder
    siteId?: SortOrder
    name?: SortOrder
    ipv4Subnet?: SortOrder
    ipv6Subnet?: SortOrder
    gateway?: SortOrder
  }

  export type NetworkMinOrderByAggregateInput = {
    id?: SortOrder
    siteId?: SortOrder
    name?: SortOrder
    ipv4Subnet?: SortOrder
    ipv6Subnet?: SortOrder
    gateway?: SortOrder
  }

  export type NetworkSumOrderByAggregateInput = {
    id?: SortOrder
    siteId?: SortOrder
  }

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

  export type NetworkScalarRelationFilter = {
    is?: NetworkWhereInput
    isNot?: NetworkWhereInput
  }

  export type ServerMonitoringListRelationFilter = {
    every?: ServerMonitoringWhereInput
    some?: ServerMonitoringWhereInput
    none?: ServerMonitoringWhereInput
  }

  export type ApplicationListRelationFilter = {
    every?: ApplicationWhereInput
    some?: ApplicationWhereInput
    none?: ApplicationWhereInput
  }

  export type ServerMonitoringOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ApplicationOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ServerCountOrderByAggregateInput = {
    id?: SortOrder
    networkId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    ipv4Address?: SortOrder
    osDetails?: SortOrder
    cpuDetails?: SortOrder
    gpuDetails?: SortOrder
    memoryDetails?: SortOrder
    storageDetails?: SortOrder
    managementUrl?: SortOrder
    monitoring?: SortOrder
    monitoringUrl?: SortOrder
  }

  export type ServerAvgOrderByAggregateInput = {
    id?: SortOrder
    networkId?: SortOrder
  }

  export type ServerMaxOrderByAggregateInput = {
    id?: SortOrder
    networkId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    ipv4Address?: SortOrder
    osDetails?: SortOrder
    cpuDetails?: SortOrder
    gpuDetails?: SortOrder
    memoryDetails?: SortOrder
    storageDetails?: SortOrder
    managementUrl?: SortOrder
    monitoring?: SortOrder
    monitoringUrl?: SortOrder
  }

  export type ServerMinOrderByAggregateInput = {
    id?: SortOrder
    networkId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    ipv4Address?: SortOrder
    osDetails?: SortOrder
    cpuDetails?: SortOrder
    gpuDetails?: SortOrder
    memoryDetails?: SortOrder
    storageDetails?: SortOrder
    managementUrl?: SortOrder
    monitoring?: SortOrder
    monitoringUrl?: SortOrder
  }

  export type ServerSumOrderByAggregateInput = {
    id?: SortOrder
    networkId?: 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 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 ServerScalarRelationFilter = {
    is?: ServerWhereInput
    isNot?: ServerWhereInput
  }

  export type ServerMonitoringCountOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    online?: SortOrder
    uptimeSeconds?: SortOrder
    timestamp?: SortOrder
  }

  export type ServerMonitoringAvgOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    uptimeSeconds?: SortOrder
  }

  export type ServerMonitoringMaxOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    online?: SortOrder
    uptimeSeconds?: SortOrder
    timestamp?: SortOrder
  }

  export type ServerMonitoringMinOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    online?: SortOrder
    uptimeSeconds?: SortOrder
    timestamp?: SortOrder
  }

  export type ServerMonitoringSumOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    cpuPercentUsage?: SortOrder
    gpuPercentUsage?: SortOrder
    memoryUsage?: SortOrder
    memoryPercentUsage?: SortOrder
    diskUsage?: SortOrder
    diskPercentUsage?: SortOrder
    temperature?: SortOrder
    uptimeSeconds?: SortOrder
  }

  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 ApplicationMonitoringListRelationFilter = {
    every?: ApplicationMonitoringWhereInput
    some?: ApplicationMonitoringWhereInput
    none?: ApplicationMonitoringWhereInput
  }

  export type ApplicationMonitoringOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ApplicationCountOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    url?: SortOrder
    monitoring?: SortOrder
  }

  export type ApplicationAvgOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
  }

  export type ApplicationMaxOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    url?: SortOrder
    monitoring?: SortOrder
  }

  export type ApplicationMinOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
    name?: SortOrder
    description?: SortOrder
    icon?: SortOrder
    url?: SortOrder
    monitoring?: SortOrder
  }

  export type ApplicationSumOrderByAggregateInput = {
    id?: SortOrder
    serverId?: SortOrder
  }

  export type ApplicationScalarRelationFilter = {
    is?: ApplicationWhereInput
    isNot?: ApplicationWhereInput
  }

  export type ApplicationMonitoringCountOrderByAggregateInput = {
    id?: SortOrder
    applicationId?: SortOrder
    online?: SortOrder
    latency?: SortOrder
    timestamp?: SortOrder
  }

  export type ApplicationMonitoringAvgOrderByAggregateInput = {
    id?: SortOrder
    applicationId?: SortOrder
    latency?: SortOrder
  }

  export type ApplicationMonitoringMaxOrderByAggregateInput = {
    id?: SortOrder
    applicationId?: SortOrder
    online?: SortOrder
    latency?: SortOrder
    timestamp?: SortOrder
  }

  export type ApplicationMonitoringMinOrderByAggregateInput = {
    id?: SortOrder
    applicationId?: SortOrder
    online?: SortOrder
    latency?: SortOrder
    timestamp?: SortOrder
  }

  export type ApplicationMonitoringSumOrderByAggregateInput = {
    id?: SortOrder
    applicationId?: SortOrder
    latency?: SortOrder
  }

  export type ServerMonitoringNotificationCountOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ServerMonitoringNotificationAvgOrderByAggregateInput = {
    id?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ServerMonitoringNotificationMaxOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ServerMonitoringNotificationMinOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ServerMonitoringNotificationSumOrderByAggregateInput = {
    id?: SortOrder
    cpuLimit?: SortOrder
    gpuLimit?: SortOrder
    memoryLimit?: SortOrder
    diskLimit?: SortOrder
    temperatureLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationCountOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    latencyLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationAvgOrderByAggregateInput = {
    id?: SortOrder
    latencyLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationMaxOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    latencyLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationMinOrderByAggregateInput = {
    id?: SortOrder
    statusChange?: SortOrder
    latencyLimit?: SortOrder
  }

  export type ApplicationMonitoringNotificationSumOrderByAggregateInput = {
    id?: SortOrder
    latencyLimit?: SortOrder
  }

  export type EnumNotificationTypeFilter<$PrismaModel = never> = {
    equals?: $Enums.NotificationType | EnumNotificationTypeFieldRefInput<$PrismaModel>
    in?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    notIn?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    not?: NestedEnumNotificationTypeFilter<$PrismaModel> | $Enums.NotificationType
  }
  export type JsonFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonFilterBase<$PrismaModel>>, 'path'>>

  export type JsonFilterBase<$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 NotificationTestListRelationFilter = {
    every?: NotificationTestWhereInput
    some?: NotificationTestWhereInput
    none?: NotificationTestWhereInput
  }

  export type NotificationTestOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type NotificationProviderCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    type?: SortOrder
    config?: SortOrder
  }

  export type NotificationProviderAvgOrderByAggregateInput = {
    id?: SortOrder
  }

  export type NotificationProviderMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    type?: SortOrder
  }

  export type NotificationProviderMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    type?: SortOrder
  }

  export type NotificationProviderSumOrderByAggregateInput = {
    id?: SortOrder
  }

  export type EnumNotificationTypeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.NotificationType | EnumNotificationTypeFieldRefInput<$PrismaModel>
    in?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    notIn?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    not?: NestedEnumNotificationTypeWithAggregatesFilter<$PrismaModel> | $Enums.NotificationType
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumNotificationTypeFilter<$PrismaModel>
    _max?: NestedEnumNotificationTypeFilter<$PrismaModel>
  }
  export type JsonWithAggregatesFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonWithAggregatesFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonWithAggregatesFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonWithAggregatesFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonWithAggregatesFilterBase<$PrismaModel>>, 'path'>>

  export type JsonWithAggregatesFilterBase<$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?: NestedIntFilter<$PrismaModel>
    _min?: NestedJsonFilter<$PrismaModel>
    _max?: NestedJsonFilter<$PrismaModel>
  }

  export type NotificationProviderScalarRelationFilter = {
    is?: NotificationProviderWhereInput
    isNot?: NotificationProviderWhereInput
  }

  export type NotificationTestCountOrderByAggregateInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
    success?: SortOrder
  }

  export type NotificationTestAvgOrderByAggregateInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
  }

  export type NotificationTestMaxOrderByAggregateInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
    success?: SortOrder
  }

  export type NotificationTestMinOrderByAggregateInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
    success?: SortOrder
  }

  export type NotificationTestSumOrderByAggregateInput = {
    id?: SortOrder
    notificationProviderId?: SortOrder
  }

  export type StringFieldUpdateOperationsInput = {
    set?: string
  }

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

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

  export type NetworkCreateNestedManyWithoutSiteInput = {
    create?: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput> | NetworkCreateWithoutSiteInput[] | NetworkUncheckedCreateWithoutSiteInput[]
    connectOrCreate?: NetworkCreateOrConnectWithoutSiteInput | NetworkCreateOrConnectWithoutSiteInput[]
    createMany?: NetworkCreateManySiteInputEnvelope
    connect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
  }

  export type NetworkUncheckedCreateNestedManyWithoutSiteInput = {
    create?: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput> | NetworkCreateWithoutSiteInput[] | NetworkUncheckedCreateWithoutSiteInput[]
    connectOrCreate?: NetworkCreateOrConnectWithoutSiteInput | NetworkCreateOrConnectWithoutSiteInput[]
    createMany?: NetworkCreateManySiteInputEnvelope
    connect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
  }

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

  export type NetworkUpdateManyWithoutSiteNestedInput = {
    create?: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput> | NetworkCreateWithoutSiteInput[] | NetworkUncheckedCreateWithoutSiteInput[]
    connectOrCreate?: NetworkCreateOrConnectWithoutSiteInput | NetworkCreateOrConnectWithoutSiteInput[]
    upsert?: NetworkUpsertWithWhereUniqueWithoutSiteInput | NetworkUpsertWithWhereUniqueWithoutSiteInput[]
    createMany?: NetworkCreateManySiteInputEnvelope
    set?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    disconnect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    delete?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    connect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    update?: NetworkUpdateWithWhereUniqueWithoutSiteInput | NetworkUpdateWithWhereUniqueWithoutSiteInput[]
    updateMany?: NetworkUpdateManyWithWhereWithoutSiteInput | NetworkUpdateManyWithWhereWithoutSiteInput[]
    deleteMany?: NetworkScalarWhereInput | NetworkScalarWhereInput[]
  }

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

  export type NetworkUncheckedUpdateManyWithoutSiteNestedInput = {
    create?: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput> | NetworkCreateWithoutSiteInput[] | NetworkUncheckedCreateWithoutSiteInput[]
    connectOrCreate?: NetworkCreateOrConnectWithoutSiteInput | NetworkCreateOrConnectWithoutSiteInput[]
    upsert?: NetworkUpsertWithWhereUniqueWithoutSiteInput | NetworkUpsertWithWhereUniqueWithoutSiteInput[]
    createMany?: NetworkCreateManySiteInputEnvelope
    set?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    disconnect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    delete?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    connect?: NetworkWhereUniqueInput | NetworkWhereUniqueInput[]
    update?: NetworkUpdateWithWhereUniqueWithoutSiteInput | NetworkUpdateWithWhereUniqueWithoutSiteInput[]
    updateMany?: NetworkUpdateManyWithWhereWithoutSiteInput | NetworkUpdateManyWithWhereWithoutSiteInput[]
    deleteMany?: NetworkScalarWhereInput | NetworkScalarWhereInput[]
  }

  export type SiteCreateNestedOneWithoutNetworksInput = {
    create?: XOR<SiteCreateWithoutNetworksInput, SiteUncheckedCreateWithoutNetworksInput>
    connectOrCreate?: SiteCreateOrConnectWithoutNetworksInput
    connect?: SiteWhereUniqueInput
  }

  export type ServerCreateNestedManyWithoutNetworkInput = {
    create?: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput> | ServerCreateWithoutNetworkInput[] | ServerUncheckedCreateWithoutNetworkInput[]
    connectOrCreate?: ServerCreateOrConnectWithoutNetworkInput | ServerCreateOrConnectWithoutNetworkInput[]
    createMany?: ServerCreateManyNetworkInputEnvelope
    connect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
  }

  export type ServerUncheckedCreateNestedManyWithoutNetworkInput = {
    create?: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput> | ServerCreateWithoutNetworkInput[] | ServerUncheckedCreateWithoutNetworkInput[]
    connectOrCreate?: ServerCreateOrConnectWithoutNetworkInput | ServerCreateOrConnectWithoutNetworkInput[]
    createMany?: ServerCreateManyNetworkInputEnvelope
    connect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
  }

  export type SiteUpdateOneRequiredWithoutNetworksNestedInput = {
    create?: XOR<SiteCreateWithoutNetworksInput, SiteUncheckedCreateWithoutNetworksInput>
    connectOrCreate?: SiteCreateOrConnectWithoutNetworksInput
    upsert?: SiteUpsertWithoutNetworksInput
    connect?: SiteWhereUniqueInput
    update?: XOR<XOR<SiteUpdateToOneWithWhereWithoutNetworksInput, SiteUpdateWithoutNetworksInput>, SiteUncheckedUpdateWithoutNetworksInput>
  }

  export type ServerUpdateManyWithoutNetworkNestedInput = {
    create?: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput> | ServerCreateWithoutNetworkInput[] | ServerUncheckedCreateWithoutNetworkInput[]
    connectOrCreate?: ServerCreateOrConnectWithoutNetworkInput | ServerCreateOrConnectWithoutNetworkInput[]
    upsert?: ServerUpsertWithWhereUniqueWithoutNetworkInput | ServerUpsertWithWhereUniqueWithoutNetworkInput[]
    createMany?: ServerCreateManyNetworkInputEnvelope
    set?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    disconnect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    delete?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    connect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    update?: ServerUpdateWithWhereUniqueWithoutNetworkInput | ServerUpdateWithWhereUniqueWithoutNetworkInput[]
    updateMany?: ServerUpdateManyWithWhereWithoutNetworkInput | ServerUpdateManyWithWhereWithoutNetworkInput[]
    deleteMany?: ServerScalarWhereInput | ServerScalarWhereInput[]
  }

  export type ServerUncheckedUpdateManyWithoutNetworkNestedInput = {
    create?: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput> | ServerCreateWithoutNetworkInput[] | ServerUncheckedCreateWithoutNetworkInput[]
    connectOrCreate?: ServerCreateOrConnectWithoutNetworkInput | ServerCreateOrConnectWithoutNetworkInput[]
    upsert?: ServerUpsertWithWhereUniqueWithoutNetworkInput | ServerUpsertWithWhereUniqueWithoutNetworkInput[]
    createMany?: ServerCreateManyNetworkInputEnvelope
    set?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    disconnect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    delete?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    connect?: ServerWhereUniqueInput | ServerWhereUniqueInput[]
    update?: ServerUpdateWithWhereUniqueWithoutNetworkInput | ServerUpdateWithWhereUniqueWithoutNetworkInput[]
    updateMany?: ServerUpdateManyWithWhereWithoutNetworkInput | ServerUpdateManyWithWhereWithoutNetworkInput[]
    deleteMany?: ServerScalarWhereInput | ServerScalarWhereInput[]
  }

  export type NetworkCreateNestedOneWithoutServersInput = {
    create?: XOR<NetworkCreateWithoutServersInput, NetworkUncheckedCreateWithoutServersInput>
    connectOrCreate?: NetworkCreateOrConnectWithoutServersInput
    connect?: NetworkWhereUniqueInput
  }

  export type ServerMonitoringCreateNestedManyWithoutServerInput = {
    create?: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput> | ServerMonitoringCreateWithoutServerInput[] | ServerMonitoringUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ServerMonitoringCreateOrConnectWithoutServerInput | ServerMonitoringCreateOrConnectWithoutServerInput[]
    createMany?: ServerMonitoringCreateManyServerInputEnvelope
    connect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
  }

  export type ApplicationCreateNestedManyWithoutServerInput = {
    create?: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput> | ApplicationCreateWithoutServerInput[] | ApplicationUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ApplicationCreateOrConnectWithoutServerInput | ApplicationCreateOrConnectWithoutServerInput[]
    createMany?: ApplicationCreateManyServerInputEnvelope
    connect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
  }

  export type ServerMonitoringUncheckedCreateNestedManyWithoutServerInput = {
    create?: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput> | ServerMonitoringCreateWithoutServerInput[] | ServerMonitoringUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ServerMonitoringCreateOrConnectWithoutServerInput | ServerMonitoringCreateOrConnectWithoutServerInput[]
    createMany?: ServerMonitoringCreateManyServerInputEnvelope
    connect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
  }

  export type ApplicationUncheckedCreateNestedManyWithoutServerInput = {
    create?: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput> | ApplicationCreateWithoutServerInput[] | ApplicationUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ApplicationCreateOrConnectWithoutServerInput | ApplicationCreateOrConnectWithoutServerInput[]
    createMany?: ApplicationCreateManyServerInputEnvelope
    connect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
  }

  export type BoolFieldUpdateOperationsInput = {
    set?: boolean
  }

  export type NetworkUpdateOneRequiredWithoutServersNestedInput = {
    create?: XOR<NetworkCreateWithoutServersInput, NetworkUncheckedCreateWithoutServersInput>
    connectOrCreate?: NetworkCreateOrConnectWithoutServersInput
    upsert?: NetworkUpsertWithoutServersInput
    connect?: NetworkWhereUniqueInput
    update?: XOR<XOR<NetworkUpdateToOneWithWhereWithoutServersInput, NetworkUpdateWithoutServersInput>, NetworkUncheckedUpdateWithoutServersInput>
  }

  export type ServerMonitoringUpdateManyWithoutServerNestedInput = {
    create?: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput> | ServerMonitoringCreateWithoutServerInput[] | ServerMonitoringUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ServerMonitoringCreateOrConnectWithoutServerInput | ServerMonitoringCreateOrConnectWithoutServerInput[]
    upsert?: ServerMonitoringUpsertWithWhereUniqueWithoutServerInput | ServerMonitoringUpsertWithWhereUniqueWithoutServerInput[]
    createMany?: ServerMonitoringCreateManyServerInputEnvelope
    set?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    disconnect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    delete?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    connect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    update?: ServerMonitoringUpdateWithWhereUniqueWithoutServerInput | ServerMonitoringUpdateWithWhereUniqueWithoutServerInput[]
    updateMany?: ServerMonitoringUpdateManyWithWhereWithoutServerInput | ServerMonitoringUpdateManyWithWhereWithoutServerInput[]
    deleteMany?: ServerMonitoringScalarWhereInput | ServerMonitoringScalarWhereInput[]
  }

  export type ApplicationUpdateManyWithoutServerNestedInput = {
    create?: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput> | ApplicationCreateWithoutServerInput[] | ApplicationUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ApplicationCreateOrConnectWithoutServerInput | ApplicationCreateOrConnectWithoutServerInput[]
    upsert?: ApplicationUpsertWithWhereUniqueWithoutServerInput | ApplicationUpsertWithWhereUniqueWithoutServerInput[]
    createMany?: ApplicationCreateManyServerInputEnvelope
    set?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    disconnect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    delete?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    connect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    update?: ApplicationUpdateWithWhereUniqueWithoutServerInput | ApplicationUpdateWithWhereUniqueWithoutServerInput[]
    updateMany?: ApplicationUpdateManyWithWhereWithoutServerInput | ApplicationUpdateManyWithWhereWithoutServerInput[]
    deleteMany?: ApplicationScalarWhereInput | ApplicationScalarWhereInput[]
  }

  export type ServerMonitoringUncheckedUpdateManyWithoutServerNestedInput = {
    create?: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput> | ServerMonitoringCreateWithoutServerInput[] | ServerMonitoringUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ServerMonitoringCreateOrConnectWithoutServerInput | ServerMonitoringCreateOrConnectWithoutServerInput[]
    upsert?: ServerMonitoringUpsertWithWhereUniqueWithoutServerInput | ServerMonitoringUpsertWithWhereUniqueWithoutServerInput[]
    createMany?: ServerMonitoringCreateManyServerInputEnvelope
    set?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    disconnect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    delete?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    connect?: ServerMonitoringWhereUniqueInput | ServerMonitoringWhereUniqueInput[]
    update?: ServerMonitoringUpdateWithWhereUniqueWithoutServerInput | ServerMonitoringUpdateWithWhereUniqueWithoutServerInput[]
    updateMany?: ServerMonitoringUpdateManyWithWhereWithoutServerInput | ServerMonitoringUpdateManyWithWhereWithoutServerInput[]
    deleteMany?: ServerMonitoringScalarWhereInput | ServerMonitoringScalarWhereInput[]
  }

  export type ApplicationUncheckedUpdateManyWithoutServerNestedInput = {
    create?: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput> | ApplicationCreateWithoutServerInput[] | ApplicationUncheckedCreateWithoutServerInput[]
    connectOrCreate?: ApplicationCreateOrConnectWithoutServerInput | ApplicationCreateOrConnectWithoutServerInput[]
    upsert?: ApplicationUpsertWithWhereUniqueWithoutServerInput | ApplicationUpsertWithWhereUniqueWithoutServerInput[]
    createMany?: ApplicationCreateManyServerInputEnvelope
    set?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    disconnect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    delete?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    connect?: ApplicationWhereUniqueInput | ApplicationWhereUniqueInput[]
    update?: ApplicationUpdateWithWhereUniqueWithoutServerInput | ApplicationUpdateWithWhereUniqueWithoutServerInput[]
    updateMany?: ApplicationUpdateManyWithWhereWithoutServerInput | ApplicationUpdateManyWithWhereWithoutServerInput[]
    deleteMany?: ApplicationScalarWhereInput | ApplicationScalarWhereInput[]
  }

  export type ServerCreateNestedOneWithoutMonitoringDataInput = {
    create?: XOR<ServerCreateWithoutMonitoringDataInput, ServerUncheckedCreateWithoutMonitoringDataInput>
    connectOrCreate?: ServerCreateOrConnectWithoutMonitoringDataInput
    connect?: ServerWhereUniqueInput
  }

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

  export type ServerUpdateOneRequiredWithoutMonitoringDataNestedInput = {
    create?: XOR<ServerCreateWithoutMonitoringDataInput, ServerUncheckedCreateWithoutMonitoringDataInput>
    connectOrCreate?: ServerCreateOrConnectWithoutMonitoringDataInput
    upsert?: ServerUpsertWithoutMonitoringDataInput
    connect?: ServerWhereUniqueInput
    update?: XOR<XOR<ServerUpdateToOneWithWhereWithoutMonitoringDataInput, ServerUpdateWithoutMonitoringDataInput>, ServerUncheckedUpdateWithoutMonitoringDataInput>
  }

  export type ServerCreateNestedOneWithoutApplicationsInput = {
    create?: XOR<ServerCreateWithoutApplicationsInput, ServerUncheckedCreateWithoutApplicationsInput>
    connectOrCreate?: ServerCreateOrConnectWithoutApplicationsInput
    connect?: ServerWhereUniqueInput
  }

  export type ApplicationMonitoringCreateNestedManyWithoutApplicationInput = {
    create?: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput> | ApplicationMonitoringCreateWithoutApplicationInput[] | ApplicationMonitoringUncheckedCreateWithoutApplicationInput[]
    connectOrCreate?: ApplicationMonitoringCreateOrConnectWithoutApplicationInput | ApplicationMonitoringCreateOrConnectWithoutApplicationInput[]
    createMany?: ApplicationMonitoringCreateManyApplicationInputEnvelope
    connect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
  }

  export type ApplicationMonitoringUncheckedCreateNestedManyWithoutApplicationInput = {
    create?: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput> | ApplicationMonitoringCreateWithoutApplicationInput[] | ApplicationMonitoringUncheckedCreateWithoutApplicationInput[]
    connectOrCreate?: ApplicationMonitoringCreateOrConnectWithoutApplicationInput | ApplicationMonitoringCreateOrConnectWithoutApplicationInput[]
    createMany?: ApplicationMonitoringCreateManyApplicationInputEnvelope
    connect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
  }

  export type ServerUpdateOneRequiredWithoutApplicationsNestedInput = {
    create?: XOR<ServerCreateWithoutApplicationsInput, ServerUncheckedCreateWithoutApplicationsInput>
    connectOrCreate?: ServerCreateOrConnectWithoutApplicationsInput
    upsert?: ServerUpsertWithoutApplicationsInput
    connect?: ServerWhereUniqueInput
    update?: XOR<XOR<ServerUpdateToOneWithWhereWithoutApplicationsInput, ServerUpdateWithoutApplicationsInput>, ServerUncheckedUpdateWithoutApplicationsInput>
  }

  export type ApplicationMonitoringUpdateManyWithoutApplicationNestedInput = {
    create?: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput> | ApplicationMonitoringCreateWithoutApplicationInput[] | ApplicationMonitoringUncheckedCreateWithoutApplicationInput[]
    connectOrCreate?: ApplicationMonitoringCreateOrConnectWithoutApplicationInput | ApplicationMonitoringCreateOrConnectWithoutApplicationInput[]
    upsert?: ApplicationMonitoringUpsertWithWhereUniqueWithoutApplicationInput | ApplicationMonitoringUpsertWithWhereUniqueWithoutApplicationInput[]
    createMany?: ApplicationMonitoringCreateManyApplicationInputEnvelope
    set?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    disconnect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    delete?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    connect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    update?: ApplicationMonitoringUpdateWithWhereUniqueWithoutApplicationInput | ApplicationMonitoringUpdateWithWhereUniqueWithoutApplicationInput[]
    updateMany?: ApplicationMonitoringUpdateManyWithWhereWithoutApplicationInput | ApplicationMonitoringUpdateManyWithWhereWithoutApplicationInput[]
    deleteMany?: ApplicationMonitoringScalarWhereInput | ApplicationMonitoringScalarWhereInput[]
  }

  export type ApplicationMonitoringUncheckedUpdateManyWithoutApplicationNestedInput = {
    create?: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput> | ApplicationMonitoringCreateWithoutApplicationInput[] | ApplicationMonitoringUncheckedCreateWithoutApplicationInput[]
    connectOrCreate?: ApplicationMonitoringCreateOrConnectWithoutApplicationInput | ApplicationMonitoringCreateOrConnectWithoutApplicationInput[]
    upsert?: ApplicationMonitoringUpsertWithWhereUniqueWithoutApplicationInput | ApplicationMonitoringUpsertWithWhereUniqueWithoutApplicationInput[]
    createMany?: ApplicationMonitoringCreateManyApplicationInputEnvelope
    set?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    disconnect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    delete?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    connect?: ApplicationMonitoringWhereUniqueInput | ApplicationMonitoringWhereUniqueInput[]
    update?: ApplicationMonitoringUpdateWithWhereUniqueWithoutApplicationInput | ApplicationMonitoringUpdateWithWhereUniqueWithoutApplicationInput[]
    updateMany?: ApplicationMonitoringUpdateManyWithWhereWithoutApplicationInput | ApplicationMonitoringUpdateManyWithWhereWithoutApplicationInput[]
    deleteMany?: ApplicationMonitoringScalarWhereInput | ApplicationMonitoringScalarWhereInput[]
  }

  export type ApplicationCreateNestedOneWithoutMonitoringDataInput = {
    create?: XOR<ApplicationCreateWithoutMonitoringDataInput, ApplicationUncheckedCreateWithoutMonitoringDataInput>
    connectOrCreate?: ApplicationCreateOrConnectWithoutMonitoringDataInput
    connect?: ApplicationWhereUniqueInput
  }

  export type ApplicationUpdateOneRequiredWithoutMonitoringDataNestedInput = {
    create?: XOR<ApplicationCreateWithoutMonitoringDataInput, ApplicationUncheckedCreateWithoutMonitoringDataInput>
    connectOrCreate?: ApplicationCreateOrConnectWithoutMonitoringDataInput
    upsert?: ApplicationUpsertWithoutMonitoringDataInput
    connect?: ApplicationWhereUniqueInput
    update?: XOR<XOR<ApplicationUpdateToOneWithWhereWithoutMonitoringDataInput, ApplicationUpdateWithoutMonitoringDataInput>, ApplicationUncheckedUpdateWithoutMonitoringDataInput>
  }

  export type NotificationTestCreateNestedManyWithoutNotificationProviderInput = {
    create?: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput> | NotificationTestCreateWithoutNotificationProviderInput[] | NotificationTestUncheckedCreateWithoutNotificationProviderInput[]
    connectOrCreate?: NotificationTestCreateOrConnectWithoutNotificationProviderInput | NotificationTestCreateOrConnectWithoutNotificationProviderInput[]
    createMany?: NotificationTestCreateManyNotificationProviderInputEnvelope
    connect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
  }

  export type NotificationTestUncheckedCreateNestedManyWithoutNotificationProviderInput = {
    create?: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput> | NotificationTestCreateWithoutNotificationProviderInput[] | NotificationTestUncheckedCreateWithoutNotificationProviderInput[]
    connectOrCreate?: NotificationTestCreateOrConnectWithoutNotificationProviderInput | NotificationTestCreateOrConnectWithoutNotificationProviderInput[]
    createMany?: NotificationTestCreateManyNotificationProviderInputEnvelope
    connect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
  }

  export type EnumNotificationTypeFieldUpdateOperationsInput = {
    set?: $Enums.NotificationType
  }

  export type NotificationTestUpdateManyWithoutNotificationProviderNestedInput = {
    create?: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput> | NotificationTestCreateWithoutNotificationProviderInput[] | NotificationTestUncheckedCreateWithoutNotificationProviderInput[]
    connectOrCreate?: NotificationTestCreateOrConnectWithoutNotificationProviderInput | NotificationTestCreateOrConnectWithoutNotificationProviderInput[]
    upsert?: NotificationTestUpsertWithWhereUniqueWithoutNotificationProviderInput | NotificationTestUpsertWithWhereUniqueWithoutNotificationProviderInput[]
    createMany?: NotificationTestCreateManyNotificationProviderInputEnvelope
    set?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    disconnect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    delete?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    connect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    update?: NotificationTestUpdateWithWhereUniqueWithoutNotificationProviderInput | NotificationTestUpdateWithWhereUniqueWithoutNotificationProviderInput[]
    updateMany?: NotificationTestUpdateManyWithWhereWithoutNotificationProviderInput | NotificationTestUpdateManyWithWhereWithoutNotificationProviderInput[]
    deleteMany?: NotificationTestScalarWhereInput | NotificationTestScalarWhereInput[]
  }

  export type NotificationTestUncheckedUpdateManyWithoutNotificationProviderNestedInput = {
    create?: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput> | NotificationTestCreateWithoutNotificationProviderInput[] | NotificationTestUncheckedCreateWithoutNotificationProviderInput[]
    connectOrCreate?: NotificationTestCreateOrConnectWithoutNotificationProviderInput | NotificationTestCreateOrConnectWithoutNotificationProviderInput[]
    upsert?: NotificationTestUpsertWithWhereUniqueWithoutNotificationProviderInput | NotificationTestUpsertWithWhereUniqueWithoutNotificationProviderInput[]
    createMany?: NotificationTestCreateManyNotificationProviderInputEnvelope
    set?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    disconnect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    delete?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    connect?: NotificationTestWhereUniqueInput | NotificationTestWhereUniqueInput[]
    update?: NotificationTestUpdateWithWhereUniqueWithoutNotificationProviderInput | NotificationTestUpdateWithWhereUniqueWithoutNotificationProviderInput[]
    updateMany?: NotificationTestUpdateManyWithWhereWithoutNotificationProviderInput | NotificationTestUpdateManyWithWhereWithoutNotificationProviderInput[]
    deleteMany?: NotificationTestScalarWhereInput | NotificationTestScalarWhereInput[]
  }

  export type NotificationProviderCreateNestedOneWithoutTestsInput = {
    create?: XOR<NotificationProviderCreateWithoutTestsInput, NotificationProviderUncheckedCreateWithoutTestsInput>
    connectOrCreate?: NotificationProviderCreateOrConnectWithoutTestsInput
    connect?: NotificationProviderWhereUniqueInput
  }

  export type NotificationProviderUpdateOneRequiredWithoutTestsNestedInput = {
    create?: XOR<NotificationProviderCreateWithoutTestsInput, NotificationProviderUncheckedCreateWithoutTestsInput>
    connectOrCreate?: NotificationProviderCreateOrConnectWithoutTestsInput
    upsert?: NotificationProviderUpsertWithoutTestsInput
    connect?: NotificationProviderWhereUniqueInput
    update?: XOR<XOR<NotificationProviderUpdateToOneWithWhereWithoutTestsInput, NotificationProviderUpdateWithoutTestsInput>, NotificationProviderUncheckedUpdateWithoutTestsInput>
  }

  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 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 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 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 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 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 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 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 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 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 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 NestedEnumNotificationTypeFilter<$PrismaModel = never> = {
    equals?: $Enums.NotificationType | EnumNotificationTypeFieldRefInput<$PrismaModel>
    in?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    notIn?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    not?: NestedEnumNotificationTypeFilter<$PrismaModel> | $Enums.NotificationType
  }

  export type NestedEnumNotificationTypeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.NotificationType | EnumNotificationTypeFieldRefInput<$PrismaModel>
    in?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    notIn?: $Enums.NotificationType[] | ListEnumNotificationTypeFieldRefInput<$PrismaModel>
    not?: NestedEnumNotificationTypeWithAggregatesFilter<$PrismaModel> | $Enums.NotificationType
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumNotificationTypeFilter<$PrismaModel>
    _max?: NestedEnumNotificationTypeFilter<$PrismaModel>
  }
  export type NestedJsonFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<NestedJsonFilterBase<$PrismaModel>>, Exclude<keyof Required<NestedJsonFilterBase<$PrismaModel>>, 'path'>>,
        Required<NestedJsonFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<NestedJsonFilterBase<$PrismaModel>>, 'path'>>

  export type NestedJsonFilterBase<$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 NetworkCreateWithoutSiteInput = {
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
    servers?: ServerCreateNestedManyWithoutNetworkInput
  }

  export type NetworkUncheckedCreateWithoutSiteInput = {
    id?: number
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
    servers?: ServerUncheckedCreateNestedManyWithoutNetworkInput
  }

  export type NetworkCreateOrConnectWithoutSiteInput = {
    where: NetworkWhereUniqueInput
    create: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput>
  }

  export type NetworkCreateManySiteInputEnvelope = {
    data: NetworkCreateManySiteInput | NetworkCreateManySiteInput[]
    skipDuplicates?: boolean
  }

  export type NetworkUpsertWithWhereUniqueWithoutSiteInput = {
    where: NetworkWhereUniqueInput
    update: XOR<NetworkUpdateWithoutSiteInput, NetworkUncheckedUpdateWithoutSiteInput>
    create: XOR<NetworkCreateWithoutSiteInput, NetworkUncheckedCreateWithoutSiteInput>
  }

  export type NetworkUpdateWithWhereUniqueWithoutSiteInput = {
    where: NetworkWhereUniqueInput
    data: XOR<NetworkUpdateWithoutSiteInput, NetworkUncheckedUpdateWithoutSiteInput>
  }

  export type NetworkUpdateManyWithWhereWithoutSiteInput = {
    where: NetworkScalarWhereInput
    data: XOR<NetworkUpdateManyMutationInput, NetworkUncheckedUpdateManyWithoutSiteInput>
  }

  export type NetworkScalarWhereInput = {
    AND?: NetworkScalarWhereInput | NetworkScalarWhereInput[]
    OR?: NetworkScalarWhereInput[]
    NOT?: NetworkScalarWhereInput | NetworkScalarWhereInput[]
    id?: IntFilter<"Network"> | number
    siteId?: IntFilter<"Network"> | number
    name?: StringFilter<"Network"> | string
    ipv4Subnet?: StringNullableFilter<"Network"> | string | null
    ipv6Subnet?: StringNullableFilter<"Network"> | string | null
    gateway?: StringNullableFilter<"Network"> | string | null
  }

  export type SiteCreateWithoutNetworksInput = {
    name: string
    description?: string | null
  }

  export type SiteUncheckedCreateWithoutNetworksInput = {
    id?: number
    name: string
    description?: string | null
  }

  export type SiteCreateOrConnectWithoutNetworksInput = {
    where: SiteWhereUniqueInput
    create: XOR<SiteCreateWithoutNetworksInput, SiteUncheckedCreateWithoutNetworksInput>
  }

  export type ServerCreateWithoutNetworkInput = {
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    monitoringData?: ServerMonitoringCreateNestedManyWithoutServerInput
    applications?: ApplicationCreateNestedManyWithoutServerInput
  }

  export type ServerUncheckedCreateWithoutNetworkInput = {
    id?: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    monitoringData?: ServerMonitoringUncheckedCreateNestedManyWithoutServerInput
    applications?: ApplicationUncheckedCreateNestedManyWithoutServerInput
  }

  export type ServerCreateOrConnectWithoutNetworkInput = {
    where: ServerWhereUniqueInput
    create: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput>
  }

  export type ServerCreateManyNetworkInputEnvelope = {
    data: ServerCreateManyNetworkInput | ServerCreateManyNetworkInput[]
    skipDuplicates?: boolean
  }

  export type SiteUpsertWithoutNetworksInput = {
    update: XOR<SiteUpdateWithoutNetworksInput, SiteUncheckedUpdateWithoutNetworksInput>
    create: XOR<SiteCreateWithoutNetworksInput, SiteUncheckedCreateWithoutNetworksInput>
    where?: SiteWhereInput
  }

  export type SiteUpdateToOneWithWhereWithoutNetworksInput = {
    where?: SiteWhereInput
    data: XOR<SiteUpdateWithoutNetworksInput, SiteUncheckedUpdateWithoutNetworksInput>
  }

  export type SiteUpdateWithoutNetworksInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type SiteUncheckedUpdateWithoutNetworksInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerUpsertWithWhereUniqueWithoutNetworkInput = {
    where: ServerWhereUniqueInput
    update: XOR<ServerUpdateWithoutNetworkInput, ServerUncheckedUpdateWithoutNetworkInput>
    create: XOR<ServerCreateWithoutNetworkInput, ServerUncheckedCreateWithoutNetworkInput>
  }

  export type ServerUpdateWithWhereUniqueWithoutNetworkInput = {
    where: ServerWhereUniqueInput
    data: XOR<ServerUpdateWithoutNetworkInput, ServerUncheckedUpdateWithoutNetworkInput>
  }

  export type ServerUpdateManyWithWhereWithoutNetworkInput = {
    where: ServerScalarWhereInput
    data: XOR<ServerUpdateManyMutationInput, ServerUncheckedUpdateManyWithoutNetworkInput>
  }

  export type ServerScalarWhereInput = {
    AND?: ServerScalarWhereInput | ServerScalarWhereInput[]
    OR?: ServerScalarWhereInput[]
    NOT?: ServerScalarWhereInput | ServerScalarWhereInput[]
    id?: IntFilter<"Server"> | number
    networkId?: IntFilter<"Server"> | number
    name?: StringFilter<"Server"> | string
    description?: StringNullableFilter<"Server"> | string | null
    icon?: StringNullableFilter<"Server"> | string | null
    ipv4Address?: StringNullableFilter<"Server"> | string | null
    osDetails?: StringNullableFilter<"Server"> | string | null
    cpuDetails?: StringNullableFilter<"Server"> | string | null
    gpuDetails?: StringNullableFilter<"Server"> | string | null
    memoryDetails?: StringNullableFilter<"Server"> | string | null
    storageDetails?: StringNullableFilter<"Server"> | string | null
    managementUrl?: StringNullableFilter<"Server"> | string | null
    monitoring?: BoolFilter<"Server"> | boolean
    monitoringUrl?: StringNullableFilter<"Server"> | string | null
  }

  export type NetworkCreateWithoutServersInput = {
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
    site: SiteCreateNestedOneWithoutNetworksInput
  }

  export type NetworkUncheckedCreateWithoutServersInput = {
    id?: number
    siteId: number
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
  }

  export type NetworkCreateOrConnectWithoutServersInput = {
    where: NetworkWhereUniqueInput
    create: XOR<NetworkCreateWithoutServersInput, NetworkUncheckedCreateWithoutServersInput>
  }

  export type ServerMonitoringCreateWithoutServerInput = {
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
  }

  export type ServerMonitoringUncheckedCreateWithoutServerInput = {
    id?: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
  }

  export type ServerMonitoringCreateOrConnectWithoutServerInput = {
    where: ServerMonitoringWhereUniqueInput
    create: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput>
  }

  export type ServerMonitoringCreateManyServerInputEnvelope = {
    data: ServerMonitoringCreateManyServerInput | ServerMonitoringCreateManyServerInput[]
    skipDuplicates?: boolean
  }

  export type ApplicationCreateWithoutServerInput = {
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
    monitoringData?: ApplicationMonitoringCreateNestedManyWithoutApplicationInput
  }

  export type ApplicationUncheckedCreateWithoutServerInput = {
    id?: number
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
    monitoringData?: ApplicationMonitoringUncheckedCreateNestedManyWithoutApplicationInput
  }

  export type ApplicationCreateOrConnectWithoutServerInput = {
    where: ApplicationWhereUniqueInput
    create: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput>
  }

  export type ApplicationCreateManyServerInputEnvelope = {
    data: ApplicationCreateManyServerInput | ApplicationCreateManyServerInput[]
    skipDuplicates?: boolean
  }

  export type NetworkUpsertWithoutServersInput = {
    update: XOR<NetworkUpdateWithoutServersInput, NetworkUncheckedUpdateWithoutServersInput>
    create: XOR<NetworkCreateWithoutServersInput, NetworkUncheckedCreateWithoutServersInput>
    where?: NetworkWhereInput
  }

  export type NetworkUpdateToOneWithWhereWithoutServersInput = {
    where?: NetworkWhereInput
    data: XOR<NetworkUpdateWithoutServersInput, NetworkUncheckedUpdateWithoutServersInput>
  }

  export type NetworkUpdateWithoutServersInput = {
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
    site?: SiteUpdateOneRequiredWithoutNetworksNestedInput
  }

  export type NetworkUncheckedUpdateWithoutServersInput = {
    id?: IntFieldUpdateOperationsInput | number
    siteId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerMonitoringUpsertWithWhereUniqueWithoutServerInput = {
    where: ServerMonitoringWhereUniqueInput
    update: XOR<ServerMonitoringUpdateWithoutServerInput, ServerMonitoringUncheckedUpdateWithoutServerInput>
    create: XOR<ServerMonitoringCreateWithoutServerInput, ServerMonitoringUncheckedCreateWithoutServerInput>
  }

  export type ServerMonitoringUpdateWithWhereUniqueWithoutServerInput = {
    where: ServerMonitoringWhereUniqueInput
    data: XOR<ServerMonitoringUpdateWithoutServerInput, ServerMonitoringUncheckedUpdateWithoutServerInput>
  }

  export type ServerMonitoringUpdateManyWithWhereWithoutServerInput = {
    where: ServerMonitoringScalarWhereInput
    data: XOR<ServerMonitoringUpdateManyMutationInput, ServerMonitoringUncheckedUpdateManyWithoutServerInput>
  }

  export type ServerMonitoringScalarWhereInput = {
    AND?: ServerMonitoringScalarWhereInput | ServerMonitoringScalarWhereInput[]
    OR?: ServerMonitoringScalarWhereInput[]
    NOT?: ServerMonitoringScalarWhereInput | ServerMonitoringScalarWhereInput[]
    id?: IntFilter<"ServerMonitoring"> | number
    serverId?: IntFilter<"ServerMonitoring"> | number
    cpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    gpuPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryUsage?: FloatFilter<"ServerMonitoring"> | number
    memoryPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    diskUsage?: FloatFilter<"ServerMonitoring"> | number
    diskPercentUsage?: FloatFilter<"ServerMonitoring"> | number
    temperature?: FloatFilter<"ServerMonitoring"> | number
    online?: BoolFilter<"ServerMonitoring"> | boolean
    uptimeSeconds?: IntFilter<"ServerMonitoring"> | number
    timestamp?: DateTimeFilter<"ServerMonitoring"> | Date | string
  }

  export type ApplicationUpsertWithWhereUniqueWithoutServerInput = {
    where: ApplicationWhereUniqueInput
    update: XOR<ApplicationUpdateWithoutServerInput, ApplicationUncheckedUpdateWithoutServerInput>
    create: XOR<ApplicationCreateWithoutServerInput, ApplicationUncheckedCreateWithoutServerInput>
  }

  export type ApplicationUpdateWithWhereUniqueWithoutServerInput = {
    where: ApplicationWhereUniqueInput
    data: XOR<ApplicationUpdateWithoutServerInput, ApplicationUncheckedUpdateWithoutServerInput>
  }

  export type ApplicationUpdateManyWithWhereWithoutServerInput = {
    where: ApplicationScalarWhereInput
    data: XOR<ApplicationUpdateManyMutationInput, ApplicationUncheckedUpdateManyWithoutServerInput>
  }

  export type ApplicationScalarWhereInput = {
    AND?: ApplicationScalarWhereInput | ApplicationScalarWhereInput[]
    OR?: ApplicationScalarWhereInput[]
    NOT?: ApplicationScalarWhereInput | ApplicationScalarWhereInput[]
    id?: IntFilter<"Application"> | number
    serverId?: IntFilter<"Application"> | number
    name?: StringFilter<"Application"> | string
    description?: StringNullableFilter<"Application"> | string | null
    icon?: StringNullableFilter<"Application"> | string | null
    url?: StringNullableFilter<"Application"> | string | null
    monitoring?: BoolFilter<"Application"> | boolean
  }

  export type ServerCreateWithoutMonitoringDataInput = {
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    network: NetworkCreateNestedOneWithoutServersInput
    applications?: ApplicationCreateNestedManyWithoutServerInput
  }

  export type ServerUncheckedCreateWithoutMonitoringDataInput = {
    id?: number
    networkId: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    applications?: ApplicationUncheckedCreateNestedManyWithoutServerInput
  }

  export type ServerCreateOrConnectWithoutMonitoringDataInput = {
    where: ServerWhereUniqueInput
    create: XOR<ServerCreateWithoutMonitoringDataInput, ServerUncheckedCreateWithoutMonitoringDataInput>
  }

  export type ServerUpsertWithoutMonitoringDataInput = {
    update: XOR<ServerUpdateWithoutMonitoringDataInput, ServerUncheckedUpdateWithoutMonitoringDataInput>
    create: XOR<ServerCreateWithoutMonitoringDataInput, ServerUncheckedCreateWithoutMonitoringDataInput>
    where?: ServerWhereInput
  }

  export type ServerUpdateToOneWithWhereWithoutMonitoringDataInput = {
    where?: ServerWhereInput
    data: XOR<ServerUpdateWithoutMonitoringDataInput, ServerUncheckedUpdateWithoutMonitoringDataInput>
  }

  export type ServerUpdateWithoutMonitoringDataInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    network?: NetworkUpdateOneRequiredWithoutServersNestedInput
    applications?: ApplicationUpdateManyWithoutServerNestedInput
  }

  export type ServerUncheckedUpdateWithoutMonitoringDataInput = {
    id?: IntFieldUpdateOperationsInput | number
    networkId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    applications?: ApplicationUncheckedUpdateManyWithoutServerNestedInput
  }

  export type ServerCreateWithoutApplicationsInput = {
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    network: NetworkCreateNestedOneWithoutServersInput
    monitoringData?: ServerMonitoringCreateNestedManyWithoutServerInput
  }

  export type ServerUncheckedCreateWithoutApplicationsInput = {
    id?: number
    networkId: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
    monitoringData?: ServerMonitoringUncheckedCreateNestedManyWithoutServerInput
  }

  export type ServerCreateOrConnectWithoutApplicationsInput = {
    where: ServerWhereUniqueInput
    create: XOR<ServerCreateWithoutApplicationsInput, ServerUncheckedCreateWithoutApplicationsInput>
  }

  export type ApplicationMonitoringCreateWithoutApplicationInput = {
    online: boolean
    latency: number
    timestamp?: Date | string
  }

  export type ApplicationMonitoringUncheckedCreateWithoutApplicationInput = {
    id?: number
    online: boolean
    latency: number
    timestamp?: Date | string
  }

  export type ApplicationMonitoringCreateOrConnectWithoutApplicationInput = {
    where: ApplicationMonitoringWhereUniqueInput
    create: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput>
  }

  export type ApplicationMonitoringCreateManyApplicationInputEnvelope = {
    data: ApplicationMonitoringCreateManyApplicationInput | ApplicationMonitoringCreateManyApplicationInput[]
    skipDuplicates?: boolean
  }

  export type ServerUpsertWithoutApplicationsInput = {
    update: XOR<ServerUpdateWithoutApplicationsInput, ServerUncheckedUpdateWithoutApplicationsInput>
    create: XOR<ServerCreateWithoutApplicationsInput, ServerUncheckedCreateWithoutApplicationsInput>
    where?: ServerWhereInput
  }

  export type ServerUpdateToOneWithWhereWithoutApplicationsInput = {
    where?: ServerWhereInput
    data: XOR<ServerUpdateWithoutApplicationsInput, ServerUncheckedUpdateWithoutApplicationsInput>
  }

  export type ServerUpdateWithoutApplicationsInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    network?: NetworkUpdateOneRequiredWithoutServersNestedInput
    monitoringData?: ServerMonitoringUpdateManyWithoutServerNestedInput
  }

  export type ServerUncheckedUpdateWithoutApplicationsInput = {
    id?: IntFieldUpdateOperationsInput | number
    networkId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoringData?: ServerMonitoringUncheckedUpdateManyWithoutServerNestedInput
  }

  export type ApplicationMonitoringUpsertWithWhereUniqueWithoutApplicationInput = {
    where: ApplicationMonitoringWhereUniqueInput
    update: XOR<ApplicationMonitoringUpdateWithoutApplicationInput, ApplicationMonitoringUncheckedUpdateWithoutApplicationInput>
    create: XOR<ApplicationMonitoringCreateWithoutApplicationInput, ApplicationMonitoringUncheckedCreateWithoutApplicationInput>
  }

  export type ApplicationMonitoringUpdateWithWhereUniqueWithoutApplicationInput = {
    where: ApplicationMonitoringWhereUniqueInput
    data: XOR<ApplicationMonitoringUpdateWithoutApplicationInput, ApplicationMonitoringUncheckedUpdateWithoutApplicationInput>
  }

  export type ApplicationMonitoringUpdateManyWithWhereWithoutApplicationInput = {
    where: ApplicationMonitoringScalarWhereInput
    data: XOR<ApplicationMonitoringUpdateManyMutationInput, ApplicationMonitoringUncheckedUpdateManyWithoutApplicationInput>
  }

  export type ApplicationMonitoringScalarWhereInput = {
    AND?: ApplicationMonitoringScalarWhereInput | ApplicationMonitoringScalarWhereInput[]
    OR?: ApplicationMonitoringScalarWhereInput[]
    NOT?: ApplicationMonitoringScalarWhereInput | ApplicationMonitoringScalarWhereInput[]
    id?: IntFilter<"ApplicationMonitoring"> | number
    applicationId?: IntFilter<"ApplicationMonitoring"> | number
    online?: BoolFilter<"ApplicationMonitoring"> | boolean
    latency?: FloatFilter<"ApplicationMonitoring"> | number
    timestamp?: DateTimeFilter<"ApplicationMonitoring"> | Date | string
  }

  export type ApplicationCreateWithoutMonitoringDataInput = {
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
    server: ServerCreateNestedOneWithoutApplicationsInput
  }

  export type ApplicationUncheckedCreateWithoutMonitoringDataInput = {
    id?: number
    serverId: number
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
  }

  export type ApplicationCreateOrConnectWithoutMonitoringDataInput = {
    where: ApplicationWhereUniqueInput
    create: XOR<ApplicationCreateWithoutMonitoringDataInput, ApplicationUncheckedCreateWithoutMonitoringDataInput>
  }

  export type ApplicationUpsertWithoutMonitoringDataInput = {
    update: XOR<ApplicationUpdateWithoutMonitoringDataInput, ApplicationUncheckedUpdateWithoutMonitoringDataInput>
    create: XOR<ApplicationCreateWithoutMonitoringDataInput, ApplicationUncheckedCreateWithoutMonitoringDataInput>
    where?: ApplicationWhereInput
  }

  export type ApplicationUpdateToOneWithWhereWithoutMonitoringDataInput = {
    where?: ApplicationWhereInput
    data: XOR<ApplicationUpdateWithoutMonitoringDataInput, ApplicationUncheckedUpdateWithoutMonitoringDataInput>
  }

  export type ApplicationUpdateWithoutMonitoringDataInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    server?: ServerUpdateOneRequiredWithoutApplicationsNestedInput
  }

  export type ApplicationUncheckedUpdateWithoutMonitoringDataInput = {
    id?: IntFieldUpdateOperationsInput | number
    serverId?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
  }

  export type NotificationTestCreateWithoutNotificationProviderInput = {
    success: boolean
  }

  export type NotificationTestUncheckedCreateWithoutNotificationProviderInput = {
    id?: number
    success: boolean
  }

  export type NotificationTestCreateOrConnectWithoutNotificationProviderInput = {
    where: NotificationTestWhereUniqueInput
    create: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput>
  }

  export type NotificationTestCreateManyNotificationProviderInputEnvelope = {
    data: NotificationTestCreateManyNotificationProviderInput | NotificationTestCreateManyNotificationProviderInput[]
    skipDuplicates?: boolean
  }

  export type NotificationTestUpsertWithWhereUniqueWithoutNotificationProviderInput = {
    where: NotificationTestWhereUniqueInput
    update: XOR<NotificationTestUpdateWithoutNotificationProviderInput, NotificationTestUncheckedUpdateWithoutNotificationProviderInput>
    create: XOR<NotificationTestCreateWithoutNotificationProviderInput, NotificationTestUncheckedCreateWithoutNotificationProviderInput>
  }

  export type NotificationTestUpdateWithWhereUniqueWithoutNotificationProviderInput = {
    where: NotificationTestWhereUniqueInput
    data: XOR<NotificationTestUpdateWithoutNotificationProviderInput, NotificationTestUncheckedUpdateWithoutNotificationProviderInput>
  }

  export type NotificationTestUpdateManyWithWhereWithoutNotificationProviderInput = {
    where: NotificationTestScalarWhereInput
    data: XOR<NotificationTestUpdateManyMutationInput, NotificationTestUncheckedUpdateManyWithoutNotificationProviderInput>
  }

  export type NotificationTestScalarWhereInput = {
    AND?: NotificationTestScalarWhereInput | NotificationTestScalarWhereInput[]
    OR?: NotificationTestScalarWhereInput[]
    NOT?: NotificationTestScalarWhereInput | NotificationTestScalarWhereInput[]
    id?: IntFilter<"NotificationTest"> | number
    notificationProviderId?: IntFilter<"NotificationTest"> | number
    success?: BoolFilter<"NotificationTest"> | boolean
  }

  export type NotificationProviderCreateWithoutTestsInput = {
    name: string
    type: $Enums.NotificationType
    config: JsonNullValueInput | InputJsonValue
  }

  export type NotificationProviderUncheckedCreateWithoutTestsInput = {
    id?: number
    name: string
    type: $Enums.NotificationType
    config: JsonNullValueInput | InputJsonValue
  }

  export type NotificationProviderCreateOrConnectWithoutTestsInput = {
    where: NotificationProviderWhereUniqueInput
    create: XOR<NotificationProviderCreateWithoutTestsInput, NotificationProviderUncheckedCreateWithoutTestsInput>
  }

  export type NotificationProviderUpsertWithoutTestsInput = {
    update: XOR<NotificationProviderUpdateWithoutTestsInput, NotificationProviderUncheckedUpdateWithoutTestsInput>
    create: XOR<NotificationProviderCreateWithoutTestsInput, NotificationProviderUncheckedCreateWithoutTestsInput>
    where?: NotificationProviderWhereInput
  }

  export type NotificationProviderUpdateToOneWithWhereWithoutTestsInput = {
    where?: NotificationProviderWhereInput
    data: XOR<NotificationProviderUpdateWithoutTestsInput, NotificationProviderUncheckedUpdateWithoutTestsInput>
  }

  export type NotificationProviderUpdateWithoutTestsInput = {
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
  }

  export type NotificationProviderUncheckedUpdateWithoutTestsInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    type?: EnumNotificationTypeFieldUpdateOperationsInput | $Enums.NotificationType
    config?: JsonNullValueInput | InputJsonValue
  }

  export type NetworkCreateManySiteInput = {
    id?: number
    name: string
    ipv4Subnet?: string | null
    ipv6Subnet?: string | null
    gateway?: string | null
  }

  export type NetworkUpdateWithoutSiteInput = {
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
    servers?: ServerUpdateManyWithoutNetworkNestedInput
  }

  export type NetworkUncheckedUpdateWithoutSiteInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
    servers?: ServerUncheckedUpdateManyWithoutNetworkNestedInput
  }

  export type NetworkUncheckedUpdateManyWithoutSiteInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    ipv4Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    ipv6Subnet?: NullableStringFieldUpdateOperationsInput | string | null
    gateway?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerCreateManyNetworkInput = {
    id?: number
    name: string
    description?: string | null
    icon?: string | null
    ipv4Address?: string | null
    osDetails?: string | null
    cpuDetails?: string | null
    gpuDetails?: string | null
    memoryDetails?: string | null
    storageDetails?: string | null
    managementUrl?: string | null
    monitoring?: boolean
    monitoringUrl?: string | null
  }

  export type ServerUpdateWithoutNetworkInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoringData?: ServerMonitoringUpdateManyWithoutServerNestedInput
    applications?: ApplicationUpdateManyWithoutServerNestedInput
  }

  export type ServerUncheckedUpdateWithoutNetworkInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoringData?: ServerMonitoringUncheckedUpdateManyWithoutServerNestedInput
    applications?: ApplicationUncheckedUpdateManyWithoutServerNestedInput
  }

  export type ServerUncheckedUpdateManyWithoutNetworkInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    ipv4Address?: NullableStringFieldUpdateOperationsInput | string | null
    osDetails?: NullableStringFieldUpdateOperationsInput | string | null
    cpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    gpuDetails?: NullableStringFieldUpdateOperationsInput | string | null
    memoryDetails?: NullableStringFieldUpdateOperationsInput | string | null
    storageDetails?: NullableStringFieldUpdateOperationsInput | string | null
    managementUrl?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringUrl?: NullableStringFieldUpdateOperationsInput | string | null
  }

  export type ServerMonitoringCreateManyServerInput = {
    id?: number
    cpuPercentUsage: number
    gpuPercentUsage: number
    memoryUsage: number
    memoryPercentUsage: number
    diskUsage: number
    diskPercentUsage: number
    temperature: number
    online: boolean
    uptimeSeconds: number
    timestamp?: Date | string
  }

  export type ApplicationCreateManyServerInput = {
    id?: number
    name: string
    description?: string | null
    icon?: string | null
    url?: string | null
    monitoring?: boolean
  }

  export type ServerMonitoringUpdateWithoutServerInput = {
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ServerMonitoringUncheckedUpdateWithoutServerInput = {
    id?: IntFieldUpdateOperationsInput | number
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ServerMonitoringUncheckedUpdateManyWithoutServerInput = {
    id?: IntFieldUpdateOperationsInput | number
    cpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    gpuPercentUsage?: FloatFieldUpdateOperationsInput | number
    memoryUsage?: FloatFieldUpdateOperationsInput | number
    memoryPercentUsage?: FloatFieldUpdateOperationsInput | number
    diskUsage?: FloatFieldUpdateOperationsInput | number
    diskPercentUsage?: FloatFieldUpdateOperationsInput | number
    temperature?: FloatFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    uptimeSeconds?: IntFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationUpdateWithoutServerInput = {
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringData?: ApplicationMonitoringUpdateManyWithoutApplicationNestedInput
  }

  export type ApplicationUncheckedUpdateWithoutServerInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
    monitoringData?: ApplicationMonitoringUncheckedUpdateManyWithoutApplicationNestedInput
  }

  export type ApplicationUncheckedUpdateManyWithoutServerInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    icon?: NullableStringFieldUpdateOperationsInput | string | null
    url?: NullableStringFieldUpdateOperationsInput | string | null
    monitoring?: BoolFieldUpdateOperationsInput | boolean
  }

  export type ApplicationMonitoringCreateManyApplicationInput = {
    id?: number
    online: boolean
    latency: number
    timestamp?: Date | string
  }

  export type ApplicationMonitoringUpdateWithoutApplicationInput = {
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationMonitoringUncheckedUpdateWithoutApplicationInput = {
    id?: IntFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type ApplicationMonitoringUncheckedUpdateManyWithoutApplicationInput = {
    id?: IntFieldUpdateOperationsInput | number
    online?: BoolFieldUpdateOperationsInput | boolean
    latency?: FloatFieldUpdateOperationsInput | number
    timestamp?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type NotificationTestCreateManyNotificationProviderInput = {
    id?: number
    success: boolean
  }

  export type NotificationTestUpdateWithoutNotificationProviderInput = {
    success?: BoolFieldUpdateOperationsInput | boolean
  }

  export type NotificationTestUncheckedUpdateWithoutNotificationProviderInput = {
    id?: IntFieldUpdateOperationsInput | number
    success?: BoolFieldUpdateOperationsInput | boolean
  }

  export type NotificationTestUncheckedUpdateManyWithoutNotificationProviderInput = {
    id?: IntFieldUpdateOperationsInput | number
    success?: BoolFieldUpdateOperationsInput | boolean
  }



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

  export type BatchPayload = {
    count: number
  }

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