/* !!! This is code generated by Prisma. Do not edit directly. !!! */
/* eslint-disable */
// biome-ignore-all lint: generated file
// @ts-nocheck
/*
 * This file exports the `User` model and its related types.
 *
 * 🟢 You can import this file directly.
 */
import type * as runtime from "@prisma/client/runtime/client";
import type * as $Enums from "../enums";
import type * as Prisma from "../internal/prismaNamespace";

/**
 * Model User
 *
 */
export type UserModel =
  runtime.Types.Result.DefaultSelection<Prisma.$UserPayload>;

export type AggregateUser = {
  _count: UserCountAggregateOutputType | null;
  _avg: UserAvgAggregateOutputType | null;
  _sum: UserSumAggregateOutputType | null;
  _min: UserMinAggregateOutputType | null;
  _max: UserMaxAggregateOutputType | null;
};

export type UserAvgAggregateOutputType = {
  score: number | null;
  level: number | null;
  hp: number | null;
  maxHp: number | null;
  xp: number | null;
  maxXp: number | null;
};

export type UserSumAggregateOutputType = {
  score: number | null;
  level: number | null;
  hp: number | null;
  maxHp: number | null;
  xp: number | null;
  maxXp: number | null;
};

export type UserMinAggregateOutputType = {
  id: string | null;
  email: string | null;
  password: string | null;
  username: string | null;
  role: $Enums.Role | null;
  score: number | null;
  level: number | null;
  hp: number | null;
  maxHp: number | null;
  xp: number | null;
  maxXp: number | null;
  avatar: string | null;
  bio: string | null;
  characterClass: $Enums.CharacterClass | null;
  createdAt: Date | null;
  updatedAt: Date | null;
};

export type UserMaxAggregateOutputType = {
  id: string | null;
  email: string | null;
  password: string | null;
  username: string | null;
  role: $Enums.Role | null;
  score: number | null;
  level: number | null;
  hp: number | null;
  maxHp: number | null;
  xp: number | null;
  maxXp: number | null;
  avatar: string | null;
  bio: string | null;
  characterClass: $Enums.CharacterClass | null;
  createdAt: Date | null;
  updatedAt: Date | null;
};

export type UserCountAggregateOutputType = {
  id: number;
  email: number;
  password: number;
  username: number;
  role: number;
  score: number;
  level: number;
  hp: number;
  maxHp: number;
  xp: number;
  maxXp: number;
  avatar: number;
  bio: number;
  characterClass: number;
  createdAt: number;
  updatedAt: number;
  _all: number;
};

export type UserAvgAggregateInputType = {
  score?: true;
  level?: true;
  hp?: true;
  maxHp?: true;
  xp?: true;
  maxXp?: true;
};

export type UserSumAggregateInputType = {
  score?: true;
  level?: true;
  hp?: true;
  maxHp?: true;
  xp?: true;
  maxXp?: true;
};

export type UserMinAggregateInputType = {
  id?: true;
  email?: true;
  password?: true;
  username?: true;
  role?: true;
  score?: true;
  level?: true;
  hp?: true;
  maxHp?: true;
  xp?: true;
  maxXp?: true;
  avatar?: true;
  bio?: true;
  characterClass?: true;
  createdAt?: true;
  updatedAt?: true;
};

export type UserMaxAggregateInputType = {
  id?: true;
  email?: true;
  password?: true;
  username?: true;
  role?: true;
  score?: true;
  level?: true;
  hp?: true;
  maxHp?: true;
  xp?: true;
  maxXp?: true;
  avatar?: true;
  bio?: true;
  characterClass?: true;
  createdAt?: true;
  updatedAt?: true;
};

export type UserCountAggregateInputType = {
  id?: true;
  email?: true;
  password?: true;
  username?: true;
  role?: true;
  score?: true;
  level?: true;
  hp?: true;
  maxHp?: true;
  xp?: true;
  maxXp?: true;
  avatar?: true;
  bio?: true;
  characterClass?: true;
  createdAt?: true;
  updatedAt?: true;
  _all?: true;
};

export type UserAggregateArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Filter which User to aggregate.
   */
  where?: Prisma.UserWhereInput;
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
   *
   * Determine the order of Users to fetch.
   */
  orderBy?:
    | Prisma.UserOrderByWithRelationInput
    | Prisma.UserOrderByWithRelationInput[];
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
   *
   * Sets the start position
   */
  cursor?: Prisma.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 average
   **/
  _avg?: UserAvgAggregateInputType;
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
   *
   * Select which fields to sum
   **/
  _sum?: UserSumAggregateInputType;
  /**
   * {@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
      : Prisma.GetScalarType<T[P], AggregateUser[P]>
    : Prisma.GetScalarType<T[P], AggregateUser[P]>;
};

export type UserGroupByArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  where?: Prisma.UserWhereInput;
  orderBy?:
    | Prisma.UserOrderByWithAggregationInput
    | Prisma.UserOrderByWithAggregationInput[];
  by: Prisma.UserScalarFieldEnum[] | Prisma.UserScalarFieldEnum;
  having?: Prisma.UserScalarWhereWithAggregatesInput;
  take?: number;
  skip?: number;
  _count?: UserCountAggregateInputType | true;
  _avg?: UserAvgAggregateInputType;
  _sum?: UserSumAggregateInputType;
  _min?: UserMinAggregateInputType;
  _max?: UserMaxAggregateInputType;
};

export type UserGroupByOutputType = {
  id: string;
  email: string;
  password: string;
  username: string;
  role: $Enums.Role;
  score: number;
  level: number;
  hp: number;
  maxHp: number;
  xp: number;
  maxXp: number;
  avatar: string | null;
  bio: string | null;
  characterClass: $Enums.CharacterClass | null;
  createdAt: Date;
  updatedAt: Date;
  _count: UserCountAggregateOutputType | null;
  _avg: UserAvgAggregateOutputType | null;
  _sum: UserSumAggregateOutputType | null;
  _min: UserMinAggregateOutputType | null;
  _max: UserMaxAggregateOutputType | null;
};

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

export type UserWhereInput = {
  AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[];
  OR?: Prisma.UserWhereInput[];
  NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[];
  id?: Prisma.StringFilter<"User"> | string;
  email?: Prisma.StringFilter<"User"> | string;
  password?: Prisma.StringFilter<"User"> | string;
  username?: Prisma.StringFilter<"User"> | string;
  role?: Prisma.EnumRoleFilter<"User"> | $Enums.Role;
  score?: Prisma.IntFilter<"User"> | number;
  level?: Prisma.IntFilter<"User"> | number;
  hp?: Prisma.IntFilter<"User"> | number;
  maxHp?: Prisma.IntFilter<"User"> | number;
  xp?: Prisma.IntFilter<"User"> | number;
  maxXp?: Prisma.IntFilter<"User"> | number;
  avatar?: Prisma.StringNullableFilter<"User"> | string | null;
  bio?: Prisma.StringNullableFilter<"User"> | string | null;
  characterClass?:
    | Prisma.EnumCharacterClassNullableFilter<"User">
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFilter<"User"> | Date | string;
  updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string;
  preferences?: Prisma.XOR<
    Prisma.UserPreferencesNullableScalarRelationFilter,
    Prisma.UserPreferencesWhereInput
  > | null;
  eventRegistrations?: Prisma.EventRegistrationListRelationFilter;
  eventFeedbacks?: Prisma.EventFeedbackListRelationFilter;
};

export type UserOrderByWithRelationInput = {
  id?: Prisma.SortOrder;
  email?: Prisma.SortOrder;
  password?: Prisma.SortOrder;
  username?: Prisma.SortOrder;
  role?: Prisma.SortOrder;
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
  avatar?: Prisma.SortOrderInput | Prisma.SortOrder;
  bio?: Prisma.SortOrderInput | Prisma.SortOrder;
  characterClass?: Prisma.SortOrderInput | Prisma.SortOrder;
  createdAt?: Prisma.SortOrder;
  updatedAt?: Prisma.SortOrder;
  preferences?: Prisma.UserPreferencesOrderByWithRelationInput;
  eventRegistrations?: Prisma.EventRegistrationOrderByRelationAggregateInput;
  eventFeedbacks?: Prisma.EventFeedbackOrderByRelationAggregateInput;
};

export type UserWhereUniqueInput = Prisma.AtLeast<
  {
    id?: string;
    email?: string;
    username?: string;
    AND?: Prisma.UserWhereInput | Prisma.UserWhereInput[];
    OR?: Prisma.UserWhereInput[];
    NOT?: Prisma.UserWhereInput | Prisma.UserWhereInput[];
    password?: Prisma.StringFilter<"User"> | string;
    role?: Prisma.EnumRoleFilter<"User"> | $Enums.Role;
    score?: Prisma.IntFilter<"User"> | number;
    level?: Prisma.IntFilter<"User"> | number;
    hp?: Prisma.IntFilter<"User"> | number;
    maxHp?: Prisma.IntFilter<"User"> | number;
    xp?: Prisma.IntFilter<"User"> | number;
    maxXp?: Prisma.IntFilter<"User"> | number;
    avatar?: Prisma.StringNullableFilter<"User"> | string | null;
    bio?: Prisma.StringNullableFilter<"User"> | string | null;
    characterClass?:
      | Prisma.EnumCharacterClassNullableFilter<"User">
      | $Enums.CharacterClass
      | null;
    createdAt?: Prisma.DateTimeFilter<"User"> | Date | string;
    updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string;
    preferences?: Prisma.XOR<
      Prisma.UserPreferencesNullableScalarRelationFilter,
      Prisma.UserPreferencesWhereInput
    > | null;
    eventRegistrations?: Prisma.EventRegistrationListRelationFilter;
    eventFeedbacks?: Prisma.EventFeedbackListRelationFilter;
  },
  "id" | "email" | "username"
>;

export type UserOrderByWithAggregationInput = {
  id?: Prisma.SortOrder;
  email?: Prisma.SortOrder;
  password?: Prisma.SortOrder;
  username?: Prisma.SortOrder;
  role?: Prisma.SortOrder;
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
  avatar?: Prisma.SortOrderInput | Prisma.SortOrder;
  bio?: Prisma.SortOrderInput | Prisma.SortOrder;
  characterClass?: Prisma.SortOrderInput | Prisma.SortOrder;
  createdAt?: Prisma.SortOrder;
  updatedAt?: Prisma.SortOrder;
  _count?: Prisma.UserCountOrderByAggregateInput;
  _avg?: Prisma.UserAvgOrderByAggregateInput;
  _max?: Prisma.UserMaxOrderByAggregateInput;
  _min?: Prisma.UserMinOrderByAggregateInput;
  _sum?: Prisma.UserSumOrderByAggregateInput;
};

export type UserScalarWhereWithAggregatesInput = {
  AND?:
    | Prisma.UserScalarWhereWithAggregatesInput
    | Prisma.UserScalarWhereWithAggregatesInput[];
  OR?: Prisma.UserScalarWhereWithAggregatesInput[];
  NOT?:
    | Prisma.UserScalarWhereWithAggregatesInput
    | Prisma.UserScalarWhereWithAggregatesInput[];
  id?: Prisma.StringWithAggregatesFilter<"User"> | string;
  email?: Prisma.StringWithAggregatesFilter<"User"> | string;
  password?: Prisma.StringWithAggregatesFilter<"User"> | string;
  username?: Prisma.StringWithAggregatesFilter<"User"> | string;
  role?: Prisma.EnumRoleWithAggregatesFilter<"User"> | $Enums.Role;
  score?: Prisma.IntWithAggregatesFilter<"User"> | number;
  level?: Prisma.IntWithAggregatesFilter<"User"> | number;
  hp?: Prisma.IntWithAggregatesFilter<"User"> | number;
  maxHp?: Prisma.IntWithAggregatesFilter<"User"> | number;
  xp?: Prisma.IntWithAggregatesFilter<"User"> | number;
  maxXp?: Prisma.IntWithAggregatesFilter<"User"> | number;
  avatar?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null;
  bio?: Prisma.StringNullableWithAggregatesFilter<"User"> | string | null;
  characterClass?:
    | Prisma.EnumCharacterClassNullableWithAggregatesFilter<"User">
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string;
  updatedAt?: Prisma.DateTimeWithAggregatesFilter<"User"> | Date | string;
};

export type UserCreateInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput;
  eventRegistrations?: Prisma.EventRegistrationCreateNestedManyWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackCreateNestedManyWithoutUserInput;
};

export type UserUncheckedCreateInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput;
  eventRegistrations?: Prisma.EventRegistrationUncheckedCreateNestedManyWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedCreateNestedManyWithoutUserInput;
};

export type UserUpdateInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput;
  eventRegistrations?: Prisma.EventRegistrationUpdateManyWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUpdateManyWithoutUserNestedInput;
};

export type UserUncheckedUpdateInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput;
  eventRegistrations?: Prisma.EventRegistrationUncheckedUpdateManyWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedUpdateManyWithoutUserNestedInput;
};

export type UserCreateManyInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
};

export type UserUpdateManyMutationInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
};

export type UserUncheckedUpdateManyInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
};

export type UserCountOrderByAggregateInput = {
  id?: Prisma.SortOrder;
  email?: Prisma.SortOrder;
  password?: Prisma.SortOrder;
  username?: Prisma.SortOrder;
  role?: Prisma.SortOrder;
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
  avatar?: Prisma.SortOrder;
  bio?: Prisma.SortOrder;
  characterClass?: Prisma.SortOrder;
  createdAt?: Prisma.SortOrder;
  updatedAt?: Prisma.SortOrder;
};

export type UserAvgOrderByAggregateInput = {
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
};

export type UserMaxOrderByAggregateInput = {
  id?: Prisma.SortOrder;
  email?: Prisma.SortOrder;
  password?: Prisma.SortOrder;
  username?: Prisma.SortOrder;
  role?: Prisma.SortOrder;
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
  avatar?: Prisma.SortOrder;
  bio?: Prisma.SortOrder;
  characterClass?: Prisma.SortOrder;
  createdAt?: Prisma.SortOrder;
  updatedAt?: Prisma.SortOrder;
};

export type UserMinOrderByAggregateInput = {
  id?: Prisma.SortOrder;
  email?: Prisma.SortOrder;
  password?: Prisma.SortOrder;
  username?: Prisma.SortOrder;
  role?: Prisma.SortOrder;
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
  avatar?: Prisma.SortOrder;
  bio?: Prisma.SortOrder;
  characterClass?: Prisma.SortOrder;
  createdAt?: Prisma.SortOrder;
  updatedAt?: Prisma.SortOrder;
};

export type UserSumOrderByAggregateInput = {
  score?: Prisma.SortOrder;
  level?: Prisma.SortOrder;
  hp?: Prisma.SortOrder;
  maxHp?: Prisma.SortOrder;
  xp?: Prisma.SortOrder;
  maxXp?: Prisma.SortOrder;
};

export type UserScalarRelationFilter = {
  is?: Prisma.UserWhereInput;
  isNot?: Prisma.UserWhereInput;
};

export type StringFieldUpdateOperationsInput = {
  set?: string;
};

export type EnumRoleFieldUpdateOperationsInput = {
  set?: $Enums.Role;
};

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

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

export type NullableEnumCharacterClassFieldUpdateOperationsInput = {
  set?: $Enums.CharacterClass | null;
};

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

export type UserCreateNestedOneWithoutPreferencesInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutPreferencesInput,
    Prisma.UserUncheckedCreateWithoutPreferencesInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPreferencesInput;
  connect?: Prisma.UserWhereUniqueInput;
};

export type UserUpdateOneRequiredWithoutPreferencesNestedInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutPreferencesInput,
    Prisma.UserUncheckedCreateWithoutPreferencesInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutPreferencesInput;
  upsert?: Prisma.UserUpsertWithoutPreferencesInput;
  connect?: Prisma.UserWhereUniqueInput;
  update?: Prisma.XOR<
    Prisma.XOR<
      Prisma.UserUpdateToOneWithWhereWithoutPreferencesInput,
      Prisma.UserUpdateWithoutPreferencesInput
    >,
    Prisma.UserUncheckedUpdateWithoutPreferencesInput
  >;
};

export type UserCreateNestedOneWithoutEventRegistrationsInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedCreateWithoutEventRegistrationsInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutEventRegistrationsInput;
  connect?: Prisma.UserWhereUniqueInput;
};

export type UserUpdateOneRequiredWithoutEventRegistrationsNestedInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedCreateWithoutEventRegistrationsInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutEventRegistrationsInput;
  upsert?: Prisma.UserUpsertWithoutEventRegistrationsInput;
  connect?: Prisma.UserWhereUniqueInput;
  update?: Prisma.XOR<
    Prisma.XOR<
      Prisma.UserUpdateToOneWithWhereWithoutEventRegistrationsInput,
      Prisma.UserUpdateWithoutEventRegistrationsInput
    >,
    Prisma.UserUncheckedUpdateWithoutEventRegistrationsInput
  >;
};

export type UserCreateNestedOneWithoutEventFeedbacksInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedCreateWithoutEventFeedbacksInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutEventFeedbacksInput;
  connect?: Prisma.UserWhereUniqueInput;
};

export type UserUpdateOneRequiredWithoutEventFeedbacksNestedInput = {
  create?: Prisma.XOR<
    Prisma.UserCreateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedCreateWithoutEventFeedbacksInput
  >;
  connectOrCreate?: Prisma.UserCreateOrConnectWithoutEventFeedbacksInput;
  upsert?: Prisma.UserUpsertWithoutEventFeedbacksInput;
  connect?: Prisma.UserWhereUniqueInput;
  update?: Prisma.XOR<
    Prisma.XOR<
      Prisma.UserUpdateToOneWithWhereWithoutEventFeedbacksInput,
      Prisma.UserUpdateWithoutEventFeedbacksInput
    >,
    Prisma.UserUncheckedUpdateWithoutEventFeedbacksInput
  >;
};

export type UserCreateWithoutPreferencesInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  eventRegistrations?: Prisma.EventRegistrationCreateNestedManyWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackCreateNestedManyWithoutUserInput;
};

export type UserUncheckedCreateWithoutPreferencesInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  eventRegistrations?: Prisma.EventRegistrationUncheckedCreateNestedManyWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedCreateNestedManyWithoutUserInput;
};

export type UserCreateOrConnectWithoutPreferencesInput = {
  where: Prisma.UserWhereUniqueInput;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutPreferencesInput,
    Prisma.UserUncheckedCreateWithoutPreferencesInput
  >;
};

export type UserUpsertWithoutPreferencesInput = {
  update: Prisma.XOR<
    Prisma.UserUpdateWithoutPreferencesInput,
    Prisma.UserUncheckedUpdateWithoutPreferencesInput
  >;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutPreferencesInput,
    Prisma.UserUncheckedCreateWithoutPreferencesInput
  >;
  where?: Prisma.UserWhereInput;
};

export type UserUpdateToOneWithWhereWithoutPreferencesInput = {
  where?: Prisma.UserWhereInput;
  data: Prisma.XOR<
    Prisma.UserUpdateWithoutPreferencesInput,
    Prisma.UserUncheckedUpdateWithoutPreferencesInput
  >;
};

export type UserUpdateWithoutPreferencesInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  eventRegistrations?: Prisma.EventRegistrationUpdateManyWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUpdateManyWithoutUserNestedInput;
};

export type UserUncheckedUpdateWithoutPreferencesInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  eventRegistrations?: Prisma.EventRegistrationUncheckedUpdateManyWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedUpdateManyWithoutUserNestedInput;
};

export type UserCreateWithoutEventRegistrationsInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackCreateNestedManyWithoutUserInput;
};

export type UserUncheckedCreateWithoutEventRegistrationsInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedCreateNestedManyWithoutUserInput;
};

export type UserCreateOrConnectWithoutEventRegistrationsInput = {
  where: Prisma.UserWhereUniqueInput;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedCreateWithoutEventRegistrationsInput
  >;
};

export type UserUpsertWithoutEventRegistrationsInput = {
  update: Prisma.XOR<
    Prisma.UserUpdateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedUpdateWithoutEventRegistrationsInput
  >;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedCreateWithoutEventRegistrationsInput
  >;
  where?: Prisma.UserWhereInput;
};

export type UserUpdateToOneWithWhereWithoutEventRegistrationsInput = {
  where?: Prisma.UserWhereInput;
  data: Prisma.XOR<
    Prisma.UserUpdateWithoutEventRegistrationsInput,
    Prisma.UserUncheckedUpdateWithoutEventRegistrationsInput
  >;
};

export type UserUpdateWithoutEventRegistrationsInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUpdateManyWithoutUserNestedInput;
};

export type UserUncheckedUpdateWithoutEventRegistrationsInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput;
  eventFeedbacks?: Prisma.EventFeedbackUncheckedUpdateManyWithoutUserNestedInput;
};

export type UserCreateWithoutEventFeedbacksInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput;
  eventRegistrations?: Prisma.EventRegistrationCreateNestedManyWithoutUserInput;
};

export type UserUncheckedCreateWithoutEventFeedbacksInput = {
  id?: string;
  email: string;
  password: string;
  username: string;
  role?: $Enums.Role;
  score?: number;
  level?: number;
  hp?: number;
  maxHp?: number;
  xp?: number;
  maxXp?: number;
  avatar?: string | null;
  bio?: string | null;
  characterClass?: $Enums.CharacterClass | null;
  createdAt?: Date | string;
  updatedAt?: Date | string;
  preferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput;
  eventRegistrations?: Prisma.EventRegistrationUncheckedCreateNestedManyWithoutUserInput;
};

export type UserCreateOrConnectWithoutEventFeedbacksInput = {
  where: Prisma.UserWhereUniqueInput;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedCreateWithoutEventFeedbacksInput
  >;
};

export type UserUpsertWithoutEventFeedbacksInput = {
  update: Prisma.XOR<
    Prisma.UserUpdateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedUpdateWithoutEventFeedbacksInput
  >;
  create: Prisma.XOR<
    Prisma.UserCreateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedCreateWithoutEventFeedbacksInput
  >;
  where?: Prisma.UserWhereInput;
};

export type UserUpdateToOneWithWhereWithoutEventFeedbacksInput = {
  where?: Prisma.UserWhereInput;
  data: Prisma.XOR<
    Prisma.UserUpdateWithoutEventFeedbacksInput,
    Prisma.UserUncheckedUpdateWithoutEventFeedbacksInput
  >;
};

export type UserUpdateWithoutEventFeedbacksInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput;
  eventRegistrations?: Prisma.EventRegistrationUpdateManyWithoutUserNestedInput;
};

export type UserUncheckedUpdateWithoutEventFeedbacksInput = {
  id?: Prisma.StringFieldUpdateOperationsInput | string;
  email?: Prisma.StringFieldUpdateOperationsInput | string;
  password?: Prisma.StringFieldUpdateOperationsInput | string;
  username?: Prisma.StringFieldUpdateOperationsInput | string;
  role?: Prisma.EnumRoleFieldUpdateOperationsInput | $Enums.Role;
  score?: Prisma.IntFieldUpdateOperationsInput | number;
  level?: Prisma.IntFieldUpdateOperationsInput | number;
  hp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxHp?: Prisma.IntFieldUpdateOperationsInput | number;
  xp?: Prisma.IntFieldUpdateOperationsInput | number;
  maxXp?: Prisma.IntFieldUpdateOperationsInput | number;
  avatar?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
  characterClass?:
    | Prisma.NullableEnumCharacterClassFieldUpdateOperationsInput
    | $Enums.CharacterClass
    | null;
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
  preferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput;
  eventRegistrations?: Prisma.EventRegistrationUncheckedUpdateManyWithoutUserNestedInput;
};

/**
 * Count Type UserCountOutputType
 */

export type UserCountOutputType = {
  eventRegistrations: number;
  eventFeedbacks: number;
};

export type UserCountOutputTypeSelect<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  eventRegistrations?: boolean | UserCountOutputTypeCountEventRegistrationsArgs;
  eventFeedbacks?: boolean | UserCountOutputTypeCountEventFeedbacksArgs;
};

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

/**
 * UserCountOutputType without action
 */
export type UserCountOutputTypeCountEventRegistrationsArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  where?: Prisma.EventRegistrationWhereInput;
};

/**
 * UserCountOutputType without action
 */
export type UserCountOutputTypeCountEventFeedbacksArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  where?: Prisma.EventFeedbackWhereInput;
};

export type UserSelect<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = runtime.Types.Extensions.GetSelect<
  {
    id?: boolean;
    email?: boolean;
    password?: boolean;
    username?: boolean;
    role?: boolean;
    score?: boolean;
    level?: boolean;
    hp?: boolean;
    maxHp?: boolean;
    xp?: boolean;
    maxXp?: boolean;
    avatar?: boolean;
    bio?: boolean;
    characterClass?: boolean;
    createdAt?: boolean;
    updatedAt?: boolean;
    preferences?: boolean | Prisma.User$preferencesArgs<ExtArgs>;
    eventRegistrations?: boolean | Prisma.User$eventRegistrationsArgs<ExtArgs>;
    eventFeedbacks?: boolean | Prisma.User$eventFeedbacksArgs<ExtArgs>;
    _count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>;
  },
  ExtArgs["result"]["user"]
>;

export type UserSelectCreateManyAndReturn<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = runtime.Types.Extensions.GetSelect<
  {
    id?: boolean;
    email?: boolean;
    password?: boolean;
    username?: boolean;
    role?: boolean;
    score?: boolean;
    level?: boolean;
    hp?: boolean;
    maxHp?: boolean;
    xp?: boolean;
    maxXp?: boolean;
    avatar?: boolean;
    bio?: boolean;
    characterClass?: boolean;
    createdAt?: boolean;
    updatedAt?: boolean;
  },
  ExtArgs["result"]["user"]
>;

export type UserSelectUpdateManyAndReturn<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = runtime.Types.Extensions.GetSelect<
  {
    id?: boolean;
    email?: boolean;
    password?: boolean;
    username?: boolean;
    role?: boolean;
    score?: boolean;
    level?: boolean;
    hp?: boolean;
    maxHp?: boolean;
    xp?: boolean;
    maxXp?: boolean;
    avatar?: boolean;
    bio?: boolean;
    characterClass?: boolean;
    createdAt?: boolean;
    updatedAt?: boolean;
  },
  ExtArgs["result"]["user"]
>;

export type UserSelectScalar = {
  id?: boolean;
  email?: boolean;
  password?: boolean;
  username?: boolean;
  role?: boolean;
  score?: boolean;
  level?: boolean;
  hp?: boolean;
  maxHp?: boolean;
  xp?: boolean;
  maxXp?: boolean;
  avatar?: boolean;
  bio?: boolean;
  characterClass?: boolean;
  createdAt?: boolean;
  updatedAt?: boolean;
};

export type UserOmit<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = runtime.Types.Extensions.GetOmit<
  | "id"
  | "email"
  | "password"
  | "username"
  | "role"
  | "score"
  | "level"
  | "hp"
  | "maxHp"
  | "xp"
  | "maxXp"
  | "avatar"
  | "bio"
  | "characterClass"
  | "createdAt"
  | "updatedAt",
  ExtArgs["result"]["user"]
>;
export type UserInclude<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  preferences?: boolean | Prisma.User$preferencesArgs<ExtArgs>;
  eventRegistrations?: boolean | Prisma.User$eventRegistrationsArgs<ExtArgs>;
  eventFeedbacks?: boolean | Prisma.User$eventFeedbacksArgs<ExtArgs>;
  _count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>;
};
export type UserIncludeCreateManyAndReturn<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {};
export type UserIncludeUpdateManyAndReturn<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {};

export type $UserPayload<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  name: "User";
  objects: {
    preferences: Prisma.$UserPreferencesPayload<ExtArgs> | null;
    eventRegistrations: Prisma.$EventRegistrationPayload<ExtArgs>[];
    eventFeedbacks: Prisma.$EventFeedbackPayload<ExtArgs>[];
  };
  scalars: runtime.Types.Extensions.GetPayloadResult<
    {
      id: string;
      email: string;
      password: string;
      username: string;
      role: $Enums.Role;
      score: number;
      level: number;
      hp: number;
      maxHp: number;
      xp: number;
      maxXp: number;
      avatar: string | null;
      bio: string | null;
      characterClass: $Enums.CharacterClass | null;
      createdAt: Date;
      updatedAt: Date;
    },
    ExtArgs["result"]["user"]
  >;
  composites: {};
};

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

export type UserCountArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = Omit<UserFindManyArgs, "select" | "include" | "distinct" | "omit"> & {
  select?: UserCountAggregateInputType | true;
};

export interface UserDelegate<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.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: Prisma.SelectSubset<T, UserFindUniqueArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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: Prisma.SelectSubset<T, UserFindUniqueOrThrowArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.SelectSubset<T, UserFindFirstArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.SelectSubset<T, UserFindFirstOrThrowArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.SelectSubset<T, UserFindManyArgs<ExtArgs>>
  ): Prisma.PrismaPromise<
    runtime.Types.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: Prisma.SelectSubset<T, UserCreateArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.SelectSubset<T, UserCreateManyArgs<ExtArgs>>
  ): Prisma.PrismaPromise<Prisma.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?: Prisma.SelectSubset<T, UserCreateManyAndReturnArgs<ExtArgs>>
  ): Prisma.PrismaPromise<
    runtime.Types.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: Prisma.SelectSubset<T, UserDeleteArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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: Prisma.SelectSubset<T, UserUpdateArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.SelectSubset<T, UserDeleteManyArgs<ExtArgs>>
  ): Prisma.PrismaPromise<Prisma.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: Prisma.SelectSubset<T, UserUpdateManyArgs<ExtArgs>>
  ): Prisma.PrismaPromise<Prisma.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: Prisma.SelectSubset<T, UserUpdateManyAndReturnArgs<ExtArgs>>
  ): Prisma.PrismaPromise<
    runtime.Types.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: Prisma.SelectSubset<T, UserUpsertArgs<ExtArgs>>
  ): Prisma.Prisma__UserClient<
    runtime.Types.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?: Prisma.Subset<T, UserCountArgs>
  ): Prisma.PrismaPromise<
    T extends runtime.Types.Utils.Record<"select", any>
      ? T["select"] extends true
        ? number
        : Prisma.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: Prisma.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 Prisma.Or<
      Prisma.Extends<"skip", Prisma.Keys<T>>,
      Prisma.Extends<"take", Prisma.Keys<T>>
    >,
    OrderByArg extends Prisma.True extends HasSelectOrTake
      ? { orderBy: UserGroupByArgs["orderBy"] }
      : { orderBy?: UserGroupByArgs["orderBy"] },
    OrderFields extends Prisma.ExcludeUnderscoreKeys<
      Prisma.Keys<Prisma.MaybeTupleToUnion<T["orderBy"]>>
    >,
    ByFields extends Prisma.MaybeTupleToUnion<T["by"]>,
    ByValid extends Prisma.Has<ByFields, OrderFields>,
    HavingFields extends Prisma.GetHavingFields<T["having"]>,
    HavingValid extends Prisma.Has<ByFields, HavingFields>,
    ByEmpty extends T["by"] extends never[] ? Prisma.True : Prisma.False,
    InputErrors extends ByEmpty extends Prisma.True
      ? `Error: "by" must not be empty.`
      : HavingValid extends Prisma.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 Prisma.Keys<T>
          ? "orderBy" extends Prisma.Keys<T>
            ? ByValid extends Prisma.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 Prisma.Keys<T>
            ? "orderBy" extends Prisma.Keys<T>
              ? ByValid extends Prisma.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 Prisma.True
              ? {}
              : {
                  [P in OrderFields]: P extends ByFields
                    ? never
                    : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`;
                }[OrderFields],
  >(
    args: Prisma.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 runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
  GlobalOmitOptions = {},
> extends Prisma.PrismaPromise<T> {
  readonly [Symbol.toStringTag]: "PrismaPromise";
  preferences<T extends Prisma.User$preferencesArgs<ExtArgs> = {}>(
    args?: Prisma.Subset<T, Prisma.User$preferencesArgs<ExtArgs>>
  ): Prisma.Prisma__UserPreferencesClient<
    runtime.Types.Result.GetResult<
      Prisma.$UserPreferencesPayload<ExtArgs>,
      T,
      "findUniqueOrThrow",
      GlobalOmitOptions
    > | null,
    null,
    ExtArgs,
    GlobalOmitOptions
  >;
  eventRegistrations<
    T extends Prisma.User$eventRegistrationsArgs<ExtArgs> = {},
  >(
    args?: Prisma.Subset<T, Prisma.User$eventRegistrationsArgs<ExtArgs>>
  ): Prisma.PrismaPromise<
    | runtime.Types.Result.GetResult<
        Prisma.$EventRegistrationPayload<ExtArgs>,
        T,
        "findMany",
        GlobalOmitOptions
      >
    | Null
  >;
  eventFeedbacks<T extends Prisma.User$eventFeedbacksArgs<ExtArgs> = {}>(
    args?: Prisma.Subset<T, Prisma.User$eventFeedbacksArgs<ExtArgs>>
  ): Prisma.PrismaPromise<
    | runtime.Types.Result.GetResult<
        Prisma.$EventFeedbackPayload<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
  ): runtime.Types.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
  ): runtime.Types.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
  ): runtime.Types.Utils.JsPromise<T>;
}

/**
 * Fields of the User model
 */
export interface UserFieldRefs {
  readonly id: Prisma.FieldRef<"User", "String">;
  readonly email: Prisma.FieldRef<"User", "String">;
  readonly password: Prisma.FieldRef<"User", "String">;
  readonly username: Prisma.FieldRef<"User", "String">;
  readonly role: Prisma.FieldRef<"User", "Role">;
  readonly score: Prisma.FieldRef<"User", "Int">;
  readonly level: Prisma.FieldRef<"User", "Int">;
  readonly hp: Prisma.FieldRef<"User", "Int">;
  readonly maxHp: Prisma.FieldRef<"User", "Int">;
  readonly xp: Prisma.FieldRef<"User", "Int">;
  readonly maxXp: Prisma.FieldRef<"User", "Int">;
  readonly avatar: Prisma.FieldRef<"User", "String">;
  readonly bio: Prisma.FieldRef<"User", "String">;
  readonly characterClass: Prisma.FieldRef<"User", "CharacterClass">;
  readonly createdAt: Prisma.FieldRef<"User", "DateTime">;
  readonly updatedAt: Prisma.FieldRef<"User", "DateTime">;
}

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

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

/**
 * User findFirst
 */
export type UserFindFirstArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the User
   */
  select?: Prisma.UserSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the User
   */
  omit?: Prisma.UserOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.UserInclude<ExtArgs> | null;
  /**
   * Filter, which User to fetch.
   */
  where?: Prisma.UserWhereInput;
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
   *
   * Determine the order of Users to fetch.
   */
  orderBy?:
    | Prisma.UserOrderByWithRelationInput
    | Prisma.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?: Prisma.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?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[];
};

/**
 * User findFirstOrThrow
 */
export type UserFindFirstOrThrowArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the User
   */
  select?: Prisma.UserSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the User
   */
  omit?: Prisma.UserOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.UserInclude<ExtArgs> | null;
  /**
   * Filter, which User to fetch.
   */
  where?: Prisma.UserWhereInput;
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
   *
   * Determine the order of Users to fetch.
   */
  orderBy?:
    | Prisma.UserOrderByWithRelationInput
    | Prisma.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?: Prisma.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?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[];
};

/**
 * User findMany
 */
export type UserFindManyArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the User
   */
  select?: Prisma.UserSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the User
   */
  omit?: Prisma.UserOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.UserInclude<ExtArgs> | null;
  /**
   * Filter, which Users to fetch.
   */
  where?: Prisma.UserWhereInput;
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
   *
   * Determine the order of Users to fetch.
   */
  orderBy?:
    | Prisma.UserOrderByWithRelationInput
    | Prisma.UserOrderByWithRelationInput[];
  /**
   * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
   *
   * Sets the position for listing Users.
   */
  cursor?: Prisma.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?: Prisma.UserScalarFieldEnum | Prisma.UserScalarFieldEnum[];
};

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

/**
 * User createMany
 */
export type UserCreateManyArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * The data used to create many Users.
   */
  data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[];
};

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

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

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

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

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

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

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

/**
 * User.preferences
 */
export type User$preferencesArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the UserPreferences
   */
  select?: Prisma.UserPreferencesSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the UserPreferences
   */
  omit?: Prisma.UserPreferencesOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.UserPreferencesInclude<ExtArgs> | null;
  where?: Prisma.UserPreferencesWhereInput;
};

/**
 * User.eventRegistrations
 */
export type User$eventRegistrationsArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the EventRegistration
   */
  select?: Prisma.EventRegistrationSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the EventRegistration
   */
  omit?: Prisma.EventRegistrationOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.EventRegistrationInclude<ExtArgs> | null;
  where?: Prisma.EventRegistrationWhereInput;
  orderBy?:
    | Prisma.EventRegistrationOrderByWithRelationInput
    | Prisma.EventRegistrationOrderByWithRelationInput[];
  cursor?: Prisma.EventRegistrationWhereUniqueInput;
  take?: number;
  skip?: number;
  distinct?:
    | Prisma.EventRegistrationScalarFieldEnum
    | Prisma.EventRegistrationScalarFieldEnum[];
};

/**
 * User.eventFeedbacks
 */
export type User$eventFeedbacksArgs<
  ExtArgs extends runtime.Types.Extensions.InternalArgs =
    runtime.Types.Extensions.DefaultArgs,
> = {
  /**
   * Select specific fields to fetch from the EventFeedback
   */
  select?: Prisma.EventFeedbackSelect<ExtArgs> | null;
  /**
   * Omit specific fields from the EventFeedback
   */
  omit?: Prisma.EventFeedbackOmit<ExtArgs> | null;
  /**
   * Choose, which related nodes to fetch as well
   */
  include?: Prisma.EventFeedbackInclude<ExtArgs> | null;
  where?: Prisma.EventFeedbackWhereInput;
  orderBy?:
    | Prisma.EventFeedbackOrderByWithRelationInput
    | Prisma.EventFeedbackOrderByWithRelationInput[];
  cursor?: Prisma.EventFeedbackWhereUniqueInput;
  take?: number;
  skip?: number;
  distinct?:
    | Prisma.EventFeedbackScalarFieldEnum
    | Prisma.EventFeedbackScalarFieldEnum[];
};

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