From 9cb3cfdf952f82e74ced3c81579ef184262147d3 Mon Sep 17 00:00:00 2001 From: Xiro The Dev Date: Thu, 3 Sep 2026 04:13:36 +0700 Subject: [PATCH 1/7] feat(api-effect): add Effect v4/Bun mirror of the api New lab-stack Mirror (CONTEXT-MAP): api-elysia's 9 route groups ported to effect@4.0.0-rc.112 + @effect/platform-bun HttpRouter, pinned exactly per ADR-0001. Shared Prisma 7 schema, byte-parity responses/cookies/Nest-shaped errors, ported bindBody validation and bun test suite (39 tests). Effect v4 wiring: HttpRouter.add layers per route, route-pattern-keyed CSRF+throttle guards, wildcard-unguarded 404 catch-alls (serve middleware cannot rewrite responses), Config for PORT/CORS_ORIGIN, CORS predicate accepting comma-lists and '*'. Verified: tsc clean, oxlint clean (only pre-existing copied-lib warnings), 39/39 tests, live curl matrix against shared-schema Postgres on :5439. --- CONTEXT-MAP.md | 3 +- apps/api-effect/.env.example | 51 + .../docs/adr/0001-pin-effect-4-rc.md | 8 + apps/api-effect/package.json | 39 + apps/api-effect/prisma.config.ts | 35 + apps/api-effect/prisma/schema/auth.prisma | 136 + apps/api-effect/prisma/schema/base.prisma | 36 + apps/api-effect/prisma/schema/blog.prisma | 97 + apps/api-effect/prisma/schema/enums.prisma | 98 + apps/api-effect/prisma/schema/event.prisma | 55 + .../api-effect/prisma/schema/marketing.prisma | 61 + apps/api-effect/prisma/schema/order.prisma | 119 + apps/api-effect/prisma/schema/payment.prisma | 46 + apps/api-effect/prisma/schema/product.prisma | 77 + .../prisma/schema/security-log.prisma | 41 + apps/api-effect/prisma/schema/user.prisma | 75 + .../src/generated/prisma/client.d.ts | 1 + .../api-effect/src/generated/prisma/client.js | 5 + .../src/generated/prisma/default.d.ts | 1 + .../src/generated/prisma/default.js | 5 + .../api-effect/src/generated/prisma/edge.d.ts | 1 + apps/api-effect/src/generated/prisma/edge.js | 713 + .../src/generated/prisma/index-browser.js | 735 + .../src/generated/prisma/index.d.ts | 41587 ++++++++++++++++ apps/api-effect/src/generated/prisma/index.js | 713 + .../src/generated/prisma/package.json | 144 + .../prisma/query_compiler_fast_bg.js | 2 + .../prisma/query_compiler_fast_bg.wasm | Bin 0 -> 3437252 bytes .../query_compiler_fast_bg.wasm-base64.js | 2 + .../src/generated/prisma/runtime/client.d.ts | 3490 ++ .../src/generated/prisma/runtime/client.js | 105 + .../prisma/runtime/index-browser.d.ts | 90 + .../generated/prisma/runtime/index-browser.js | 6 + .../prisma/runtime/wasm-compiler-edge.js | 100 + .../src/generated/prisma/schema.prisma | 849 + .../prisma/wasm-edge-light-loader.mjs | 5 + .../generated/prisma/wasm-worker-loader.mjs | 5 + apps/api-effect/src/index.test.ts | 282 + apps/api-effect/src/index.ts | 113 + apps/api-effect/src/lib/auth-logic.ts | 379 + apps/api-effect/src/lib/auth.ts | 79 + apps/api-effect/src/lib/cart.ts | 166 + apps/api-effect/src/lib/csrf.ts | 59 + apps/api-effect/src/lib/errors.ts | 37 + apps/api-effect/src/lib/http.ts | 163 + apps/api-effect/src/lib/jwt.ts | 53 + apps/api-effect/src/lib/mailer.ts | 59 + apps/api-effect/src/lib/orders.test.ts | 96 + apps/api-effect/src/lib/orders.ts | 416 + apps/api-effect/src/lib/password.ts | 20 + apps/api-effect/src/lib/payments.test.ts | 92 + apps/api-effect/src/lib/payments.ts | 124 + apps/api-effect/src/lib/payos.ts | 115 + apps/api-effect/src/lib/prisma.ts | 23 + apps/api-effect/src/lib/redis.ts | 51 + apps/api-effect/src/lib/settle.test.ts | 235 + apps/api-effect/src/lib/settle.ts | 124 + apps/api-effect/src/lib/storage.ts | 83 + apps/api-effect/src/lib/throttle.ts | 51 + apps/api-effect/src/lib/totp.ts | 35 + apps/api-effect/src/lib/util.ts | 75 + apps/api-effect/src/lib/validate.ts | 236 + apps/api-effect/src/routes/auth.ts | 147 + apps/api-effect/src/routes/blog.ts | 246 + apps/api-effect/src/routes/cart.ts | 56 + apps/api-effect/src/routes/events.ts | 152 + apps/api-effect/src/routes/orders.ts | 86 + apps/api-effect/src/routes/payments.ts | 44 + apps/api-effect/src/routes/products.ts | 80 + apps/api-effect/src/routes/reviews.ts | 171 + apps/api-effect/src/routes/users.ts | 124 + apps/api-effect/src/test/prisma-fake.ts | 265 + apps/api-effect/tsconfig.json | 13 + bun.lock | 82 +- 74 files changed, 54164 insertions(+), 4 deletions(-) create mode 100644 apps/api-effect/.env.example create mode 100644 apps/api-effect/docs/adr/0001-pin-effect-4-rc.md create mode 100644 apps/api-effect/package.json create mode 100644 apps/api-effect/prisma.config.ts create mode 100644 apps/api-effect/prisma/schema/auth.prisma create mode 100644 apps/api-effect/prisma/schema/base.prisma create mode 100644 apps/api-effect/prisma/schema/blog.prisma create mode 100644 apps/api-effect/prisma/schema/enums.prisma create mode 100644 apps/api-effect/prisma/schema/event.prisma create mode 100644 apps/api-effect/prisma/schema/marketing.prisma create mode 100644 apps/api-effect/prisma/schema/order.prisma create mode 100644 apps/api-effect/prisma/schema/payment.prisma create mode 100644 apps/api-effect/prisma/schema/product.prisma create mode 100644 apps/api-effect/prisma/schema/security-log.prisma create mode 100644 apps/api-effect/prisma/schema/user.prisma create mode 100644 apps/api-effect/src/generated/prisma/client.d.ts create mode 100644 apps/api-effect/src/generated/prisma/client.js create mode 100644 apps/api-effect/src/generated/prisma/default.d.ts create mode 100644 apps/api-effect/src/generated/prisma/default.js create mode 100644 apps/api-effect/src/generated/prisma/edge.d.ts create mode 100644 apps/api-effect/src/generated/prisma/edge.js create mode 100644 apps/api-effect/src/generated/prisma/index-browser.js create mode 100644 apps/api-effect/src/generated/prisma/index.d.ts create mode 100644 apps/api-effect/src/generated/prisma/index.js create mode 100644 apps/api-effect/src/generated/prisma/package.json create mode 100644 apps/api-effect/src/generated/prisma/query_compiler_fast_bg.js create mode 100644 apps/api-effect/src/generated/prisma/query_compiler_fast_bg.wasm create mode 100644 apps/api-effect/src/generated/prisma/query_compiler_fast_bg.wasm-base64.js create mode 100644 apps/api-effect/src/generated/prisma/runtime/client.d.ts create mode 100644 apps/api-effect/src/generated/prisma/runtime/client.js create mode 100644 apps/api-effect/src/generated/prisma/runtime/index-browser.d.ts create mode 100644 apps/api-effect/src/generated/prisma/runtime/index-browser.js create mode 100644 apps/api-effect/src/generated/prisma/runtime/wasm-compiler-edge.js create mode 100644 apps/api-effect/src/generated/prisma/schema.prisma create mode 100644 apps/api-effect/src/generated/prisma/wasm-edge-light-loader.mjs create mode 100644 apps/api-effect/src/generated/prisma/wasm-worker-loader.mjs create mode 100644 apps/api-effect/src/index.test.ts create mode 100644 apps/api-effect/src/index.ts create mode 100644 apps/api-effect/src/lib/auth-logic.ts create mode 100644 apps/api-effect/src/lib/auth.ts create mode 100644 apps/api-effect/src/lib/cart.ts create mode 100644 apps/api-effect/src/lib/csrf.ts create mode 100644 apps/api-effect/src/lib/errors.ts create mode 100644 apps/api-effect/src/lib/http.ts create mode 100644 apps/api-effect/src/lib/jwt.ts create mode 100644 apps/api-effect/src/lib/mailer.ts create mode 100644 apps/api-effect/src/lib/orders.test.ts create mode 100644 apps/api-effect/src/lib/orders.ts create mode 100644 apps/api-effect/src/lib/password.ts create mode 100644 apps/api-effect/src/lib/payments.test.ts create mode 100644 apps/api-effect/src/lib/payments.ts create mode 100644 apps/api-effect/src/lib/payos.ts create mode 100644 apps/api-effect/src/lib/prisma.ts create mode 100644 apps/api-effect/src/lib/redis.ts create mode 100644 apps/api-effect/src/lib/settle.test.ts create mode 100644 apps/api-effect/src/lib/settle.ts create mode 100644 apps/api-effect/src/lib/storage.ts create mode 100644 apps/api-effect/src/lib/throttle.ts create mode 100644 apps/api-effect/src/lib/totp.ts create mode 100644 apps/api-effect/src/lib/util.ts create mode 100644 apps/api-effect/src/lib/validate.ts create mode 100644 apps/api-effect/src/routes/auth.ts create mode 100644 apps/api-effect/src/routes/blog.ts create mode 100644 apps/api-effect/src/routes/cart.ts create mode 100644 apps/api-effect/src/routes/events.ts create mode 100644 apps/api-effect/src/routes/orders.ts create mode 100644 apps/api-effect/src/routes/payments.ts create mode 100644 apps/api-effect/src/routes/products.ts create mode 100644 apps/api-effect/src/routes/reviews.ts create mode 100644 apps/api-effect/src/routes/users.ts create mode 100644 apps/api-effect/src/test/prisma-fake.ts create mode 100644 apps/api-effect/tsconfig.json diff --git a/CONTEXT-MAP.md b/CONTEXT-MAP.md index 82e23055..3bd30502 100644 --- a/CONTEXT-MAP.md +++ b/CONTEXT-MAP.md @@ -1,11 +1,12 @@ # Context map -This repo has six contexts, one per app. Each context has its own `CONTEXT.md` and `apps//docs/adr/`. +This repo has seven contexts, one per app. Each context has its own `CONTEXT.md` and `apps//docs/adr/`. - **api** — NestJS backend API. See `apps/api/CONTEXT.md` (created lazily by `/domain-modeling`). - **api-go** — Go Mirror of the API. See `apps/api-go/CONTEXT.md`. - **api-axum** — Rust Axum Mirror of the API. See `apps/api-axum/CONTEXT.md`. - **api-elysia** — Elysia/Bun Mirror of the API. See `apps/api-elysia/CONTEXT.md`. +- **api-effect** — Effect v4/Bun Mirror of the API. See `apps/api-effect/CONTEXT.md` (created lazily by `/domain-modeling`). - **web** — frontend web app. See `apps/web/CONTEXT.md` (created lazily by `/domain-modeling`). - **web-vue** — Vue Mirror of web. See `apps/web-vue/CONTEXT.md`. diff --git a/apps/api-effect/.env.example b/apps/api-effect/.env.example new file mode 100644 index 00000000..969e435c --- /dev/null +++ b/apps/api-effect/.env.example @@ -0,0 +1,51 @@ +# Environment variables declared in this file are NOT automatically loaded by Prisma. +# Please add `import "dotenv/config";` to your `prisma.config.ts` file, or use the Prisma CLI with Bun +# to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. + +# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. +# See the documentation for all the connection string options: https://pris.ly/d/connection-strings + +DATABASE_URL="postgresql://user:pass@localhost:5432/webdevstudios?schema=public" +PORT=4003 +CORS_ORIGIN="http://localhost:3000" + +# Csrf secret +CSRF_SECRET="csrf-secret" + +# Mail +MAIL_USER="" +MAIL_PASS="" + +# Payment +PAYOS_CLIENT_ID="" +PAYOS_API_KEY="" +PAYOS_CHECKSUM_KEY="" +PAYOS_RETURN_URL="http://localhost/v1/payments/*" +PAYOS_CANCEL_URL="http://localhost/v1/payments/*" + +# JWT +JWT_SECRET_KEY=... + +# OAuth Google +GOOGLE_CLIENT_ID=".apps.googleusercontent.com" +GOOGLE_CLIENT_SECRET="key" +GOOGLE_CALLBACK_URL="http://localhost:4003/v1/auth/oauth/google/callback" + +# OAuth GitHub +GITHUB_CLIENT_ID=... +GITHUB_CLIENT_SECRET=... +GITHUB_CALLBACK_URL=http://localhost:4003/v1/auth/oauth/github/callback + +# Frontend URLs +FRONTEND_URL=http://localhost:3000 + +# R2 +R2_ACCESS_KEY_ID=your_access_key +R2_SECRET_ACCESS_KEY=your_secret_key +R2_BUCKET_NAME=webdevstudios-storage +R2_PUBLIC_URL=https://pub-xxxxx.r2.dev +R2_ENDPOINT=https://xxxxx.r2.cloudflarestorage.com + +# Redis +REDIS_HOST="localhost" +REDIS_PORT="6379" diff --git a/apps/api-effect/docs/adr/0001-pin-effect-4-rc.md b/apps/api-effect/docs/adr/0001-pin-effect-4-rc.md new file mode 100644 index 00000000..7c84fe22 --- /dev/null +++ b/apps/api-effect/docs/adr/0001-pin-effect-4-rc.md @@ -0,0 +1,8 @@ +# Pin Effect 4.0.0-rc.112 exactly + +Effect v4 is only available as a fast-moving release candidate (rc.112 at project start; breaking changes land weekly, e.g. schema-aware RPC serialization). We pin `effect` and its `@effect/platform-*` packages to exact `4.0.0-rc.112` — no `^` — so the Mirror builds reproducibly; upgrades are deliberate, verified bumps. + +## Considered Options + +- Floating `^4.0.0-rc.x`: weekly surprise breakage mid-build. Rejected. +- Staying on Effect v3: not the point of this Mirror. diff --git a/apps/api-effect/package.json b/apps/api-effect/package.json new file mode 100644 index 00000000..2533f779 --- /dev/null +++ b/apps/api-effect/package.json @@ -0,0 +1,39 @@ +{ + "name": "api-effect", + "version": "1.0.0", + "description": "WebDev Studios E-commerce Platform - Effect v4/Bun mirror backend", + "author": "Xiro The Dev ", + "private": true, + "license": "SEE LICENSE IN LICENSE.md", + "type": "module", + "scripts": { + "dev": "bun --watch src/index.ts", + "start": "bun src/index.ts", + "test": "bun test ./src", + "lint": "bunx --bun --no-install oxlint --fix .", + "prisma:generate": "bunx --bun prisma generate", + "format": "bunx --bun --no-install prettier --write \"src/**/*.ts\"" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.1120.0", + "@effect/platform-bun": "4.0.0-rc.112", + "@prisma/adapter-pg": "^7.10.0", + "@prisma/client": "^7.10.0", + "@prisma/client-runtime-utils": "^7.10.0", + "argon2": "^0.45.1", + "effect": "4.0.0-rc.112", + "ioredis": "^6.0.0", + "jose": "^6.2.10", + "nodemailer": "^9.0.6", + "qrcode": "^1.5.4", + "speakeasy": "^2.0.0" + }, + "devDependencies": { + "@types/bun": "^1.4.0", + "@types/nodemailer": "^8.0.1", + "@types/qrcode": "^1.5.6", + "@types/speakeasy": "^2.0.10", + "dotenv": "^17.4.2", + "prisma": "^7.8.0" + } +} diff --git a/apps/api-effect/prisma.config.ts b/apps/api-effect/prisma.config.ts new file mode 100644 index 00000000..0f3697bf --- /dev/null +++ b/apps/api-effect/prisma.config.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2026 Xiro The Dev + * + * Source Available License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to: + * - View and study the Software for educational purposes + * - Fork this repository on GitHub for personal reference + * - Share links to this repository + * + * THE FOLLOWING ARE PROHIBITED: + * - Using the Software in production or commercial applications + * - Copying substantial portions of the Software into other projects + * - Distributing modified versions of the Software + * - Removing or altering copyright notices + * + * For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. + */ + +/// + +import 'dotenv/config'; + +import { join } from 'path'; +import { defineConfig } from 'prisma/config'; + +export default defineConfig({ + schema: join(__dirname, 'prisma', 'schema'), + datasource: { + url: process.env['DATABASE_URL'], + }, +}); diff --git a/apps/api-effect/prisma/schema/auth.prisma b/apps/api-effect/prisma/schema/auth.prisma new file mode 100644 index 00000000..19bab2ee --- /dev/null +++ b/apps/api-effect/prisma/schema/auth.prisma @@ -0,0 +1,136 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// OAUTH & AUTHENTICATION +// ========================================= + +// Store OAuth login information (Google, Facebook, etc.) +model ExternalAccount { + id String @id @default(cuid()) + provider OAuthProvider + providerId String @db.VarChar(255) // ID from provider (e.g.: Google user ID) + providerEmail String? @db.VarChar(255) // Email from provider + accessToken String? @db.Text // Encrypted access token + refreshToken String? @db.Text // Encrypted refresh token + expiresAt DateTime? // Token expiration + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Unique constraint: a provider can only be linked once with a user + @@unique([provider, providerId]) + @@unique([provider, userId]) + @@index([userId]) + @@index([provider, providerId]) + @@map("external_accounts") +} + +// Manage user MFA methods +model UserMFAMethod { + id String @id @default(cuid()) + methodType MFAMethod // TOTP, SMS, EMAIL, BACKUP_CODE + secret String? @db.Text // Encrypted secret (for TOTP) + phone String? @db.VarChar(15) // For SMS + isActive Boolean @default(true) + isVerified Boolean @default(false) // Whether verified + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + lastUsedAt DateTime? // Last time used + + @@index([userId]) + @@map("mfa_methods") +} + +// Backup codes for MFA (single use) +model MFABackupCode { + id String @id @default(cuid()) + code String @db.VarChar(20) // Hashed backup code + isUsed Boolean @default(false) + usedAt DateTime? + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + + @@index([userId]) + @@map("mfa_backup_codes") +} + +// Log login devices +model Device { + id String @id @default(cuid()) + name String? @db.VarChar(255) // Device name (e.g.: "iPhone 14 Pro") + type DeviceType @default(UNKNOWN) + userAgent String? @db.Text // User agent string + ipAddress String? @db.VarChar(45) // IPv4 or IPv6 + fingerprint String? @db.VarChar(255) // Device fingerprint + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + isTrusted Boolean @default(false) // User has trusted this device + lastSeenAt DateTime @default(now()) + createdAt DateTime @default(now()) + + // Relations + session Session? // Current session of this device (one-to-one) + + @@index([userId]) + @@index([fingerprint]) + @@map("devices") +} + +// Manage login sessions +model Session { + id String @id @default(cuid()) + token String @unique @db.Text // Session token (JWT or random string) + refreshToken String? @unique @db.Text // Refresh token + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + deviceId String? @unique // Link to Device (unique: one device has only one session) + device Device? @relation(fields: [deviceId], references: [id], onDelete: SetNull) + + ipAddress String? @db.VarChar(45) + userAgent String? @db.Text + + status SessionStatus @default(ACTIVE) + expiresAt DateTime // Expiration time + revokedAt DateTime? // Revocation time + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([userId]) + @@index([token]) + @@index([status]) + @@index([expiresAt]) + @@map("sessions") +} diff --git a/apps/api-effect/prisma/schema/base.prisma b/apps/api-effect/prisma/schema/base.prisma new file mode 100644 index 00000000..968df95f --- /dev/null +++ b/apps/api-effect/prisma/schema/base.prisma @@ -0,0 +1,36 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema +// +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" + output = "../../src/generated/prisma" + binaryTargets = ["native", "linux-musl-openssl-3.0.x"] + previewFeatures = ["postgresqlExtensions", "views", "fullTextSearchPostgres"] +} + +datasource db { + provider = "postgresql" +} diff --git a/apps/api-effect/prisma/schema/blog.prisma b/apps/api-effect/prisma/schema/blog.prisma new file mode 100644 index 00000000..0e2c9fba --- /dev/null +++ b/apps/api-effect/prisma/schema/blog.prisma @@ -0,0 +1,97 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// BLOG MANAGEMENT (Hybrid Storage: PostgreSQL + R2) +// ========================================= + +model BlogPost { + id String @id @default(cuid()) + slug String @unique + title String @db.VarChar(255) + + // Content stored in R2 + contentKey String // R2 object key for the markdown file (e.g., "blog/posts/{id}/content.md") + contentSize Int? // File size in bytes (for monitoring) + + // Searchable excerpt (stored in DB for full-text search) + excerpt String? @db.VarChar(500) + + // Cover image (also in R2) + coverImage String? // R2 object key to cover image + + authorId String + author User @relation(fields: [authorId], references: [id]) + + // Metadata + isPublished Boolean @default(false) + publishedAt DateTime? + viewCount Int @default(0) + + // SEO + metaTitle String? @db.VarChar(255) + metaDescription String? @db.VarChar(500) + + // Relations + tags BlogTag[] + comments BlogComment[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([slug]) + @@index([isPublished, publishedAt]) + @@index([authorId]) + @@index([title]) // Index for title search + @@index([excerpt]) // Index for excerpt search + @@map("blog_posts") +} + +model BlogTag { + id String @id @default(cuid()) + name String @unique @db.VarChar(50) + slug String @unique @db.VarChar(50) + + posts BlogPost[] + + @@map("blog_tags") +} + +model BlogComment { + id String @id @default(cuid()) + content String @db.Text + postId String + post BlogPost @relation(fields: [postId], references: [id], onDelete: Cascade) + authorId String + author User @relation(fields: [authorId], references: [id]) + + parentId String? // For nested comments + parent BlogComment? @relation("CommentReplies", fields: [parentId], references: [id]) + replies BlogComment[] @relation("CommentReplies") + + isApproved Boolean @default(false) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([postId]) + @@index([authorId]) + @@map("blog_comments") +} diff --git a/apps/api-effect/prisma/schema/enums.prisma b/apps/api-effect/prisma/schema/enums.prisma new file mode 100644 index 00000000..02648447 --- /dev/null +++ b/apps/api-effect/prisma/schema/enums.prisma @@ -0,0 +1,98 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// ENUMS (Define fixed value sets) +// ========================================= + +enum UserRole { + ADMIN // Shop owner + CUSTOMER // Customer +} + +enum OrderStatus { + PENDING // Awaiting payment + CONFIRMED // Confirmed + PROCESSING // Packaging + SHIPPING // Shipping + DELIVERED // Delivered successfully + CANCELLED // Cancelled + RETURNED // Returned +} + +enum PaymentStatus { + PENDING + PAID + FAILED + REFUNDED +} + +enum DiscountType { + PERCENTAGE // Discount by percentage + FIXED_AMOUNT // Fixed amount discount +} + +enum OAuthProvider { + GOOGLE + FACEBOOK + GITHUB + APPLE +} + +enum MFAMethod { + TOTP // Time-based One-Time Password (Google Authenticator, Authy) + SMS // SMS OTP + EMAIL // Email OTP + BACKUP_CODE // Backup codes +} + +enum DeviceType { + DESKTOP + MOBILE + TABLET + UNKNOWN +} + +enum SessionStatus { + ACTIVE + EXPIRED + REVOKED +} + +// ========================================= +// PRODUCT ENUMS +// ========================================= + +enum ProductSlug { + AO_THUN // T-shirt WebDev Studios + PAD_CHUOT // Mouse pad WebDev Studios + DAY_DEO // Lanyard WebDev Studios + MOC_KHOA // Keychain WebDev Studios +} + +/** + * Product size (only t-shirt has sizes) + */ +enum ProductSize { + S + M + L + XL +} diff --git a/apps/api-effect/prisma/schema/event.prisma b/apps/api-effect/prisma/schema/event.prisma new file mode 100644 index 00000000..e72aafce --- /dev/null +++ b/apps/api-effect/prisma/schema/event.prisma @@ -0,0 +1,55 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// EVENTS (Club event calendar) +// ========================================= + +enum EventType { + MEETING // Meeting + WORKSHOP // Workshop + SOCIAL // Social event + COMPETITION // Competition + SURVEY // Survey + OTHER // Other +} + +model Event { + id String @id @default(cuid()) + title String @db.VarChar(255) + description String? @db.Text + startDate DateTime @db.Timestamptz(6) + endDate DateTime @db.Timestamptz(6) + location String? @db.VarChar(255) + type EventType + organizer String? @db.VarChar(100) + attendees Int? // Number of attendees (optional) + surveyLink String? @db.Text // Google Form link for SURVEY events + + // Audit fields + createdBy String? // User ID of admin who created event + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([startDate]) + @@index([endDate]) + @@index([type]) + @@map("events") +} diff --git a/apps/api-effect/prisma/schema/marketing.prisma b/apps/api-effect/prisma/schema/marketing.prisma new file mode 100644 index 00000000..730e378b --- /dev/null +++ b/apps/api-effect/prisma/schema/marketing.prisma @@ -0,0 +1,61 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// MARKETING & SOCIAL +// ========================================= + +model Voucher { + id String @id @default(cuid()) + code String @unique @db.VarChar(20) + type DiscountType + value Decimal @db.Money // Discount value (amount or %) + + minSpend Decimal? @db.Money // Minimum order + maxDiscount Decimal? @db.Money // Maximum discount (for % type) + + usageLimit Int @default(100) // Total usage count + usedCount Int @default(0) // Used count + + startDate DateTime + endDate DateTime + isActive Boolean @default(true) + + @@map("vouchers") +} + +model Review { + id String @id @default(cuid()) + rating Int @default(5) // 1-5 stars + comment String? @db.Text + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + productId String + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([productId]) + @@index([userId]) + @@map("reviews") +} diff --git a/apps/api-effect/prisma/schema/order.prisma b/apps/api-effect/prisma/schema/order.prisma new file mode 100644 index 00000000..a5beb89f --- /dev/null +++ b/apps/api-effect/prisma/schema/order.prisma @@ -0,0 +1,119 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// CART & ORDER SYSTEM +// ========================================= + +model Cart { + id String @id @default(cuid()) + userId String @unique + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + items CartItem[] + updatedAt DateTime @updatedAt + + @@map("carts") +} + +model CartItem { + id String @id @default(cuid()) + cartId String + cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade) + + productId String + product Product @relation(fields: [productId], references: [id]) + + size ProductSize? // Product size (only t-shirt has, nullable) + quantity Int @default(1) + + @@unique([cartId, productId, size]) // A product + size can only appear once in a cart + @@index([cartId]) + @@map("cart_items") +} + +model Order { + id String @id @default(cuid()) + code String @unique // Short order code for customer (e.g.: #ORD-1234) + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + status OrderStatus @default(PENDING) + paymentStatus PaymentStatus @default(PENDING) + + totalAmount Decimal @db.Money // Final total amount + shippingFee Decimal @default(0) @db.Money + discountValue Decimal @default(0) @db.Money + + // Shipping address snapshot (Store text data to prevent changes when user edits profile) + shippingAddressId String @unique + shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + items OrderItem[] + paymentTransaction PaymentTransaction? + + @@map("orders") +} + +/** + * Shipping address (Snapshot at order time) + */ +model ShippingAddress { + id String @id @default(cuid()) + fullName String @db.VarChar(255) + phone String @db.VarChar(20) + addressLine1 String @db.VarChar(255) + addressLine2 String? @db.VarChar(255) + city String @db.VarChar(100) + district String @db.VarChar(100) + ward String @db.VarChar(100) + postalCode String @db.VarChar(20) + + order Order? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("shipping_addresses") +} + +// Store product state AT TIME OF PURCHASE (Snapshot) +model OrderItem { + id String @id @default(cuid()) + orderId String + order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) + + productId String? // Can be null if product is deleted later + product Product? @relation(fields: [productId], references: [id]) + + // Snapshot data (stored to prevent changes when product is updated) + productSlug ProductSlug // Store slug for easy lookup + productName String @db.VarChar(255) // Store product name + size ProductSize? // Product size (if available) + price Decimal @db.Money // Store price at time of purchase + quantity Int + + @@index([orderId]) + @@map("order_items") +} diff --git a/apps/api-effect/prisma/schema/payment.prisma b/apps/api-effect/prisma/schema/payment.prisma new file mode 100644 index 00000000..b2ce3133 --- /dev/null +++ b/apps/api-effect/prisma/schema/payment.prisma @@ -0,0 +1,46 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// PAYMENT SYSTEM +// ========================================= + +model PaymentTransaction { + id String @id @default(cuid()) + orderId String @unique + order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) + transactionCode String @unique // PayOS transaction code + amount Decimal @db.Money + status PaymentTransactionStatus @default(PENDING) + paymentUrl String? // URL for redirect + payosData Json? // Store raw data from PayOS + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("payment_transactions") +} + +enum PaymentTransactionStatus { + PENDING + PAID + CANCELLED + EXPIRED + FAILED +} diff --git a/apps/api-effect/prisma/schema/product.prisma b/apps/api-effect/prisma/schema/product.prisma new file mode 100644 index 00000000..938a83a7 --- /dev/null +++ b/apps/api-effect/prisma/schema/product.prisma @@ -0,0 +1,77 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// PRODUCT MANAGEMENT (Simplified for 4 fixed products) +// ========================================= + + +model Product { + id String @id @default(cuid()) + slug ProductSlug @unique // Enum ensures only 4 products + name String @db.VarChar(255) + description String @db.Text + + // Product pricing + priceCurrent Decimal @db.Money // Current price + priceOriginal Decimal? @db.Money // Original price (if discounted) + priceDiscount Decimal? @db.Money // Discount amount + + // Product information + stock Int @default(0) // Total stock quantity + hasSizes Boolean @default(false) // Whether size selection is supported (only t-shirt) + badge String? @db.VarChar(50) // Display badge (Limited Edition, Official Merch) + + // Product ratings + ratingValue Decimal @default(0) @db.Decimal(3, 2) // Rating score (0-5) + ratingCount Int @default(0) // Number of ratings + + // Metadata + isPublished Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Relations + sizeStocks ProductSizeStock[] // Manage stock by size (only t-shirt) + cartItems CartItem[] + orderItems OrderItem[] + reviews Review[] + + @@index([slug]) + @@map("products") +} + +/** + * Manage stock by size (only for t-shirt) + * If product doesn't have sizes, stock is stored directly in Product.stock + */ +model ProductSizeStock { + id String @id @default(cuid()) + size ProductSize // S, M, L, XL + stock Int @default(0) + + productId String + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@unique([productId, size]) // Each size of a product has only 1 record + @@index([productId]) + @@map("product_size_stocks") +} + diff --git a/apps/api-effect/prisma/schema/security-log.prisma b/apps/api-effect/prisma/schema/security-log.prisma new file mode 100644 index 00000000..226d9844 --- /dev/null +++ b/apps/api-effect/prisma/schema/security-log.prisma @@ -0,0 +1,41 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +model SecurityLog { + id String @id @default(cuid()) + type String // SecurityEventType enum + severity String // low, medium, high, critical + message String @db.Text + userId String? + ipAddress String? + userAgent String? + path String? + method String? + metadata Json? + timestamp DateTime @default(now()) + + // Indexes for efficient querying + @@index([type]) + @@index([severity]) + @@index([timestamp]) + @@index([userId]) + @@index([ipAddress]) + @@map("security_logs") +} diff --git a/apps/api-effect/prisma/schema/user.prisma b/apps/api-effect/prisma/schema/user.prisma new file mode 100644 index 00000000..69a1d91c --- /dev/null +++ b/apps/api-effect/prisma/schema/user.prisma @@ -0,0 +1,75 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// USER & AUTHENTICATION +// ========================================= + +model User { + id String @id @default(uuid()) + email String @unique @db.VarChar(255) + password String? @db.Text // Nullable because OAuth users don't have password + fullName String? @db.VarChar(100) + phone String? @db.VarChar(15) + avatar String? @db.Text + role UserRole @default(CUSTOMER) + + // MFA fields + mfaEnabled Boolean @default(false) + mfaSecret String? @db.Text // TOTP secret (encrypted) + + emailVerified Boolean @default(false) + phoneVerified Boolean @default(false) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Relations + addresses Address[] + orders Order[] + reviews Review[] + cart Cart? // 1 User has only 1 active cart + externalAccounts ExternalAccount[] // OAuth accounts + mfaMethods UserMFAMethod[] // MFA methods + mfaBackupCodes MFABackupCode[] // MFA backup codes + devices Device[] // Logged devices + sessions Session[] // Active sessions + blogPosts BlogPost[] // Blog posts authored by user + blogComments BlogComment[] // Blog comments by user + + @@map("users") +} + +model Address { + id String @id @default(cuid()) + userId String + recipient String @db.VarChar(100) // Recipient name + phone String @db.VarChar(15) + street String @db.Text + city String @db.VarChar(50) + district String @db.VarChar(50) + ward String @db.VarChar(50) + isDefault Boolean @default(false) + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([userId]) + @@map("addresses") +} diff --git a/apps/api-effect/src/generated/prisma/client.d.ts b/apps/api-effect/src/generated/prisma/client.d.ts new file mode 100644 index 00000000..bc20c6c1 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/client.d.ts @@ -0,0 +1 @@ +export * from "./index" \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/client.js b/apps/api-effect/src/generated/prisma/client.js new file mode 100644 index 00000000..6ac8a817 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/client.js @@ -0,0 +1,5 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +module.exports = { ...require('.') } \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/default.d.ts b/apps/api-effect/src/generated/prisma/default.d.ts new file mode 100644 index 00000000..bc20c6c1 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/default.d.ts @@ -0,0 +1 @@ +export * from "./index" \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/default.js b/apps/api-effect/src/generated/prisma/default.js new file mode 100644 index 00000000..eb556755 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/default.js @@ -0,0 +1,5 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +module.exports = { ...require('#main-entry-point') } \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/edge.d.ts b/apps/api-effect/src/generated/prisma/edge.d.ts new file mode 100644 index 00000000..274b8fa6 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/edge.d.ts @@ -0,0 +1 @@ +export * from "./default" \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/edge.js b/apps/api-effect/src/generated/prisma/edge.js new file mode 100644 index 00000000..5f6491bb --- /dev/null +++ b/apps/api-effect/src/generated/prisma/edge.js @@ -0,0 +1,713 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file + +Object.defineProperty(exports, "__esModule", { value: true }); + +const { + PrismaClientKnownRequestError, + PrismaClientUnknownRequestError, + PrismaClientRustPanicError, + PrismaClientInitializationError, + PrismaClientValidationError, + getPrismaClient, + sqltag, + empty, + join, + raw, + skip, + Decimal, + Debug, + DbNull, + JsonNull, + AnyNull, + NullTypes, + makeStrictEnum, + Extensions, + warnOnce, + defineDmmfProperty, + Public, + getRuntime, + createParam, +} = require('./runtime/wasm-compiler-edge.js') + + +const Prisma = {} + +exports.Prisma = Prisma +exports.$Enums = {} + +/** + * Prisma Client JS version: 7.8.0 + * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a + */ +Prisma.prismaVersion = { + client: "7.8.0", + engine: "3c6e192761c0362d496ed980de936e2f3cebcd3a" +} + +Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError; +Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError +Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError +Prisma.PrismaClientInitializationError = PrismaClientInitializationError +Prisma.PrismaClientValidationError = PrismaClientValidationError +Prisma.Decimal = Decimal + +/** + * Re-export of sql-template-tag + */ +Prisma.sql = sqltag +Prisma.empty = empty +Prisma.join = join +Prisma.raw = raw +Prisma.validator = Public.validator + +/** +* Extensions +*/ +Prisma.getExtensionContext = Extensions.getExtensionContext +Prisma.defineExtension = Extensions.defineExtension + +/** + * Shorthand utilities for JSON filtering + */ +Prisma.DbNull = DbNull +Prisma.JsonNull = JsonNull +Prisma.AnyNull = AnyNull + +Prisma.NullTypes = NullTypes + + + + + +/** + * Enums + */ +exports.Prisma.TransactionIsolationLevel = makeStrictEnum({ + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable' +}); + +exports.Prisma.ExternalAccountScalarFieldEnum = { + id: 'id', + provider: 'provider', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + expiresAt: 'expiresAt', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.UserMFAMethodScalarFieldEnum = { + id: 'id', + methodType: 'methodType', + secret: 'secret', + phone: 'phone', + isActive: 'isActive', + isVerified: 'isVerified', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + lastUsedAt: 'lastUsedAt' +}; + +exports.Prisma.MFABackupCodeScalarFieldEnum = { + id: 'id', + code: 'code', + isUsed: 'isUsed', + usedAt: 'usedAt', + userId: 'userId', + createdAt: 'createdAt' +}; + +exports.Prisma.DeviceScalarFieldEnum = { + id: 'id', + name: 'name', + type: 'type', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId', + isTrusted: 'isTrusted', + lastSeenAt: 'lastSeenAt', + createdAt: 'createdAt' +}; + +exports.Prisma.SessionScalarFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + status: 'status', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogPostScalarFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + contentSize: 'contentSize', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + isPublished: 'isPublished', + publishedAt: 'publishedAt', + viewCount: 'viewCount', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogTagScalarFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentScalarFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId', + isApproved: 'isApproved', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.EventScalarFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + startDate: 'startDate', + endDate: 'endDate', + location: 'location', + type: 'type', + organizer: 'organizer', + attendees: 'attendees', + surveyLink: 'surveyLink', + createdBy: 'createdBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.VoucherScalarFieldEnum = { + id: 'id', + code: 'code', + type: 'type', + value: 'value', + minSpend: 'minSpend', + maxDiscount: 'maxDiscount', + usageLimit: 'usageLimit', + usedCount: 'usedCount', + startDate: 'startDate', + endDate: 'endDate', + isActive: 'isActive' +}; + +exports.Prisma.ReviewScalarFieldEnum = { + id: 'id', + rating: 'rating', + comment: 'comment', + userId: 'userId', + productId: 'productId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartScalarFieldEnum = { + id: 'id', + userId: 'userId', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartItemScalarFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId', + size: 'size', + quantity: 'quantity' +}; + +exports.Prisma.OrderScalarFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + status: 'status', + paymentStatus: 'paymentStatus', + totalAmount: 'totalAmount', + shippingFee: 'shippingFee', + discountValue: 'discountValue', + shippingAddressId: 'shippingAddressId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ShippingAddressScalarFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.OrderItemScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productSlug: 'productSlug', + productName: 'productName', + size: 'size', + price: 'price', + quantity: 'quantity' +}; + +exports.Prisma.PaymentTransactionScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + amount: 'amount', + status: 'status', + paymentUrl: 'paymentUrl', + payosData: 'payosData', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductScalarFieldEnum = { + id: 'id', + slug: 'slug', + name: 'name', + description: 'description', + priceCurrent: 'priceCurrent', + priceOriginal: 'priceOriginal', + priceDiscount: 'priceDiscount', + stock: 'stock', + hasSizes: 'hasSizes', + badge: 'badge', + ratingValue: 'ratingValue', + ratingCount: 'ratingCount', + isPublished: 'isPublished', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductSizeStockScalarFieldEnum = { + id: 'id', + size: 'size', + stock: 'stock', + productId: 'productId' +}; + +exports.Prisma.SecurityLogScalarFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method', + metadata: 'metadata', + timestamp: 'timestamp' +}; + +exports.Prisma.UserScalarFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + role: 'role', + mfaEnabled: 'mfaEnabled', + mfaSecret: 'mfaSecret', + emailVerified: 'emailVerified', + phoneVerified: 'phoneVerified', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.AddressScalarFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward', + isDefault: 'isDefault' +}; + +exports.Prisma.SortOrder = { + asc: 'asc', + desc: 'desc' +}; + +exports.Prisma.NullableJsonNullValueInput = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull +}; + +exports.Prisma.QueryMode = { + default: 'default', + insensitive: 'insensitive' +}; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; + +exports.Prisma.ExternalAccountOrderByRelevanceFieldEnum = { + id: 'id', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + userId: 'userId' +}; + +exports.Prisma.UserMFAMethodOrderByRelevanceFieldEnum = { + id: 'id', + secret: 'secret', + phone: 'phone', + userId: 'userId' +}; + +exports.Prisma.MFABackupCodeOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId' +}; + +exports.Prisma.DeviceOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId' +}; + +exports.Prisma.SessionOrderByRelevanceFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent' +}; + +exports.Prisma.BlogPostOrderByRelevanceFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription' +}; + +exports.Prisma.BlogTagOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentOrderByRelevanceFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId' +}; + +exports.Prisma.EventOrderByRelevanceFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + location: 'location', + organizer: 'organizer', + surveyLink: 'surveyLink', + createdBy: 'createdBy' +}; + +exports.Prisma.VoucherOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code' +}; + +exports.Prisma.ReviewOrderByRelevanceFieldEnum = { + id: 'id', + comment: 'comment', + userId: 'userId', + productId: 'productId' +}; + +exports.Prisma.CartOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId' +}; + +exports.Prisma.CartItemOrderByRelevanceFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId' +}; + +exports.Prisma.OrderOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + shippingAddressId: 'shippingAddressId' +}; + +exports.Prisma.ShippingAddressOrderByRelevanceFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode' +}; + +exports.Prisma.OrderItemOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productName: 'productName' +}; + +exports.Prisma.JsonNullValueFilter = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull, + AnyNull: Prisma.AnyNull +}; + +exports.Prisma.PaymentTransactionOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + paymentUrl: 'paymentUrl' +}; + +exports.Prisma.ProductOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + description: 'description', + badge: 'badge' +}; + +exports.Prisma.ProductSizeStockOrderByRelevanceFieldEnum = { + id: 'id', + productId: 'productId' +}; + +exports.Prisma.SecurityLogOrderByRelevanceFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method' +}; + +exports.Prisma.UserOrderByRelevanceFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + mfaSecret: 'mfaSecret' +}; + +exports.Prisma.AddressOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward' +}; +exports.UserRole = exports.$Enums.UserRole = { + ADMIN: 'ADMIN', + CUSTOMER: 'CUSTOMER' +}; + +exports.OrderStatus = exports.$Enums.OrderStatus = { + PENDING: 'PENDING', + CONFIRMED: 'CONFIRMED', + PROCESSING: 'PROCESSING', + SHIPPING: 'SHIPPING', + DELIVERED: 'DELIVERED', + CANCELLED: 'CANCELLED', + RETURNED: 'RETURNED' +}; + +exports.PaymentStatus = exports.$Enums.PaymentStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + FAILED: 'FAILED', + REFUNDED: 'REFUNDED' +}; + +exports.DiscountType = exports.$Enums.DiscountType = { + PERCENTAGE: 'PERCENTAGE', + FIXED_AMOUNT: 'FIXED_AMOUNT' +}; + +exports.OAuthProvider = exports.$Enums.OAuthProvider = { + GOOGLE: 'GOOGLE', + FACEBOOK: 'FACEBOOK', + GITHUB: 'GITHUB', + APPLE: 'APPLE' +}; + +exports.MFAMethod = exports.$Enums.MFAMethod = { + TOTP: 'TOTP', + SMS: 'SMS', + EMAIL: 'EMAIL', + BACKUP_CODE: 'BACKUP_CODE' +}; + +exports.DeviceType = exports.$Enums.DeviceType = { + DESKTOP: 'DESKTOP', + MOBILE: 'MOBILE', + TABLET: 'TABLET', + UNKNOWN: 'UNKNOWN' +}; + +exports.SessionStatus = exports.$Enums.SessionStatus = { + ACTIVE: 'ACTIVE', + EXPIRED: 'EXPIRED', + REVOKED: 'REVOKED' +}; + +exports.ProductSlug = exports.$Enums.ProductSlug = { + AO_THUN: 'AO_THUN', + PAD_CHUOT: 'PAD_CHUOT', + DAY_DEO: 'DAY_DEO', + MOC_KHOA: 'MOC_KHOA' +}; + +exports.ProductSize = exports.$Enums.ProductSize = { + S: 'S', + M: 'M', + L: 'L', + XL: 'XL' +}; + +exports.EventType = exports.$Enums.EventType = { + MEETING: 'MEETING', + WORKSHOP: 'WORKSHOP', + SOCIAL: 'SOCIAL', + COMPETITION: 'COMPETITION', + SURVEY: 'SURVEY', + OTHER: 'OTHER' +}; + +exports.PaymentTransactionStatus = exports.$Enums.PaymentTransactionStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + CANCELLED: 'CANCELLED', + EXPIRED: 'EXPIRED', + FAILED: 'FAILED' +}; + +exports.Prisma.ModelName = { + ExternalAccount: 'ExternalAccount', + UserMFAMethod: 'UserMFAMethod', + MFABackupCode: 'MFABackupCode', + Device: 'Device', + Session: 'Session', + BlogPost: 'BlogPost', + BlogTag: 'BlogTag', + BlogComment: 'BlogComment', + Event: 'Event', + Voucher: 'Voucher', + Review: 'Review', + Cart: 'Cart', + CartItem: 'CartItem', + Order: 'Order', + ShippingAddress: 'ShippingAddress', + OrderItem: 'OrderItem', + PaymentTransaction: 'PaymentTransaction', + Product: 'Product', + ProductSizeStock: 'ProductSizeStock', + SecurityLog: 'SecurityLog', + User: 'User', + Address: 'Address' +}; +/** + * Create the Client + */ +const config = { + "previewFeatures": [ + "fullTextSearchPostgres", + "postgresqlExtensions", + "views" + ], + "clientVersion": "7.8.0", + "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", + "activeProvider": "postgresql", + "inlineSchema": "// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// OAUTH & AUTHENTICATION\n// =========================================\n\n// Store OAuth login information (Google, Facebook, etc.)\nmodel ExternalAccount {\n id String @id @default(cuid())\n provider OAuthProvider\n providerId String @db.VarChar(255) // ID from provider (e.g.: Google user ID)\n providerEmail String? @db.VarChar(255) // Email from provider\n accessToken String? @db.Text // Encrypted access token\n refreshToken String? @db.Text // Encrypted refresh token\n expiresAt DateTime? // Token expiration\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Unique constraint: a provider can only be linked once with a user\n @@unique([provider, providerId])\n @@unique([provider, userId])\n @@index([userId])\n @@index([provider, providerId])\n @@map(\"external_accounts\")\n}\n\n// Manage user MFA methods\nmodel UserMFAMethod {\n id String @id @default(cuid())\n methodType MFAMethod // TOTP, SMS, EMAIL, BACKUP_CODE\n secret String? @db.Text // Encrypted secret (for TOTP)\n phone String? @db.VarChar(15) // For SMS\n isActive Boolean @default(true)\n isVerified Boolean @default(false) // Whether verified\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastUsedAt DateTime? // Last time used\n\n @@index([userId])\n @@map(\"mfa_methods\")\n}\n\n// Backup codes for MFA (single use)\nmodel MFABackupCode {\n id String @id @default(cuid())\n code String @db.VarChar(20) // Hashed backup code\n isUsed Boolean @default(false)\n usedAt DateTime?\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@map(\"mfa_backup_codes\")\n}\n\n// Log login devices\nmodel Device {\n id String @id @default(cuid())\n name String? @db.VarChar(255) // Device name (e.g.: \"iPhone 14 Pro\")\n type DeviceType @default(UNKNOWN)\n userAgent String? @db.Text // User agent string\n ipAddress String? @db.VarChar(45) // IPv4 or IPv6\n fingerprint String? @db.VarChar(255) // Device fingerprint\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n isTrusted Boolean @default(false) // User has trusted this device\n lastSeenAt DateTime @default(now())\n createdAt DateTime @default(now())\n\n // Relations\n session Session? // Current session of this device (one-to-one)\n\n @@index([userId])\n @@index([fingerprint])\n @@map(\"devices\")\n}\n\n// Manage login sessions\nmodel Session {\n id String @id @default(cuid())\n token String @unique @db.Text // Session token (JWT or random string)\n refreshToken String? @unique @db.Text // Refresh token\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n deviceId String? @unique // Link to Device (unique: one device has only one session)\n device Device? @relation(fields: [deviceId], references: [id], onDelete: SetNull)\n\n ipAddress String? @db.VarChar(45)\n userAgent String? @db.Text\n\n status SessionStatus @default(ACTIVE)\n expiresAt DateTime // Expiration time\n revokedAt DateTime? // Revocation time\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@index([token])\n @@index([status])\n @@index([expiresAt])\n @@map(\"sessions\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n//\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../../src/generated/prisma\"\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n previewFeatures = [\"postgresqlExtensions\", \"views\", \"fullTextSearchPostgres\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// BLOG MANAGEMENT (Hybrid Storage: PostgreSQL + R2)\n// =========================================\n\nmodel BlogPost {\n id String @id @default(cuid())\n slug String @unique\n title String @db.VarChar(255)\n\n // Content stored in R2\n contentKey String // R2 object key for the markdown file (e.g., \"blog/posts/{id}/content.md\")\n contentSize Int? // File size in bytes (for monitoring)\n\n // Searchable excerpt (stored in DB for full-text search)\n excerpt String? @db.VarChar(500)\n\n // Cover image (also in R2)\n coverImage String? // R2 object key to cover image\n\n authorId String\n author User @relation(fields: [authorId], references: [id])\n\n // Metadata\n isPublished Boolean @default(false)\n publishedAt DateTime?\n viewCount Int @default(0)\n\n // SEO\n metaTitle String? @db.VarChar(255)\n metaDescription String? @db.VarChar(500)\n\n // Relations\n tags BlogTag[]\n comments BlogComment[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([slug])\n @@index([isPublished, publishedAt])\n @@index([authorId])\n @@index([title]) // Index for title search\n @@index([excerpt]) // Index for excerpt search\n @@map(\"blog_posts\")\n}\n\nmodel BlogTag {\n id String @id @default(cuid())\n name String @unique @db.VarChar(50)\n slug String @unique @db.VarChar(50)\n\n posts BlogPost[]\n\n @@map(\"blog_tags\")\n}\n\nmodel BlogComment {\n id String @id @default(cuid())\n content String @db.Text\n postId String\n post BlogPost @relation(fields: [postId], references: [id], onDelete: Cascade)\n authorId String\n author User @relation(fields: [authorId], references: [id])\n\n parentId String? // For nested comments\n parent BlogComment? @relation(\"CommentReplies\", fields: [parentId], references: [id])\n replies BlogComment[] @relation(\"CommentReplies\")\n\n isApproved Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([postId])\n @@index([authorId])\n @@map(\"blog_comments\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// ENUMS (Define fixed value sets)\n// =========================================\n\nenum UserRole {\n ADMIN // Shop owner\n CUSTOMER // Customer\n}\n\nenum OrderStatus {\n PENDING // Awaiting payment\n CONFIRMED // Confirmed\n PROCESSING // Packaging\n SHIPPING // Shipping\n DELIVERED // Delivered successfully\n CANCELLED // Cancelled\n RETURNED // Returned\n}\n\nenum PaymentStatus {\n PENDING\n PAID\n FAILED\n REFUNDED\n}\n\nenum DiscountType {\n PERCENTAGE // Discount by percentage\n FIXED_AMOUNT // Fixed amount discount\n}\n\nenum OAuthProvider {\n GOOGLE\n FACEBOOK\n GITHUB\n APPLE\n}\n\nenum MFAMethod {\n TOTP // Time-based One-Time Password (Google Authenticator, Authy)\n SMS // SMS OTP\n EMAIL // Email OTP\n BACKUP_CODE // Backup codes\n}\n\nenum DeviceType {\n DESKTOP\n MOBILE\n TABLET\n UNKNOWN\n}\n\nenum SessionStatus {\n ACTIVE\n EXPIRED\n REVOKED\n}\n\n// =========================================\n// PRODUCT ENUMS\n// =========================================\n\nenum ProductSlug {\n AO_THUN // T-shirt WebDev Studios\n PAD_CHUOT // Mouse pad WebDev Studios\n DAY_DEO // Lanyard WebDev Studios\n MOC_KHOA // Keychain WebDev Studios\n}\n\n/**\n * Product size (only t-shirt has sizes)\n */\nenum ProductSize {\n S\n M\n L\n XL\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// EVENTS (Club event calendar)\n// =========================================\n\nenum EventType {\n MEETING // Meeting\n WORKSHOP // Workshop\n SOCIAL // Social event\n COMPETITION // Competition\n SURVEY // Survey\n OTHER // Other\n}\n\nmodel Event {\n id String @id @default(cuid())\n title String @db.VarChar(255)\n description String? @db.Text\n startDate DateTime @db.Timestamptz(6)\n endDate DateTime @db.Timestamptz(6)\n location String? @db.VarChar(255)\n type EventType\n organizer String? @db.VarChar(100)\n attendees Int? // Number of attendees (optional)\n surveyLink String? @db.Text // Google Form link for SURVEY events\n\n // Audit fields\n createdBy String? // User ID of admin who created event\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([startDate])\n @@index([endDate])\n @@index([type])\n @@map(\"events\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// MARKETING & SOCIAL\n// =========================================\n\nmodel Voucher {\n id String @id @default(cuid())\n code String @unique @db.VarChar(20)\n type DiscountType\n value Decimal @db.Money // Discount value (amount or %)\n\n minSpend Decimal? @db.Money // Minimum order\n maxDiscount Decimal? @db.Money // Maximum discount (for % type)\n\n usageLimit Int @default(100) // Total usage count\n usedCount Int @default(0) // Used count\n\n startDate DateTime\n endDate DateTime\n isActive Boolean @default(true)\n\n @@map(\"vouchers\")\n}\n\nmodel Review {\n id String @id @default(cuid())\n rating Int @default(5) // 1-5 stars\n comment String? @db.Text\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n productId String\n product Product @relation(fields: [productId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([productId])\n @@index([userId])\n @@map(\"reviews\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// CART & ORDER SYSTEM\n// =========================================\n\nmodel Cart {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n items CartItem[]\n updatedAt DateTime @updatedAt\n\n @@map(\"carts\")\n}\n\nmodel CartItem {\n id String @id @default(cuid())\n cartId String\n cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade)\n\n productId String\n product Product @relation(fields: [productId], references: [id])\n\n size ProductSize? // Product size (only t-shirt has, nullable)\n quantity Int @default(1)\n\n @@unique([cartId, productId, size]) // A product + size can only appear once in a cart\n @@index([cartId])\n @@map(\"cart_items\")\n}\n\nmodel Order {\n id String @id @default(cuid())\n code String @unique // Short order code for customer (e.g.: #ORD-1234)\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n status OrderStatus @default(PENDING)\n paymentStatus PaymentStatus @default(PENDING)\n\n totalAmount Decimal @db.Money // Final total amount\n shippingFee Decimal @default(0) @db.Money\n discountValue Decimal @default(0) @db.Money\n\n // Shipping address snapshot (Store text data to prevent changes when user edits profile)\n shippingAddressId String @unique\n shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n items OrderItem[]\n paymentTransaction PaymentTransaction?\n\n @@map(\"orders\")\n}\n\n/**\n * Shipping address (Snapshot at order time)\n */\nmodel ShippingAddress {\n id String @id @default(cuid())\n fullName String @db.VarChar(255)\n phone String @db.VarChar(20)\n addressLine1 String @db.VarChar(255)\n addressLine2 String? @db.VarChar(255)\n city String @db.VarChar(100)\n district String @db.VarChar(100)\n ward String @db.VarChar(100)\n postalCode String @db.VarChar(20)\n\n order Order?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"shipping_addresses\")\n}\n\n// Store product state AT TIME OF PURCHASE (Snapshot)\nmodel OrderItem {\n id String @id @default(cuid())\n orderId String\n order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)\n\n productId String? // Can be null if product is deleted later\n product Product? @relation(fields: [productId], references: [id])\n\n // Snapshot data (stored to prevent changes when product is updated)\n productSlug ProductSlug // Store slug for easy lookup\n productName String @db.VarChar(255) // Store product name\n size ProductSize? // Product size (if available)\n price Decimal @db.Money // Store price at time of purchase\n quantity Int\n\n @@index([orderId])\n @@map(\"order_items\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// PAYMENT SYSTEM\n// =========================================\n\nmodel PaymentTransaction {\n id String @id @default(cuid())\n orderId String @unique\n order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)\n transactionCode String @unique // PayOS transaction code\n amount Decimal @db.Money\n status PaymentTransactionStatus @default(PENDING)\n paymentUrl String? // URL for redirect\n payosData Json? // Store raw data from PayOS\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"payment_transactions\")\n}\n\nenum PaymentTransactionStatus {\n PENDING\n PAID\n CANCELLED\n EXPIRED\n FAILED\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// PRODUCT MANAGEMENT (Simplified for 4 fixed products)\n// =========================================\n\nmodel Product {\n id String @id @default(cuid())\n slug ProductSlug @unique // Enum ensures only 4 products\n name String @db.VarChar(255)\n description String @db.Text\n\n // Product pricing\n priceCurrent Decimal @db.Money // Current price\n priceOriginal Decimal? @db.Money // Original price (if discounted)\n priceDiscount Decimal? @db.Money // Discount amount\n\n // Product information\n stock Int @default(0) // Total stock quantity\n hasSizes Boolean @default(false) // Whether size selection is supported (only t-shirt)\n badge String? @db.VarChar(50) // Display badge (Limited Edition, Official Merch)\n\n // Product ratings\n ratingValue Decimal @default(0) @db.Decimal(3, 2) // Rating score (0-5)\n ratingCount Int @default(0) // Number of ratings\n\n // Metadata\n isPublished Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n sizeStocks ProductSizeStock[] // Manage stock by size (only t-shirt)\n cartItems CartItem[]\n orderItems OrderItem[]\n reviews Review[]\n\n @@index([slug])\n @@map(\"products\")\n}\n\n/**\n * Manage stock by size (only for t-shirt)\n * If product doesn't have sizes, stock is stored directly in Product.stock\n */\nmodel ProductSizeStock {\n id String @id @default(cuid())\n size ProductSize // S, M, L, XL\n stock Int @default(0)\n\n productId String\n product Product @relation(fields: [productId], references: [id], onDelete: Cascade)\n\n @@unique([productId, size]) // Each size of a product has only 1 record\n @@index([productId])\n @@map(\"product_size_stocks\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\nmodel SecurityLog {\n id String @id @default(cuid())\n type String // SecurityEventType enum\n severity String // low, medium, high, critical\n message String @db.Text\n userId String?\n ipAddress String?\n userAgent String?\n path String?\n method String?\n metadata Json?\n timestamp DateTime @default(now())\n\n // Indexes for efficient querying\n @@index([type])\n @@index([severity])\n @@index([timestamp])\n @@index([userId])\n @@index([ipAddress])\n @@map(\"security_logs\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// USER & AUTHENTICATION\n// =========================================\n\nmodel User {\n id String @id @default(uuid())\n email String @unique @db.VarChar(255)\n password String? @db.Text // Nullable because OAuth users don't have password\n fullName String? @db.VarChar(100)\n phone String? @db.VarChar(15)\n avatar String? @db.Text\n role UserRole @default(CUSTOMER)\n\n // MFA fields\n mfaEnabled Boolean @default(false)\n mfaSecret String? @db.Text // TOTP secret (encrypted)\n\n emailVerified Boolean @default(false)\n phoneVerified Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n addresses Address[]\n orders Order[]\n reviews Review[]\n cart Cart? // 1 User has only 1 active cart\n externalAccounts ExternalAccount[] // OAuth accounts\n mfaMethods UserMFAMethod[] // MFA methods\n mfaBackupCodes MFABackupCode[] // MFA backup codes\n devices Device[] // Logged devices\n sessions Session[] // Active sessions\n blogPosts BlogPost[] // Blog posts authored by user\n blogComments BlogComment[] // Blog comments by user\n\n @@map(\"users\")\n}\n\nmodel Address {\n id String @id @default(cuid())\n userId String\n recipient String @db.VarChar(100) // Recipient name\n phone String @db.VarChar(15)\n street String @db.Text\n city String @db.VarChar(50)\n district String @db.VarChar(50)\n ward String @db.VarChar(50)\n isDefault Boolean @default(false)\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"addresses\")\n}\n" +} + +config.runtimeDataModel = JSON.parse("{\"models\":{\"ExternalAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"enum\",\"type\":\"OAuthProvider\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ExternalAccountToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"external_accounts\"},\"UserMFAMethod\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"methodType\",\"kind\":\"enum\",\"type\":\"MFAMethod\"},{\"name\":\"secret\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserMFAMethod\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastUsedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mfa_methods\"},\"MFABackupCode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isUsed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MFABackupCodeToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mfa_backup_codes\"},\"Device\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DeviceType\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fingerprint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeviceToUser\"},{\"name\":\"isTrusted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"lastSeenAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"DeviceToSession\"}],\"dbName\":\"devices\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"deviceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"device\",\"kind\":\"object\",\"type\":\"Device\",\"relationName\":\"DeviceToSession\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"SessionStatus\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"sessions\"},\"BlogPost\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentSize\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"excerpt\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"coverImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"authorId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"author\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BlogPostToUser\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"viewCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"metaTitle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metaDescription\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tags\",\"kind\":\"object\",\"type\":\"BlogTag\",\"relationName\":\"BlogPostToBlogTag\"},{\"name\":\"comments\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"BlogCommentToBlogPost\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"blog_posts\"},\"BlogTag\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posts\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogPostToBlogTag\"}],\"dbName\":\"blog_tags\"},\"BlogComment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"post\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogCommentToBlogPost\"},{\"name\":\"authorId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"author\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BlogCommentToUser\"},{\"name\":\"parentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parent\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"CommentReplies\"},{\"name\":\"replies\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"CommentReplies\"},{\"name\":\"isApproved\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"blog_comments\"},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"location\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"organizer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendees\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"surveyLink\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"events\"},\"Voucher\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DiscountType\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"minSpend\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"maxDiscount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"usageLimit\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"usedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"}],\"dbName\":\"vouchers\"},\"Review\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"comment\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ReviewToUser\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"ProductToReview\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"reviews\"},\"Cart\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CartToUser\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"CartItem\",\"relationName\":\"CartToCartItem\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"carts\"},\"CartItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cartId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cart\",\"kind\":\"object\",\"type\":\"Cart\",\"relationName\":\"CartToCartItem\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"CartItemToProduct\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":\"cart_items\"},\"Order\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrderToUser\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"OrderStatus\"},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"shippingFee\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"discountValue\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"shippingAddressId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shippingAddress\",\"kind\":\"object\",\"type\":\"ShippingAddress\",\"relationName\":\"OrderToShippingAddress\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"OrderItem\",\"relationName\":\"OrderToOrderItem\"},{\"name\":\"paymentTransaction\",\"kind\":\"object\",\"type\":\"PaymentTransaction\",\"relationName\":\"OrderToPaymentTransaction\"}],\"dbName\":\"orders\"},\"ShippingAddress\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addressLine1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addressLine2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ward\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postalCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToShippingAddress\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"shipping_addresses\"},\"OrderItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToOrderItem\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"OrderItemToProduct\"},{\"name\":\"productSlug\",\"kind\":\"enum\",\"type\":\"ProductSlug\"},{\"name\":\"productName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":\"order_items\"},\"PaymentTransaction\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToPaymentTransaction\"},{\"name\":\"transactionCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentTransactionStatus\"},{\"name\":\"paymentUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"payosData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"payment_transactions\"},\"Product\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"enum\",\"type\":\"ProductSlug\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"priceCurrent\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"priceOriginal\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"priceDiscount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"stock\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hasSizes\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"badge\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ratingValue\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"ratingCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sizeStocks\",\"kind\":\"object\",\"type\":\"ProductSizeStock\",\"relationName\":\"ProductToProductSizeStock\"},{\"name\":\"cartItems\",\"kind\":\"object\",\"type\":\"CartItem\",\"relationName\":\"CartItemToProduct\"},{\"name\":\"orderItems\",\"kind\":\"object\",\"type\":\"OrderItem\",\"relationName\":\"OrderItemToProduct\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"Review\",\"relationName\":\"ProductToReview\"}],\"dbName\":\"products\"},\"ProductSizeStock\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"stock\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"ProductToProductSizeStock\"}],\"dbName\":\"product_size_stocks\"},\"SecurityLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"severity\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"method\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"timestamp\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"security_logs\"},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"UserRole\"},{\"name\":\"mfaEnabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"mfaSecret\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"phoneVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"addresses\",\"kind\":\"object\",\"type\":\"Address\",\"relationName\":\"AddressToUser\"},{\"name\":\"orders\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToUser\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"Review\",\"relationName\":\"ReviewToUser\"},{\"name\":\"cart\",\"kind\":\"object\",\"type\":\"Cart\",\"relationName\":\"CartToUser\"},{\"name\":\"externalAccounts\",\"kind\":\"object\",\"type\":\"ExternalAccount\",\"relationName\":\"ExternalAccountToUser\"},{\"name\":\"mfaMethods\",\"kind\":\"object\",\"type\":\"UserMFAMethod\",\"relationName\":\"UserToUserMFAMethod\"},{\"name\":\"mfaBackupCodes\",\"kind\":\"object\",\"type\":\"MFABackupCode\",\"relationName\":\"MFABackupCodeToUser\"},{\"name\":\"devices\",\"kind\":\"object\",\"type\":\"Device\",\"relationName\":\"DeviceToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"blogPosts\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogPostToUser\"},{\"name\":\"blogComments\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"BlogCommentToUser\"}],\"dbName\":\"users\"},\"Address\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"recipient\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"street\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ward\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AddressToUser\"}],\"dbName\":\"addresses\"}},\"enums\":{},\"types\":{}}") +defineDmmfProperty(exports.Prisma, config.runtimeDataModel) +config.parameterizationSchema = { + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"addresses\",\"order\",\"shippingAddress\",\"product\",\"sizeStocks\",\"items\",\"_count\",\"cart\",\"cartItems\",\"orderItems\",\"reviews\",\"paymentTransaction\",\"orders\",\"externalAccounts\",\"mfaMethods\",\"mfaBackupCodes\",\"device\",\"session\",\"devices\",\"sessions\",\"author\",\"posts\",\"tags\",\"post\",\"parent\",\"replies\",\"comments\",\"blogPosts\",\"blogComments\",\"ExternalAccount.findUnique\",\"ExternalAccount.findUniqueOrThrow\",\"ExternalAccount.findFirst\",\"ExternalAccount.findFirstOrThrow\",\"ExternalAccount.findMany\",\"data\",\"ExternalAccount.createOne\",\"ExternalAccount.createMany\",\"ExternalAccount.createManyAndReturn\",\"ExternalAccount.updateOne\",\"ExternalAccount.updateMany\",\"ExternalAccount.updateManyAndReturn\",\"create\",\"update\",\"ExternalAccount.upsertOne\",\"ExternalAccount.deleteOne\",\"ExternalAccount.deleteMany\",\"having\",\"_min\",\"_max\",\"ExternalAccount.groupBy\",\"ExternalAccount.aggregate\",\"UserMFAMethod.findUnique\",\"UserMFAMethod.findUniqueOrThrow\",\"UserMFAMethod.findFirst\",\"UserMFAMethod.findFirstOrThrow\",\"UserMFAMethod.findMany\",\"UserMFAMethod.createOne\",\"UserMFAMethod.createMany\",\"UserMFAMethod.createManyAndReturn\",\"UserMFAMethod.updateOne\",\"UserMFAMethod.updateMany\",\"UserMFAMethod.updateManyAndReturn\",\"UserMFAMethod.upsertOne\",\"UserMFAMethod.deleteOne\",\"UserMFAMethod.deleteMany\",\"UserMFAMethod.groupBy\",\"UserMFAMethod.aggregate\",\"MFABackupCode.findUnique\",\"MFABackupCode.findUniqueOrThrow\",\"MFABackupCode.findFirst\",\"MFABackupCode.findFirstOrThrow\",\"MFABackupCode.findMany\",\"MFABackupCode.createOne\",\"MFABackupCode.createMany\",\"MFABackupCode.createManyAndReturn\",\"MFABackupCode.updateOne\",\"MFABackupCode.updateMany\",\"MFABackupCode.updateManyAndReturn\",\"MFABackupCode.upsertOne\",\"MFABackupCode.deleteOne\",\"MFABackupCode.deleteMany\",\"MFABackupCode.groupBy\",\"MFABackupCode.aggregate\",\"Device.findUnique\",\"Device.findUniqueOrThrow\",\"Device.findFirst\",\"Device.findFirstOrThrow\",\"Device.findMany\",\"Device.createOne\",\"Device.createMany\",\"Device.createManyAndReturn\",\"Device.updateOne\",\"Device.updateMany\",\"Device.updateManyAndReturn\",\"Device.upsertOne\",\"Device.deleteOne\",\"Device.deleteMany\",\"Device.groupBy\",\"Device.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"BlogPost.findUnique\",\"BlogPost.findUniqueOrThrow\",\"BlogPost.findFirst\",\"BlogPost.findFirstOrThrow\",\"BlogPost.findMany\",\"BlogPost.createOne\",\"BlogPost.createMany\",\"BlogPost.createManyAndReturn\",\"BlogPost.updateOne\",\"BlogPost.updateMany\",\"BlogPost.updateManyAndReturn\",\"BlogPost.upsertOne\",\"BlogPost.deleteOne\",\"BlogPost.deleteMany\",\"_avg\",\"_sum\",\"BlogPost.groupBy\",\"BlogPost.aggregate\",\"BlogTag.findUnique\",\"BlogTag.findUniqueOrThrow\",\"BlogTag.findFirst\",\"BlogTag.findFirstOrThrow\",\"BlogTag.findMany\",\"BlogTag.createOne\",\"BlogTag.createMany\",\"BlogTag.createManyAndReturn\",\"BlogTag.updateOne\",\"BlogTag.updateMany\",\"BlogTag.updateManyAndReturn\",\"BlogTag.upsertOne\",\"BlogTag.deleteOne\",\"BlogTag.deleteMany\",\"BlogTag.groupBy\",\"BlogTag.aggregate\",\"BlogComment.findUnique\",\"BlogComment.findUniqueOrThrow\",\"BlogComment.findFirst\",\"BlogComment.findFirstOrThrow\",\"BlogComment.findMany\",\"BlogComment.createOne\",\"BlogComment.createMany\",\"BlogComment.createManyAndReturn\",\"BlogComment.updateOne\",\"BlogComment.updateMany\",\"BlogComment.updateManyAndReturn\",\"BlogComment.upsertOne\",\"BlogComment.deleteOne\",\"BlogComment.deleteMany\",\"BlogComment.groupBy\",\"BlogComment.aggregate\",\"Event.findUnique\",\"Event.findUniqueOrThrow\",\"Event.findFirst\",\"Event.findFirstOrThrow\",\"Event.findMany\",\"Event.createOne\",\"Event.createMany\",\"Event.createManyAndReturn\",\"Event.updateOne\",\"Event.updateMany\",\"Event.updateManyAndReturn\",\"Event.upsertOne\",\"Event.deleteOne\",\"Event.deleteMany\",\"Event.groupBy\",\"Event.aggregate\",\"Voucher.findUnique\",\"Voucher.findUniqueOrThrow\",\"Voucher.findFirst\",\"Voucher.findFirstOrThrow\",\"Voucher.findMany\",\"Voucher.createOne\",\"Voucher.createMany\",\"Voucher.createManyAndReturn\",\"Voucher.updateOne\",\"Voucher.updateMany\",\"Voucher.updateManyAndReturn\",\"Voucher.upsertOne\",\"Voucher.deleteOne\",\"Voucher.deleteMany\",\"Voucher.groupBy\",\"Voucher.aggregate\",\"Review.findUnique\",\"Review.findUniqueOrThrow\",\"Review.findFirst\",\"Review.findFirstOrThrow\",\"Review.findMany\",\"Review.createOne\",\"Review.createMany\",\"Review.createManyAndReturn\",\"Review.updateOne\",\"Review.updateMany\",\"Review.updateManyAndReturn\",\"Review.upsertOne\",\"Review.deleteOne\",\"Review.deleteMany\",\"Review.groupBy\",\"Review.aggregate\",\"Cart.findUnique\",\"Cart.findUniqueOrThrow\",\"Cart.findFirst\",\"Cart.findFirstOrThrow\",\"Cart.findMany\",\"Cart.createOne\",\"Cart.createMany\",\"Cart.createManyAndReturn\",\"Cart.updateOne\",\"Cart.updateMany\",\"Cart.updateManyAndReturn\",\"Cart.upsertOne\",\"Cart.deleteOne\",\"Cart.deleteMany\",\"Cart.groupBy\",\"Cart.aggregate\",\"CartItem.findUnique\",\"CartItem.findUniqueOrThrow\",\"CartItem.findFirst\",\"CartItem.findFirstOrThrow\",\"CartItem.findMany\",\"CartItem.createOne\",\"CartItem.createMany\",\"CartItem.createManyAndReturn\",\"CartItem.updateOne\",\"CartItem.updateMany\",\"CartItem.updateManyAndReturn\",\"CartItem.upsertOne\",\"CartItem.deleteOne\",\"CartItem.deleteMany\",\"CartItem.groupBy\",\"CartItem.aggregate\",\"Order.findUnique\",\"Order.findUniqueOrThrow\",\"Order.findFirst\",\"Order.findFirstOrThrow\",\"Order.findMany\",\"Order.createOne\",\"Order.createMany\",\"Order.createManyAndReturn\",\"Order.updateOne\",\"Order.updateMany\",\"Order.updateManyAndReturn\",\"Order.upsertOne\",\"Order.deleteOne\",\"Order.deleteMany\",\"Order.groupBy\",\"Order.aggregate\",\"ShippingAddress.findUnique\",\"ShippingAddress.findUniqueOrThrow\",\"ShippingAddress.findFirst\",\"ShippingAddress.findFirstOrThrow\",\"ShippingAddress.findMany\",\"ShippingAddress.createOne\",\"ShippingAddress.createMany\",\"ShippingAddress.createManyAndReturn\",\"ShippingAddress.updateOne\",\"ShippingAddress.updateMany\",\"ShippingAddress.updateManyAndReturn\",\"ShippingAddress.upsertOne\",\"ShippingAddress.deleteOne\",\"ShippingAddress.deleteMany\",\"ShippingAddress.groupBy\",\"ShippingAddress.aggregate\",\"OrderItem.findUnique\",\"OrderItem.findUniqueOrThrow\",\"OrderItem.findFirst\",\"OrderItem.findFirstOrThrow\",\"OrderItem.findMany\",\"OrderItem.createOne\",\"OrderItem.createMany\",\"OrderItem.createManyAndReturn\",\"OrderItem.updateOne\",\"OrderItem.updateMany\",\"OrderItem.updateManyAndReturn\",\"OrderItem.upsertOne\",\"OrderItem.deleteOne\",\"OrderItem.deleteMany\",\"OrderItem.groupBy\",\"OrderItem.aggregate\",\"PaymentTransaction.findUnique\",\"PaymentTransaction.findUniqueOrThrow\",\"PaymentTransaction.findFirst\",\"PaymentTransaction.findFirstOrThrow\",\"PaymentTransaction.findMany\",\"PaymentTransaction.createOne\",\"PaymentTransaction.createMany\",\"PaymentTransaction.createManyAndReturn\",\"PaymentTransaction.updateOne\",\"PaymentTransaction.updateMany\",\"PaymentTransaction.updateManyAndReturn\",\"PaymentTransaction.upsertOne\",\"PaymentTransaction.deleteOne\",\"PaymentTransaction.deleteMany\",\"PaymentTransaction.groupBy\",\"PaymentTransaction.aggregate\",\"Product.findUnique\",\"Product.findUniqueOrThrow\",\"Product.findFirst\",\"Product.findFirstOrThrow\",\"Product.findMany\",\"Product.createOne\",\"Product.createMany\",\"Product.createManyAndReturn\",\"Product.updateOne\",\"Product.updateMany\",\"Product.updateManyAndReturn\",\"Product.upsertOne\",\"Product.deleteOne\",\"Product.deleteMany\",\"Product.groupBy\",\"Product.aggregate\",\"ProductSizeStock.findUnique\",\"ProductSizeStock.findUniqueOrThrow\",\"ProductSizeStock.findFirst\",\"ProductSizeStock.findFirstOrThrow\",\"ProductSizeStock.findMany\",\"ProductSizeStock.createOne\",\"ProductSizeStock.createMany\",\"ProductSizeStock.createManyAndReturn\",\"ProductSizeStock.updateOne\",\"ProductSizeStock.updateMany\",\"ProductSizeStock.updateManyAndReturn\",\"ProductSizeStock.upsertOne\",\"ProductSizeStock.deleteOne\",\"ProductSizeStock.deleteMany\",\"ProductSizeStock.groupBy\",\"ProductSizeStock.aggregate\",\"SecurityLog.findUnique\",\"SecurityLog.findUniqueOrThrow\",\"SecurityLog.findFirst\",\"SecurityLog.findFirstOrThrow\",\"SecurityLog.findMany\",\"SecurityLog.createOne\",\"SecurityLog.createMany\",\"SecurityLog.createManyAndReturn\",\"SecurityLog.updateOne\",\"SecurityLog.updateMany\",\"SecurityLog.updateManyAndReturn\",\"SecurityLog.upsertOne\",\"SecurityLog.deleteOne\",\"SecurityLog.deleteMany\",\"SecurityLog.groupBy\",\"SecurityLog.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"Address.findUnique\",\"Address.findUniqueOrThrow\",\"Address.findFirst\",\"Address.findFirstOrThrow\",\"Address.findMany\",\"Address.createOne\",\"Address.createMany\",\"Address.createManyAndReturn\",\"Address.updateOne\",\"Address.updateMany\",\"Address.updateManyAndReturn\",\"Address.upsertOne\",\"Address.deleteOne\",\"Address.deleteMany\",\"Address.groupBy\",\"Address.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"userId\",\"recipient\",\"phone\",\"street\",\"city\",\"district\",\"ward\",\"isDefault\",\"equals\",\"not\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"email\",\"password\",\"fullName\",\"avatar\",\"UserRole\",\"role\",\"mfaEnabled\",\"mfaSecret\",\"emailVerified\",\"phoneVerified\",\"createdAt\",\"updatedAt\",\"every\",\"some\",\"none\",\"type\",\"severity\",\"message\",\"ipAddress\",\"userAgent\",\"path\",\"method\",\"metadata\",\"timestamp\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"ProductSize\",\"size\",\"stock\",\"productId\",\"ProductSlug\",\"slug\",\"name\",\"description\",\"priceCurrent\",\"priceOriginal\",\"priceDiscount\",\"hasSizes\",\"badge\",\"ratingValue\",\"ratingCount\",\"isPublished\",\"orderId\",\"transactionCode\",\"amount\",\"PaymentTransactionStatus\",\"status\",\"paymentUrl\",\"payosData\",\"productSlug\",\"productName\",\"price\",\"quantity\",\"addressLine1\",\"addressLine2\",\"postalCode\",\"code\",\"OrderStatus\",\"PaymentStatus\",\"paymentStatus\",\"totalAmount\",\"shippingFee\",\"discountValue\",\"shippingAddressId\",\"cartId\",\"rating\",\"comment\",\"DiscountType\",\"value\",\"minSpend\",\"maxDiscount\",\"usageLimit\",\"usedCount\",\"startDate\",\"endDate\",\"isActive\",\"title\",\"location\",\"EventType\",\"organizer\",\"attendees\",\"surveyLink\",\"createdBy\",\"content\",\"postId\",\"authorId\",\"parentId\",\"isApproved\",\"contentKey\",\"contentSize\",\"excerpt\",\"coverImage\",\"publishedAt\",\"viewCount\",\"metaTitle\",\"metaDescription\",\"token\",\"refreshToken\",\"deviceId\",\"SessionStatus\",\"expiresAt\",\"revokedAt\",\"DeviceType\",\"fingerprint\",\"isTrusted\",\"lastSeenAt\",\"isUsed\",\"usedAt\",\"MFAMethod\",\"methodType\",\"secret\",\"isVerified\",\"lastUsedAt\",\"OAuthProvider\",\"provider\",\"providerId\",\"providerEmail\",\"accessToken\",\"cartId_productId_size\",\"productId_size\",\"provider_providerId\",\"provider_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"_relevance\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "6grMAeACEAMAALUFACCJAwAA7gUAMIoDAAArABCLAwAA7gUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGGBAEA8QQAIYkEQADjBQAhlwQAAO8FlwQimAQBAPAEACGZBAEA8QQAIZoEAQDxBAAhnQQAAIIGACCeBAAAgwYAIAEAAAABACANAwAAtQUAIIkDAACBBgAwigMAAAMAEIsDAACBBgAwjAMBAPAEACGNAwEA8AQAIY4DAQDwBAAhjwMBAPAEACGQAwEA8AQAIZEDAQDwBAAhkgMBAPAEACGTAwEA8AQAIZQDIADzBAAhAgMAAJIJACCqBAAA6gkAIA0DAAC1BQAgiQMAAIEGADCKAwAAAwAQiwMAAIEGADCMAwEAAAABjQMBAPAEACGOAwEA8AQAIY8DAQDwBAAhkAMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGUAyAA8wQAIQMAAAADACABAAAEADACAAAFACASAwAAtQUAIAYAAP8FACAJAACcBQAgDwAAgAYAIIkDAAD8BQAwigMAAAcAEIsDAAD8BQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhBQMAAJIJACAGAADnCQAgCQAA5ggAIA8AAOgJACCqBAAA6QkAIBIDAAC1BQAgBgAA_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-ACAVGAAAtQUAIBoAAOQFACAeAAD_BAAgiQMAAOIFADCKAwAAQAAQiwMAAOIFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHEAwEA8AQAIc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACEKGAAAkgkAIBoAANkJACAeAACbCAAg_gMAAIsGACD_AwAAiwYAIIAEAACLBgAggQQAAIsGACCDBAAAiwYAIIQEAACLBgAgqgQAANoJACAVGAAAtQUAIBoAAOQFACAeAAD_BAAgiQMAAOIFADCKAwAAQAAQiwMAAOIFADCMAwEAAAABqwNAAPQEACGsA0AA9AQAIcQDAQAAAAHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhAwAAAEAAIAEAAEEAMAIAAEIAIAcZAAD-BAAgiQMAAOEFADCKAwAARAAQiwMAAOEFADCMAwEA8AQAIcQDAQDwBAAhxQMBAPAEACECGQAAmggAIKoEAADYCQAgBxkAAP4EACCJAwAA4QUAMIoDAABEABCLAwAA4QUAMIwDAQAAAAHEAwEAAAABxQMBAAAAAQMAAABEACABAABFADACAABGACADAAAAQAAgAQAAQQAwAgAAQgAgAQAAAEAAIA8YAAC1BQAgGwAA3wUAIBwAAOAFACAdAAD_BAAgiQMAAN4FADCKAwAASgAQiwMAAN4FADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACH4AwEA8AQAIfkDAQDwBAAh-gMBAPAEACH7AwEA8QQAIfwDIADzBAAhBhgAAJIJACAbAADVCQAgHAAA1gkAIB0AAJsIACD7AwAAiwYAIKoEAADXCQAgDxgAALUFACAbAADfBQAgHAAA4AUAIB0AAP8EACCJAwAA3gUAMIoDAABKABCLAwAA3gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQMAAABKACABAABLADACAABMACABAAAASgAgAwAAAEoAIAEAAEsAMAIAAEwAIAEAAABKACABAAAARAAgAQAAAEoAIAMAAABKACABAABLADACAABMACABAAAAAwAgAQAAAAcAIAEAAAAdACABAAAAKwAgAQAAAC4AIAEAAAAyACABAAAANgAgAQAAADoAIAEAAABAACABAAAASgAgAQAAAAEAIAMAAAArACABAAAsADACAAABACADAAAAKwAgAQAALAAwAgAAAQAgAwAAACsAIAEAACwAMAIAAAEAIAsDAADUCQAgjAMBAAAAAY0DAQAAAAGrA0AAAAABrANAAAAAAYYEAQAAAAGJBEAAAAABlwQAAACXBAKYBAEAAAABmQQBAAAAAZoEAQAAAAEBJgAAYgAgCowDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAGGBAEAAAABiQRAAAAAAZcEAAAAlwQCmAQBAAAAAZkEAQAAAAGaBAEAAAABASYAAGQAMAEmAABkADALAwAA0wkAIIwDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAhhgQBAI8GACGJBEAAxQYAIZcEAACpB5cEIpgEAQCHBgAhmQQBAI8GACGaBAEAjwYAIQIAAAABACAmAABnACAKjAMBAIcGACGNAwEAhwYAIasDQACRBgAhrANAAJEGACGGBAEAjwYAIYkEQADFBgAhlwQAAKkHlwQimAQBAIcGACGZBAEAjwYAIZoEAQCPBgAhAgAAACsAICYAAGkAIAIAAAArACAmAABpACADAAAAAQAgLQAAYgAgLgAAZwAgAQAAAAEAIAEAAAArACAHCgAA0AkAIDMAANIJACA0AADRCQAghgQAAIsGACCJBAAAiwYAIJkEAACLBgAgmgQAAIsGACANiQMAANoFADCKAwAAcAAQiwMAANoFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIYYEAQDlBAAhiQRAAMoFACGXBAAA2wWXBCKYBAEA3QQAIZkEAQDlBAAhmgQBAOUEACEDAAAAKwAgAQAAbwAwMgAAcAAgAwAAACsAIAEAACwAMAIAAAEAIAEAAAAwACABAAAAMAAgAwAAAC4AIAEAAC8AMAIAADAAIAMAAAAuACABAAAvADACAAAwACADA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-gMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABASYAANIBACAPjAMBAAAAAasDQAAAAAGsA0AAAAABxAMBAAAAAc4DIAAAAAHxAwEAAAAB-gMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABASYAANQBADABJgAA1AEAMBIYAAC1CQAgGgAAyAYAIB4AAMkGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACHEAwEAhwYAIc4DIACIBgAh8QMBAIcGACH6AwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACECAAAAQgAgJgAA1wEAIA-MAwEAhwYAIasDQACRBgAhrANAAJEGACHEAwEAhwYAIc4DIACIBgAh8QMBAIcGACH6AwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACECAAAAQAAgJgAA2QEAIAIAAABAACAmAADZAQAgAwAAAEIAIC0AANIBACAuAADXAQAgAQAAAEIAIAEAAABAACALCgAAuQkAIDMAALwJACA0AAC7CQAghQEAALoJACCGAQAAvQkAIP4DAACLBgAg_wMAAIsGACCABAAAiwYAIIEEAACLBgAggwQAAIsGACCEBAAAiwYAIBKJAwAAyQUAMIoDAADgAQAQiwMAAMkFADCMAwEA3QQAIasDQADnBAAhrANAAOcEACHEAwEA3QQAIc4DIADeBAAh8QMBAN0EACH6AwEA3QQAIf0DAQDdBAAh_gMCAL8FACH_AwEA5QQAIYAEAQDlBAAhgQRAAMoFACGCBAIAhwUAIYMEAQDlBAAhhAQBAOUEACEDAAAAQAAgAQAA3wEAMDIAAOABACADAAAAQAAgAQAAQQAwAgAAQgAgAQAAAEYAIAEAAABGACADAAAARAAgAQAARQAwAgAARgAgAwAAAEQAIAEAAEUAMAIAAEYAIAMAAABEACABAABFADACAABGACAEGQAAuAkAIIwDAQAAAAHEAwEAAAABxQMBAAAAAQEmAADoAQAgA4wDAQAAAAHEAwEAAAABxQMBAAAAAQEmAADqAQAwASYAAOoBADAEGQAArQkAIIwDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQIAAABGACAmAADtAQAgA4wDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQIAAABEACAmAADvAQAgAgAAAEQAICYAAO8BACADAAAARgAgLQAA6AEAIC4AAO0BACABAAAARgAgAQAAAEQAIAMKAACqCQAgMwAArAkAIDQAAKsJACAGiQMAAMgFADCKAwAA9gEAEIsDAADIBQAwjAMBAN0EACHEAwEA3QQAIcUDAQDdBAAhAwAAAEQAIAEAAPUBADAyAAD2AQAgAwAAAEQAIAEAAEUAMAIAAEYAIAEAAABMACABAAAATAAgAwAAAEoAIAEAAEsAMAIAAEwAIAMAAABKACABAABLADACAABMACADAAAASgAgAQAASwAwAgAATAAgDBgAALYGACAbAAC1BgAgHAAAuQYAIB0AALcGACCMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfoDAQAAAAH7AwEAAAAB_AMgAAAAAQEmAAD-AQAgCIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfsDAQAAAAH8AyAAAAABASYAAIACADABJgAAgAIAMAEAAABKACAMGAAAswYAIBsAAKgGACAcAACpBgAgHQAAqgYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACECAAAATAAgJgAAhAIAIAiMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-gMBAIcGACH7AwEAjwYAIfwDIACIBgAhAgAAAEoAICYAAIYCACACAAAASgAgJgAAhgIAIAEAAABKACADAAAATAAgLQAA_gEAIC4AAIQCACABAAAATAAgAQAAAEoAIAQKAACnCQAgMwAAqQkAIDQAAKgJACD7AwAAiwYAIAuJAwAAxwUAMIoDAACOAgAQiwMAAMcFADCMAwEA3QQAIasDQADnBAAhrANAAOcEACH4AwEA3QQAIfkDAQDdBAAh-gMBAN0EACH7AwEA5QQAIfwDIADeBAAhAwAAAEoAIAEAAI0CADAyAACOAgAgAwAAAEoAIAEAAEsAMAIAAEwAIBCJAwAAxAUAMIoDAACUAgAQiwMAAMQFADCMAwEAAAABqwNAAPQEACGsA0AA9AQAIbADAADFBfQDIsYDAQDxBAAh7gNAAPQEACHvA0AA9AQAIfEDAQDwBAAh8gMBAPEEACH0AwEA8QQAIfUDAgDGBQAh9gMBAPEEACH3AwEA8QQAIQEAAACRAgAgAQAAAJECACAQiQMAAMQFADCKAwAAlAIAEIsDAADEBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhsAMAAMUF9AMixgMBAPEEACHuA0AA9AQAIe8DQAD0BAAh8QMBAPAEACHyAwEA8QQAIfQDAQDxBAAh9QMCAMYFACH2AwEA8QQAIfcDAQDxBAAhB8YDAACLBgAg8gMAAIsGACD0AwAAiwYAIPUDAACLBgAg9gMAAIsGACD3AwAAiwYAIKoEAACmCQAgAwAAAJQCACABAACVAgAwAgAAkQIAIAMAAACUAgAgAQAAlQIAMAIAAJECACADAAAAlAIAIAEAAJUCADACAACRAgAgDYwDAQAAAAGrA0AAAAABrANAAAAAAbADAAAA9AMCxgMBAAAAAe4DQAAAAAHvA0AAAAAB8QMBAAAAAfIDAQAAAAH0AwEAAAAB9QMCAAAAAfYDAQAAAAH3AwEAAAABASYAAJkCACANjAMBAAAAAasDQAAAAAGsA0AAAAABsAMAAAD0AwLGAwEAAAAB7gNAAAAAAe8DQAAAAAHxAwEAAAAB8gMBAAAAAfQDAQAAAAH1AwIAAAAB9gMBAAAAAfcDAQAAAAEBJgAAmwIAMAEmAACbAgAwDYwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIbADAAClCfQDIsYDAQCPBgAh7gNAAJEGACHvA0AAkQYAIfEDAQCHBgAh8gMBAI8GACH0AwEAjwYAIfUDAgDEBgAh9gMBAI8GACH3AwEAjwYAIQIAAACRAgAgJgAAngIAIA2MAwEAhwYAIasDQACRBgAhrANAAJEGACGwAwAApQn0AyLGAwEAjwYAIe4DQACRBgAh7wNAAJEGACHxAwEAhwYAIfIDAQCPBgAh9AMBAI8GACH1AwIAxAYAIfYDAQCPBgAh9wMBAI8GACECAAAAlAIAICYAAKACACACAAAAlAIAICYAAKACACADAAAAkQIAIC0AAJkCACAuAACeAgAgAQAAAJECACABAAAAlAIAIAsKAACgCQAgMwAAowkAIDQAAKIJACCFAQAAoQkAIIYBAACkCQAgxgMAAIsGACDyAwAAiwYAIPQDAACLBgAg9QMAAIsGACD2AwAAiwYAIPcDAACLBgAgEIkDAAC9BQAwigMAAKcCABCLAwAAvQUAMIwDAQDdBAAhqwNAAOcEACGsA0AA5wQAIbADAAC-BfQDIsYDAQDlBAAh7gNAAOcEACHvA0AA5wQAIfEDAQDdBAAh8gMBAOUEACH0AwEA5QQAIfUDAgC_BQAh9gMBAOUEACH3AwEA5QQAIQMAAACUAgAgAQAApgIAMDIAAKcCACADAAAAlAIAIAEAAJUCADACAACRAgAgDokDAAC7BQAwigMAAK0CABCLAwAAuwUAMIwDAQAAAAGwAwAAvAXpAyLdAwEAAAAB6QMQAJcFACHqAxAAmAUAIesDEACYBQAh7AMCAJkFACHtAwIAmQUAIe4DQAD0BAAh7wNAAPQEACHwAyAA8wQAIQEAAACqAgAgAQAAAKoCACAOiQMAALsFADCKAwAArQIAEIsDAAC7BQAwjAMBAPAEACGwAwAAvAXpAyLdAwEA8AQAIekDEACXBQAh6gMQAJgFACHrAxAAmAUAIewDAgCZBQAh7QMCAJkFACHuA0AA9AQAIe8DQAD0BAAh8AMgAPMEACED6gMAAIsGACDrAwAAiwYAIKoEAACfCQAgAwAAAK0CACABAACuAgAwAgAAqgIAIAMAAACtAgAgAQAArgIAMAIAAKoCACADAAAArQIAIAEAAK4CADACAACqAgAgC4wDAQAAAAGwAwAAAOkDAt0DAQAAAAHpAxAAAAAB6gMQAAAAAesDEAAAAAHsAwIAAAAB7QMCAAAAAe4DQAAAAAHvA0AAAAAB8AMgAAAAAQEmAACyAgAgC4wDAQAAAAGwAwAAAOkDAt0DAQAAAAHpAxAAAAAB6gMQAAAAAesDEAAAAAHsAwIAAAAB7QMCAAAAAe4DQAAAAAHvA0AAAAAB8AMgAAAAAQEmAAC0AgAwASYAALQCADALjAMBAIcGACGwAwAAngnpAyLdAwEAhwYAIekDEADcBwAh6gMQAK4IACHrAxAArggAIewDAgDGBgAh7QMCAMYGACHuA0AAkQYAIe8DQACRBgAh8AMgAIgGACECAAAAqgIAICYAALcCACALjAMBAIcGACGwAwAAngnpAyLdAwEAhwYAIekDEADcBwAh6gMQAK4IACHrAxAArggAIewDAgDGBgAh7QMCAMYGACHuA0AAkQYAIe8DQACRBgAh8AMgAIgGACECAAAArQIAICYAALkCACACAAAArQIAICYAALkCACADAAAAqgIAIC0AALICACAuAAC3AgAgAQAAAKoCACABAAAArQIAIAcKAACZCQAgMwAAnAkAIDQAAJsJACCFAQAAmgkAIIYBAACdCQAg6gMAAIsGACDrAwAAiwYAIA6JAwAAtwUAMIoDAADAAgAQiwMAALcFADCMAwEA3QQAIbADAAC4BekDIt0DAQDdBAAh6QMQAI4FACHqAxAAjwUAIesDEACPBQAh7AMCAIcFACHtAwIAhwUAIe4DQADnBAAh7wNAAOcEACHwAyAA3gQAIQMAAACtAgAgAQAAvwIAMDIAAMACACADAAAArQIAIAEAAK4CADACAACqAgAgAQAAAB8AIAEAAAAfACADAAAAHQAgAQAAHgAwAgAAHwAgAwAAAB0AIAEAAB4AMAIAAB8AIAMAAAAdACABAAAeADACAAAfACAJAwAAvQgAIAcAAM8HACCMAwEAAAABjQMBAAAAAasDQAAAAAGsA0AAAAABwgMBAAAAAeYDAgAAAAHnAwEAAAABASYAAMgCACAHjAMBAAAAAY0DAQAAAAGrA0AAAAABrANAAAAAAcIDAQAAAAHmAwIAAAAB5wMBAAAAAQEmAADKAgAwASYAAMoCADAJAwAAuwgAIAcAAM0HACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIcIDAQCHBgAh5gMCAMYGACHnAwEAjwYAIQIAAAAfACAmAADNAgAgB4wDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAhwgMBAIcGACHmAwIAxgYAIecDAQCPBgAhAgAAAB0AICYAAM8CACACAAAAHQAgJgAAzwIAIAMAAAAfACAtAADIAgAgLgAAzQIAIAEAAAAfACABAAAAHQAgBgoAAJQJACAzAACXCQAgNAAAlgkAIIUBAACVCQAghgEAAJgJACDnAwAAiwYAIAqJAwAAtgUAMIoDAADWAgAQiwMAALYFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIcIDAQDdBAAh5gMCAIcFACHnAwEA5QQAIQMAAAAdACABAADVAgAwMgAA1gIAIAMAAAAdACABAAAeADACAAAfACAIAwAAtQUAIAkAAJsFACCJAwAAtAUAMIoDAAApABCLAwAAtAUAMIwDAQAAAAGNAwEAAAABrANAAPQEACEBAAAA2QIAIAEAAADZAgAgAwMAAJIJACAJAADlCAAgqgQAAJMJACADAAAAKQAgAQAA3AIAMAIAANkCACADAAAAKQAgAQAA3AIAMAIAANkCACADAAAAKQAgAQAA3AIAMAIAANkCACAFAwAAkQkAIAkAAMEHACCMAwEAAAABjQMBAAAAAawDQAAAAAEBJgAA4AIAIAOMAwEAAAABjQMBAAAAAawDQAAAAAEBJgAA4gIAMAEmAADiAgAwBQMAAJAJACAJAACxBwAgjAMBAIcGACGNAwEAhwYAIawDQACRBgAhAgAAANkCACAmAADlAgAgA4wDAQCHBgAhjQMBAIcGACGsA0AAkQYAIQIAAAApACAmAADnAgAgAgAAACkAICYAAOcCACADAAAA2QIAIC0AAOACACAuAADlAgAgAQAAANkCACABAAAAKQAgAwoAAI0JACAzAACPCQAgNAAAjgkAIAaJAwAAswUAMIoDAADuAgAQiwMAALMFADCMAwEA3QQAIY0DAQDdBAAhrANAAOcEACEDAAAAKQAgAQAA7QIAMDIAAO4CACADAAAAKQAgAQAA3AIAMAIAANkCACABAAAAGAAgAQAAABgAIAMAAAAWACABAAAXADACAAAYACADAAAAFgAgAQAAFwAwAgAAGAAgAwAAABYAIAEAABcAMAIAABgAIAcHAADABwAgCwAA0wgAIIwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAAB5QMBAAAAAQEmAAD2AgAgBYwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAAB5QMBAAAAAQEmAAD4AgAwASYAAPgCADAHBwAAvgcAIAsAANEIACCMAwEAhwYAIcADAAC8B8ADI8IDAQCHBgAh2QMCAMYGACHlAwEAhwYAIQIAAAAYACAmAAD7AgAgBYwDAQCHBgAhwAMAALwHwAMjwgMBAIcGACHZAwIAxgYAIeUDAQCHBgAhAgAAABYAICYAAP0CACACAAAAFgAgJgAA_QIAIAMAAAAYACAtAAD2AgAgLgAA-wIAIAEAAAAYACABAAAAFgAgBgoAAIgJACAzAACLCQAgNAAAigkAIIUBAACJCQAghgEAAIwJACDAAwAAiwYAIAiJAwAAsgUAMIoDAACEAwAQiwMAALIFADCMAwEA3QQAIcADAAClBcADI8IDAQDdBAAh2QMCAIcFACHlAwEA3QQAIQMAAAAWACABAACDAwAwMgAAhAMAIAMAAAAWACABAAAXADACAAAYACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIA8DAACACQAgBgAA9wcAIAkAAPgHACAPAAD5BwAgjAMBAAAAAY0DAQAAAAGrA0AAAAABrANAAAAAAdMDAAAA3wMC3QMBAAAAAeADAAAA4AMC4QMQAAAAAeIDEAAAAAHjAxAAAAAB5AMBAAAAAQEmAACMAwAgC4wDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAHTAwAAAN8DAt0DAQAAAAHgAwAAAOADAuEDEAAAAAHiAxAAAAAB4wMQAAAAAeQDAQAAAAEBJgAAjgMAMAEmAACOAwAwDwMAAP8IACAGAADeBwAgCQAA3wcAIA8AAOAHACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIdMDAADaB98DIt0DAQCHBgAh4AMAANsH4AMi4QMQANwHACHiAxAA3AcAIeMDEADcBwAh5AMBAIcGACECAAAACQAgJgAAkQMAIAuMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIdMDAADaB98DIt0DAQCHBgAh4AMAANsH4AMi4QMQANwHACHiAxAA3AcAIeMDEADcBwAh5AMBAIcGACECAAAABwAgJgAAkwMAIAIAAAAHACAmAACTAwAgAwAAAAkAIC0AAIwDACAuAACRAwAgAQAAAAkAIAEAAAAHACAFCgAAgwkAIDMAAIYJACA0AACFCQAghQEAAIQJACCGAQAAhwkAIA6JAwAAqwUAMIoDAACaAwAQiwMAAKsFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIdMDAACsBd8DIt0DAQDdBAAh4AMAAK0F4AMi4QMQAI4FACHiAxAAjgUAIeMDEACOBQAh5AMBAN0EACEDAAAABwAgAQAAmQMAMDIAAJoDACADAAAABwAgAQAACAAwAgAACQAgDwUAAKoFACCJAwAAqQUAMIoDAACgAwAQiwMAAKkFADCMAwEAAAABjwMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGjAwEA8AQAIasDQAD0BAAhrANAAPQEACHaAwEA8AQAIdsDAQDxBAAh3AMBAPAEACEBAAAAnQMAIAEAAACdAwAgDwUAAKoFACCJAwAAqQUAMIoDAACgAwAQiwMAAKkFADCMAwEA8AQAIY8DAQDwBAAhkQMBAPAEACGSAwEA8AQAIZMDAQDwBAAhowMBAPAEACGrA0AA9AQAIawDQAD0BAAh2gMBAPAEACHbAwEA8QQAIdwDAQDwBAAhAwUAAO8IACDbAwAAiwYAIKoEAACCCQAgAwAAAKADACABAAChAwAwAgAAnQMAIAMAAACgAwAgAQAAoQMAMAIAAJ0DACADAAAAoAMAIAEAAKEDADACAACdAwAgDAUAAIEJACCMAwEAAAABjwMBAAAAAZEDAQAAAAGSAwEAAAABkwMBAAAAAaMDAQAAAAGrA0AAAAABrANAAAAAAdoDAQAAAAHbAwEAAAAB3AMBAAAAAQEmAAClAwAgC4wDAQAAAAGPAwEAAAABkQMBAAAAAZIDAQAAAAGTAwEAAAABowMBAAAAAasDQAAAAAGsA0AAAAAB2gMBAAAAAdsDAQAAAAHcAwEAAAABASYAAKcDADABJgAApwMAMAwFAAD5CAAgjAMBAIcGACGPAwEAhwYAIZEDAQCHBgAhkgMBAIcGACGTAwEAhwYAIaMDAQCHBgAhqwNAAJEGACGsA0AAkQYAIdoDAQCHBgAh2wMBAI8GACHcAwEAhwYAIQIAAACdAwAgJgAAqgMAIAuMAwEAhwYAIY8DAQCHBgAhkQMBAIcGACGSAwEAhwYAIZMDAQCHBgAhowMBAIcGACGrA0AAkQYAIawDQACRBgAh2gMBAIcGACHbAwEAjwYAIdwDAQCHBgAhAgAAAKADACAmAACsAwAgAgAAAKADACAmAACsAwAgAwAAAJ0DACAtAAClAwAgLgAAqgMAIAEAAACdAwAgAQAAAKADACAECgAA9ggAIDMAAPgIACA0AAD3CAAg2wMAAIsGACAOiQMAAKgFADCKAwAAswMAEIsDAACoBQAwjAMBAN0EACGPAwEA3QQAIZEDAQDdBAAhkgMBAN0EACGTAwEA3QQAIaMDAQDdBAAhqwNAAOcEACGsA0AA5wQAIdoDAQDdBAAh2wMBAOUEACHcAwEA3QQAIQMAAACgAwAgAQAAsgMAMDIAALMDACADAAAAoAMAIAEAAKEDADACAACdAwAgAQAAAA4AIAEAAAAOACADAAAADAAgAQAADQAwAgAADgAgAwAAAAwAIAEAAA0AMAIAAA4AIAMAAAAMACABAAANADACAAAOACAKBQAAyAgAIAcAAPUHACCMAwEAAAABwAMAAADAAwPCAwEAAAABzwMBAAAAAdYDAAAAxAMC1wMBAAAAAdgDEAAAAAHZAwIAAAABASYAALsDACAIjAMBAAAAAcADAAAAwAMDwgMBAAAAAc8DAQAAAAHWAwAAAMQDAtcDAQAAAAHYAxAAAAAB2QMCAAAAAQEmAAC9AwAwASYAAL0DADABAAAAEAAgCgUAAMYIACAHAADzBwAgjAMBAIcGACHAAwAAvAfAAyPCAwEAjwYAIc8DAQCHBgAh1gMAAPEHxAMi1wMBAIcGACHYAxAA3AcAIdkDAgDGBgAhAgAAAA4AICYAAMEDACAIjAMBAIcGACHAAwAAvAfAAyPCAwEAjwYAIc8DAQCHBgAh1gMAAPEHxAMi1wMBAIcGACHYAxAA3AcAIdkDAgDGBgAhAgAAAAwAICYAAMMDACACAAAADAAgJgAAwwMAIAEAAAAQACADAAAADgAgLQAAuwMAIC4AAMEDACABAAAADgAgAQAAAAwAIAcKAADxCAAgMwAA9AgAIDQAAPMIACCFAQAA8ggAIIYBAAD1CAAgwAMAAIsGACDCAwAAiwYAIAuJAwAApAUAMIoDAADLAwAQiwMAAKQFADCMAwEA3QQAIcADAAClBcADI8IDAQDlBAAhzwMBAN0EACHWAwAAjQXEAyLXAwEA3QQAIdgDEACOBQAh2QMCAIcFACEDAAAADAAgAQAAygMAMDIAAMsDACADAAAADAAgAQAADQAwAgAADgAgDQUAAKMFACCJAwAAoQUAMIoDAAAlABCLAwAAoQUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAhzwMBAAAAAdADAQAAAAHRAxAAlwUAIdMDAACiBdMDItQDAQDxBAAh1QMAAIQFACABAAAAzgMAIAEAAADOAwAgBAUAAO8IACDUAwAAiwYAINUDAACLBgAgqgQAAPAIACADAAAAJQAgAQAA0QMAMAIAAM4DACADAAAAJQAgAQAA0QMAMAIAAM4DACADAAAAJQAgAQAA0QMAMAIAAM4DACAKBQAA7ggAIIwDAQAAAAGrA0AAAAABrANAAAAAAc8DAQAAAAHQAwEAAAAB0QMQAAAAAdMDAAAA0wMC1AMBAAAAAdUDgAAAAAEBJgAA1QMAIAmMAwEAAAABqwNAAAAAAawDQAAAAAHPAwEAAAAB0AMBAAAAAdEDEAAAAAHTAwAAANMDAtQDAQAAAAHVA4AAAAABASYAANcDADABJgAA1wMAMAoFAADtCAAgjAMBAIcGACGrA0AAkQYAIawDQACRBgAhzwMBAIcGACHQAwEAhwYAIdEDEADcBwAh0wMAAOYH0wMi1AMBAI8GACHVA4AAAAABAgAAAM4DACAmAADaAwAgCYwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIc8DAQCHBgAh0AMBAIcGACHRAxAA3AcAIdMDAADmB9MDItQDAQCPBgAh1QOAAAAAAQIAAAAlACAmAADcAwAgAgAAACUAICYAANwDACADAAAAzgMAIC0AANUDACAuAADaAwAgAQAAAM4DACABAAAAJQAgBwoAAOgIACAzAADrCAAgNAAA6ggAIIUBAADpCAAghgEAAOwIACDUAwAAiwYAINUDAACLBgAgDIkDAACdBQAwigMAAOMDABCLAwAAnQUAMIwDAQDdBAAhqwNAAOcEACGsA0AA5wQAIc8DAQDdBAAh0AMBAN0EACHRAxAAjgUAIdMDAACeBdMDItQDAQDlBAAh1QMAAIEFACADAAAAJQAgAQAA4gMAMDIAAOMDACADAAAAJQAgAQAA0QMAMAIAAM4DACAWCAAAmgUAIAwAAJsFACANAACcBQAgDgAA9wQAIIkDAACWBQAwigMAABAAEIsDAACWBQAwjAMBAAAAAasDQAD0BAAhrANAAPQEACHBAwIAmQUAIcQDAAAAxAMCxQMBAPAEACHGAwEA8AQAIccDEACXBQAhyAMQAJgFACHJAxAAmAUAIcoDIADzBAAhywMBAPEEACHMAxAAlwUAIc0DAgCZBQAhzgMgAPMEACEBAAAA5gMAIAEAAADmAwAgCAgAAOQIACAMAADlCAAgDQAA5ggAIA4AAJMIACDIAwAAiwYAIMkDAACLBgAgywMAAIsGACCqBAAA5wgAIAMAAAAQACABAADpAwAwAgAA5gMAIAMAAAAQACABAADpAwAwAgAA5gMAIAMAAAAQACABAADpAwAwAgAA5gMAIBMIAADgCAAgDAAA4QgAIA0AAOIIACAOAADjCAAgjAMBAAAAAasDQAAAAAGsA0AAAAABwQMCAAAAAcQDAAAAxAMCxQMBAAAAAcYDAQAAAAHHAxAAAAAByAMQAAAAAckDEAAAAAHKAyAAAAABywMBAAAAAcwDEAAAAAHNAwIAAAABzgMgAAAAAQEmAADtAwAgD4wDAQAAAAGrA0AAAAABrANAAAAAAcEDAgAAAAHEAwAAAMQDAsUDAQAAAAHGAwEAAAABxwMQAAAAAcgDEAAAAAHJAxAAAAABygMgAAAAAcsDAQAAAAHMAxAAAAABzQMCAAAAAc4DIAAAAAEBJgAA7wMAMAEmAADvAwAwEwgAAK8IACAMAACwCAAgDQAAsQgAIA4AALIIACCMAwEAhwYAIasDQACRBgAhrANAAJEGACHBAwIAxgYAIcQDAADxB8QDIsUDAQCHBgAhxgMBAIcGACHHAxAA3AcAIcgDEACuCAAhyQMQAK4IACHKAyAAiAYAIcsDAQCPBgAhzAMQANwHACHNAwIAxgYAIc4DIACIBgAhAgAAAOYDACAmAADyAwAgD4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcEDAgDGBgAhxAMAAPEHxAMixQMBAIcGACHGAwEAhwYAIccDEADcBwAhyAMQAK4IACHJAxAArggAIcoDIACIBgAhywMBAI8GACHMAxAA3AcAIc0DAgDGBgAhzgMgAIgGACECAAAAEAAgJgAA9AMAIAIAAAAQACAmAAD0AwAgAwAAAOYDACAtAADtAwAgLgAA8gMAIAEAAADmAwAgAQAAABAAIAgKAACpCAAgMwAArAgAIDQAAKsIACCFAQAAqggAIIYBAACtCAAgyAMAAIsGACDJAwAAiwYAIMsDAACLBgAgEokDAACMBQAwigMAAPsDABCLAwAAjAUAMIwDAQDdBAAhqwNAAOcEACGsA0AA5wQAIcEDAgCHBQAhxAMAAI0FxAMixQMBAN0EACHGAwEA3QQAIccDEACOBQAhyAMQAI8FACHJAxAAjwUAIcoDIADeBAAhywMBAOUEACHMAxAAjgUAIc0DAgCHBQAhzgMgAN4EACEDAAAAEAAgAQAA-gMAMDIAAPsDACADAAAAEAAgAQAA6QMAMAIAAOYDACABAAAAFAAgAQAAABQAIAMAAAASACABAAATADACAAAUACADAAAAEgAgAQAAEwAwAgAAFAAgAwAAABIAIAEAABMAMAIAABQAIAUHAACoCAAgjAMBAAAAAcADAAAAwAMCwQMCAAAAAcIDAQAAAAEBJgAAgwQAIASMAwEAAAABwAMAAADAAwLBAwIAAAABwgMBAAAAAQEmAACFBAAwASYAAIUEADAFBwAApwgAIIwDAQCHBgAhwAMAAKYIwAMiwQMCAMYGACHCAwEAhwYAIQIAAAAUACAmAACIBAAgBIwDAQCHBgAhwAMAAKYIwAMiwQMCAMYGACHCAwEAhwYAIQIAAAASACAmAACKBAAgAgAAABIAICYAAIoEACADAAAAFAAgLQAAgwQAIC4AAIgEACABAAAAFAAgAQAAABIAIAUKAAChCAAgMwAApAgAIDQAAKMIACCFAQAAoggAIIYBAAClCAAgB4kDAACFBQAwigMAAJEEABCLAwAAhQUAMIwDAQDdBAAhwAMAAIYFwAMiwQMCAIcFACHCAwEA3QQAIQMAAAASACABAACQBAAwMgAAkQQAIAMAAAASACABAAATADACAAAUACAOiQMAAIMFADCKAwAAlwQAEIsDAACDBQAwjAMBAAAAAY0DAQDxBAAhsAMBAPAEACGxAwEA8AQAIbIDAQDwBAAhswMBAPEEACG0AwEA8QQAIbUDAQDxBAAhtgMBAPEEACG3AwAAhAUAILgDQAD0BAAhAQAAAJQEACABAAAAlAQAIA6JAwAAgwUAMIoDAACXBAAQiwMAAIMFADCMAwEA8AQAIY0DAQDxBAAhsAMBAPAEACGxAwEA8AQAIbIDAQDwBAAhswMBAPEEACG0AwEA8QQAIbUDAQDxBAAhtgMBAPEEACG3AwAAhAUAILgDQAD0BAAhB40DAACLBgAgswMAAIsGACC0AwAAiwYAILUDAACLBgAgtgMAAIsGACC3AwAAiwYAIKoEAACgCAAgAwAAAJcEACABAACYBAAwAgAAlAQAIAMAAACXBAAgAQAAmAQAMAIAAJQEACADAAAAlwQAIAEAAJgEADACAACUBAAgC4wDAQAAAAGNAwEAAAABsAMBAAAAAbEDAQAAAAGyAwEAAAABswMBAAAAAbQDAQAAAAG1AwEAAAABtgMBAAAAAbcDgAAAAAG4A0AAAAABASYAAJwEACALjAMBAAAAAY0DAQAAAAGwAwEAAAABsQMBAAAAAbIDAQAAAAGzAwEAAAABtAMBAAAAAbUDAQAAAAG2AwEAAAABtwOAAAAAAbgDQAAAAAEBJgAAngQAMAEmAACeBAAwC4wDAQCHBgAhjQMBAI8GACGwAwEAhwYAIbEDAQCHBgAhsgMBAIcGACGzAwEAjwYAIbQDAQCPBgAhtQMBAI8GACG2AwEAjwYAIbcDgAAAAAG4A0AAkQYAIQIAAACUBAAgJgAAoQQAIAuMAwEAhwYAIY0DAQCPBgAhsAMBAIcGACGxAwEAhwYAIbIDAQCHBgAhswMBAI8GACG0AwEAjwYAIbUDAQCPBgAhtgMBAI8GACG3A4AAAAABuANAAJEGACECAAAAlwQAICYAAKMEACACAAAAlwQAICYAAKMEACADAAAAlAQAIC0AAJwEACAuAAChBAAgAQAAAJQEACABAAAAlwQAIAkKAACdCAAgMwAAnwgAIDQAAJ4IACCNAwAAiwYAILMDAACLBgAgtAMAAIsGACC1AwAAiwYAILYDAACLBgAgtwMAAIsGACAOiQMAAIAFADCKAwAAqgQAEIsDAACABQAwjAMBAN0EACGNAwEA5QQAIbADAQDdBAAhsQMBAN0EACGyAwEA3QQAIbMDAQDlBAAhtAMBAOUEACG1AwEA5QQAIbYDAQDlBAAhtwMAAIEFACC4A0AA5wQAIQMAAACXBAAgAQAAqQQAMDIAAKoEACADAAAAlwQAIAEAAJgEADACAACUBAAgGwQAAPUEACALAAD4BAAgDgAA9wQAIBAAAPYEACARAAD5BAAgEgAA-gQAIBMAAPsEACAWAAD8BAAgFwAA_QQAIB8AAP4EACAgAAD_BAAgiQMAAO8EADCKAwAAsAQAEIsDAADvBAAwjAMBAAAAAY8DAQDxBAAhoQMBAAAAAaIDAQDxBAAhowMBAPEEACGkAwEA8QQAIaYDAADyBKYDIqcDIADzBAAhqAMBAPEEACGpAyAA8wQAIaoDIADzBAAhqwNAAPQEACGsA0AA9AQAIQEAAACtBAAgAQAAAK0EACAbBAAA9QQAIAsAAPgEACAOAAD3BAAgEAAA9gQAIBEAAPkEACASAAD6BAAgEwAA-wQAIBYAAPwEACAXAAD9BAAgHwAA_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-wQAIBYAAPwEACAXAAD9BAAgHwAA_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_wUAIAkAAJwFACAPAACABgAgiQMAAPwFADCKAwAABwAQiwMAAPwFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIdMDAAD9Bd8DIt0DAQDwBAAh4AMAAP4F4AMi4QMQAJcFACHiAxAAlwUAIeMDEACXBQAh5AMBAPAEACGfBAAABwAgoAQAAAcAIAuJAwAApAUAMIoDAADLAwAQiwMAAKQFADCMAwEA3QQAIcADAAClBcADI8IDAQDlBAAhzwMBAN0EACHWAwAAjQXEAyLXAwEA3QQAIdgDEACOBQAh2QMCAIcFACEHCgAA7QQAIDMAAKcFACA0AACnBQAglQMAAADAAwOWAwAApgXAAyOXAwAAAMADCZgDAAAAwAMJBwoAAO0EACAzAACnBQAgNAAApwUAIJUDAAAAwAMDlgMAAKYFwAMjlwMAAADAAwmYAwAAAMADCQSVAwAAAMADA5YDAACnBcADI5cDAAAAwAMJmAMAAADAAwkOiQMAAKgFADCKAwAAswMAEIsDAACoBQAwjAMBAN0EACGPAwEA3QQAIZEDAQDdBAAhkgMBAN0EACGTAwEA3QQAIaMDAQDdBAAhqwNAAOcEACGsA0AA5wQAIdoDAQDdBAAh2wMBAOUEACHcAwEA3QQAIQ8FAACqBQAgiQMAAKkFADCKAwAAoAMAEIsDAACpBQAwjAMBAPAEACGPAwEA8AQAIZEDAQDwBAAhkgMBAPAEACGTAwEA8AQAIaMDAQDwBAAhqwNAAPQEACGsA0AA9AQAIdoDAQDwBAAh2wMBAPEEACHcAwEA8AQAIRQDAAC1BQAgBgAA_wUAIAkAAJwFACAPAACABgAgiQMAAPwFADCKAwAABwAQiwMAAPwFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIdMDAAD9Bd8DIt0DAQDwBAAh4AMAAP4F4AMi4QMQAJcFACHiAxAAlwUAIeMDEACXBQAh5AMBAPAEACGfBAAABwAgoAQAAAcAIA6JAwAAqwUAMIoDAACaAwAQiwMAAKsFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIdMDAACsBd8DIt0DAQDdBAAh4AMAAK0F4AMi4QMQAI4FACHiAxAAjgUAIeMDEACOBQAh5AMBAN0EACEHCgAA4AQAIDMAALEFACA0AACxBQAglQMAAADfAwKWAwAAsAXfAyKXAwAAAN8DCJgDAAAA3wMIBwoAAOAEACAzAACvBQAgNAAArwUAIJUDAAAA4AMClgMAAK4F4AMilwMAAADgAwiYAwAAAOADCAcKAADgBAAgMwAArwUAIDQAAK8FACCVAwAAAOADApYDAACuBeADIpcDAAAA4AMImAMAAADgAwgElQMAAADgAwKWAwAArwXgAyKXAwAAAOADCJgDAAAA4AMIBwoAAOAEACAzAACxBQAgNAAAsQUAIJUDAAAA3wMClgMAALAF3wMilwMAAADfAwiYAwAAAN8DCASVAwAAAN8DApYDAACxBd8DIpcDAAAA3wMImAMAAADfAwgIiQMAALIFADCKAwAAhAMAEIsDAACyBQAwjAMBAN0EACHAAwAApQXAAyPCAwEA3QQAIdkDAgCHBQAh5QMBAN0EACEGiQMAALMFADCKAwAA7gIAEIsDAACzBQAwjAMBAN0EACGNAwEA3QQAIawDQADnBAAhCAMAALUFACAJAACbBQAgiQMAALQFADCKAwAAKQAQiwMAALQFADCMAwEA8AQAIY0DAQDwBAAhrANAAPQEACEdBAAA9QQAIAsAAPgEACAOAAD3BAAgEAAA9gQAIBEAAPkEACASAAD6BAAgEwAA-wQAIBYAAPwEACAXAAD9BAAgHwAA_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_gMCAL8FACH_AwEA5QQAIYAEAQDlBAAhgQRAAMoFACGCBAIAhwUAIYMEAQDlBAAhhAQBAOUEACELCgAA7QQAIDMAAMwFACA0AADMBQAglQNAAAAAAZYDQADLBQAhlwNAAAAABZgDQAAAAAWZA0AAAAABmgNAAAAAAZsDQAAAAAGcA0AAAAABCwoAAO0EACAzAADMBQAgNAAAzAUAIJUDQAAAAAGWA0AAywUAIZcDQAAAAAWYA0AAAAAFmQNAAAAAAZoDQAAAAAGbA0AAAAABnANAAAAAAQiVA0AAAAABlgNAAMwFACGXA0AAAAAFmANAAAAABZkDQAAAAAGaA0AAAAABmwNAAAAAAZwDQAAAAAEPiQMAAM0FADCKAwAAygEAEIsDAADNBQAwjAMBAN0EACGNAwEA3QQAIasDQADnBAAhrANAAOcEACGzAwEA5QQAIbQDAQDlBAAh0wMAAM4FiQQihQQBAN0EACGGBAEA5QQAIYcEAQDlBAAhiQRAAOcEACGKBEAAygUAIQcKAADgBAAgMwAA0AUAIDQAANAFACCVAwAAAIkEApYDAADPBYkEIpcDAAAAiQQImAMAAACJBAgHCgAA4AQAIDMAANAFACA0AADQBQAglQMAAACJBAKWAwAAzwWJBCKXAwAAAIkECJgDAAAAiQQIBJUDAAAAiQQClgMAANAFiQQilwMAAACJBAiYAwAAAIkECA2JAwAA0QUAMIoDAACyAQAQiwMAANEFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGwAwAA0gWMBCKzAwEA5QQAIbQDAQDlBAAhxQMBAOUEACGMBAEA5QQAIY0EIADeBAAhjgRAAOcEACEHCgAA4AQAIDMAANQFACA0AADUBQAglQMAAACMBAKWAwAA0wWMBCKXAwAAAIwECJgDAAAAjAQIBwoAAOAEACAzAADUBQAgNAAA1AUAIJUDAAAAjAQClgMAANMFjAQilwMAAACMBAiYAwAAAIwECASVAwAAAIwEApYDAADUBYwEIpcDAAAAjAQImAMAAACMBAgJiQMAANUFADCKAwAAnAEAEIsDAADVBQAwjAMBAN0EACGNAwEA3QQAIasDQADnBAAh3QMBAN0EACGPBCAA3gQAIZAEQADKBQAhDYkDAADWBQAwigMAAIYBABCLAwAA1gUAMIwDAQDdBAAhjQMBAN0EACGPAwEA5QQAIasDQADnBAAhrANAAOcEACHwAyAA3gQAIZIEAADXBZIEIpMEAQDlBAAhlAQgAN4EACGVBEAAygUAIQcKAADgBAAgMwAA2QUAIDQAANkFACCVAwAAAJIEApYDAADYBZIEIpcDAAAAkgQImAMAAACSBAgHCgAA4AQAIDMAANkFACA0AADZBQAglQMAAACSBAKWAwAA2AWSBCKXAwAAAJIECJgDAAAAkgQIBJUDAAAAkgQClgMAANkFkgQilwMAAACSBAiYAwAAAJIECA2JAwAA2gUAMIoDAABwABCLAwAA2gUAMIwDAQDdBAAhjQMBAN0EACGrA0AA5wQAIawDQADnBAAhhgQBAOUEACGJBEAAygUAIZcEAADbBZcEIpgEAQDdBAAhmQQBAOUEACGaBAEA5QQAIQcKAADgBAAgMwAA3QUAIDQAAN0FACCVAwAAAJcEApYDAADcBZcEIpcDAAAAlwQImAMAAACXBAgHCgAA4AQAIDMAAN0FACA0AADdBQAglQMAAACXBAKWAwAA3AWXBCKXAwAAAJcECJgDAAAAlwQIBJUDAAAAlwQClgMAAN0FlwQilwMAAACXBAiYAwAAAJcECA8YAAC1BQAgGwAA3wUAIBwAAOAFACAdAAD_BAAgiQMAAN4FADCKAwAASgAQiwMAAN4FADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACH4AwEA8AQAIfkDAQDwBAAh-gMBAPAEACH7AwEA8QQAIfwDIADzBAAhFxgAALUFACAaAADkBQAgHgAA_wQAIIkDAADiBQAwigMAAEAAEIsDAADiBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhxAMBAPAEACHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhnwQAAEAAIKAEAABAACARGAAAtQUAIBsAAN8FACAcAADgBQAgHQAA_wQAIIkDAADeBQAwigMAAEoAEIsDAADeBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIZ8EAABKACCgBAAASgAgBxkAAP4EACCJAwAA4QUAMIoDAABEABCLAwAA4QUAMIwDAQDwBAAhxAMBAPAEACHFAwEA8AQAIRUYAAC1BQAgGgAA5AUAIB4AAP8EACCJAwAA4gUAMIoDAABAABCLAwAA4gUAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIcQDAQDwBAAhzgMgAPMEACHxAwEA8AQAIfoDAQDwBAAh_QMBAPAEACH-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-gUAMIoDAAAMABCLAwAA-gUAMIwDAQDwBAAhwAMAAPQFwAMjwgMBAPEEACHPAwEA8AQAIdYDAAD5BcQDItcDAQDwBAAh2AMQAJcFACHZAwIAmQUAIRgIAACaBQAgDAAAmwUAIA0AAJwFACAOAAD3BAAgiQMAAJYFADCKAwAAEAAQiwMAAJYFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHBAwIAmQUAIcQDAAD5BcQDIsUDAQDwBAAhxgMBAPAEACHHAxAAlwUAIcgDEACYBQAhyQMQAJgFACHKAyAA8wQAIcsDAQDxBAAhzAMQAJcFACHNAwIAmQUAIc4DIADzBAAhnwQAABAAIKAEAAAQACASAwAAtQUAIAYAAP8FACAJAACcBQAgDwAAgAYAIIkDAAD8BQAwigMAAAcAEIsDAAD8BQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhBJUDAAAA3wMClgMAALEF3wMilwMAAADfAwiYAwAAAN8DCASVAwAAAOADApYDAACvBeADIpcDAAAA4AMImAMAAADgAwgRBQAAqgUAIIkDAACpBQAwigMAAKADABCLAwAAqQUAMIwDAQDwBAAhjwMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGjAwEA8AQAIasDQAD0BAAhrANAAPQEACHaAwEA8AQAIdsDAQDxBAAh3AMBAPAEACGfBAAAoAMAIKAEAACgAwAgDwUAAKMFACCJAwAAoQUAMIoDAAAlABCLAwAAoQUAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIc8DAQDwBAAh0AMBAPAEACHRAxAAlwUAIdMDAACiBdMDItQDAQDxBAAh1QMAAIQFACCfBAAAJQAgoAQAACUAIA0DAAC1BQAgiQMAAIEGADCKAwAAAwAQiwMAAIEGADCMAwEA8AQAIY0DAQDwBAAhjgMBAPAEACGPAwEA8AQAIZADAQDwBAAhkQMBAPAEACGSAwEA8AQAIZMDAQDwBAAhlAMgAPMEACEClwQAAACXBAKYBAEAAAABAo0DAQAAAAGXBAAAAJcEAgAAAAGkBAEAAAABAaQEIAAAAAEFLQAA5goAIC4AAOkKACChBAAA5woAIKIEAADoCgAgpwQAAK0EACADLQAA5goAIKEEAADnCgAgpwQAAK0EACAAAAAAAaQEAQAAAAEBpAQAAACmAwIBpARAAAAAAQstAAD6BwAwLgAA_wcAMKEEAAD7BwAwogQAAPwHADCjBAAA_QcAIKQEAAD-BwAwpQQAAP4HADCmBAAA_gcAMKcEAAD-BwAwqAQAAIAIADCpBAAAgQgAMAstAADQBwAwLgAA1QcAMKEEAADRBwAwogQAANIHADCjBAAA0wcAIKQEAADUBwAwpQQAANQHADCmBAAA1AcAMKcEAADUBwAwqAQAANYHADCpBAAA1wcAMAstAADCBwAwLgAAxwcAMKEEAADDBwAwogQAAMQHADCjBAAAxQcAIKQEAADGBwAwpQQAAMYHADCmBAAAxgcAMKcEAADGBwAwqAQAAMgHADCpBAAAyQcAMActAACsBwAgLgAArwcAIKEEAACtBwAgogQAAK4HACClBAAAKQAgpgQAACkAIKcEAADZAgAgCy0AAJ8HADAuAACkBwAwoQQAAKAHADCiBAAAoQcAMKMEAACiBwAgpAQAAKMHADClBAAAowcAMKYEAACjBwAwpwQAAKMHADCoBAAApQcAMKkEAACmBwAwCy0AAJIHADAuAACXBwAwoQQAAJMHADCiBAAAlAcAMKMEAACVBwAgpAQAAJYHADClBAAAlgcAMKYEAACWBwAwpwQAAJYHADCoBAAAmAcAMKkEAACZBwAwCy0AAIYHADAuAACLBwAwoQQAAIcHADCiBAAAiAcAMKMEAACJBwAgpAQAAIoHADClBAAAigcAMKYEAACKBwAwpwQAAIoHADCoBAAAjAcAMKkEAACNBwAwCy0AAPAGADAuAAD1BgAwoQQAAPEGADCiBAAA8gYAMKMEAADzBgAgpAQAAPQGADClBAAA9AYAMKYEAAD0BgAwpwQAAPQGADCoBAAA9gYAMKkEAAD3BgAwCy0AAOEGADAuAADmBgAwoQQAAOIGADCiBAAA4wYAMKMEAADkBgAgpAQAAOUGADClBAAA5QYAMKYEAADlBgAwpwQAAOUGADCoBAAA5wYAMKkEAADoBgAwCy0AALoGADAuAAC_BgAwoQQAALsGADCiBAAAvAYAMKMEAAC9BgAgpAQAAL4GADClBAAAvgYAMKYEAAC-BgAwpwQAAL4GADCoBAAAwAYAMKkEAADBBgAwCy0AAJ0GADAuAACiBgAwoQQAAJ4GADCiBAAAnwYAMKMEAACgBgAgpAQAAKEGADClBAAAoQYAMKYEAAChBgAwpwQAAKEGADCoBAAAowYAMKkEAACkBgAwChsAALUGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAAuAYAIAMAAABMACAtAAC4BgAgLgAApwYAIAEmAADlCgAwDxgAALUFACAbAADfBQAgHAAA4AUAIB0AAP8EACCJAwAA3gUAMIoDAABKABCLAwAA3gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQIAAABMACAmAACnBgAgAgAAAKUGACAmAACmBgAgC4kDAACkBgAwigMAAKUGABCLAwAApAYAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIfgDAQDwBAAh-QMBAPAEACH6AwEA8AQAIfsDAQDxBAAh_AMgAPMEACELiQMAAKQGADCKAwAApQYAEIsDAACkBgAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQeMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQobAACoBgAgHAAAqQYAIB0AAKoGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQUtAADZCgAgLgAA4woAIKEEAADaCgAgogQAAOIKACCnBAAAQgAgBy0AANUKACAuAADgCgAgoQQAANYKACCiBAAA3woAIKUEAABKACCmBAAASgAgpwQAAEwAIAstAACrBgAwLgAArwYAMKEEAACsBgAwogQAAK0GADCjBAAArgYAIKQEAAChBgAwpQQAAKEGADCmBAAAoQYAMKcEAAChBgAwqAQAALAGADCpBAAApAYAMAoYAAC2BgAgGwAAtQYAIB0AALcGACCMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfoDAQAAAAH8AyAAAAABAgAAAEwAIC0AALQGACADAAAATAAgLQAAtAYAIC4AALIGACABJgAA3goAMAIAAABMACAmAACyBgAgAgAAAKUGACAmAACxBgAgB4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfwDIACIBgAhChgAALMGACAbAACoBgAgHQAAqgYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfwDIACIBgAhBS0AANcKACAuAADcCgAgoQQAANgKACCiBAAA2woAIKcEAACtBAAgChgAALYGACAbAAC1BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfwDIAAAAAEDLQAA2QoAIKEEAADaCgAgpwQAAEIAIAMtAADXCgAgoQQAANgKACCnBAAArQQAIAQtAACrBgAwoQQAAKwGADCjBAAArgYAIKcEAAChBgAwChsAALUGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-wMBAAAAAfwDIAAAAAEDLQAA1QoAIKEEAADWCgAgpwQAAEwAIBAaAADfBgAgHgAA4AYAIIwDAQAAAAGrA0AAAAABrANAAAAAAcQDAQAAAAHOAyAAAAAB8QMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABAgAAAEIAIC0AAN4GACADAAAAQgAgLQAA3gYAIC4AAMcGACABJgAA1AoAMBUYAAC1BQAgGgAA5AUAIB4AAP8EACCJAwAA4gUAMIoDAABAABCLAwAA4gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAhxAMBAAAAAc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACECAAAAQgAgJgAAxwYAIAIAAADCBgAgJgAAwwYAIBKJAwAAwQYAMIoDAADCBgAQiwMAAMEGADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHEAwEA8AQAIc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACESiQMAAMEGADCKAwAAwgYAEIsDAADBBgAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhxAMBAPAEACHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhDowDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACEFpAQCAAAAAasEAgAAAAGsBAIAAAABrQQCAAAAAa4EAgAAAAEBpARAAAAAAQWkBAIAAAABqwQCAAAAAawEAgAAAAGtBAIAAAABrgQCAAAAARAaAADIBgAgHgAAyQYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACEKLQAA0wYAMC4AANcGADChBAAA1AYAMKIEAADVBgAwpAQAANYGADClBAAA1gYAMKYEAADWBgAwpwQAANYGADCoBAAA2AYAMKkEAADZBgAwCy0AAMoGADAuAADOBgAwoQQAAMsGADCiBAAAzAYAMKMEAADNBgAgpAQAAKEGADClBAAAoQYAMKYEAAChBgAwpwQAAKEGADCoBAAAzwYAMKkEAACkBgAwChgAALYGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH6AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAA0gYAIAMAAABMACAtAADSBgAgLgAA0QYAIAEmAADTCgAwAgAAAEwAICYAANEGACACAAAApQYAICYAANAGACAHjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACEKGAAAswYAIBwAAKkGACAdAACqBgAgjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACEKGAAAtgYAIBwAALkGACAdAAC3BgAgjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfoDAQAAAAH7AwEAAAAB_AMgAAAAAQOMAwEAAAABxAMBAAAAAcUDAQAAAAECAAAARgAgLQAA3QYAIAMAAABGACAtAADdBgAgLgAA3AYAIAcZAAD-BAAgiQMAAOEFADCKAwAARAAQiwMAAOEFADCMAwEAAAABxAMBAAAAAcUDAQAAAAECAAAARgAgJgAA3AYAIAIAAADaBgAgJgAA2wYAIAaJAwAA2QYAMIoDAADaBgAQiwMAANkGADCMAwEA8AQAIcQDAQDwBAAhxQMBAPAEACEGiQMAANkGADCKAwAA2gYAEIsDAADZBgAwjAMBAPAEACHEAwEA8AQAIcUDAQDwBAAhA4wDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQOMAwEAhwYAIcQDAQCHBgAhxQMBAIcGACEDjAMBAAAAAcQDAQAAAAHFAwEAAAABEBoAAN8GACAeAADgBgAgjAMBAAAAAasDQAAAAAGsA0AAAAABxAMBAAAAAc4DIAAAAAHxAwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAEDLQAA0wYAMKEEAADUBgAwpwQAANYGADAELQAAygYAMKEEAADLBgAwowQAAM0GACCnBAAAoQYAMAwUAADvBgAgjAMBAAAAAasDQAAAAAGsA0AAAAABswMBAAAAAbQDAQAAAAHTAwAAAIkEAoUEAQAAAAGGBAEAAAABhwQBAAAAAYkEQAAAAAGKBEAAAAABAgAAAD4AIC0AAO4GACADAAAAPgAgLQAA7gYAIC4AAOwGACABJgAA0goAMBEDAAC1BQAgFAAA5wUAIIkDAADlBQAwigMAADoAEIsDAADlBQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIbMDAQDxBAAhtAMBAPEEACHTAwAA5gWJBCKFBAEAAAABhgQBAAAAAYcEAQAAAAGJBEAA9AQAIYoEQADjBQAhAgAAAD4AICYAAOwGACACAAAA6QYAICYAAOoGACAPiQMAAOgGADCKAwAA6QYAEIsDAADoBgAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGzAwEA8QQAIbQDAQDxBAAh0wMAAOYFiQQihQQBAPAEACGGBAEA8QQAIYcEAQDxBAAhiQRAAPQEACGKBEAA4wUAIQ-JAwAA6AYAMIoDAADpBgAQiwMAAOgGADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIbMDAQDxBAAhtAMBAPEEACHTAwAA5gWJBCKFBAEA8AQAIYYEAQDxBAAhhwQBAPEEACGJBEAA9AQAIYoEQADjBQAhC4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIbMDAQCPBgAhtAMBAI8GACHTAwAA6waJBCKFBAEAhwYAIYYEAQCPBgAhhwQBAI8GACGJBEAAkQYAIYoEQADFBgAhAaQEAAAAiQQCDBQAAO0GACCMAwEAhwYAIasDQACRBgAhrANAAJEGACGzAwEAjwYAIbQDAQCPBgAh0wMAAOsGiQQihQQBAIcGACGGBAEAjwYAIYcEAQCPBgAhiQRAAJEGACGKBEAAxQYAIQctAADNCgAgLgAA0AoAIKEEAADOCgAgogQAAM8KACClBAAANgAgpgQAADYAIKcEAAA4ACAMFAAA7wYAIIwDAQAAAAGrA0AAAAABrANAAAAAAbMDAQAAAAG0AwEAAAAB0wMAAACJBAKFBAEAAAABhgQBAAAAAYcEAQAAAAGJBEAAAAABigRAAAAAAQMtAADNCgAgoQQAAM4KACCnBAAAOAAgChUAAIUHACCMAwEAAAABqwNAAAAAAbADAAAAjAQCswMBAAAAAbQDAQAAAAHFAwEAAAABjAQBAAAAAY0EIAAAAAGOBEAAAAABAgAAADgAIC0AAIQHACADAAAAOAAgLQAAhAcAIC4AAPsGACABJgAAzAoAMA8DAAC1BQAgFQAA6gUAIIkDAADoBQAwigMAADYAEIsDAADoBQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGwAwAA6QWMBCKzAwEA8QQAIbQDAQDxBAAhxQMBAPEEACGMBAEA8QQAIY0EIADzBAAhjgRAAPQEACECAAAAOAAgJgAA-wYAIAIAAAD4BgAgJgAA-QYAIA2JAwAA9wYAMIoDAAD4BgAQiwMAAPcGADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGwAwAA6QWMBCKzAwEA8QQAIbQDAQDxBAAhxQMBAPEEACGMBAEA8QQAIY0EIADzBAAhjgRAAPQEACENiQMAAPcGADCKAwAA-AYAEIsDAAD3BgAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhsAMAAOkFjAQiswMBAPEEACG0AwEA8QQAIcUDAQDxBAAhjAQBAPEEACGNBCAA8wQAIY4EQAD0BAAhCYwDAQCHBgAhqwNAAJEGACGwAwAA-gaMBCKzAwEAjwYAIbQDAQCPBgAhxQMBAI8GACGMBAEAjwYAIY0EIACIBgAhjgRAAJEGACEBpAQAAACMBAIKFQAA_AYAIIwDAQCHBgAhqwNAAJEGACGwAwAA-gaMBCKzAwEAjwYAIbQDAQCPBgAhxQMBAI8GACGMBAEAjwYAIY0EIACIBgAhjgRAAJEGACEHLQAA_QYAIC4AAIAHACChBAAA_gYAIKIEAAD_BgAgpQQAADoAIKYEAAA6ACCnBAAAPgAgDAMAAIMHACCMAwEAAAABjQMBAAAAAasDQAAAAAGsA0AAAAABswMBAAAAAbQDAQAAAAHTAwAAAIkEAoUEAQAAAAGGBAEAAAABiQRAAAAAAYoEQAAAAAECAAAAPgAgLQAA_QYAIAMAAAA6ACAtAAD9BgAgLgAAgQcAIA4AAAA6ACADAACCBwAgJgAAgQcAIIwDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAhswMBAI8GACG0AwEAjwYAIdMDAADrBokEIoUEAQCHBgAhhgQBAI8GACGJBEAAkQYAIYoEQADFBgAhDAMAAIIHACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIbMDAQCPBgAhtAMBAI8GACHTAwAA6waJBCKFBAEAhwYAIYYEAQCPBgAhiQRAAJEGACGKBEAAxQYAIQUtAADHCgAgLgAAygoAIKEEAADICgAgogQAAMkKACCnBAAArQQAIAMtAADHCgAgoQQAAMgKACCnBAAArQQAIAoVAACFBwAgjAMBAAAAAasDQAAAAAGwAwAAAIwEArMDAQAAAAG0AwEAAAABxQMBAAAAAYwEAQAAAAGNBCAAAAABjgRAAAAAAQMtAAD9BgAgoQQAAP4GACCnBAAAPgAgBYwDAQAAAAGrA0AAAAAB3QMBAAAAAY8EIAAAAAGQBEAAAAABAgAAADQAIC0AAJEHACADAAAANAAgLQAAkQcAIC4AAJAHACABJgAAxgoAMAoDAAC1BQAgiQMAAOsFADCKAwAAMgAQiwMAAOsFADCMAwEAAAABjQMBAPAEACGrA0AA9AQAId0DAQDwBAAhjwQgAPMEACGQBEAA4wUAIQIAAAA0ACAmAACQBwAgAgAAAI4HACAmAACPBwAgCYkDAACNBwAwigMAAI4HABCLAwAAjQcAMIwDAQDwBAAhjQMBAPAEACGrA0AA9AQAId0DAQDwBAAhjwQgAPMEACGQBEAA4wUAIQmJAwAAjQcAMIoDAACOBwAQiwMAAI0HADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACHdAwEA8AQAIY8EIADzBAAhkARAAOMFACEFjAMBAIcGACGrA0AAkQYAId0DAQCHBgAhjwQgAIgGACGQBEAAxQYAIQWMAwEAhwYAIasDQACRBgAh3QMBAIcGACGPBCAAiAYAIZAEQADFBgAhBYwDAQAAAAGrA0AAAAAB3QMBAAAAAY8EIAAAAAGQBEAAAAABCYwDAQAAAAGPAwEAAAABqwNAAAAAAawDQAAAAAHwAyAAAAABkgQAAACSBAKTBAEAAAABlAQgAAAAAZUEQAAAAAECAAAAMAAgLQAAngcAIAMAAAAwACAtAACeBwAgLgAAnQcAIAEmAADFCgAwDgMAALUFACCJAwAA7AUAMIoDAAAuABCLAwAA7AUAMIwDAQAAAAGNAwEA8AQAIY8DAQDxBAAhqwNAAPQEACGsA0AA9AQAIfADIADzBAAhkgQAAO0FkgQikwQBAPEEACGUBCAA8wQAIZUEQADjBQAhAgAAADAAICYAAJ0HACACAAAAmgcAICYAAJsHACANiQMAAJkHADCKAwAAmgcAEIsDAACZBwAwjAMBAPAEACGNAwEA8AQAIY8DAQDxBAAhqwNAAPQEACGsA0AA9AQAIfADIADzBAAhkgQAAO0FkgQikwQBAPEEACGUBCAA8wQAIZUEQADjBQAhDYkDAACZBwAwigMAAJoHABCLAwAAmQcAMIwDAQDwBAAhjQMBAPAEACGPAwEA8QQAIasDQAD0BAAhrANAAPQEACHwAyAA8wQAIZIEAADtBZIEIpMEAQDxBAAhlAQgAPMEACGVBEAA4wUAIQmMAwEAhwYAIY8DAQCPBgAhqwNAAJEGACGsA0AAkQYAIfADIACIBgAhkgQAAJwHkgQikwQBAI8GACGUBCAAiAYAIZUEQADFBgAhAaQEAAAAkgQCCYwDAQCHBgAhjwMBAI8GACGrA0AAkQYAIawDQACRBgAh8AMgAIgGACGSBAAAnAeSBCKTBAEAjwYAIZQEIACIBgAhlQRAAMUGACEJjAMBAAAAAY8DAQAAAAGrA0AAAAABrANAAAAAAfADIAAAAAGSBAAAAJIEApMEAQAAAAGUBCAAAAABlQRAAAAAAQmMAwEAAAABqwNAAAAAAawDQAAAAAGGBAEAAAABiQRAAAAAAZcEAAAAlwQCmAQBAAAAAZkEAQAAAAGaBAEAAAABAgAAAAEAIC0AAKsHACADAAAAAQAgLQAAqwcAIC4AAKoHACABJgAAxAoAMBADAAC1BQAgiQMAAO4FADCKAwAAKwAQiwMAAO4FADCMAwEAAAABjQMBAPAEACGrA0AA9AQAIawDQAD0BAAhhgQBAPEEACGJBEAA4wUAIZcEAADvBZcEIpgEAQDwBAAhmQQBAPEEACGaBAEA8QQAIZ0EAACCBgAgngQAAIMGACACAAAAAQAgJgAAqgcAIAIAAACnBwAgJgAAqAcAIA2JAwAApgcAMIoDAACnBwAQiwMAAKYHADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIYYEAQDxBAAhiQRAAOMFACGXBAAA7wWXBCKYBAEA8AQAIZkEAQDxBAAhmgQBAPEEACENiQMAAKYHADCKAwAApwcAEIsDAACmBwAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGGBAEA8QQAIYkEQADjBQAhlwQAAO8FlwQimAQBAPAEACGZBAEA8QQAIZoEAQDxBAAhCYwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIYYEAQCPBgAhiQRAAMUGACGXBAAAqQeXBCKYBAEAhwYAIZkEAQCPBgAhmgQBAI8GACEBpAQAAACXBAIJjAMBAIcGACGrA0AAkQYAIawDQACRBgAhhgQBAI8GACGJBEAAxQYAIZcEAACpB5cEIpgEAQCHBgAhmQQBAI8GACGaBAEAjwYAIQmMAwEAAAABqwNAAAAAAawDQAAAAAGGBAEAAAABiQRAAAAAAZcEAAAAlwQCmAQBAAAAAZkEAQAAAAGaBAEAAAABAwkAAMEHACCMAwEAAAABrANAAAAAAQIAAADZAgAgLQAArAcAIAMAAAApACAtAACsBwAgLgAAsAcAIAUAAAApACAJAACxBwAgJgAAsAcAIIwDAQCHBgAhrANAAJEGACEDCQAAsQcAIIwDAQCHBgAhrANAAJEGACELLQAAsgcAMC4AALcHADChBAAAswcAMKIEAAC0BwAwowQAALUHACCkBAAAtgcAMKUEAAC2BwAwpgQAALYHADCnBAAAtgcAMKgEAAC4BwAwqQQAALkHADAFBwAAwAcAIIwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAABAgAAABgAIC0AAL8HACADAAAAGAAgLQAAvwcAIC4AAL0HACABJgAAwwoAMAsHAADxBQAgCwAA9QUAIIkDAADzBQAwigMAABYAEIsDAADzBQAwjAMBAAAAAcADAAD0BcADI8IDAQDwBAAh2QMCAJkFACHlAwEA8AQAIZsEAADyBQAgAgAAABgAICYAAL0HACACAAAAugcAICYAALsHACAIiQMAALkHADCKAwAAugcAEIsDAAC5BwAwjAMBAPAEACHAAwAA9AXAAyPCAwEA8AQAIdkDAgCZBQAh5QMBAPAEACEIiQMAALkHADCKAwAAugcAEIsDAAC5BwAwjAMBAPAEACHAAwAA9AXAAyPCAwEA8AQAIdkDAgCZBQAh5QMBAPAEACEEjAMBAIcGACHAAwAAvAfAAyPCAwEAhwYAIdkDAgDGBgAhAaQEAAAAwAMDBQcAAL4HACCMAwEAhwYAIcADAAC8B8ADI8IDAQCHBgAh2QMCAMYGACEFLQAAvgoAIC4AAMEKACChBAAAvwoAIKIEAADACgAgpwQAAOYDACAFBwAAwAcAIIwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAABAy0AAL4KACChBAAAvwoAIKcEAADmAwAgBC0AALIHADChBAAAswcAMKMEAAC1BwAgpwQAALYHADAHBwAAzwcAIIwDAQAAAAGrA0AAAAABrANAAAAAAcIDAQAAAAHmAwIAAAAB5wMBAAAAAQIAAAAfACAtAADOBwAgAwAAAB8AIC0AAM4HACAuAADMBwAgASYAAL0KADAMAwAAtQUAIAcAAPEFACCJAwAA8AUAMIoDAAAdABCLAwAA8AUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHCAwEA8AQAIeYDAgCZBQAh5wMBAPEEACECAAAAHwAgJgAAzAcAIAIAAADKBwAgJgAAywcAIAqJAwAAyQcAMIoDAADKBwAQiwMAAMkHADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIcIDAQDwBAAh5gMCAJkFACHnAwEA8QQAIQqJAwAAyQcAMIoDAADKBwAQiwMAAMkHADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIcIDAQDwBAAh5gMCAJkFACHnAwEA8QQAIQaMAwEAhwYAIasDQACRBgAhrANAAJEGACHCAwEAhwYAIeYDAgDGBgAh5wMBAI8GACEHBwAAzQcAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcIDAQCHBgAh5gMCAMYGACHnAwEAjwYAIQUtAAC4CgAgLgAAuwoAIKEEAAC5CgAgogQAALoKACCnBAAA5gMAIAcHAADPBwAgjAMBAAAAAasDQAAAAAGsA0AAAAABwgMBAAAAAeYDAgAAAAHnAwEAAAABAy0AALgKACChBAAAuQoAIKcEAADmAwAgDQYAAPcHACAJAAD4BwAgDwAA-QcAIIwDAQAAAAGrA0AAAAABrANAAAAAAdMDAAAA3wMC3QMBAAAAAeADAAAA4AMC4QMQAAAAAeIDEAAAAAHjAxAAAAAB5AMBAAAAAQIAAAAJACAtAAD2BwAgAwAAAAkAIC0AAPYHACAuAADdBwAgASYAALcKADASAwAAtQUAIAYAAP8FACAJAACcBQAgDwAAgAYAIIkDAAD8BQAwigMAAAcAEIsDAAD8BQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIdMDAAD9Bd8DIt0DAQAAAAHgAwAA_gXgAyLhAxAAlwUAIeIDEACXBQAh4wMQAJcFACHkAwEAAAABAgAAAAkAICYAAN0HACACAAAA2AcAICYAANkHACAOiQMAANcHADCKAwAA2AcAEIsDAADXBwAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhDokDAADXBwAwigMAANgHABCLAwAA1wcAMIwDAQDwBAAhjQMBAPAEACGrA0AA9AQAIawDQAD0BAAh0wMAAP0F3wMi3QMBAPAEACHgAwAA_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-CAAwLgAAwggAMKEEAAC_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-ggAIC4AAP0IACChBAAA-wgAIKIEAAD8CAAgpQQAAAcAIKYEAAAHACCnBAAACQAgDQMAAIAJACAJAAD4BwAgDwAA-QcAIIwDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAHTAwAAAN8DAt0DAQAAAAHgAwAAAOADAuEDEAAAAAHiAxAAAAAB4wMQAAAAAQIAAAAJACAtAAD6CAAgAwAAAAcAIC0AAPoIACAuAAD-CAAgDwAAAAcAIAMAAP8IACAJAADfBwAgDwAA4AcAICYAAP4IACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIdMDAADaB98DIt0DAQCHBgAh4AMAANsH4AMi4QMQANwHACHiAxAA3AcAIeMDEADcBwAhDQMAAP8IACAJAADfBwAgDwAA4AcAIIwDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAh0wMAANoH3wMi3QMBAIcGACHgAwAA2wfgAyLhAxAA3AcAIeIDEADcBwAh4wMQANwHACEFLQAAiQoAIC4AAIwKACChBAAAigoAIKIEAACLCgAgpwQAAK0EACADLQAAiQoAIKEEAACKCgAgpwQAAK0EACADLQAA-ggAIKEEAAD7CAAgpwQAAAkAIAGgAwEAAAABAAAAAAAAAAAAAAAAAAUtAACECgAgLgAAhwoAIKEEAACFCgAgogQAAIYKACCnBAAArQQAIAMtAACECgAgoQQAAIUKACCnBAAArQQAIBEEAACRCAAgCwAAlAgAIA4AAJMIACAQAACSCAAgEQAAlQgAIBIAAJYIACATAACXCAAgFgAAmAgAIBcAAJkIACAfAACaCAAgIAAAmwgAII8DAACLBgAgogMAAIsGACCjAwAAiwYAIKQDAACLBgAgqAMAAIsGACCqBAAAnAgAIAGgAwEAAAABAAAAAAAAAAAAAAGkBAAAAOkDAgGgAwEAAAABAAAAAAABpAQAAAD0AwIBoAMBAAAAAQAAAAAAAAotAACuCQAwLgAAsQkAMKEEAACvCQAwogQAALAJADCkBAAAvgYAMKUEAAC-BgAwpgQAAL4GADCnBAAAvgYAMKgEAACyCQAwqQQAAMEGADARGAAAtwkAIB4AAOAGACCMAwEAAAABqwNAAAAAAawDQAAAAAHEAwEAAAABzgMgAAAAAfEDAQAAAAH6AwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAECAAAAQgAgLQAAtgkAIAMAAABCACAtAAC2CQAgLgAAtAkAIAIAAABCACAmAAC0CQAgAgAAAMIGACAmAACzCQAgD4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIREYAAC1CQAgHgAAyQYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIQUtAAD_CQAgLgAAggoAIKEEAACACgAgogQAAIEKACCnBAAArQQAIBEYAAC3CQAgHgAA4AYAIIwDAQAAAAGrA0AAAAABrANAAAAAAcQDAQAAAAHOAyAAAAAB8QMBAAAAAfoDAQAAAAH9AwEAAAAB_gMCAAAAAf8DAQAAAAGABAEAAAABgQRAAAAAAYIEAgAAAAGDBAEAAAABhAQBAAAAAQMtAAD_CQAgoQQAAIAKACCnBAAArQQAIAMtAACuCQAwoQQAAK8JADCnBAAAvgYAMAAAAAAAAAAAAAAABS0AAPoJACAuAAD9CQAgoQQAAPsJACCiBAAA_AkAIKcEAACtBAAgAy0AAPoJACChBAAA-wkAIKcEAACtBAAgAAAABS0AAPUJACAuAAD4CQAgoQQAAPYJACCiBAAA9wkAIKcEAACtBAAgAy0AAPUJACChBAAA9gkAIKcEAACtBAAgAAAABS0AAPAJACAuAADzCQAgoQQAAPEJACCiBAAA8gkAIKcEAACtBAAgAy0AAPAJACChBAAA8QkAIKcEAACtBAAgAAAABS0AAOsJACAuAADuCQAgoQQAAOwJACCiBAAA7QkAIKcEAACtBAAgAy0AAOsJACChBAAA7AkAIKcEAACtBAAgChgAAJIJACAaAADZCQAgHgAAmwgAIP4DAACLBgAg_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-gkAIAMAAACwBAAgLQAA-gkAIC4AAP4JACAZAAAAsAQAIAQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAXAACaBgAgHwAAmwYAICAAAJwGACAmAAD-CQAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAXAACaBgAgHwAAmwYAICAAAJwGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEXBAAAhggAIAsAAIkIACAOAACICAAgEAAAhwgAIBEAAIoIACASAACLCAAgEwAAjAgAIBYAAI0IACAXAACOCAAgIAAAkAgAIIwDAQAAAAGPAwEAAAABoQMBAAAAAaIDAQAAAAGjAwEAAAABpAMBAAAAAaYDAAAApgMCpwMgAAAAAagDAQAAAAGpAyAAAAABqgMgAAAAAasDQAAAAAGsA0AAAAABAgAAAK0EACAtAAD_CQAgAwAAALAEACAtAAD_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_wgAIAYAAN4HACAJAADfBwAgjAMBAIcGACGNAwEAhwYAIasDQACRBgAhrANAAJEGACHTAwAA2gffAyLdAwEAhwYAIeADAADbB-ADIuEDEADcBwAh4gMQANwHACHjAxAA3AcAIeQDAQCHBgAhA4wDAQAAAAHAAwAAAMADAsEDAgAAAAEEAwAAkQkAIIwDAQAAAAGNAwEAAAABrANAAAAAAQIAAADZAgAgLQAAlAoAIAMAAAApACAtAACUCgAgLgAAmAoAIAYAAAApACADAACQCQAgJgAAmAoAIIwDAQCHBgAhjQMBAIcGACGsA0AAkQYAIQQDAACQCQAgjAMBAIcGACGNAwEAhwYAIawDQACRBgAhBIwDAQAAAAHAAwAAAMADA9kDAgAAAAHlAwEAAAABDgMAAIAJACAGAAD3BwAgDwAA-QcAIIwDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAHTAwAAAN8DAt0DAQAAAAHgAwAAAOADAuEDEAAAAAHiAxAAAAAB4wMQAAAAAeQDAQAAAAECAAAACQAgLQAAmgoAIAMAAAAHACAtAACaCgAgLgAAngoAIBAAAAAHACADAAD_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_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAELGAAAtgYAIBsAALUGACAcAAC5BgAgjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAA1QoAIBcEAACGCAAgCwAAiQgAIA4AAIgIACAQAACHCAAgEQAAiggAIBIAAIsIACATAACMCAAgFgAAjQgAIBcAAI4IACAfAACPCAAgjAMBAAAAAY8DAQAAAAGhAwEAAAABogMBAAAAAaMDAQAAAAGkAwEAAAABpgMAAACmAwKnAyAAAAABqAMBAAAAAakDIAAAAAGqAyAAAAABqwNAAAAAAawDQAAAAAECAAAArQQAIC0AANcKACARGAAAtwkAIBoAAN8GACCMAwEAAAABqwNAAAAAAawDQAAAAAHEAwEAAAABzgMgAAAAAfEDAQAAAAH6AwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAECAAAAQgAgLQAA2QoAIAMAAACwBAAgLQAA1woAIC4AAN0KACAZAAAAsAQAIAQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAWAACZBgAgFwAAmgYAIB8AAJsGACAmAADdCgAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAWAACZBgAgFwAAmgYAIB8AAJsGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEHjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB_AMgAAAAAQMAAABKACAtAADVCgAgLgAA4QoAIA0AAABKACAYAACzBgAgGwAAqAYAIBwAAKkGACAmAADhCgAgjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH5AwEAhwYAIfoDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQsYAACzBgAgGwAAqAYAIBwAAKkGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-gMBAIcGACH7AwEAjwYAIfwDIACIBgAhAwAAAEAAIC0AANkKACAuAADkCgAgEwAAAEAAIBgAALUJACAaAADIBgAgJgAA5AoAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIREYAAC1CQAgGgAAyAYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIQeMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfsDAQAAAAH8AyAAAAABFwsAAIkIACAOAACICAAgEAAAhwgAIBEAAIoIACASAACLCAAgEwAAjAgAIBYAAI0IACAXAACOCAAgHwAAjwgAICAAAJAIACCMAwEAAAABjwMBAAAAAaEDAQAAAAGiAwEAAAABowMBAAAAAaQDAQAAAAGmAwAAAKYDAqcDIAAAAAGoAwEAAAABqQMgAAAAAaoDIAAAAAGrA0AAAAABrANAAAAAAQIAAACtBAAgLQAA5goAIAMAAACwBAAgLQAA5goAIC4AAOoKACAZAAAAsAQAIAsAAJUGACAOAACUBgAgEAAAkwYAIBEAAJYGACASAACXBgAgEwAAmAYAIBYAAJkGACAXAACaBgAgHwAAmwYAICAAAJwGACAmAADqCgAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwsAAJUGACAOAACUBgAgEAAAkwYAIBEAAJYGACASAACXBgAgEwAAmAYAIBYAAJkGACAXAACaBgAgHwAAmwYAICAAAJwGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEBAwACDAQGAwoAGgsqCg4oDBAKBBEtARIxEBM1ERY5Ehc_Ex9DFCBTFwEDAAIFAwACBgAFCQ8GCgAPDyYOAQULBAIFAAQHEQcFCBUICgANDBkJDRwGDiAMAQcABwIHAAcLAAoDAwACCRoJCgALAQkbAAIDAAIHAAcECCEADCIADSMADiQAAQUABAEJJwABAwACAQMAAgIDAAIVOxMCAwACFDwSBAoAGRgAAhpHFR5NFwIKABYZSBQBGUkABQoAGBgAAhsAFBxOFx1PFwEdUAACGlEAHlIACgRUAA5WABBVABFXABJYABNZABZaABdbAB9cACBdAAABAwACAQMAAgMKAB8zACA0ACEAAAADCgAfMwAgNAAhAQMAAgEDAAIDCgAmMwAnNAAoAAAAAwoAJjMAJzQAKAEDAAIBAwACAwoALTMALjQALwAAAAMKAC0zAC40AC8BAwACAQMAAgMKADQzADU0ADYAAAADCgA0MwA1NAA2AgMAAhS_ARICAwACFMUBEgMKADszADw0AD0AAAADCgA7MwA8NAA9ARgAAgEYAAIFCgBCMwBFNABGhQEAQ4YBAEQAAAAAAAUKAEIzAEU0AEaFAQBDhgEARAAAAwoASzMATDQATQAAAAMKAEszAEw0AE0DGAACGwAUHIMCFwMYAAIbABQciQIXAwoAUjMAUzQAVAAAAAMKAFIzAFM0AFQAAAAFCgBaMwBdNABehQEAW4YBAFwAAAAAAAUKAFozAF00AF6FAQBbhgEAXAAAAAUKAGQzAGc0AGiFAQBlhgEAZgAAAAAABQoAZDMAZzQAaIUBAGWGAQBmAgMAAgcABwIDAAIHAAcFCgBtMwBwNABxhQEAboYBAG8AAAAAAAUKAG0zAHA0AHGFAQBuhgEAbwEDAAIBAwACAwoAdjMAdzQAeAAAAAMKAHYzAHc0AHgCBwAHCwAKAgcABwsACgUKAH0zAIABNACBAYUBAH6GAQB_AAAAAAAFCgB9MwCAATQAgQGFAQB-hgEAfwIDAAIGAAUCAwACBgAFBQoAhgEzAIkBNACKAYUBAIcBhgEAiAEAAAAAAAUKAIYBMwCJATQAigGFAQCHAYYBAIgBAAADCgCPATMAkAE0AJEBAAAAAwoAjwEzAJABNACRAQIFAAQHwAMHAgUABAfGAwcFCgCWATMAmQE0AJoBhQEAlwGGAQCYAQAAAAAABQoAlgEzAJkBNACaAYUBAJcBhgEAmAEBBQAEAQUABAUKAJ8BMwCiATQAowGFAQCgAYYBAKEBAAAAAAAFCgCfATMAogE0AKMBhQEAoAGGAQChAQAABQoAqAEzAKsBNACsAYUBAKkBhgEAqgEAAAAAAAUKAKgBMwCrATQArAGFAQCpAYYBAKoBAQcABwEHAAcFCgCxATMAtAE0ALUBhQEAsgGGAQCzAQAAAAAABQoAsQEzALQBNAC1AYUBALIBhgEAswEAAAADCgC7ATMAvAE0AL0BAAAAAwoAuwEzALwBNAC9AQAAAwoAwgEzAMMBNADEAQAAAAMKAMIBMwDDATQAxAEBAwACAQMAAgMKAMkBMwDKATQAywEAAAADCgDJATMAygE0AMsBIQIBIl4BI18BJGABJWEBJ2MBKGUbKWYcKmgBK2obLGsdL2wBMG0BMW4bNXEeNnIiN3MQOHQQOXUQOnYQO3cQPHkQPXsbPnwjP34QQIABG0GBASRCggEQQ4MBEESEARtFhwElRogBKUeJARFIigERSYsBEUqMARFLjQERTI8BEU2RARtOkgEqT5QBEVCWARtRlwErUpgBEVOZARFUmgEbVZ0BLFaeATBXnwESWKABElmhARJaogESW6MBElylARJdpwEbXqgBMV-qARJgrAEbYa0BMmKuARJjrwESZLABG2WzATNmtAE3Z7UBE2i2ARNptwETargBE2u5ARNsuwETbb0BG26-AThvwQETcMMBG3HEATlyxgETc8cBE3TIARt1ywE6dswBPnfNARR4zgEUec8BFHrQARR70QEUfNMBFH3VARt-1gE_f9gBFIAB2gEbgQHbAUCCAdwBFIMB3QEUhAHeARuHAeEBQYgB4gFHiQHjARWKAeQBFYsB5QEVjAHmARWNAecBFY4B6QEVjwHrARuQAewBSJEB7gEVkgHwARuTAfEBSZQB8gEVlQHzARWWAfQBG5cB9wFKmAH4AU6ZAfkBF5oB-gEXmwH7ARecAfwBF50B_QEXngH_ARefAYECG6ABggJPoQGFAheiAYcCG6MBiAJQpAGKAhelAYsCF6YBjAIbpwGPAlGoAZACVakBkgJWqgGTAlarAZYCVqwBlwJWrQGYAlauAZoCVq8BnAIbsAGdAlexAZ8CVrIBoQIbswGiAli0AaMCVrUBpAJWtgGlAhu3AagCWbgBqQJfuQGrAmC6AawCYLsBrwJgvAGwAmC9AbECYL4BswJgvwG1AhvAAbYCYcEBuAJgwgG6AhvDAbsCYsQBvAJgxQG9AmDGAb4CG8cBwQJjyAHCAmnJAcMCDMoBxAIMywHFAgzMAcYCDM0BxwIMzgHJAgzPAcsCG9ABzAJq0QHOAgzSAdACG9MB0QJr1AHSAgzVAdMCDNYB1AIb1wHXAmzYAdgCctkB2gIK2gHbAgrbAd0CCtwB3gIK3QHfAgreAeECCt8B4wIb4AHkAnPhAeYCCuIB6AIb4wHpAnTkAeoCCuUB6wIK5gHsAhvnAe8CdegB8AJ56QHxAgnqAfICCesB8wIJ7AH0AgntAfUCCe4B9wIJ7wH5AhvwAfoCevEB_AIJ8gH-AhvzAf8Ce_QBgAMJ9QGBAwn2AYIDG_cBhQN8-AGGA4IB-QGHAwT6AYgDBPsBiQME_AGKAwT9AYsDBP4BjQME_wGPAxuAApADgwGBApIDBIIClAMbgwKVA4QBhAKWAwSFApcDBIYCmAMbhwKbA4UBiAKcA4sBiQKeAwWKAp8DBYsCogMFjAKjAwWNAqQDBY4CpgMFjwKoAxuQAqkDjAGRAqsDBZICrQMbkwKuA40BlAKvAwWVArADBZYCsQMblwK0A44BmAK1A5IBmQK2AwaaArcDBpsCuAMGnAK5AwadAroDBp4CvAMGnwK-AxugAr8DkwGhAsIDBqICxAMbowLFA5QBpALHAwalAsgDBqYCyQMbpwLMA5UBqALNA5sBqQLPAw6qAtADDqsC0gMOrALTAw6tAtQDDq4C1gMOrwLYAxuwAtkDnAGxAtsDDrIC3QMbswLeA50BtALfAw61AuADDrYC4QMbtwLkA54BuALlA6QBuQLnAwe6AugDB7sC6gMHvALrAwe9AuwDB74C7gMHvwLwAxvAAvEDpQHBAvMDB8IC9QMbwwL2A6YBxAL3AwfFAvgDB8YC-QMbxwL8A6cByAL9A60ByQL-AwjKAv8DCMsCgAQIzAKBBAjNAoIECM4ChAQIzwKGBBvQAocErgHRAokECNICiwQb0wKMBK8B1AKNBAjVAo4ECNYCjwQb1wKSBLAB2AKTBLYB2QKVBLcB2gKWBLcB2wKZBLcB3AKaBLcB3QKbBLcB3gKdBLcB3wKfBBvgAqAEuAHhAqIEtwHiAqQEG-MCpQS5AeQCpgS3AeUCpwS3AeYCqAQb5wKrBLoB6AKsBL4B6QKuBALqAq8EAusCsgQC7AKzBALtArQEAu4CtgQC7wK4BBvwArkEvwHxArsEAvICvQQb8wK-BMAB9AK_BAL1AsAEAvYCwQQb9wLEBMEB-ALFBMUB-QLGBAP6AscEA_sCyAQD_ALJBAP9AsoEA_4CzAQD_wLOBBuAA88ExgGBA9EEA4ID0wQbgwPUBMcBhAPVBAOFA9YEA4YD1wQbhwPaBMgBiAPbBMwB" +} +config.compilerWasm = { + getRuntime: async () => require('./query_compiler_fast_bg.js'), + getQueryCompilerWasmModule: async () => { + const loader = (await import('#wasm-compiler-loader')).default + const compiler = (await loader).default + return compiler + }, + importName: './query_compiler_fast_bg.js', +} +if (typeof globalThis !== 'undefined' && globalThis['DEBUG'] || (typeof process !== 'undefined' && process.env && process.env.DEBUG) || undefined) { + Debug.enable(typeof globalThis !== 'undefined' && globalThis['DEBUG'] || (typeof process !== 'undefined' && process.env && process.env.DEBUG) || undefined) +} + +const PrismaClient = getPrismaClient(config) +exports.PrismaClient = PrismaClient +Object.assign(exports, Prisma) diff --git a/apps/api-effect/src/generated/prisma/index-browser.js b/apps/api-effect/src/generated/prisma/index-browser.js new file mode 100644 index 00000000..a57f4ea7 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/index-browser.js @@ -0,0 +1,735 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file + +Object.defineProperty(exports, "__esModule", { value: true }); + +const { + Decimal, + DbNull, + JsonNull, + AnyNull, + NullTypes, + makeStrictEnum, + Public, + getRuntime, + skip +} = require('./runtime/index-browser.js') + + +const Prisma = {} + +exports.Prisma = Prisma +exports.$Enums = {} + +/** + * Prisma Client JS version: 7.8.0 + * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a + */ +Prisma.prismaVersion = { + client: "7.8.0", + engine: "3c6e192761c0362d496ed980de936e2f3cebcd3a" +} + +Prisma.PrismaClientKnownRequestError = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)}; +Prisma.PrismaClientUnknownRequestError = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.PrismaClientRustPanicError = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.PrismaClientInitializationError = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.PrismaClientValidationError = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.Decimal = Decimal + +/** + * Re-export of sql-template-tag + */ +Prisma.sql = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.empty = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.join = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.raw = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.validator = Public.validator + +/** +* Extensions +*/ +Prisma.getExtensionContext = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} +Prisma.defineExtension = () => { + const runtimeName = getRuntime().prettyName; + throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}). +In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`, +)} + +/** + * Shorthand utilities for JSON filtering + */ +Prisma.DbNull = DbNull +Prisma.JsonNull = JsonNull +Prisma.AnyNull = AnyNull + +Prisma.NullTypes = NullTypes + + + +/** + * Enums + */ + +exports.Prisma.TransactionIsolationLevel = makeStrictEnum({ + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable' +}); + +exports.Prisma.ExternalAccountScalarFieldEnum = { + id: 'id', + provider: 'provider', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + expiresAt: 'expiresAt', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.UserMFAMethodScalarFieldEnum = { + id: 'id', + methodType: 'methodType', + secret: 'secret', + phone: 'phone', + isActive: 'isActive', + isVerified: 'isVerified', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + lastUsedAt: 'lastUsedAt' +}; + +exports.Prisma.MFABackupCodeScalarFieldEnum = { + id: 'id', + code: 'code', + isUsed: 'isUsed', + usedAt: 'usedAt', + userId: 'userId', + createdAt: 'createdAt' +}; + +exports.Prisma.DeviceScalarFieldEnum = { + id: 'id', + name: 'name', + type: 'type', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId', + isTrusted: 'isTrusted', + lastSeenAt: 'lastSeenAt', + createdAt: 'createdAt' +}; + +exports.Prisma.SessionScalarFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + status: 'status', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogPostScalarFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + contentSize: 'contentSize', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + isPublished: 'isPublished', + publishedAt: 'publishedAt', + viewCount: 'viewCount', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogTagScalarFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentScalarFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId', + isApproved: 'isApproved', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.EventScalarFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + startDate: 'startDate', + endDate: 'endDate', + location: 'location', + type: 'type', + organizer: 'organizer', + attendees: 'attendees', + surveyLink: 'surveyLink', + createdBy: 'createdBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.VoucherScalarFieldEnum = { + id: 'id', + code: 'code', + type: 'type', + value: 'value', + minSpend: 'minSpend', + maxDiscount: 'maxDiscount', + usageLimit: 'usageLimit', + usedCount: 'usedCount', + startDate: 'startDate', + endDate: 'endDate', + isActive: 'isActive' +}; + +exports.Prisma.ReviewScalarFieldEnum = { + id: 'id', + rating: 'rating', + comment: 'comment', + userId: 'userId', + productId: 'productId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartScalarFieldEnum = { + id: 'id', + userId: 'userId', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartItemScalarFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId', + size: 'size', + quantity: 'quantity' +}; + +exports.Prisma.OrderScalarFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + status: 'status', + paymentStatus: 'paymentStatus', + totalAmount: 'totalAmount', + shippingFee: 'shippingFee', + discountValue: 'discountValue', + shippingAddressId: 'shippingAddressId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ShippingAddressScalarFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.OrderItemScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productSlug: 'productSlug', + productName: 'productName', + size: 'size', + price: 'price', + quantity: 'quantity' +}; + +exports.Prisma.PaymentTransactionScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + amount: 'amount', + status: 'status', + paymentUrl: 'paymentUrl', + payosData: 'payosData', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductScalarFieldEnum = { + id: 'id', + slug: 'slug', + name: 'name', + description: 'description', + priceCurrent: 'priceCurrent', + priceOriginal: 'priceOriginal', + priceDiscount: 'priceDiscount', + stock: 'stock', + hasSizes: 'hasSizes', + badge: 'badge', + ratingValue: 'ratingValue', + ratingCount: 'ratingCount', + isPublished: 'isPublished', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductSizeStockScalarFieldEnum = { + id: 'id', + size: 'size', + stock: 'stock', + productId: 'productId' +}; + +exports.Prisma.SecurityLogScalarFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method', + metadata: 'metadata', + timestamp: 'timestamp' +}; + +exports.Prisma.UserScalarFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + role: 'role', + mfaEnabled: 'mfaEnabled', + mfaSecret: 'mfaSecret', + emailVerified: 'emailVerified', + phoneVerified: 'phoneVerified', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.AddressScalarFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward', + isDefault: 'isDefault' +}; + +exports.Prisma.SortOrder = { + asc: 'asc', + desc: 'desc' +}; + +exports.Prisma.NullableJsonNullValueInput = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull +}; + +exports.Prisma.QueryMode = { + default: 'default', + insensitive: 'insensitive' +}; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; + +exports.Prisma.ExternalAccountOrderByRelevanceFieldEnum = { + id: 'id', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + userId: 'userId' +}; + +exports.Prisma.UserMFAMethodOrderByRelevanceFieldEnum = { + id: 'id', + secret: 'secret', + phone: 'phone', + userId: 'userId' +}; + +exports.Prisma.MFABackupCodeOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId' +}; + +exports.Prisma.DeviceOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId' +}; + +exports.Prisma.SessionOrderByRelevanceFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent' +}; + +exports.Prisma.BlogPostOrderByRelevanceFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription' +}; + +exports.Prisma.BlogTagOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentOrderByRelevanceFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId' +}; + +exports.Prisma.EventOrderByRelevanceFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + location: 'location', + organizer: 'organizer', + surveyLink: 'surveyLink', + createdBy: 'createdBy' +}; + +exports.Prisma.VoucherOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code' +}; + +exports.Prisma.ReviewOrderByRelevanceFieldEnum = { + id: 'id', + comment: 'comment', + userId: 'userId', + productId: 'productId' +}; + +exports.Prisma.CartOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId' +}; + +exports.Prisma.CartItemOrderByRelevanceFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId' +}; + +exports.Prisma.OrderOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + shippingAddressId: 'shippingAddressId' +}; + +exports.Prisma.ShippingAddressOrderByRelevanceFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode' +}; + +exports.Prisma.OrderItemOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productName: 'productName' +}; + +exports.Prisma.JsonNullValueFilter = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull, + AnyNull: Prisma.AnyNull +}; + +exports.Prisma.PaymentTransactionOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + paymentUrl: 'paymentUrl' +}; + +exports.Prisma.ProductOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + description: 'description', + badge: 'badge' +}; + +exports.Prisma.ProductSizeStockOrderByRelevanceFieldEnum = { + id: 'id', + productId: 'productId' +}; + +exports.Prisma.SecurityLogOrderByRelevanceFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method' +}; + +exports.Prisma.UserOrderByRelevanceFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + mfaSecret: 'mfaSecret' +}; + +exports.Prisma.AddressOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward' +}; +exports.OAuthProvider = exports.$Enums.OAuthProvider = { + GOOGLE: 'GOOGLE', + FACEBOOK: 'FACEBOOK', + GITHUB: 'GITHUB', + APPLE: 'APPLE' +}; + +exports.MFAMethod = exports.$Enums.MFAMethod = { + TOTP: 'TOTP', + SMS: 'SMS', + EMAIL: 'EMAIL', + BACKUP_CODE: 'BACKUP_CODE' +}; + +exports.DeviceType = exports.$Enums.DeviceType = { + DESKTOP: 'DESKTOP', + MOBILE: 'MOBILE', + TABLET: 'TABLET', + UNKNOWN: 'UNKNOWN' +}; + +exports.SessionStatus = exports.$Enums.SessionStatus = { + ACTIVE: 'ACTIVE', + EXPIRED: 'EXPIRED', + REVOKED: 'REVOKED' +}; + +exports.EventType = exports.$Enums.EventType = { + MEETING: 'MEETING', + WORKSHOP: 'WORKSHOP', + SOCIAL: 'SOCIAL', + COMPETITION: 'COMPETITION', + SURVEY: 'SURVEY', + OTHER: 'OTHER' +}; + +exports.DiscountType = exports.$Enums.DiscountType = { + PERCENTAGE: 'PERCENTAGE', + FIXED_AMOUNT: 'FIXED_AMOUNT' +}; + +exports.ProductSize = exports.$Enums.ProductSize = { + S: 'S', + M: 'M', + L: 'L', + XL: 'XL' +}; + +exports.OrderStatus = exports.$Enums.OrderStatus = { + PENDING: 'PENDING', + CONFIRMED: 'CONFIRMED', + PROCESSING: 'PROCESSING', + SHIPPING: 'SHIPPING', + DELIVERED: 'DELIVERED', + CANCELLED: 'CANCELLED', + RETURNED: 'RETURNED' +}; + +exports.PaymentStatus = exports.$Enums.PaymentStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + FAILED: 'FAILED', + REFUNDED: 'REFUNDED' +}; + +exports.ProductSlug = exports.$Enums.ProductSlug = { + AO_THUN: 'AO_THUN', + PAD_CHUOT: 'PAD_CHUOT', + DAY_DEO: 'DAY_DEO', + MOC_KHOA: 'MOC_KHOA' +}; + +exports.PaymentTransactionStatus = exports.$Enums.PaymentTransactionStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + CANCELLED: 'CANCELLED', + EXPIRED: 'EXPIRED', + FAILED: 'FAILED' +}; + +exports.UserRole = exports.$Enums.UserRole = { + ADMIN: 'ADMIN', + CUSTOMER: 'CUSTOMER' +}; + +exports.Prisma.ModelName = { + ExternalAccount: 'ExternalAccount', + UserMFAMethod: 'UserMFAMethod', + MFABackupCode: 'MFABackupCode', + Device: 'Device', + Session: 'Session', + BlogPost: 'BlogPost', + BlogTag: 'BlogTag', + BlogComment: 'BlogComment', + Event: 'Event', + Voucher: 'Voucher', + Review: 'Review', + Cart: 'Cart', + CartItem: 'CartItem', + Order: 'Order', + ShippingAddress: 'ShippingAddress', + OrderItem: 'OrderItem', + PaymentTransaction: 'PaymentTransaction', + Product: 'Product', + ProductSizeStock: 'ProductSizeStock', + SecurityLog: 'SecurityLog', + User: 'User', + Address: 'Address' +}; + +/** + * This is a stub Prisma Client that will error at runtime if called. + */ +class PrismaClient { + constructor() { + return new Proxy(this, { + get(target, prop) { + let message + const runtime = getRuntime() + if (runtime.isEdge) { + message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either: +- Use Prisma Accelerate: https://pris.ly/d/accelerate +- Use Driver Adapters: https://pris.ly/d/driver-adapters +`; + } else { + message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).' + } + + message += ` +If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report` + + throw new Error(message) + } + }) + } +} + +exports.PrismaClient = PrismaClient + +Object.assign(exports, Prisma) diff --git a/apps/api-effect/src/generated/prisma/index.d.ts b/apps/api-effect/src/generated/prisma/index.d.ts new file mode 100644 index 00000000..417755ea --- /dev/null +++ b/apps/api-effect/src/generated/prisma/index.d.ts @@ -0,0 +1,41587 @@ + +/** + * Client +**/ + +import * as runtime from './runtime/client.js'; +import $Types = runtime.Types // general types +import $Public = runtime.Types.Public +import $Utils = runtime.Types.Utils +import $Extensions = runtime.Types.Extensions +import $Result = runtime.Types.Result + +export type PrismaPromise = $Public.PrismaPromise + + +/** + * Model ExternalAccount + * + */ +export type ExternalAccount = $Result.DefaultSelection +/** + * Model UserMFAMethod + * + */ +export type UserMFAMethod = $Result.DefaultSelection +/** + * Model MFABackupCode + * + */ +export type MFABackupCode = $Result.DefaultSelection +/** + * Model Device + * + */ +export type Device = $Result.DefaultSelection +/** + * Model Session + * + */ +export type Session = $Result.DefaultSelection +/** + * Model BlogPost + * + */ +export type BlogPost = $Result.DefaultSelection +/** + * Model BlogTag + * + */ +export type BlogTag = $Result.DefaultSelection +/** + * Model BlogComment + * + */ +export type BlogComment = $Result.DefaultSelection +/** + * Model Event + * + */ +export type Event = $Result.DefaultSelection +/** + * Model Voucher + * + */ +export type Voucher = $Result.DefaultSelection +/** + * Model Review + * + */ +export type Review = $Result.DefaultSelection +/** + * Model Cart + * + */ +export type Cart = $Result.DefaultSelection +/** + * Model CartItem + * + */ +export type CartItem = $Result.DefaultSelection +/** + * Model Order + * + */ +export type Order = $Result.DefaultSelection +/** + * Model ShippingAddress + * * + * * Shipping address (Snapshot at order time) + */ +export type ShippingAddress = $Result.DefaultSelection +/** + * Model OrderItem + * + */ +export type OrderItem = $Result.DefaultSelection +/** + * Model PaymentTransaction + * + */ +export type PaymentTransaction = $Result.DefaultSelection +/** + * Model Product + * + */ +export type Product = $Result.DefaultSelection +/** + * Model ProductSizeStock + * * + * * Manage stock by size (only for t-shirt) + * * If product doesn't have sizes, stock is stored directly in Product.stock + */ +export type ProductSizeStock = $Result.DefaultSelection +/** + * Model SecurityLog + * + */ +export type SecurityLog = $Result.DefaultSelection +/** + * Model User + * + */ +export type User = $Result.DefaultSelection +/** + * Model Address + * + */ +export type Address = $Result.DefaultSelection + +/** + * Enums + */ +export namespace $Enums { + export const UserRole: { + ADMIN: 'ADMIN', + CUSTOMER: 'CUSTOMER' +}; + +export type UserRole = (typeof UserRole)[keyof typeof UserRole] + + +export const OrderStatus: { + PENDING: 'PENDING', + CONFIRMED: 'CONFIRMED', + PROCESSING: 'PROCESSING', + SHIPPING: 'SHIPPING', + DELIVERED: 'DELIVERED', + CANCELLED: 'CANCELLED', + RETURNED: 'RETURNED' +}; + +export type OrderStatus = (typeof OrderStatus)[keyof typeof OrderStatus] + + +export const PaymentStatus: { + PENDING: 'PENDING', + PAID: 'PAID', + FAILED: 'FAILED', + REFUNDED: 'REFUNDED' +}; + +export type PaymentStatus = (typeof PaymentStatus)[keyof typeof PaymentStatus] + + +export const DiscountType: { + PERCENTAGE: 'PERCENTAGE', + FIXED_AMOUNT: 'FIXED_AMOUNT' +}; + +export type DiscountType = (typeof DiscountType)[keyof typeof DiscountType] + + +export const OAuthProvider: { + GOOGLE: 'GOOGLE', + FACEBOOK: 'FACEBOOK', + GITHUB: 'GITHUB', + APPLE: 'APPLE' +}; + +export type OAuthProvider = (typeof OAuthProvider)[keyof typeof OAuthProvider] + + +export const MFAMethod: { + TOTP: 'TOTP', + SMS: 'SMS', + EMAIL: 'EMAIL', + BACKUP_CODE: 'BACKUP_CODE' +}; + +export type MFAMethod = (typeof MFAMethod)[keyof typeof MFAMethod] + + +export const DeviceType: { + DESKTOP: 'DESKTOP', + MOBILE: 'MOBILE', + TABLET: 'TABLET', + UNKNOWN: 'UNKNOWN' +}; + +export type DeviceType = (typeof DeviceType)[keyof typeof DeviceType] + + +export const SessionStatus: { + ACTIVE: 'ACTIVE', + EXPIRED: 'EXPIRED', + REVOKED: 'REVOKED' +}; + +export type SessionStatus = (typeof SessionStatus)[keyof typeof SessionStatus] + + +export const ProductSlug: { + AO_THUN: 'AO_THUN', + PAD_CHUOT: 'PAD_CHUOT', + DAY_DEO: 'DAY_DEO', + MOC_KHOA: 'MOC_KHOA' +}; + +export type ProductSlug = (typeof ProductSlug)[keyof typeof ProductSlug] + + +export const ProductSize: { + S: 'S', + M: 'M', + L: 'L', + XL: 'XL' +}; + +export type ProductSize = (typeof ProductSize)[keyof typeof ProductSize] + + +export const EventType: { + MEETING: 'MEETING', + WORKSHOP: 'WORKSHOP', + SOCIAL: 'SOCIAL', + COMPETITION: 'COMPETITION', + SURVEY: 'SURVEY', + OTHER: 'OTHER' +}; + +export type EventType = (typeof EventType)[keyof typeof EventType] + + +export const PaymentTransactionStatus: { + PENDING: 'PENDING', + PAID: 'PAID', + CANCELLED: 'CANCELLED', + EXPIRED: 'EXPIRED', + FAILED: 'FAILED' +}; + +export type PaymentTransactionStatus = (typeof PaymentTransactionStatus)[keyof typeof PaymentTransactionStatus] + +} + +export type UserRole = $Enums.UserRole + +export const UserRole: typeof $Enums.UserRole + +export type OrderStatus = $Enums.OrderStatus + +export const OrderStatus: typeof $Enums.OrderStatus + +export type PaymentStatus = $Enums.PaymentStatus + +export const PaymentStatus: typeof $Enums.PaymentStatus + +export type DiscountType = $Enums.DiscountType + +export const DiscountType: typeof $Enums.DiscountType + +export type OAuthProvider = $Enums.OAuthProvider + +export const OAuthProvider: typeof $Enums.OAuthProvider + +export type MFAMethod = $Enums.MFAMethod + +export const MFAMethod: typeof $Enums.MFAMethod + +export type DeviceType = $Enums.DeviceType + +export const DeviceType: typeof $Enums.DeviceType + +export type SessionStatus = $Enums.SessionStatus + +export const SessionStatus: typeof $Enums.SessionStatus + +export type ProductSlug = $Enums.ProductSlug + +export const ProductSlug: typeof $Enums.ProductSlug + +export type ProductSize = $Enums.ProductSize + +export const ProductSize: typeof $Enums.ProductSize + +export type EventType = $Enums.EventType + +export const EventType: typeof $Enums.EventType + +export type PaymentTransactionStatus = $Enums.PaymentTransactionStatus + +export const PaymentTransactionStatus: typeof $Enums.PaymentTransactionStatus + +/** + * ## Prisma Client ʲˢ + * + * Type-safe database client for TypeScript & Node.js + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * }) + * // Fetch zero or more ExternalAccounts + * const externalAccounts = await prisma.externalAccount.findMany() + * ``` + * + * + * Read more in our [docs](https://pris.ly/d/client). + */ +export class PrismaClient< + ClientOptions extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions, + const U = 'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array ? Prisma.GetEvents : never : never, + ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs +> { + [K: symbol]: { types: Prisma.TypeMap['other'] } + + /** + * ## Prisma Client ʲˢ + * + * Type-safe database client for TypeScript & Node.js + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * }) + * // Fetch zero or more ExternalAccounts + * const externalAccounts = await prisma.externalAccount.findMany() + * ``` + * + * + * Read more in our [docs](https://pris.ly/d/client). + */ + + constructor(optionsArg ?: Prisma.Subset); + $on(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient; + + /** + * Connect with the database + */ + $connect(): $Utils.JsPromise; + + /** + * Disconnect from the database + */ + $disconnect(): $Utils.JsPromise; + +/** + * Executes a prepared raw query and returns the number of affected rows. + * @example + * ``` + * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};` + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $executeRaw(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise; + + /** + * Executes a raw query and returns the number of affected rows. + * Susceptible to SQL injections, see documentation. + * @example + * ``` + * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com') + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $executeRawUnsafe(query: string, ...values: any[]): Prisma.PrismaPromise; + + /** + * Performs a prepared raw query and returns the `SELECT` data. + * @example + * ``` + * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};` + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $queryRaw(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise; + + /** + * Performs a raw query and returns the `SELECT` data. + * Susceptible to SQL injections, see documentation. + * @example + * ``` + * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com') + * ``` + * + * Read more in our [docs](https://pris.ly/d/raw-queries). + */ + $queryRawUnsafe(query: string, ...values: any[]): Prisma.PrismaPromise; + + + /** + * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole. + * @example + * ``` + * const [george, bob, alice] = await prisma.$transaction([ + * prisma.user.create({ data: { name: 'George' } }), + * prisma.user.create({ data: { name: 'Bob' } }), + * prisma.user.create({ data: { name: 'Alice' } }), + * ]) + * ``` + * + * Read more in our [docs](https://www.prisma.io/docs/orm/prisma-client/queries/transactions). + */ + $transaction

[]>(arg: [...P], options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise> + + $transaction(fn: (prisma: Omit) => $Utils.JsPromise, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise + + $extends: $Extensions.ExtendsHook<"extends", Prisma.TypeMapCb, ExtArgs, $Utils.Call, { + extArgs: ExtArgs + }>> + + /** + * `prisma.externalAccount`: Exposes CRUD operations for the **ExternalAccount** model. + * Example usage: + * ```ts + * // Fetch zero or more ExternalAccounts + * const externalAccounts = await prisma.externalAccount.findMany() + * ``` + */ + get externalAccount(): Prisma.ExternalAccountDelegate; + + /** + * `prisma.userMFAMethod`: Exposes CRUD operations for the **UserMFAMethod** model. + * Example usage: + * ```ts + * // Fetch zero or more UserMFAMethods + * const userMFAMethods = await prisma.userMFAMethod.findMany() + * ``` + */ + get userMFAMethod(): Prisma.UserMFAMethodDelegate; + + /** + * `prisma.mFABackupCode`: Exposes CRUD operations for the **MFABackupCode** model. + * Example usage: + * ```ts + * // Fetch zero or more MFABackupCodes + * const mFABackupCodes = await prisma.mFABackupCode.findMany() + * ``` + */ + get mFABackupCode(): Prisma.MFABackupCodeDelegate; + + /** + * `prisma.device`: Exposes CRUD operations for the **Device** model. + * Example usage: + * ```ts + * // Fetch zero or more Devices + * const devices = await prisma.device.findMany() + * ``` + */ + get device(): Prisma.DeviceDelegate; + + /** + * `prisma.session`: Exposes CRUD operations for the **Session** model. + * Example usage: + * ```ts + * // Fetch zero or more Sessions + * const sessions = await prisma.session.findMany() + * ``` + */ + get session(): Prisma.SessionDelegate; + + /** + * `prisma.blogPost`: Exposes CRUD operations for the **BlogPost** model. + * Example usage: + * ```ts + * // Fetch zero or more BlogPosts + * const blogPosts = await prisma.blogPost.findMany() + * ``` + */ + get blogPost(): Prisma.BlogPostDelegate; + + /** + * `prisma.blogTag`: Exposes CRUD operations for the **BlogTag** model. + * Example usage: + * ```ts + * // Fetch zero or more BlogTags + * const blogTags = await prisma.blogTag.findMany() + * ``` + */ + get blogTag(): Prisma.BlogTagDelegate; + + /** + * `prisma.blogComment`: Exposes CRUD operations for the **BlogComment** model. + * Example usage: + * ```ts + * // Fetch zero or more BlogComments + * const blogComments = await prisma.blogComment.findMany() + * ``` + */ + get blogComment(): Prisma.BlogCommentDelegate; + + /** + * `prisma.event`: Exposes CRUD operations for the **Event** model. + * Example usage: + * ```ts + * // Fetch zero or more Events + * const events = await prisma.event.findMany() + * ``` + */ + get event(): Prisma.EventDelegate; + + /** + * `prisma.voucher`: Exposes CRUD operations for the **Voucher** model. + * Example usage: + * ```ts + * // Fetch zero or more Vouchers + * const vouchers = await prisma.voucher.findMany() + * ``` + */ + get voucher(): Prisma.VoucherDelegate; + + /** + * `prisma.review`: Exposes CRUD operations for the **Review** model. + * Example usage: + * ```ts + * // Fetch zero or more Reviews + * const reviews = await prisma.review.findMany() + * ``` + */ + get review(): Prisma.ReviewDelegate; + + /** + * `prisma.cart`: Exposes CRUD operations for the **Cart** model. + * Example usage: + * ```ts + * // Fetch zero or more Carts + * const carts = await prisma.cart.findMany() + * ``` + */ + get cart(): Prisma.CartDelegate; + + /** + * `prisma.cartItem`: Exposes CRUD operations for the **CartItem** model. + * Example usage: + * ```ts + * // Fetch zero or more CartItems + * const cartItems = await prisma.cartItem.findMany() + * ``` + */ + get cartItem(): Prisma.CartItemDelegate; + + /** + * `prisma.order`: Exposes CRUD operations for the **Order** model. + * Example usage: + * ```ts + * // Fetch zero or more Orders + * const orders = await prisma.order.findMany() + * ``` + */ + get order(): Prisma.OrderDelegate; + + /** + * `prisma.shippingAddress`: Exposes CRUD operations for the **ShippingAddress** model. + * Example usage: + * ```ts + * // Fetch zero or more ShippingAddresses + * const shippingAddresses = await prisma.shippingAddress.findMany() + * ``` + */ + get shippingAddress(): Prisma.ShippingAddressDelegate; + + /** + * `prisma.orderItem`: Exposes CRUD operations for the **OrderItem** model. + * Example usage: + * ```ts + * // Fetch zero or more OrderItems + * const orderItems = await prisma.orderItem.findMany() + * ``` + */ + get orderItem(): Prisma.OrderItemDelegate; + + /** + * `prisma.paymentTransaction`: Exposes CRUD operations for the **PaymentTransaction** model. + * Example usage: + * ```ts + * // Fetch zero or more PaymentTransactions + * const paymentTransactions = await prisma.paymentTransaction.findMany() + * ``` + */ + get paymentTransaction(): Prisma.PaymentTransactionDelegate; + + /** + * `prisma.product`: Exposes CRUD operations for the **Product** model. + * Example usage: + * ```ts + * // Fetch zero or more Products + * const products = await prisma.product.findMany() + * ``` + */ + get product(): Prisma.ProductDelegate; + + /** + * `prisma.productSizeStock`: Exposes CRUD operations for the **ProductSizeStock** model. + * Example usage: + * ```ts + * // Fetch zero or more ProductSizeStocks + * const productSizeStocks = await prisma.productSizeStock.findMany() + * ``` + */ + get productSizeStock(): Prisma.ProductSizeStockDelegate; + + /** + * `prisma.securityLog`: Exposes CRUD operations for the **SecurityLog** model. + * Example usage: + * ```ts + * // Fetch zero or more SecurityLogs + * const securityLogs = await prisma.securityLog.findMany() + * ``` + */ + get securityLog(): Prisma.SecurityLogDelegate; + + /** + * `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; + + /** + * `prisma.address`: Exposes CRUD operations for the **Address** model. + * Example usage: + * ```ts + * // Fetch zero or more Addresses + * const addresses = await prisma.address.findMany() + * ``` + */ + get address(): Prisma.AddressDelegate; +} + +export namespace Prisma { + export import DMMF = runtime.DMMF + + export type PrismaPromise = $Public.PrismaPromise + + /** + * Validator + */ + export import validator = runtime.Public.validator + + /** + * Prisma Errors + */ + export import PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError + export import PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError + export import PrismaClientRustPanicError = runtime.PrismaClientRustPanicError + export import PrismaClientInitializationError = runtime.PrismaClientInitializationError + export import PrismaClientValidationError = runtime.PrismaClientValidationError + + /** + * Re-export of sql-template-tag + */ + export import sql = runtime.sqltag + export import empty = runtime.empty + export import join = runtime.join + export import raw = runtime.raw + export import Sql = runtime.Sql + + + + /** + * Decimal.js + */ + export import Decimal = runtime.Decimal + + export type DecimalJsLike = runtime.DecimalJsLike + + /** + * Extensions + */ + export import Extension = $Extensions.UserArgs + export import getExtensionContext = runtime.Extensions.getExtensionContext + export import Args = $Public.Args + export import Payload = $Public.Payload + export import Result = $Public.Result + export import Exact = $Public.Exact + + /** + * Prisma Client JS version: 7.8.0 + * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a + */ + export type PrismaVersion = { + client: string + engine: string + } + + export const prismaVersion: PrismaVersion + + /** + * Utility Types + */ + + + export import Bytes = runtime.Bytes + export import JsonObject = runtime.JsonObject + export import JsonArray = runtime.JsonArray + export import JsonValue = runtime.JsonValue + export import InputJsonObject = runtime.InputJsonObject + export import InputJsonArray = runtime.InputJsonArray + export import InputJsonValue = runtime.InputJsonValue + + /** + * Types of the values used to represent different kinds of `null` values when working with JSON fields. + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + namespace NullTypes { + /** + * Type of `Prisma.DbNull`. + * + * You cannot use other instances of this class. Please use the `Prisma.DbNull` value. + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + class DbNull { + private DbNull: never + private constructor() + } + + /** + * Type of `Prisma.JsonNull`. + * + * You cannot use other instances of this class. Please use the `Prisma.JsonNull` value. + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + class JsonNull { + private JsonNull: never + private constructor() + } + + /** + * Type of `Prisma.AnyNull`. + * + * You cannot use other instances of this class. Please use the `Prisma.AnyNull` value. + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + class AnyNull { + private AnyNull: never + private constructor() + } + } + + /** + * Helper for filtering JSON entries that have `null` on the database (empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + export const DbNull: NullTypes.DbNull + + /** + * Helper for filtering JSON entries that have JSON `null` values (not empty on the db) + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + export const JsonNull: NullTypes.JsonNull + + /** + * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull` + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field + */ + export const AnyNull: NullTypes.AnyNull + + type SelectAndInclude = { + select: any + include: any + } + + type SelectAndOmit = { + select: any + omit: any + } + + /** + * Get the type of the value, that the Promise holds. + */ + export type PromiseType> = T extends PromiseLike ? U : T; + + /** + * Get the return type of a function which returns a Promise. + */ + export type PromiseReturnType $Utils.JsPromise> = PromiseType> + + /** + * From T, pick a set of properties whose keys are in the union K + */ + type Prisma__Pick = { + [P in K]: T[P]; + }; + + + export type Enumerable = T | Array; + + export type RequiredKeys = { + [K in keyof T]-?: {} extends Prisma__Pick ? never : K + }[keyof T] + + export type TruthyKeys = keyof { + [K in keyof T as T[K] extends false | undefined | null ? never : K]: K + } + + export type TrueKeys = TruthyKeys>> + + /** + * Subset + * @desc From `T` pick properties that exist in `U`. Simple version of Intersection + */ + export type Subset = { + [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 = { + [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 = { + [key in keyof T]: key extends keyof U ? T[key] : never + } & + K + + type Without = { [P in Exclude]?: 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 extends object ? + U extends object ? + (Without & U) | (Without & T) + : U : T + + + /** + * Is T a Record? + */ + type IsObject = T extends Array + ? 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 Array ? U : T + + /** + * From ts-toolbelt + */ + + type __Either = Omit & + { + // Merge all but K + [P in K]: Prisma__Pick // With K possibilities + }[K] + + type EitherStrict = Strict<__Either> + + type EitherLoose = ComputeRaw<__Either> + + type _Either< + O extends object, + K extends Key, + strict extends Boolean + > = { + 1: EitherStrict + 0: EitherLoose + }[strict] + + type Either< + O extends object, + K extends Key, + strict extends Boolean = 1 + > = O extends unknown ? _Either : never + + export type Union = any + + type PatchUndefined = { + [K in keyof O]: O[K] extends undefined ? At : O[K] + } & {} + + /** Helper Types for "Merge" **/ + export type IntersectOf = ( + U extends unknown ? (k: U) => void : never + ) extends (k: infer I) => void + ? I + : never + + export type Overwrite = { + [K in keyof O]: K extends keyof O1 ? O1[K] : O[K]; + } & {}; + + type _Merge = IntersectOf; + }>>; + + type Key = string | number | symbol; + type AtBasic = K extends keyof O ? O[K] : never; + type AtStrict = O[K & keyof O]; + type AtLoose = O extends unknown ? AtStrict : never; + export type At = { + 1: AtStrict; + 0: AtLoose; + }[strict]; + + export type ComputeRaw = A extends Function ? A : { + [K in keyof A]: A[K]; + } & {}; + + export type OptionalFlat = { + [K in keyof O]?: O[K]; + } & {}; + + type _Record = { + [P in K]: T; + }; + + // cause typescript not to expand types and preserve names + type NoExpand = T extends unknown ? T : never; + + // this type assumes the passed object is entirely optional + type AtLeast = 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 extends unknown ? U & OptionalFlat<_Record, keyof U>, never>> : never; + + export type Strict = ComputeRaw<_Strict>; + /** End Helper Types for "Merge" **/ + + export type Merge = ComputeRaw<_Merge>>; + + /** + A [[Boolean]] + */ + export type Boolean = True | False + + // /** + // 1 + // */ + export type True = 1 + + /** + 0 + */ + export type False = 0 + + export type Not = { + 0: 1 + 1: 0 + }[B] + + export type Extends = [A1] extends [never] + ? 0 // anything `never` is false + : A1 extends A2 + ? 1 + : 0 + + export type Has = Not< + Extends, U1> + > + + export type Or = { + 0: { + 0: 0 + 1: 1 + } + 1: { + 0: 1 + 1: 1 + } + }[B1][B2] + + export type Keys = U extends unknown ? keyof U : never + + type Cast = A extends B ? A : B; + + export const type: unique symbol; + + + + /** + * Used by group by + */ + + export type GetScalarType = O extends object ? { + [P in keyof T]: P extends keyof O + ? O[P] + : never + } : never + + type FieldPaths< + T, + U = Omit + > = IsObject extends True ? U : T + + type GetHavingFields = { + [K in keyof T]: Or< + Or, 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 extends object ? Merge> : never> + : never + : {} extends FieldPaths + ? never + : K + }[keyof T] + + /** + * Convert tuple to union + */ + type _TupleToUnion = T extends (infer E)[] ? E : never + type TupleToUnion = _TupleToUnion + type MaybeTupleToUnion = T extends any[] ? TupleToUnion : T + + /** + * Like `Pick`, but additionally can also accept an array of keys + */ + type PickEnumerable | keyof T> = Prisma__Pick> + + /** + * Exclude all keys with underscores + */ + type ExcludeUnderscoreKeys = T extends `_${string}` ? never : T + + + export type FieldRef = runtime.FieldRef + + type FieldRefInputType = Model extends never ? never : FieldRef + + + export const ModelName: { + ExternalAccount: 'ExternalAccount', + UserMFAMethod: 'UserMFAMethod', + MFABackupCode: 'MFABackupCode', + Device: 'Device', + Session: 'Session', + BlogPost: 'BlogPost', + BlogTag: 'BlogTag', + BlogComment: 'BlogComment', + Event: 'Event', + Voucher: 'Voucher', + Review: 'Review', + Cart: 'Cart', + CartItem: 'CartItem', + Order: 'Order', + ShippingAddress: 'ShippingAddress', + OrderItem: 'OrderItem', + PaymentTransaction: 'PaymentTransaction', + Product: 'Product', + ProductSizeStock: 'ProductSizeStock', + SecurityLog: 'SecurityLog', + User: 'User', + Address: 'Address' + }; + + export type ModelName = (typeof ModelName)[keyof typeof ModelName] + + + + interface TypeMapCb extends $Utils.Fn<{extArgs: $Extensions.InternalArgs }, $Utils.Record> { + returns: Prisma.TypeMap + } + + export type TypeMap = { + globalOmitOptions: { + omit: GlobalOmitOptions + } + meta: { + modelProps: "externalAccount" | "userMFAMethod" | "mFABackupCode" | "device" | "session" | "blogPost" | "blogTag" | "blogComment" | "event" | "voucher" | "review" | "cart" | "cartItem" | "order" | "shippingAddress" | "orderItem" | "paymentTransaction" | "product" | "productSizeStock" | "securityLog" | "user" | "address" + txIsolationLevel: Prisma.TransactionIsolationLevel + } + model: { + ExternalAccount: { + payload: Prisma.$ExternalAccountPayload + fields: Prisma.ExternalAccountFieldRefs + operations: { + findUnique: { + args: Prisma.ExternalAccountFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ExternalAccountFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ExternalAccountFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ExternalAccountFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ExternalAccountFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ExternalAccountCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ExternalAccountCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ExternalAccountCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ExternalAccountDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ExternalAccountUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ExternalAccountDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ExternalAccountUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ExternalAccountUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ExternalAccountUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ExternalAccountAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ExternalAccountGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ExternalAccountCountArgs + result: $Utils.Optional | number + } + } + } + UserMFAMethod: { + payload: Prisma.$UserMFAMethodPayload + fields: Prisma.UserMFAMethodFieldRefs + operations: { + findUnique: { + args: Prisma.UserMFAMethodFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.UserMFAMethodFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.UserMFAMethodFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.UserMFAMethodFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.UserMFAMethodFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.UserMFAMethodCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.UserMFAMethodCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.UserMFAMethodCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.UserMFAMethodDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.UserMFAMethodUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.UserMFAMethodDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.UserMFAMethodUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.UserMFAMethodUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.UserMFAMethodUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.UserMFAMethodAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.UserMFAMethodGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.UserMFAMethodCountArgs + result: $Utils.Optional | number + } + } + } + MFABackupCode: { + payload: Prisma.$MFABackupCodePayload + fields: Prisma.MFABackupCodeFieldRefs + operations: { + findUnique: { + args: Prisma.MFABackupCodeFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.MFABackupCodeFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.MFABackupCodeFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.MFABackupCodeFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.MFABackupCodeFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.MFABackupCodeCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.MFABackupCodeCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.MFABackupCodeCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.MFABackupCodeDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.MFABackupCodeUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.MFABackupCodeDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.MFABackupCodeUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.MFABackupCodeUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.MFABackupCodeUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.MFABackupCodeAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.MFABackupCodeGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.MFABackupCodeCountArgs + result: $Utils.Optional | number + } + } + } + Device: { + payload: Prisma.$DevicePayload + fields: Prisma.DeviceFieldRefs + operations: { + findUnique: { + args: Prisma.DeviceFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.DeviceFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.DeviceFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.DeviceFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.DeviceFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.DeviceCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.DeviceCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.DeviceCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.DeviceDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.DeviceUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.DeviceDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.DeviceUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.DeviceUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.DeviceUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.DeviceAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.DeviceGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.DeviceCountArgs + result: $Utils.Optional | number + } + } + } + Session: { + payload: Prisma.$SessionPayload + fields: Prisma.SessionFieldRefs + operations: { + findUnique: { + args: Prisma.SessionFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.SessionFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.SessionFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.SessionFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.SessionFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.SessionCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.SessionCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.SessionCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.SessionDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.SessionUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.SessionDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.SessionUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.SessionUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.SessionUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.SessionAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.SessionGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.SessionCountArgs + result: $Utils.Optional | number + } + } + } + BlogPost: { + payload: Prisma.$BlogPostPayload + fields: Prisma.BlogPostFieldRefs + operations: { + findUnique: { + args: Prisma.BlogPostFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.BlogPostFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.BlogPostFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.BlogPostFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.BlogPostFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.BlogPostCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.BlogPostCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.BlogPostCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.BlogPostDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.BlogPostUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.BlogPostDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.BlogPostUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.BlogPostUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.BlogPostUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.BlogPostAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.BlogPostGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.BlogPostCountArgs + result: $Utils.Optional | number + } + } + } + BlogTag: { + payload: Prisma.$BlogTagPayload + fields: Prisma.BlogTagFieldRefs + operations: { + findUnique: { + args: Prisma.BlogTagFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.BlogTagFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.BlogTagFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.BlogTagFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.BlogTagFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.BlogTagCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.BlogTagCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.BlogTagCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.BlogTagDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.BlogTagUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.BlogTagDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.BlogTagUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.BlogTagUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.BlogTagUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.BlogTagAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.BlogTagGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.BlogTagCountArgs + result: $Utils.Optional | number + } + } + } + BlogComment: { + payload: Prisma.$BlogCommentPayload + fields: Prisma.BlogCommentFieldRefs + operations: { + findUnique: { + args: Prisma.BlogCommentFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.BlogCommentFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.BlogCommentFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.BlogCommentFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.BlogCommentFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.BlogCommentCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.BlogCommentCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.BlogCommentCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.BlogCommentDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.BlogCommentUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.BlogCommentDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.BlogCommentUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.BlogCommentUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.BlogCommentUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.BlogCommentAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.BlogCommentGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.BlogCommentCountArgs + result: $Utils.Optional | number + } + } + } + Event: { + payload: Prisma.$EventPayload + fields: Prisma.EventFieldRefs + operations: { + findUnique: { + args: Prisma.EventFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.EventFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.EventFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.EventFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.EventFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.EventCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.EventCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.EventCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.EventDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.EventUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.EventDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.EventUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.EventUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.EventUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.EventAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.EventGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.EventCountArgs + result: $Utils.Optional | number + } + } + } + Voucher: { + payload: Prisma.$VoucherPayload + fields: Prisma.VoucherFieldRefs + operations: { + findUnique: { + args: Prisma.VoucherFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.VoucherFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.VoucherFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.VoucherFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.VoucherFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.VoucherCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.VoucherCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.VoucherCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.VoucherDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.VoucherUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.VoucherDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.VoucherUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.VoucherUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.VoucherUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.VoucherAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.VoucherGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.VoucherCountArgs + result: $Utils.Optional | number + } + } + } + Review: { + payload: Prisma.$ReviewPayload + fields: Prisma.ReviewFieldRefs + operations: { + findUnique: { + args: Prisma.ReviewFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ReviewFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ReviewFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ReviewFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ReviewFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ReviewCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ReviewCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ReviewCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ReviewDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ReviewUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ReviewDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ReviewUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ReviewUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ReviewUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ReviewAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ReviewGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ReviewCountArgs + result: $Utils.Optional | number + } + } + } + Cart: { + payload: Prisma.$CartPayload + fields: Prisma.CartFieldRefs + operations: { + findUnique: { + args: Prisma.CartFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.CartFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.CartFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.CartFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.CartFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.CartCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.CartCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.CartCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.CartDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.CartUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.CartDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.CartUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.CartUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.CartUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.CartAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.CartGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.CartCountArgs + result: $Utils.Optional | number + } + } + } + CartItem: { + payload: Prisma.$CartItemPayload + fields: Prisma.CartItemFieldRefs + operations: { + findUnique: { + args: Prisma.CartItemFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.CartItemFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.CartItemFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.CartItemFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.CartItemFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.CartItemCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.CartItemCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.CartItemCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.CartItemDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.CartItemUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.CartItemDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.CartItemUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.CartItemUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.CartItemUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.CartItemAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.CartItemGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.CartItemCountArgs + result: $Utils.Optional | number + } + } + } + Order: { + payload: Prisma.$OrderPayload + fields: Prisma.OrderFieldRefs + operations: { + findUnique: { + args: Prisma.OrderFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.OrderFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.OrderFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.OrderFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.OrderFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.OrderCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.OrderCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.OrderCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.OrderDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.OrderUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.OrderDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.OrderUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.OrderUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.OrderUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.OrderAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.OrderGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.OrderCountArgs + result: $Utils.Optional | number + } + } + } + ShippingAddress: { + payload: Prisma.$ShippingAddressPayload + fields: Prisma.ShippingAddressFieldRefs + operations: { + findUnique: { + args: Prisma.ShippingAddressFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ShippingAddressFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ShippingAddressFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ShippingAddressFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ShippingAddressFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ShippingAddressCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ShippingAddressCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ShippingAddressCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ShippingAddressDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ShippingAddressUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ShippingAddressDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ShippingAddressUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ShippingAddressUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ShippingAddressUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ShippingAddressAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ShippingAddressGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ShippingAddressCountArgs + result: $Utils.Optional | number + } + } + } + OrderItem: { + payload: Prisma.$OrderItemPayload + fields: Prisma.OrderItemFieldRefs + operations: { + findUnique: { + args: Prisma.OrderItemFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.OrderItemFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.OrderItemFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.OrderItemFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.OrderItemFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.OrderItemCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.OrderItemCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.OrderItemCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.OrderItemDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.OrderItemUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.OrderItemDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.OrderItemUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.OrderItemUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.OrderItemUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.OrderItemAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.OrderItemGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.OrderItemCountArgs + result: $Utils.Optional | number + } + } + } + PaymentTransaction: { + payload: Prisma.$PaymentTransactionPayload + fields: Prisma.PaymentTransactionFieldRefs + operations: { + findUnique: { + args: Prisma.PaymentTransactionFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.PaymentTransactionFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.PaymentTransactionFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.PaymentTransactionFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.PaymentTransactionFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.PaymentTransactionCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.PaymentTransactionCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.PaymentTransactionCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.PaymentTransactionDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.PaymentTransactionUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.PaymentTransactionDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.PaymentTransactionUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.PaymentTransactionUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.PaymentTransactionUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.PaymentTransactionAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.PaymentTransactionGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.PaymentTransactionCountArgs + result: $Utils.Optional | number + } + } + } + Product: { + payload: Prisma.$ProductPayload + fields: Prisma.ProductFieldRefs + operations: { + findUnique: { + args: Prisma.ProductFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ProductFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ProductFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ProductFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ProductFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ProductCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ProductCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ProductCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ProductDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ProductUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ProductDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ProductUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ProductUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ProductUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ProductAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ProductGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ProductCountArgs + result: $Utils.Optional | number + } + } + } + ProductSizeStock: { + payload: Prisma.$ProductSizeStockPayload + fields: Prisma.ProductSizeStockFieldRefs + operations: { + findUnique: { + args: Prisma.ProductSizeStockFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ProductSizeStockFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ProductSizeStockFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ProductSizeStockFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ProductSizeStockFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ProductSizeStockCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ProductSizeStockCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ProductSizeStockCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ProductSizeStockDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ProductSizeStockUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ProductSizeStockDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ProductSizeStockUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ProductSizeStockUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ProductSizeStockUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ProductSizeStockAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ProductSizeStockGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ProductSizeStockCountArgs + result: $Utils.Optional | number + } + } + } + SecurityLog: { + payload: Prisma.$SecurityLogPayload + fields: Prisma.SecurityLogFieldRefs + operations: { + findUnique: { + args: Prisma.SecurityLogFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.SecurityLogFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.SecurityLogFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.SecurityLogFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.SecurityLogFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.SecurityLogCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.SecurityLogCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.SecurityLogCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.SecurityLogDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.SecurityLogUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.SecurityLogDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.SecurityLogUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.SecurityLogUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.SecurityLogUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.SecurityLogAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.SecurityLogGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.SecurityLogCountArgs + result: $Utils.Optional | number + } + } + } + User: { + payload: Prisma.$UserPayload + fields: Prisma.UserFieldRefs + operations: { + findUnique: { + args: Prisma.UserFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.UserFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.UserFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.UserFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.UserFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.UserCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.UserCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.UserCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.UserDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.UserUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.UserDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.UserUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.UserUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.UserUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.UserAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.UserGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.UserCountArgs + result: $Utils.Optional | number + } + } + } + Address: { + payload: Prisma.$AddressPayload + fields: Prisma.AddressFieldRefs + operations: { + findUnique: { + args: Prisma.AddressFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.AddressFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.AddressFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.AddressFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.AddressFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.AddressCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.AddressCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.AddressCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.AddressDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.AddressUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.AddressDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.AddressUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.AddressUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.AddressUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.AddressAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.AddressGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.AddressCountArgs + result: $Utils.Optional | number + } + } + } + } + } & { + other: { + payload: any + operations: { + $executeRaw: { + args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]], + result: any + } + $executeRawUnsafe: { + args: [query: string, ...values: any[]], + result: any + } + $queryRaw: { + args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]], + result: any + } + $queryRawUnsafe: { + args: [query: string, ...values: any[]], + result: any + } + } + } + } + export const defineExtension: $Extensions.ExtendsHook<"define", Prisma.TypeMapCb, $Extensions.DefaultArgs> + export type DefaultPrismaClient = PrismaClient + export type ErrorFormat = 'pretty' | 'colorless' | 'minimal' + export interface PrismaClientOptions { + /** + * @default "colorless" + */ + errorFormat?: ErrorFormat + /** + * @example + * ``` + * // Shorthand for `emit: 'stdout'` + * log: ['query', 'info', 'warn', 'error'] + * + * // Emit as events only + * log: [ + * { emit: 'event', level: 'query' }, + * { emit: 'event', level: 'info' }, + * { emit: 'event', level: 'warn' } + * { emit: 'event', level: 'error' } + * ] + * + * / Emit as events and log to stdout + * og: [ + * { emit: 'stdout', level: 'query' }, + * { emit: 'stdout', level: 'info' }, + * { emit: 'stdout', level: 'warn' } + * { emit: 'stdout', level: 'error' } + * + * ``` + * Read more in our [docs](https://pris.ly/d/logging). + */ + log?: (LogLevel | LogDefinition)[] + /** + * The default values for transactionOptions + * maxWait ?= 2000 + * timeout ?= 5000 + */ + transactionOptions?: { + maxWait?: number + timeout?: number + isolationLevel?: Prisma.TransactionIsolationLevel + } + /** + * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale` + */ + adapter?: runtime.SqlDriverAdapterFactory + /** + * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database. + */ + accelerateUrl?: string + /** + * Global configuration for omitting model fields by default. + * + * @example + * ``` + * const prisma = new PrismaClient({ + * omit: { + * user: { + * password: true + * } + * } + * }) + * ``` + */ + omit?: Prisma.GlobalOmitConfig + /** + * SQL commenter plugins that add metadata to SQL queries as comments. + * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/ + * + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter, + * comments: [ + * traceContext(), + * queryInsights(), + * ], + * }) + * ``` + */ + comments?: runtime.SqlCommenterPlugin[] + } + export type GlobalOmitConfig = { + externalAccount?: ExternalAccountOmit + userMFAMethod?: UserMFAMethodOmit + mFABackupCode?: MFABackupCodeOmit + device?: DeviceOmit + session?: SessionOmit + blogPost?: BlogPostOmit + blogTag?: BlogTagOmit + blogComment?: BlogCommentOmit + event?: EventOmit + voucher?: VoucherOmit + review?: ReviewOmit + cart?: CartOmit + cartItem?: CartItemOmit + order?: OrderOmit + shippingAddress?: ShippingAddressOmit + orderItem?: OrderItemOmit + paymentTransaction?: PaymentTransactionOmit + product?: ProductOmit + productSizeStock?: ProductSizeStockOmit + securityLog?: SecurityLogOmit + user?: UserOmit + address?: AddressOmit + } + + /* Types for Logging */ + export type LogLevel = 'info' | 'query' | 'warn' | 'error' + export type LogDefinition = { + level: LogLevel + emit: 'stdout' | 'event' + } + + export type CheckIsLogLevel = T extends LogLevel ? T : never; + + export type GetLogType = CheckIsLogLevel< + T extends LogDefinition ? T['level'] : T + >; + + export type GetEvents = T extends Array + ? GetLogType + : never; + + export type QueryEvent = { + timestamp: Date + query: string + params: string + duration: number + target: string + } + + export type LogEvent = { + timestamp: Date + message: string + target: string + } + /* End Types for Logging */ + + + export type PrismaAction = + | 'findUnique' + | 'findUniqueOrThrow' + | 'findMany' + | 'findFirst' + | 'findFirstOrThrow' + | 'create' + | 'createMany' + | 'createManyAndReturn' + | 'update' + | 'updateMany' + | 'updateManyAndReturn' + | 'upsert' + | 'delete' + | 'deleteMany' + | 'executeRaw' + | 'queryRaw' + | 'aggregate' + | 'count' + | 'runCommandRaw' + | 'findRaw' + | 'groupBy' + + // tested in getLogLevel.test.ts + export function getLogLevel(log: Array): LogLevel | undefined; + + /** + * `PrismaClient` proxy available in interactive transactions. + */ + export type TransactionClient = Omit + + export type Datasource = { + url?: string + } + + /** + * Count Types + */ + + + /** + * Count Type BlogPostCountOutputType + */ + + export type BlogPostCountOutputType = { + tags: number + comments: number + } + + export type BlogPostCountOutputTypeSelect = { + tags?: boolean | BlogPostCountOutputTypeCountTagsArgs + comments?: boolean | BlogPostCountOutputTypeCountCommentsArgs + } + + // Custom InputTypes + /** + * BlogPostCountOutputType without action + */ + export type BlogPostCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the BlogPostCountOutputType + */ + select?: BlogPostCountOutputTypeSelect | null + } + + /** + * BlogPostCountOutputType without action + */ + export type BlogPostCountOutputTypeCountTagsArgs = { + where?: BlogTagWhereInput + } + + /** + * BlogPostCountOutputType without action + */ + export type BlogPostCountOutputTypeCountCommentsArgs = { + where?: BlogCommentWhereInput + } + + + /** + * Count Type BlogTagCountOutputType + */ + + export type BlogTagCountOutputType = { + posts: number + } + + export type BlogTagCountOutputTypeSelect = { + posts?: boolean | BlogTagCountOutputTypeCountPostsArgs + } + + // Custom InputTypes + /** + * BlogTagCountOutputType without action + */ + export type BlogTagCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the BlogTagCountOutputType + */ + select?: BlogTagCountOutputTypeSelect | null + } + + /** + * BlogTagCountOutputType without action + */ + export type BlogTagCountOutputTypeCountPostsArgs = { + where?: BlogPostWhereInput + } + + + /** + * Count Type BlogCommentCountOutputType + */ + + export type BlogCommentCountOutputType = { + replies: number + } + + export type BlogCommentCountOutputTypeSelect = { + replies?: boolean | BlogCommentCountOutputTypeCountRepliesArgs + } + + // Custom InputTypes + /** + * BlogCommentCountOutputType without action + */ + export type BlogCommentCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the BlogCommentCountOutputType + */ + select?: BlogCommentCountOutputTypeSelect | null + } + + /** + * BlogCommentCountOutputType without action + */ + export type BlogCommentCountOutputTypeCountRepliesArgs = { + where?: BlogCommentWhereInput + } + + + /** + * Count Type CartCountOutputType + */ + + export type CartCountOutputType = { + items: number + } + + export type CartCountOutputTypeSelect = { + items?: boolean | CartCountOutputTypeCountItemsArgs + } + + // Custom InputTypes + /** + * CartCountOutputType without action + */ + export type CartCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the CartCountOutputType + */ + select?: CartCountOutputTypeSelect | null + } + + /** + * CartCountOutputType without action + */ + export type CartCountOutputTypeCountItemsArgs = { + where?: CartItemWhereInput + } + + + /** + * Count Type OrderCountOutputType + */ + + export type OrderCountOutputType = { + items: number + } + + export type OrderCountOutputTypeSelect = { + items?: boolean | OrderCountOutputTypeCountItemsArgs + } + + // Custom InputTypes + /** + * OrderCountOutputType without action + */ + export type OrderCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the OrderCountOutputType + */ + select?: OrderCountOutputTypeSelect | null + } + + /** + * OrderCountOutputType without action + */ + export type OrderCountOutputTypeCountItemsArgs = { + where?: OrderItemWhereInput + } + + + /** + * Count Type ProductCountOutputType + */ + + export type ProductCountOutputType = { + sizeStocks: number + cartItems: number + orderItems: number + reviews: number + } + + export type ProductCountOutputTypeSelect = { + sizeStocks?: boolean | ProductCountOutputTypeCountSizeStocksArgs + cartItems?: boolean | ProductCountOutputTypeCountCartItemsArgs + orderItems?: boolean | ProductCountOutputTypeCountOrderItemsArgs + reviews?: boolean | ProductCountOutputTypeCountReviewsArgs + } + + // Custom InputTypes + /** + * ProductCountOutputType without action + */ + export type ProductCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the ProductCountOutputType + */ + select?: ProductCountOutputTypeSelect | null + } + + /** + * ProductCountOutputType without action + */ + export type ProductCountOutputTypeCountSizeStocksArgs = { + where?: ProductSizeStockWhereInput + } + + /** + * ProductCountOutputType without action + */ + export type ProductCountOutputTypeCountCartItemsArgs = { + where?: CartItemWhereInput + } + + /** + * ProductCountOutputType without action + */ + export type ProductCountOutputTypeCountOrderItemsArgs = { + where?: OrderItemWhereInput + } + + /** + * ProductCountOutputType without action + */ + export type ProductCountOutputTypeCountReviewsArgs = { + where?: ReviewWhereInput + } + + + /** + * Count Type UserCountOutputType + */ + + export type UserCountOutputType = { + addresses: number + orders: number + reviews: number + externalAccounts: number + mfaMethods: number + mfaBackupCodes: number + devices: number + sessions: number + blogPosts: number + blogComments: number + } + + export type UserCountOutputTypeSelect = { + addresses?: boolean | UserCountOutputTypeCountAddressesArgs + orders?: boolean | UserCountOutputTypeCountOrdersArgs + reviews?: boolean | UserCountOutputTypeCountReviewsArgs + externalAccounts?: boolean | UserCountOutputTypeCountExternalAccountsArgs + mfaMethods?: boolean | UserCountOutputTypeCountMfaMethodsArgs + mfaBackupCodes?: boolean | UserCountOutputTypeCountMfaBackupCodesArgs + devices?: boolean | UserCountOutputTypeCountDevicesArgs + sessions?: boolean | UserCountOutputTypeCountSessionsArgs + blogPosts?: boolean | UserCountOutputTypeCountBlogPostsArgs + blogComments?: boolean | UserCountOutputTypeCountBlogCommentsArgs + } + + // Custom InputTypes + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeDefaultArgs = { + /** + * Select specific fields to fetch from the UserCountOutputType + */ + select?: UserCountOutputTypeSelect | null + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountAddressesArgs = { + where?: AddressWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountOrdersArgs = { + where?: OrderWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountReviewsArgs = { + where?: ReviewWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountExternalAccountsArgs = { + where?: ExternalAccountWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountMfaMethodsArgs = { + where?: UserMFAMethodWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountMfaBackupCodesArgs = { + where?: MFABackupCodeWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountDevicesArgs = { + where?: DeviceWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountSessionsArgs = { + where?: SessionWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountBlogPostsArgs = { + where?: BlogPostWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountBlogCommentsArgs = { + where?: BlogCommentWhereInput + } + + + /** + * Models + */ + + /** + * Model ExternalAccount + */ + + export type AggregateExternalAccount = { + _count: ExternalAccountCountAggregateOutputType | null + _min: ExternalAccountMinAggregateOutputType | null + _max: ExternalAccountMaxAggregateOutputType | null + } + + export type ExternalAccountMinAggregateOutputType = { + id: string | null + provider: $Enums.OAuthProvider | null + providerId: string | null + providerEmail: string | null + accessToken: string | null + refreshToken: string | null + expiresAt: Date | null + userId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ExternalAccountMaxAggregateOutputType = { + id: string | null + provider: $Enums.OAuthProvider | null + providerId: string | null + providerEmail: string | null + accessToken: string | null + refreshToken: string | null + expiresAt: Date | null + userId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ExternalAccountCountAggregateOutputType = { + id: number + provider: number + providerId: number + providerEmail: number + accessToken: number + refreshToken: number + expiresAt: number + userId: number + createdAt: number + updatedAt: number + _all: number + } + + + export type ExternalAccountMinAggregateInputType = { + id?: true + provider?: true + providerId?: true + providerEmail?: true + accessToken?: true + refreshToken?: true + expiresAt?: true + userId?: true + createdAt?: true + updatedAt?: true + } + + export type ExternalAccountMaxAggregateInputType = { + id?: true + provider?: true + providerId?: true + providerEmail?: true + accessToken?: true + refreshToken?: true + expiresAt?: true + userId?: true + createdAt?: true + updatedAt?: true + } + + export type ExternalAccountCountAggregateInputType = { + id?: true + provider?: true + providerId?: true + providerEmail?: true + accessToken?: true + refreshToken?: true + expiresAt?: true + userId?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type ExternalAccountAggregateArgs = { + /** + * Filter which ExternalAccount to aggregate. + */ + where?: ExternalAccountWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ExternalAccounts to fetch. + */ + orderBy?: ExternalAccountOrderByWithRelationInput | ExternalAccountOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ExternalAccountWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ExternalAccounts 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` ExternalAccounts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ExternalAccounts + **/ + _count?: true | ExternalAccountCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ExternalAccountMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ExternalAccountMaxAggregateInputType + } + + export type GetExternalAccountAggregateType = { + [P in keyof T & keyof AggregateExternalAccount]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ExternalAccountGroupByArgs = { + where?: ExternalAccountWhereInput + orderBy?: ExternalAccountOrderByWithAggregationInput | ExternalAccountOrderByWithAggregationInput[] + by: ExternalAccountScalarFieldEnum[] | ExternalAccountScalarFieldEnum + having?: ExternalAccountScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ExternalAccountCountAggregateInputType | true + _min?: ExternalAccountMinAggregateInputType + _max?: ExternalAccountMaxAggregateInputType + } + + export type ExternalAccountGroupByOutputType = { + id: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail: string | null + accessToken: string | null + refreshToken: string | null + expiresAt: Date | null + userId: string + createdAt: Date + updatedAt: Date + _count: ExternalAccountCountAggregateOutputType | null + _min: ExternalAccountMinAggregateOutputType | null + _max: ExternalAccountMaxAggregateOutputType | null + } + + type GetExternalAccountGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ExternalAccountGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ExternalAccountSelect = $Extensions.GetSelect<{ + id?: boolean + provider?: boolean + providerId?: boolean + providerEmail?: boolean + accessToken?: boolean + refreshToken?: boolean + expiresAt?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["externalAccount"]> + + export type ExternalAccountSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + provider?: boolean + providerId?: boolean + providerEmail?: boolean + accessToken?: boolean + refreshToken?: boolean + expiresAt?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["externalAccount"]> + + export type ExternalAccountSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + provider?: boolean + providerId?: boolean + providerEmail?: boolean + accessToken?: boolean + refreshToken?: boolean + expiresAt?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["externalAccount"]> + + export type ExternalAccountSelectScalar = { + id?: boolean + provider?: boolean + providerId?: boolean + providerEmail?: boolean + accessToken?: boolean + refreshToken?: boolean + expiresAt?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type ExternalAccountOmit = $Extensions.GetOmit<"id" | "provider" | "providerId" | "providerEmail" | "accessToken" | "refreshToken" | "expiresAt" | "userId" | "createdAt" | "updatedAt", ExtArgs["result"]["externalAccount"]> + export type ExternalAccountInclude = { + user?: boolean | UserDefaultArgs + } + export type ExternalAccountIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type ExternalAccountIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $ExternalAccountPayload = { + name: "ExternalAccount" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail: string | null + accessToken: string | null + refreshToken: string | null + expiresAt: Date | null + userId: string + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["externalAccount"]> + composites: {} + } + + type ExternalAccountGetPayload = $Result.GetResult + + type ExternalAccountCountArgs = + Omit & { + select?: ExternalAccountCountAggregateInputType | true + } + + export interface ExternalAccountDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ExternalAccount'], meta: { name: 'ExternalAccount' } } + /** + * Find zero or one ExternalAccount that matches the filter. + * @param {ExternalAccountFindUniqueArgs} args - Arguments to find a ExternalAccount + * @example + * // Get one ExternalAccount + * const externalAccount = await prisma.externalAccount.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ExternalAccount that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ExternalAccountFindUniqueOrThrowArgs} args - Arguments to find a ExternalAccount + * @example + * // Get one ExternalAccount + * const externalAccount = await prisma.externalAccount.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ExternalAccount 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 {ExternalAccountFindFirstArgs} args - Arguments to find a ExternalAccount + * @example + * // Get one ExternalAccount + * const externalAccount = await prisma.externalAccount.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ExternalAccount 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 {ExternalAccountFindFirstOrThrowArgs} args - Arguments to find a ExternalAccount + * @example + * // Get one ExternalAccount + * const externalAccount = await prisma.externalAccount.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ExternalAccounts 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 {ExternalAccountFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ExternalAccounts + * const externalAccounts = await prisma.externalAccount.findMany() + * + * // Get first 10 ExternalAccounts + * const externalAccounts = await prisma.externalAccount.findMany({ take: 10 }) + * + * // Only select the `id` + * const externalAccountWithIdOnly = await prisma.externalAccount.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ExternalAccount. + * @param {ExternalAccountCreateArgs} args - Arguments to create a ExternalAccount. + * @example + * // Create one ExternalAccount + * const ExternalAccount = await prisma.externalAccount.create({ + * data: { + * // ... data to create a ExternalAccount + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ExternalAccounts. + * @param {ExternalAccountCreateManyArgs} args - Arguments to create many ExternalAccounts. + * @example + * // Create many ExternalAccounts + * const externalAccount = await prisma.externalAccount.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many ExternalAccounts and returns the data saved in the database. + * @param {ExternalAccountCreateManyAndReturnArgs} args - Arguments to create many ExternalAccounts. + * @example + * // Create many ExternalAccounts + * const externalAccount = await prisma.externalAccount.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many ExternalAccounts and only return the `id` + * const externalAccountWithIdOnly = await prisma.externalAccount.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a ExternalAccount. + * @param {ExternalAccountDeleteArgs} args - Arguments to delete one ExternalAccount. + * @example + * // Delete one ExternalAccount + * const ExternalAccount = await prisma.externalAccount.delete({ + * where: { + * // ... filter to delete one ExternalAccount + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ExternalAccount. + * @param {ExternalAccountUpdateArgs} args - Arguments to update one ExternalAccount. + * @example + * // Update one ExternalAccount + * const externalAccount = await prisma.externalAccount.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ExternalAccounts. + * @param {ExternalAccountDeleteManyArgs} args - Arguments to filter ExternalAccounts to delete. + * @example + * // Delete a few ExternalAccounts + * const { count } = await prisma.externalAccount.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ExternalAccounts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ExternalAccountUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ExternalAccounts + * const externalAccount = await prisma.externalAccount.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ExternalAccounts and returns the data updated in the database. + * @param {ExternalAccountUpdateManyAndReturnArgs} args - Arguments to update many ExternalAccounts. + * @example + * // Update many ExternalAccounts + * const externalAccount = await prisma.externalAccount.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more ExternalAccounts and only return the `id` + * const externalAccountWithIdOnly = await prisma.externalAccount.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one ExternalAccount. + * @param {ExternalAccountUpsertArgs} args - Arguments to update or create a ExternalAccount. + * @example + * // Update or create a ExternalAccount + * const externalAccount = await prisma.externalAccount.upsert({ + * create: { + * // ... data to create a ExternalAccount + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ExternalAccount we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ExternalAccountClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ExternalAccounts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ExternalAccountCountArgs} args - Arguments to filter ExternalAccounts to count. + * @example + * // Count the number of ExternalAccounts + * const count = await prisma.externalAccount.count({ + * where: { + * // ... the filter for the ExternalAccounts we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ExternalAccount. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ExternalAccountAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by ExternalAccount. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ExternalAccountGroupByArgs} 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 ExternalAccountGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ExternalAccountGroupByArgs['orderBy'] } + : { orderBy?: ExternalAccountGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetExternalAccountGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the ExternalAccount model + */ + readonly fields: ExternalAccountFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for ExternalAccount. + * 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__ExternalAccountClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the ExternalAccount model + */ + interface ExternalAccountFieldRefs { + readonly id: FieldRef<"ExternalAccount", 'String'> + readonly provider: FieldRef<"ExternalAccount", 'OAuthProvider'> + readonly providerId: FieldRef<"ExternalAccount", 'String'> + readonly providerEmail: FieldRef<"ExternalAccount", 'String'> + readonly accessToken: FieldRef<"ExternalAccount", 'String'> + readonly refreshToken: FieldRef<"ExternalAccount", 'String'> + readonly expiresAt: FieldRef<"ExternalAccount", 'DateTime'> + readonly userId: FieldRef<"ExternalAccount", 'String'> + readonly createdAt: FieldRef<"ExternalAccount", 'DateTime'> + readonly updatedAt: FieldRef<"ExternalAccount", 'DateTime'> + } + + + // Custom InputTypes + /** + * ExternalAccount findUnique + */ + export type ExternalAccountFindUniqueArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter, which ExternalAccount to fetch. + */ + where: ExternalAccountWhereUniqueInput + } + + /** + * ExternalAccount findUniqueOrThrow + */ + export type ExternalAccountFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter, which ExternalAccount to fetch. + */ + where: ExternalAccountWhereUniqueInput + } + + /** + * ExternalAccount findFirst + */ + export type ExternalAccountFindFirstArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter, which ExternalAccount to fetch. + */ + where?: ExternalAccountWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ExternalAccounts to fetch. + */ + orderBy?: ExternalAccountOrderByWithRelationInput | ExternalAccountOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ExternalAccounts. + */ + cursor?: ExternalAccountWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ExternalAccounts 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` ExternalAccounts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ExternalAccounts. + */ + distinct?: ExternalAccountScalarFieldEnum | ExternalAccountScalarFieldEnum[] + } + + /** + * ExternalAccount findFirstOrThrow + */ + export type ExternalAccountFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter, which ExternalAccount to fetch. + */ + where?: ExternalAccountWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ExternalAccounts to fetch. + */ + orderBy?: ExternalAccountOrderByWithRelationInput | ExternalAccountOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ExternalAccounts. + */ + cursor?: ExternalAccountWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ExternalAccounts 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` ExternalAccounts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ExternalAccounts. + */ + distinct?: ExternalAccountScalarFieldEnum | ExternalAccountScalarFieldEnum[] + } + + /** + * ExternalAccount findMany + */ + export type ExternalAccountFindManyArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter, which ExternalAccounts to fetch. + */ + where?: ExternalAccountWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ExternalAccounts to fetch. + */ + orderBy?: ExternalAccountOrderByWithRelationInput | ExternalAccountOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ExternalAccounts. + */ + cursor?: ExternalAccountWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ExternalAccounts 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` ExternalAccounts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ExternalAccounts. + */ + distinct?: ExternalAccountScalarFieldEnum | ExternalAccountScalarFieldEnum[] + } + + /** + * ExternalAccount create + */ + export type ExternalAccountCreateArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * The data needed to create a ExternalAccount. + */ + data: XOR + } + + /** + * ExternalAccount createMany + */ + export type ExternalAccountCreateManyArgs = { + /** + * The data used to create many ExternalAccounts. + */ + data: ExternalAccountCreateManyInput | ExternalAccountCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * ExternalAccount createManyAndReturn + */ + export type ExternalAccountCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelectCreateManyAndReturn | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * The data used to create many ExternalAccounts. + */ + data: ExternalAccountCreateManyInput | ExternalAccountCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountIncludeCreateManyAndReturn | null + } + + /** + * ExternalAccount update + */ + export type ExternalAccountUpdateArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * The data needed to update a ExternalAccount. + */ + data: XOR + /** + * Choose, which ExternalAccount to update. + */ + where: ExternalAccountWhereUniqueInput + } + + /** + * ExternalAccount updateMany + */ + export type ExternalAccountUpdateManyArgs = { + /** + * The data used to update ExternalAccounts. + */ + data: XOR + /** + * Filter which ExternalAccounts to update + */ + where?: ExternalAccountWhereInput + /** + * Limit how many ExternalAccounts to update. + */ + limit?: number + } + + /** + * ExternalAccount updateManyAndReturn + */ + export type ExternalAccountUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * The data used to update ExternalAccounts. + */ + data: XOR + /** + * Filter which ExternalAccounts to update + */ + where?: ExternalAccountWhereInput + /** + * Limit how many ExternalAccounts to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountIncludeUpdateManyAndReturn | null + } + + /** + * ExternalAccount upsert + */ + export type ExternalAccountUpsertArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * The filter to search for the ExternalAccount to update in case it exists. + */ + where: ExternalAccountWhereUniqueInput + /** + * In case the ExternalAccount found by the `where` argument doesn't exist, create a new ExternalAccount with this data. + */ + create: XOR + /** + * In case the ExternalAccount was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * ExternalAccount delete + */ + export type ExternalAccountDeleteArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + /** + * Filter which ExternalAccount to delete. + */ + where: ExternalAccountWhereUniqueInput + } + + /** + * ExternalAccount deleteMany + */ + export type ExternalAccountDeleteManyArgs = { + /** + * Filter which ExternalAccounts to delete + */ + where?: ExternalAccountWhereInput + /** + * Limit how many ExternalAccounts to delete. + */ + limit?: number + } + + /** + * ExternalAccount without action + */ + export type ExternalAccountDefaultArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + } + + + /** + * Model UserMFAMethod + */ + + export type AggregateUserMFAMethod = { + _count: UserMFAMethodCountAggregateOutputType | null + _min: UserMFAMethodMinAggregateOutputType | null + _max: UserMFAMethodMaxAggregateOutputType | null + } + + export type UserMFAMethodMinAggregateOutputType = { + id: string | null + methodType: $Enums.MFAMethod | null + secret: string | null + phone: string | null + isActive: boolean | null + isVerified: boolean | null + userId: string | null + createdAt: Date | null + updatedAt: Date | null + lastUsedAt: Date | null + } + + export type UserMFAMethodMaxAggregateOutputType = { + id: string | null + methodType: $Enums.MFAMethod | null + secret: string | null + phone: string | null + isActive: boolean | null + isVerified: boolean | null + userId: string | null + createdAt: Date | null + updatedAt: Date | null + lastUsedAt: Date | null + } + + export type UserMFAMethodCountAggregateOutputType = { + id: number + methodType: number + secret: number + phone: number + isActive: number + isVerified: number + userId: number + createdAt: number + updatedAt: number + lastUsedAt: number + _all: number + } + + + export type UserMFAMethodMinAggregateInputType = { + id?: true + methodType?: true + secret?: true + phone?: true + isActive?: true + isVerified?: true + userId?: true + createdAt?: true + updatedAt?: true + lastUsedAt?: true + } + + export type UserMFAMethodMaxAggregateInputType = { + id?: true + methodType?: true + secret?: true + phone?: true + isActive?: true + isVerified?: true + userId?: true + createdAt?: true + updatedAt?: true + lastUsedAt?: true + } + + export type UserMFAMethodCountAggregateInputType = { + id?: true + methodType?: true + secret?: true + phone?: true + isActive?: true + isVerified?: true + userId?: true + createdAt?: true + updatedAt?: true + lastUsedAt?: true + _all?: true + } + + export type UserMFAMethodAggregateArgs = { + /** + * Filter which UserMFAMethod to aggregate. + */ + where?: UserMFAMethodWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserMFAMethods to fetch. + */ + orderBy?: UserMFAMethodOrderByWithRelationInput | UserMFAMethodOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: UserMFAMethodWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserMFAMethods 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` UserMFAMethods. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned UserMFAMethods + **/ + _count?: true | UserMFAMethodCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: UserMFAMethodMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: UserMFAMethodMaxAggregateInputType + } + + export type GetUserMFAMethodAggregateType = { + [P in keyof T & keyof AggregateUserMFAMethod]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type UserMFAMethodGroupByArgs = { + where?: UserMFAMethodWhereInput + orderBy?: UserMFAMethodOrderByWithAggregationInput | UserMFAMethodOrderByWithAggregationInput[] + by: UserMFAMethodScalarFieldEnum[] | UserMFAMethodScalarFieldEnum + having?: UserMFAMethodScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: UserMFAMethodCountAggregateInputType | true + _min?: UserMFAMethodMinAggregateInputType + _max?: UserMFAMethodMaxAggregateInputType + } + + export type UserMFAMethodGroupByOutputType = { + id: string + methodType: $Enums.MFAMethod + secret: string | null + phone: string | null + isActive: boolean + isVerified: boolean + userId: string + createdAt: Date + updatedAt: Date + lastUsedAt: Date | null + _count: UserMFAMethodCountAggregateOutputType | null + _min: UserMFAMethodMinAggregateOutputType | null + _max: UserMFAMethodMaxAggregateOutputType | null + } + + type GetUserMFAMethodGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof UserMFAMethodGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type UserMFAMethodSelect = $Extensions.GetSelect<{ + id?: boolean + methodType?: boolean + secret?: boolean + phone?: boolean + isActive?: boolean + isVerified?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + lastUsedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userMFAMethod"]> + + export type UserMFAMethodSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + methodType?: boolean + secret?: boolean + phone?: boolean + isActive?: boolean + isVerified?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + lastUsedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userMFAMethod"]> + + export type UserMFAMethodSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + methodType?: boolean + secret?: boolean + phone?: boolean + isActive?: boolean + isVerified?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + lastUsedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userMFAMethod"]> + + export type UserMFAMethodSelectScalar = { + id?: boolean + methodType?: boolean + secret?: boolean + phone?: boolean + isActive?: boolean + isVerified?: boolean + userId?: boolean + createdAt?: boolean + updatedAt?: boolean + lastUsedAt?: boolean + } + + export type UserMFAMethodOmit = $Extensions.GetOmit<"id" | "methodType" | "secret" | "phone" | "isActive" | "isVerified" | "userId" | "createdAt" | "updatedAt" | "lastUsedAt", ExtArgs["result"]["userMFAMethod"]> + export type UserMFAMethodInclude = { + user?: boolean | UserDefaultArgs + } + export type UserMFAMethodIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type UserMFAMethodIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $UserMFAMethodPayload = { + name: "UserMFAMethod" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + methodType: $Enums.MFAMethod + secret: string | null + phone: string | null + isActive: boolean + isVerified: boolean + userId: string + createdAt: Date + updatedAt: Date + lastUsedAt: Date | null + }, ExtArgs["result"]["userMFAMethod"]> + composites: {} + } + + type UserMFAMethodGetPayload = $Result.GetResult + + type UserMFAMethodCountArgs = + Omit & { + select?: UserMFAMethodCountAggregateInputType | true + } + + export interface UserMFAMethodDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['UserMFAMethod'], meta: { name: 'UserMFAMethod' } } + /** + * Find zero or one UserMFAMethod that matches the filter. + * @param {UserMFAMethodFindUniqueArgs} args - Arguments to find a UserMFAMethod + * @example + * // Get one UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one UserMFAMethod that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {UserMFAMethodFindUniqueOrThrowArgs} args - Arguments to find a UserMFAMethod + * @example + * // Get one UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserMFAMethod 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 {UserMFAMethodFindFirstArgs} args - Arguments to find a UserMFAMethod + * @example + * // Get one UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserMFAMethod 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 {UserMFAMethodFindFirstOrThrowArgs} args - Arguments to find a UserMFAMethod + * @example + * // Get one UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more UserMFAMethods 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 {UserMFAMethodFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all UserMFAMethods + * const userMFAMethods = await prisma.userMFAMethod.findMany() + * + * // Get first 10 UserMFAMethods + * const userMFAMethods = await prisma.userMFAMethod.findMany({ take: 10 }) + * + * // Only select the `id` + * const userMFAMethodWithIdOnly = await prisma.userMFAMethod.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a UserMFAMethod. + * @param {UserMFAMethodCreateArgs} args - Arguments to create a UserMFAMethod. + * @example + * // Create one UserMFAMethod + * const UserMFAMethod = await prisma.userMFAMethod.create({ + * data: { + * // ... data to create a UserMFAMethod + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many UserMFAMethods. + * @param {UserMFAMethodCreateManyArgs} args - Arguments to create many UserMFAMethods. + * @example + * // Create many UserMFAMethods + * const userMFAMethod = await prisma.userMFAMethod.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many UserMFAMethods and returns the data saved in the database. + * @param {UserMFAMethodCreateManyAndReturnArgs} args - Arguments to create many UserMFAMethods. + * @example + * // Create many UserMFAMethods + * const userMFAMethod = await prisma.userMFAMethod.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many UserMFAMethods and only return the `id` + * const userMFAMethodWithIdOnly = await prisma.userMFAMethod.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a UserMFAMethod. + * @param {UserMFAMethodDeleteArgs} args - Arguments to delete one UserMFAMethod. + * @example + * // Delete one UserMFAMethod + * const UserMFAMethod = await prisma.userMFAMethod.delete({ + * where: { + * // ... filter to delete one UserMFAMethod + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one UserMFAMethod. + * @param {UserMFAMethodUpdateArgs} args - Arguments to update one UserMFAMethod. + * @example + * // Update one UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more UserMFAMethods. + * @param {UserMFAMethodDeleteManyArgs} args - Arguments to filter UserMFAMethods to delete. + * @example + * // Delete a few UserMFAMethods + * const { count } = await prisma.userMFAMethod.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserMFAMethods. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserMFAMethodUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many UserMFAMethods + * const userMFAMethod = await prisma.userMFAMethod.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserMFAMethods and returns the data updated in the database. + * @param {UserMFAMethodUpdateManyAndReturnArgs} args - Arguments to update many UserMFAMethods. + * @example + * // Update many UserMFAMethods + * const userMFAMethod = await prisma.userMFAMethod.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more UserMFAMethods and only return the `id` + * const userMFAMethodWithIdOnly = await prisma.userMFAMethod.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one UserMFAMethod. + * @param {UserMFAMethodUpsertArgs} args - Arguments to update or create a UserMFAMethod. + * @example + * // Update or create a UserMFAMethod + * const userMFAMethod = await prisma.userMFAMethod.upsert({ + * create: { + * // ... data to create a UserMFAMethod + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the UserMFAMethod we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__UserMFAMethodClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of UserMFAMethods. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserMFAMethodCountArgs} args - Arguments to filter UserMFAMethods to count. + * @example + * // Count the number of UserMFAMethods + * const count = await prisma.userMFAMethod.count({ + * where: { + * // ... the filter for the UserMFAMethods we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a UserMFAMethod. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserMFAMethodAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by UserMFAMethod. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserMFAMethodGroupByArgs} 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 UserMFAMethodGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: UserMFAMethodGroupByArgs['orderBy'] } + : { orderBy?: UserMFAMethodGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetUserMFAMethodGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the UserMFAMethod model + */ + readonly fields: UserMFAMethodFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for UserMFAMethod. + * 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__UserMFAMethodClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the UserMFAMethod model + */ + interface UserMFAMethodFieldRefs { + readonly id: FieldRef<"UserMFAMethod", 'String'> + readonly methodType: FieldRef<"UserMFAMethod", 'MFAMethod'> + readonly secret: FieldRef<"UserMFAMethod", 'String'> + readonly phone: FieldRef<"UserMFAMethod", 'String'> + readonly isActive: FieldRef<"UserMFAMethod", 'Boolean'> + readonly isVerified: FieldRef<"UserMFAMethod", 'Boolean'> + readonly userId: FieldRef<"UserMFAMethod", 'String'> + readonly createdAt: FieldRef<"UserMFAMethod", 'DateTime'> + readonly updatedAt: FieldRef<"UserMFAMethod", 'DateTime'> + readonly lastUsedAt: FieldRef<"UserMFAMethod", 'DateTime'> + } + + + // Custom InputTypes + /** + * UserMFAMethod findUnique + */ + export type UserMFAMethodFindUniqueArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter, which UserMFAMethod to fetch. + */ + where: UserMFAMethodWhereUniqueInput + } + + /** + * UserMFAMethod findUniqueOrThrow + */ + export type UserMFAMethodFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter, which UserMFAMethod to fetch. + */ + where: UserMFAMethodWhereUniqueInput + } + + /** + * UserMFAMethod findFirst + */ + export type UserMFAMethodFindFirstArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter, which UserMFAMethod to fetch. + */ + where?: UserMFAMethodWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserMFAMethods to fetch. + */ + orderBy?: UserMFAMethodOrderByWithRelationInput | UserMFAMethodOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserMFAMethods. + */ + cursor?: UserMFAMethodWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserMFAMethods 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` UserMFAMethods. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserMFAMethods. + */ + distinct?: UserMFAMethodScalarFieldEnum | UserMFAMethodScalarFieldEnum[] + } + + /** + * UserMFAMethod findFirstOrThrow + */ + export type UserMFAMethodFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter, which UserMFAMethod to fetch. + */ + where?: UserMFAMethodWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserMFAMethods to fetch. + */ + orderBy?: UserMFAMethodOrderByWithRelationInput | UserMFAMethodOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserMFAMethods. + */ + cursor?: UserMFAMethodWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserMFAMethods 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` UserMFAMethods. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserMFAMethods. + */ + distinct?: UserMFAMethodScalarFieldEnum | UserMFAMethodScalarFieldEnum[] + } + + /** + * UserMFAMethod findMany + */ + export type UserMFAMethodFindManyArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter, which UserMFAMethods to fetch. + */ + where?: UserMFAMethodWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserMFAMethods to fetch. + */ + orderBy?: UserMFAMethodOrderByWithRelationInput | UserMFAMethodOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing UserMFAMethods. + */ + cursor?: UserMFAMethodWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserMFAMethods 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` UserMFAMethods. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserMFAMethods. + */ + distinct?: UserMFAMethodScalarFieldEnum | UserMFAMethodScalarFieldEnum[] + } + + /** + * UserMFAMethod create + */ + export type UserMFAMethodCreateArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * The data needed to create a UserMFAMethod. + */ + data: XOR + } + + /** + * UserMFAMethod createMany + */ + export type UserMFAMethodCreateManyArgs = { + /** + * The data used to create many UserMFAMethods. + */ + data: UserMFAMethodCreateManyInput | UserMFAMethodCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * UserMFAMethod createManyAndReturn + */ + export type UserMFAMethodCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelectCreateManyAndReturn | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * The data used to create many UserMFAMethods. + */ + data: UserMFAMethodCreateManyInput | UserMFAMethodCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodIncludeCreateManyAndReturn | null + } + + /** + * UserMFAMethod update + */ + export type UserMFAMethodUpdateArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * The data needed to update a UserMFAMethod. + */ + data: XOR + /** + * Choose, which UserMFAMethod to update. + */ + where: UserMFAMethodWhereUniqueInput + } + + /** + * UserMFAMethod updateMany + */ + export type UserMFAMethodUpdateManyArgs = { + /** + * The data used to update UserMFAMethods. + */ + data: XOR + /** + * Filter which UserMFAMethods to update + */ + where?: UserMFAMethodWhereInput + /** + * Limit how many UserMFAMethods to update. + */ + limit?: number + } + + /** + * UserMFAMethod updateManyAndReturn + */ + export type UserMFAMethodUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * The data used to update UserMFAMethods. + */ + data: XOR + /** + * Filter which UserMFAMethods to update + */ + where?: UserMFAMethodWhereInput + /** + * Limit how many UserMFAMethods to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodIncludeUpdateManyAndReturn | null + } + + /** + * UserMFAMethod upsert + */ + export type UserMFAMethodUpsertArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * The filter to search for the UserMFAMethod to update in case it exists. + */ + where: UserMFAMethodWhereUniqueInput + /** + * In case the UserMFAMethod found by the `where` argument doesn't exist, create a new UserMFAMethod with this data. + */ + create: XOR + /** + * In case the UserMFAMethod was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * UserMFAMethod delete + */ + export type UserMFAMethodDeleteArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + /** + * Filter which UserMFAMethod to delete. + */ + where: UserMFAMethodWhereUniqueInput + } + + /** + * UserMFAMethod deleteMany + */ + export type UserMFAMethodDeleteManyArgs = { + /** + * Filter which UserMFAMethods to delete + */ + where?: UserMFAMethodWhereInput + /** + * Limit how many UserMFAMethods to delete. + */ + limit?: number + } + + /** + * UserMFAMethod without action + */ + export type UserMFAMethodDefaultArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + } + + + /** + * Model MFABackupCode + */ + + export type AggregateMFABackupCode = { + _count: MFABackupCodeCountAggregateOutputType | null + _min: MFABackupCodeMinAggregateOutputType | null + _max: MFABackupCodeMaxAggregateOutputType | null + } + + export type MFABackupCodeMinAggregateOutputType = { + id: string | null + code: string | null + isUsed: boolean | null + usedAt: Date | null + userId: string | null + createdAt: Date | null + } + + export type MFABackupCodeMaxAggregateOutputType = { + id: string | null + code: string | null + isUsed: boolean | null + usedAt: Date | null + userId: string | null + createdAt: Date | null + } + + export type MFABackupCodeCountAggregateOutputType = { + id: number + code: number + isUsed: number + usedAt: number + userId: number + createdAt: number + _all: number + } + + + export type MFABackupCodeMinAggregateInputType = { + id?: true + code?: true + isUsed?: true + usedAt?: true + userId?: true + createdAt?: true + } + + export type MFABackupCodeMaxAggregateInputType = { + id?: true + code?: true + isUsed?: true + usedAt?: true + userId?: true + createdAt?: true + } + + export type MFABackupCodeCountAggregateInputType = { + id?: true + code?: true + isUsed?: true + usedAt?: true + userId?: true + createdAt?: true + _all?: true + } + + export type MFABackupCodeAggregateArgs = { + /** + * Filter which MFABackupCode to aggregate. + */ + where?: MFABackupCodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of MFABackupCodes to fetch. + */ + orderBy?: MFABackupCodeOrderByWithRelationInput | MFABackupCodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: MFABackupCodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` MFABackupCodes 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` MFABackupCodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned MFABackupCodes + **/ + _count?: true | MFABackupCodeCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: MFABackupCodeMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: MFABackupCodeMaxAggregateInputType + } + + export type GetMFABackupCodeAggregateType = { + [P in keyof T & keyof AggregateMFABackupCode]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type MFABackupCodeGroupByArgs = { + where?: MFABackupCodeWhereInput + orderBy?: MFABackupCodeOrderByWithAggregationInput | MFABackupCodeOrderByWithAggregationInput[] + by: MFABackupCodeScalarFieldEnum[] | MFABackupCodeScalarFieldEnum + having?: MFABackupCodeScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: MFABackupCodeCountAggregateInputType | true + _min?: MFABackupCodeMinAggregateInputType + _max?: MFABackupCodeMaxAggregateInputType + } + + export type MFABackupCodeGroupByOutputType = { + id: string + code: string + isUsed: boolean + usedAt: Date | null + userId: string + createdAt: Date + _count: MFABackupCodeCountAggregateOutputType | null + _min: MFABackupCodeMinAggregateOutputType | null + _max: MFABackupCodeMaxAggregateOutputType | null + } + + type GetMFABackupCodeGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof MFABackupCodeGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type MFABackupCodeSelect = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + isUsed?: boolean + usedAt?: boolean + userId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["mFABackupCode"]> + + export type MFABackupCodeSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + isUsed?: boolean + usedAt?: boolean + userId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["mFABackupCode"]> + + export type MFABackupCodeSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + isUsed?: boolean + usedAt?: boolean + userId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["mFABackupCode"]> + + export type MFABackupCodeSelectScalar = { + id?: boolean + code?: boolean + isUsed?: boolean + usedAt?: boolean + userId?: boolean + createdAt?: boolean + } + + export type MFABackupCodeOmit = $Extensions.GetOmit<"id" | "code" | "isUsed" | "usedAt" | "userId" | "createdAt", ExtArgs["result"]["mFABackupCode"]> + export type MFABackupCodeInclude = { + user?: boolean | UserDefaultArgs + } + export type MFABackupCodeIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type MFABackupCodeIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $MFABackupCodePayload = { + name: "MFABackupCode" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + code: string + isUsed: boolean + usedAt: Date | null + userId: string + createdAt: Date + }, ExtArgs["result"]["mFABackupCode"]> + composites: {} + } + + type MFABackupCodeGetPayload = $Result.GetResult + + type MFABackupCodeCountArgs = + Omit & { + select?: MFABackupCodeCountAggregateInputType | true + } + + export interface MFABackupCodeDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['MFABackupCode'], meta: { name: 'MFABackupCode' } } + /** + * Find zero or one MFABackupCode that matches the filter. + * @param {MFABackupCodeFindUniqueArgs} args - Arguments to find a MFABackupCode + * @example + * // Get one MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one MFABackupCode that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {MFABackupCodeFindUniqueOrThrowArgs} args - Arguments to find a MFABackupCode + * @example + * // Get one MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first MFABackupCode 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 {MFABackupCodeFindFirstArgs} args - Arguments to find a MFABackupCode + * @example + * // Get one MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first MFABackupCode 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 {MFABackupCodeFindFirstOrThrowArgs} args - Arguments to find a MFABackupCode + * @example + * // Get one MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more MFABackupCodes 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 {MFABackupCodeFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all MFABackupCodes + * const mFABackupCodes = await prisma.mFABackupCode.findMany() + * + * // Get first 10 MFABackupCodes + * const mFABackupCodes = await prisma.mFABackupCode.findMany({ take: 10 }) + * + * // Only select the `id` + * const mFABackupCodeWithIdOnly = await prisma.mFABackupCode.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a MFABackupCode. + * @param {MFABackupCodeCreateArgs} args - Arguments to create a MFABackupCode. + * @example + * // Create one MFABackupCode + * const MFABackupCode = await prisma.mFABackupCode.create({ + * data: { + * // ... data to create a MFABackupCode + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many MFABackupCodes. + * @param {MFABackupCodeCreateManyArgs} args - Arguments to create many MFABackupCodes. + * @example + * // Create many MFABackupCodes + * const mFABackupCode = await prisma.mFABackupCode.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many MFABackupCodes and returns the data saved in the database. + * @param {MFABackupCodeCreateManyAndReturnArgs} args - Arguments to create many MFABackupCodes. + * @example + * // Create many MFABackupCodes + * const mFABackupCode = await prisma.mFABackupCode.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many MFABackupCodes and only return the `id` + * const mFABackupCodeWithIdOnly = await prisma.mFABackupCode.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a MFABackupCode. + * @param {MFABackupCodeDeleteArgs} args - Arguments to delete one MFABackupCode. + * @example + * // Delete one MFABackupCode + * const MFABackupCode = await prisma.mFABackupCode.delete({ + * where: { + * // ... filter to delete one MFABackupCode + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one MFABackupCode. + * @param {MFABackupCodeUpdateArgs} args - Arguments to update one MFABackupCode. + * @example + * // Update one MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more MFABackupCodes. + * @param {MFABackupCodeDeleteManyArgs} args - Arguments to filter MFABackupCodes to delete. + * @example + * // Delete a few MFABackupCodes + * const { count } = await prisma.mFABackupCode.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more MFABackupCodes. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {MFABackupCodeUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many MFABackupCodes + * const mFABackupCode = await prisma.mFABackupCode.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more MFABackupCodes and returns the data updated in the database. + * @param {MFABackupCodeUpdateManyAndReturnArgs} args - Arguments to update many MFABackupCodes. + * @example + * // Update many MFABackupCodes + * const mFABackupCode = await prisma.mFABackupCode.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more MFABackupCodes and only return the `id` + * const mFABackupCodeWithIdOnly = await prisma.mFABackupCode.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one MFABackupCode. + * @param {MFABackupCodeUpsertArgs} args - Arguments to update or create a MFABackupCode. + * @example + * // Update or create a MFABackupCode + * const mFABackupCode = await prisma.mFABackupCode.upsert({ + * create: { + * // ... data to create a MFABackupCode + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the MFABackupCode we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__MFABackupCodeClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of MFABackupCodes. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {MFABackupCodeCountArgs} args - Arguments to filter MFABackupCodes to count. + * @example + * // Count the number of MFABackupCodes + * const count = await prisma.mFABackupCode.count({ + * where: { + * // ... the filter for the MFABackupCodes we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a MFABackupCode. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {MFABackupCodeAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by MFABackupCode. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {MFABackupCodeGroupByArgs} 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 MFABackupCodeGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: MFABackupCodeGroupByArgs['orderBy'] } + : { orderBy?: MFABackupCodeGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetMFABackupCodeGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the MFABackupCode model + */ + readonly fields: MFABackupCodeFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for MFABackupCode. + * 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__MFABackupCodeClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the MFABackupCode model + */ + interface MFABackupCodeFieldRefs { + readonly id: FieldRef<"MFABackupCode", 'String'> + readonly code: FieldRef<"MFABackupCode", 'String'> + readonly isUsed: FieldRef<"MFABackupCode", 'Boolean'> + readonly usedAt: FieldRef<"MFABackupCode", 'DateTime'> + readonly userId: FieldRef<"MFABackupCode", 'String'> + readonly createdAt: FieldRef<"MFABackupCode", 'DateTime'> + } + + + // Custom InputTypes + /** + * MFABackupCode findUnique + */ + export type MFABackupCodeFindUniqueArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter, which MFABackupCode to fetch. + */ + where: MFABackupCodeWhereUniqueInput + } + + /** + * MFABackupCode findUniqueOrThrow + */ + export type MFABackupCodeFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter, which MFABackupCode to fetch. + */ + where: MFABackupCodeWhereUniqueInput + } + + /** + * MFABackupCode findFirst + */ + export type MFABackupCodeFindFirstArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter, which MFABackupCode to fetch. + */ + where?: MFABackupCodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of MFABackupCodes to fetch. + */ + orderBy?: MFABackupCodeOrderByWithRelationInput | MFABackupCodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for MFABackupCodes. + */ + cursor?: MFABackupCodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` MFABackupCodes 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` MFABackupCodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of MFABackupCodes. + */ + distinct?: MFABackupCodeScalarFieldEnum | MFABackupCodeScalarFieldEnum[] + } + + /** + * MFABackupCode findFirstOrThrow + */ + export type MFABackupCodeFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter, which MFABackupCode to fetch. + */ + where?: MFABackupCodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of MFABackupCodes to fetch. + */ + orderBy?: MFABackupCodeOrderByWithRelationInput | MFABackupCodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for MFABackupCodes. + */ + cursor?: MFABackupCodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` MFABackupCodes 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` MFABackupCodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of MFABackupCodes. + */ + distinct?: MFABackupCodeScalarFieldEnum | MFABackupCodeScalarFieldEnum[] + } + + /** + * MFABackupCode findMany + */ + export type MFABackupCodeFindManyArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter, which MFABackupCodes to fetch. + */ + where?: MFABackupCodeWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of MFABackupCodes to fetch. + */ + orderBy?: MFABackupCodeOrderByWithRelationInput | MFABackupCodeOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing MFABackupCodes. + */ + cursor?: MFABackupCodeWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` MFABackupCodes 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` MFABackupCodes. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of MFABackupCodes. + */ + distinct?: MFABackupCodeScalarFieldEnum | MFABackupCodeScalarFieldEnum[] + } + + /** + * MFABackupCode create + */ + export type MFABackupCodeCreateArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * The data needed to create a MFABackupCode. + */ + data: XOR + } + + /** + * MFABackupCode createMany + */ + export type MFABackupCodeCreateManyArgs = { + /** + * The data used to create many MFABackupCodes. + */ + data: MFABackupCodeCreateManyInput | MFABackupCodeCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * MFABackupCode createManyAndReturn + */ + export type MFABackupCodeCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelectCreateManyAndReturn | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * The data used to create many MFABackupCodes. + */ + data: MFABackupCodeCreateManyInput | MFABackupCodeCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeIncludeCreateManyAndReturn | null + } + + /** + * MFABackupCode update + */ + export type MFABackupCodeUpdateArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * The data needed to update a MFABackupCode. + */ + data: XOR + /** + * Choose, which MFABackupCode to update. + */ + where: MFABackupCodeWhereUniqueInput + } + + /** + * MFABackupCode updateMany + */ + export type MFABackupCodeUpdateManyArgs = { + /** + * The data used to update MFABackupCodes. + */ + data: XOR + /** + * Filter which MFABackupCodes to update + */ + where?: MFABackupCodeWhereInput + /** + * Limit how many MFABackupCodes to update. + */ + limit?: number + } + + /** + * MFABackupCode updateManyAndReturn + */ + export type MFABackupCodeUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * The data used to update MFABackupCodes. + */ + data: XOR + /** + * Filter which MFABackupCodes to update + */ + where?: MFABackupCodeWhereInput + /** + * Limit how many MFABackupCodes to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeIncludeUpdateManyAndReturn | null + } + + /** + * MFABackupCode upsert + */ + export type MFABackupCodeUpsertArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * The filter to search for the MFABackupCode to update in case it exists. + */ + where: MFABackupCodeWhereUniqueInput + /** + * In case the MFABackupCode found by the `where` argument doesn't exist, create a new MFABackupCode with this data. + */ + create: XOR + /** + * In case the MFABackupCode was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * MFABackupCode delete + */ + export type MFABackupCodeDeleteArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + /** + * Filter which MFABackupCode to delete. + */ + where: MFABackupCodeWhereUniqueInput + } + + /** + * MFABackupCode deleteMany + */ + export type MFABackupCodeDeleteManyArgs = { + /** + * Filter which MFABackupCodes to delete + */ + where?: MFABackupCodeWhereInput + /** + * Limit how many MFABackupCodes to delete. + */ + limit?: number + } + + /** + * MFABackupCode without action + */ + export type MFABackupCodeDefaultArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + } + + + /** + * Model Device + */ + + export type AggregateDevice = { + _count: DeviceCountAggregateOutputType | null + _min: DeviceMinAggregateOutputType | null + _max: DeviceMaxAggregateOutputType | null + } + + export type DeviceMinAggregateOutputType = { + id: string | null + name: string | null + type: $Enums.DeviceType | null + userAgent: string | null + ipAddress: string | null + fingerprint: string | null + userId: string | null + isTrusted: boolean | null + lastSeenAt: Date | null + createdAt: Date | null + } + + export type DeviceMaxAggregateOutputType = { + id: string | null + name: string | null + type: $Enums.DeviceType | null + userAgent: string | null + ipAddress: string | null + fingerprint: string | null + userId: string | null + isTrusted: boolean | null + lastSeenAt: Date | null + createdAt: Date | null + } + + export type DeviceCountAggregateOutputType = { + id: number + name: number + type: number + userAgent: number + ipAddress: number + fingerprint: number + userId: number + isTrusted: number + lastSeenAt: number + createdAt: number + _all: number + } + + + export type DeviceMinAggregateInputType = { + id?: true + name?: true + type?: true + userAgent?: true + ipAddress?: true + fingerprint?: true + userId?: true + isTrusted?: true + lastSeenAt?: true + createdAt?: true + } + + export type DeviceMaxAggregateInputType = { + id?: true + name?: true + type?: true + userAgent?: true + ipAddress?: true + fingerprint?: true + userId?: true + isTrusted?: true + lastSeenAt?: true + createdAt?: true + } + + export type DeviceCountAggregateInputType = { + id?: true + name?: true + type?: true + userAgent?: true + ipAddress?: true + fingerprint?: true + userId?: true + isTrusted?: true + lastSeenAt?: true + createdAt?: true + _all?: true + } + + export type DeviceAggregateArgs = { + /** + * Filter which Device to aggregate. + */ + where?: DeviceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Devices to fetch. + */ + orderBy?: DeviceOrderByWithRelationInput | DeviceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: DeviceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Devices 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` Devices. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Devices + **/ + _count?: true | DeviceCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: DeviceMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: DeviceMaxAggregateInputType + } + + export type GetDeviceAggregateType = { + [P in keyof T & keyof AggregateDevice]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type DeviceGroupByArgs = { + where?: DeviceWhereInput + orderBy?: DeviceOrderByWithAggregationInput | DeviceOrderByWithAggregationInput[] + by: DeviceScalarFieldEnum[] | DeviceScalarFieldEnum + having?: DeviceScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: DeviceCountAggregateInputType | true + _min?: DeviceMinAggregateInputType + _max?: DeviceMaxAggregateInputType + } + + export type DeviceGroupByOutputType = { + id: string + name: string | null + type: $Enums.DeviceType + userAgent: string | null + ipAddress: string | null + fingerprint: string | null + userId: string + isTrusted: boolean + lastSeenAt: Date + createdAt: Date + _count: DeviceCountAggregateOutputType | null + _min: DeviceMinAggregateOutputType | null + _max: DeviceMaxAggregateOutputType | null + } + + type GetDeviceGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof DeviceGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type DeviceSelect = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + type?: boolean + userAgent?: boolean + ipAddress?: boolean + fingerprint?: boolean + userId?: boolean + isTrusted?: boolean + lastSeenAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + session?: boolean | Device$sessionArgs + }, ExtArgs["result"]["device"]> + + export type DeviceSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + type?: boolean + userAgent?: boolean + ipAddress?: boolean + fingerprint?: boolean + userId?: boolean + isTrusted?: boolean + lastSeenAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["device"]> + + export type DeviceSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + type?: boolean + userAgent?: boolean + ipAddress?: boolean + fingerprint?: boolean + userId?: boolean + isTrusted?: boolean + lastSeenAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["device"]> + + export type DeviceSelectScalar = { + id?: boolean + name?: boolean + type?: boolean + userAgent?: boolean + ipAddress?: boolean + fingerprint?: boolean + userId?: boolean + isTrusted?: boolean + lastSeenAt?: boolean + createdAt?: boolean + } + + export type DeviceOmit = $Extensions.GetOmit<"id" | "name" | "type" | "userAgent" | "ipAddress" | "fingerprint" | "userId" | "isTrusted" | "lastSeenAt" | "createdAt", ExtArgs["result"]["device"]> + export type DeviceInclude = { + user?: boolean | UserDefaultArgs + session?: boolean | Device$sessionArgs + } + export type DeviceIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type DeviceIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $DevicePayload = { + name: "Device" + objects: { + user: Prisma.$UserPayload + session: Prisma.$SessionPayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + name: string | null + type: $Enums.DeviceType + userAgent: string | null + ipAddress: string | null + fingerprint: string | null + userId: string + isTrusted: boolean + lastSeenAt: Date + createdAt: Date + }, ExtArgs["result"]["device"]> + composites: {} + } + + type DeviceGetPayload = $Result.GetResult + + type DeviceCountArgs = + Omit & { + select?: DeviceCountAggregateInputType | true + } + + export interface DeviceDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Device'], meta: { name: 'Device' } } + /** + * Find zero or one Device that matches the filter. + * @param {DeviceFindUniqueArgs} args - Arguments to find a Device + * @example + * // Get one Device + * const device = await prisma.device.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Device that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {DeviceFindUniqueOrThrowArgs} args - Arguments to find a Device + * @example + * // Get one Device + * const device = await prisma.device.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Device 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 {DeviceFindFirstArgs} args - Arguments to find a Device + * @example + * // Get one Device + * const device = await prisma.device.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Device 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 {DeviceFindFirstOrThrowArgs} args - Arguments to find a Device + * @example + * // Get one Device + * const device = await prisma.device.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Devices 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 {DeviceFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Devices + * const devices = await prisma.device.findMany() + * + * // Get first 10 Devices + * const devices = await prisma.device.findMany({ take: 10 }) + * + * // Only select the `id` + * const deviceWithIdOnly = await prisma.device.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Device. + * @param {DeviceCreateArgs} args - Arguments to create a Device. + * @example + * // Create one Device + * const Device = await prisma.device.create({ + * data: { + * // ... data to create a Device + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Devices. + * @param {DeviceCreateManyArgs} args - Arguments to create many Devices. + * @example + * // Create many Devices + * const device = await prisma.device.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Devices and returns the data saved in the database. + * @param {DeviceCreateManyAndReturnArgs} args - Arguments to create many Devices. + * @example + * // Create many Devices + * const device = await prisma.device.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Devices and only return the `id` + * const deviceWithIdOnly = await prisma.device.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Device. + * @param {DeviceDeleteArgs} args - Arguments to delete one Device. + * @example + * // Delete one Device + * const Device = await prisma.device.delete({ + * where: { + * // ... filter to delete one Device + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Device. + * @param {DeviceUpdateArgs} args - Arguments to update one Device. + * @example + * // Update one Device + * const device = await prisma.device.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Devices. + * @param {DeviceDeleteManyArgs} args - Arguments to filter Devices to delete. + * @example + * // Delete a few Devices + * const { count } = await prisma.device.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Devices. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {DeviceUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Devices + * const device = await prisma.device.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Devices and returns the data updated in the database. + * @param {DeviceUpdateManyAndReturnArgs} args - Arguments to update many Devices. + * @example + * // Update many Devices + * const device = await prisma.device.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Devices and only return the `id` + * const deviceWithIdOnly = await prisma.device.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Device. + * @param {DeviceUpsertArgs} args - Arguments to update or create a Device. + * @example + * // Update or create a Device + * const device = await prisma.device.upsert({ + * create: { + * // ... data to create a Device + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Device we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__DeviceClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Devices. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {DeviceCountArgs} args - Arguments to filter Devices to count. + * @example + * // Count the number of Devices + * const count = await prisma.device.count({ + * where: { + * // ... the filter for the Devices we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Device. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {DeviceAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Device. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {DeviceGroupByArgs} 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 DeviceGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: DeviceGroupByArgs['orderBy'] } + : { orderBy?: DeviceGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetDeviceGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Device model + */ + readonly fields: DeviceFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Device. + * 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__DeviceClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + session = {}>(args?: Subset>): Prisma__SessionClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Device model + */ + interface DeviceFieldRefs { + readonly id: FieldRef<"Device", 'String'> + readonly name: FieldRef<"Device", 'String'> + readonly type: FieldRef<"Device", 'DeviceType'> + readonly userAgent: FieldRef<"Device", 'String'> + readonly ipAddress: FieldRef<"Device", 'String'> + readonly fingerprint: FieldRef<"Device", 'String'> + readonly userId: FieldRef<"Device", 'String'> + readonly isTrusted: FieldRef<"Device", 'Boolean'> + readonly lastSeenAt: FieldRef<"Device", 'DateTime'> + readonly createdAt: FieldRef<"Device", 'DateTime'> + } + + + // Custom InputTypes + /** + * Device findUnique + */ + export type DeviceFindUniqueArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter, which Device to fetch. + */ + where: DeviceWhereUniqueInput + } + + /** + * Device findUniqueOrThrow + */ + export type DeviceFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter, which Device to fetch. + */ + where: DeviceWhereUniqueInput + } + + /** + * Device findFirst + */ + export type DeviceFindFirstArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter, which Device to fetch. + */ + where?: DeviceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Devices to fetch. + */ + orderBy?: DeviceOrderByWithRelationInput | DeviceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Devices. + */ + cursor?: DeviceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Devices 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` Devices. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Devices. + */ + distinct?: DeviceScalarFieldEnum | DeviceScalarFieldEnum[] + } + + /** + * Device findFirstOrThrow + */ + export type DeviceFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter, which Device to fetch. + */ + where?: DeviceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Devices to fetch. + */ + orderBy?: DeviceOrderByWithRelationInput | DeviceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Devices. + */ + cursor?: DeviceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Devices 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` Devices. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Devices. + */ + distinct?: DeviceScalarFieldEnum | DeviceScalarFieldEnum[] + } + + /** + * Device findMany + */ + export type DeviceFindManyArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter, which Devices to fetch. + */ + where?: DeviceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Devices to fetch. + */ + orderBy?: DeviceOrderByWithRelationInput | DeviceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Devices. + */ + cursor?: DeviceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Devices 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` Devices. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Devices. + */ + distinct?: DeviceScalarFieldEnum | DeviceScalarFieldEnum[] + } + + /** + * Device create + */ + export type DeviceCreateArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * The data needed to create a Device. + */ + data: XOR + } + + /** + * Device createMany + */ + export type DeviceCreateManyArgs = { + /** + * The data used to create many Devices. + */ + data: DeviceCreateManyInput | DeviceCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Device createManyAndReturn + */ + export type DeviceCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * The data used to create many Devices. + */ + data: DeviceCreateManyInput | DeviceCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceIncludeCreateManyAndReturn | null + } + + /** + * Device update + */ + export type DeviceUpdateArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * The data needed to update a Device. + */ + data: XOR + /** + * Choose, which Device to update. + */ + where: DeviceWhereUniqueInput + } + + /** + * Device updateMany + */ + export type DeviceUpdateManyArgs = { + /** + * The data used to update Devices. + */ + data: XOR + /** + * Filter which Devices to update + */ + where?: DeviceWhereInput + /** + * Limit how many Devices to update. + */ + limit?: number + } + + /** + * Device updateManyAndReturn + */ + export type DeviceUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * The data used to update Devices. + */ + data: XOR + /** + * Filter which Devices to update + */ + where?: DeviceWhereInput + /** + * Limit how many Devices to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceIncludeUpdateManyAndReturn | null + } + + /** + * Device upsert + */ + export type DeviceUpsertArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * The filter to search for the Device to update in case it exists. + */ + where: DeviceWhereUniqueInput + /** + * In case the Device found by the `where` argument doesn't exist, create a new Device with this data. + */ + create: XOR + /** + * In case the Device was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Device delete + */ + export type DeviceDeleteArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + /** + * Filter which Device to delete. + */ + where: DeviceWhereUniqueInput + } + + /** + * Device deleteMany + */ + export type DeviceDeleteManyArgs = { + /** + * Filter which Devices to delete + */ + where?: DeviceWhereInput + /** + * Limit how many Devices to delete. + */ + limit?: number + } + + /** + * Device.session + */ + export type Device$sessionArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + where?: SessionWhereInput + } + + /** + * Device without action + */ + export type DeviceDefaultArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + } + + + /** + * Model Session + */ + + export type AggregateSession = { + _count: SessionCountAggregateOutputType | null + _min: SessionMinAggregateOutputType | null + _max: SessionMaxAggregateOutputType | null + } + + export type SessionMinAggregateOutputType = { + id: string | null + token: string | null + refreshToken: string | null + userId: string | null + deviceId: string | null + ipAddress: string | null + userAgent: string | null + status: $Enums.SessionStatus | null + expiresAt: Date | null + revokedAt: Date | null + createdAt: Date | null + updatedAt: Date | null + } + + export type SessionMaxAggregateOutputType = { + id: string | null + token: string | null + refreshToken: string | null + userId: string | null + deviceId: string | null + ipAddress: string | null + userAgent: string | null + status: $Enums.SessionStatus | null + expiresAt: Date | null + revokedAt: Date | null + createdAt: Date | null + updatedAt: Date | null + } + + export type SessionCountAggregateOutputType = { + id: number + token: number + refreshToken: number + userId: number + deviceId: number + ipAddress: number + userAgent: number + status: number + expiresAt: number + revokedAt: number + createdAt: number + updatedAt: number + _all: number + } + + + export type SessionMinAggregateInputType = { + id?: true + token?: true + refreshToken?: true + userId?: true + deviceId?: true + ipAddress?: true + userAgent?: true + status?: true + expiresAt?: true + revokedAt?: true + createdAt?: true + updatedAt?: true + } + + export type SessionMaxAggregateInputType = { + id?: true + token?: true + refreshToken?: true + userId?: true + deviceId?: true + ipAddress?: true + userAgent?: true + status?: true + expiresAt?: true + revokedAt?: true + createdAt?: true + updatedAt?: true + } + + export type SessionCountAggregateInputType = { + id?: true + token?: true + refreshToken?: true + userId?: true + deviceId?: true + ipAddress?: true + userAgent?: true + status?: true + expiresAt?: true + revokedAt?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type SessionAggregateArgs = { + /** + * Filter which Session to aggregate. + */ + where?: SessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Sessions to fetch. + */ + orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: SessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Sessions 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` Sessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Sessions + **/ + _count?: true | SessionCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: SessionMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: SessionMaxAggregateInputType + } + + export type GetSessionAggregateType = { + [P in keyof T & keyof AggregateSession]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type SessionGroupByArgs = { + where?: SessionWhereInput + orderBy?: SessionOrderByWithAggregationInput | SessionOrderByWithAggregationInput[] + by: SessionScalarFieldEnum[] | SessionScalarFieldEnum + having?: SessionScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: SessionCountAggregateInputType | true + _min?: SessionMinAggregateInputType + _max?: SessionMaxAggregateInputType + } + + export type SessionGroupByOutputType = { + id: string + token: string + refreshToken: string | null + userId: string + deviceId: string | null + ipAddress: string | null + userAgent: string | null + status: $Enums.SessionStatus + expiresAt: Date + revokedAt: Date | null + createdAt: Date + updatedAt: Date + _count: SessionCountAggregateOutputType | null + _min: SessionMinAggregateOutputType | null + _max: SessionMaxAggregateOutputType | null + } + + type GetSessionGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof SessionGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type SessionSelect = $Extensions.GetSelect<{ + id?: boolean + token?: boolean + refreshToken?: boolean + userId?: boolean + deviceId?: boolean + ipAddress?: boolean + userAgent?: boolean + status?: boolean + expiresAt?: boolean + revokedAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + }, ExtArgs["result"]["session"]> + + export type SessionSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + token?: boolean + refreshToken?: boolean + userId?: boolean + deviceId?: boolean + ipAddress?: boolean + userAgent?: boolean + status?: boolean + expiresAt?: boolean + revokedAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + }, ExtArgs["result"]["session"]> + + export type SessionSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + token?: boolean + refreshToken?: boolean + userId?: boolean + deviceId?: boolean + ipAddress?: boolean + userAgent?: boolean + status?: boolean + expiresAt?: boolean + revokedAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + }, ExtArgs["result"]["session"]> + + export type SessionSelectScalar = { + id?: boolean + token?: boolean + refreshToken?: boolean + userId?: boolean + deviceId?: boolean + ipAddress?: boolean + userAgent?: boolean + status?: boolean + expiresAt?: boolean + revokedAt?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type SessionOmit = $Extensions.GetOmit<"id" | "token" | "refreshToken" | "userId" | "deviceId" | "ipAddress" | "userAgent" | "status" | "expiresAt" | "revokedAt" | "createdAt" | "updatedAt", ExtArgs["result"]["session"]> + export type SessionInclude = { + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + } + export type SessionIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + } + export type SessionIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + device?: boolean | Session$deviceArgs + } + + export type $SessionPayload = { + name: "Session" + objects: { + user: Prisma.$UserPayload + device: Prisma.$DevicePayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + token: string + refreshToken: string | null + userId: string + deviceId: string | null + ipAddress: string | null + userAgent: string | null + status: $Enums.SessionStatus + expiresAt: Date + revokedAt: Date | null + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["session"]> + composites: {} + } + + type SessionGetPayload = $Result.GetResult + + type SessionCountArgs = + Omit & { + select?: SessionCountAggregateInputType | true + } + + export interface SessionDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Session'], meta: { name: 'Session' } } + /** + * Find zero or one Session that matches the filter. + * @param {SessionFindUniqueArgs} args - Arguments to find a Session + * @example + * // Get one Session + * const session = await prisma.session.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Session that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {SessionFindUniqueOrThrowArgs} args - Arguments to find a Session + * @example + * // Get one Session + * const session = await prisma.session.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Session 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 {SessionFindFirstArgs} args - Arguments to find a Session + * @example + * // Get one Session + * const session = await prisma.session.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Session 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 {SessionFindFirstOrThrowArgs} args - Arguments to find a Session + * @example + * // Get one Session + * const session = await prisma.session.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Sessions 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 {SessionFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Sessions + * const sessions = await prisma.session.findMany() + * + * // Get first 10 Sessions + * const sessions = await prisma.session.findMany({ take: 10 }) + * + * // Only select the `id` + * const sessionWithIdOnly = await prisma.session.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Session. + * @param {SessionCreateArgs} args - Arguments to create a Session. + * @example + * // Create one Session + * const Session = await prisma.session.create({ + * data: { + * // ... data to create a Session + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Sessions. + * @param {SessionCreateManyArgs} args - Arguments to create many Sessions. + * @example + * // Create many Sessions + * const session = await prisma.session.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Sessions and returns the data saved in the database. + * @param {SessionCreateManyAndReturnArgs} args - Arguments to create many Sessions. + * @example + * // Create many Sessions + * const session = await prisma.session.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Sessions and only return the `id` + * const sessionWithIdOnly = await prisma.session.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Session. + * @param {SessionDeleteArgs} args - Arguments to delete one Session. + * @example + * // Delete one Session + * const Session = await prisma.session.delete({ + * where: { + * // ... filter to delete one Session + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Session. + * @param {SessionUpdateArgs} args - Arguments to update one Session. + * @example + * // Update one Session + * const session = await prisma.session.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Sessions. + * @param {SessionDeleteManyArgs} args - Arguments to filter Sessions to delete. + * @example + * // Delete a few Sessions + * const { count } = await prisma.session.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Sessions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SessionUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Sessions + * const session = await prisma.session.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Sessions and returns the data updated in the database. + * @param {SessionUpdateManyAndReturnArgs} args - Arguments to update many Sessions. + * @example + * // Update many Sessions + * const session = await prisma.session.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Sessions and only return the `id` + * const sessionWithIdOnly = await prisma.session.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Session. + * @param {SessionUpsertArgs} args - Arguments to update or create a Session. + * @example + * // Update or create a Session + * const session = await prisma.session.upsert({ + * create: { + * // ... data to create a Session + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Session we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__SessionClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Sessions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SessionCountArgs} args - Arguments to filter Sessions to count. + * @example + * // Count the number of Sessions + * const count = await prisma.session.count({ + * where: { + * // ... the filter for the Sessions we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Session. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SessionAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Session. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SessionGroupByArgs} 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 SessionGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: SessionGroupByArgs['orderBy'] } + : { orderBy?: SessionGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetSessionGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Session model + */ + readonly fields: SessionFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Session. + * 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__SessionClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + device = {}>(args?: Subset>): Prisma__DeviceClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Session model + */ + interface SessionFieldRefs { + readonly id: FieldRef<"Session", 'String'> + readonly token: FieldRef<"Session", 'String'> + readonly refreshToken: FieldRef<"Session", 'String'> + readonly userId: FieldRef<"Session", 'String'> + readonly deviceId: FieldRef<"Session", 'String'> + readonly ipAddress: FieldRef<"Session", 'String'> + readonly userAgent: FieldRef<"Session", 'String'> + readonly status: FieldRef<"Session", 'SessionStatus'> + readonly expiresAt: FieldRef<"Session", 'DateTime'> + readonly revokedAt: FieldRef<"Session", 'DateTime'> + readonly createdAt: FieldRef<"Session", 'DateTime'> + readonly updatedAt: FieldRef<"Session", 'DateTime'> + } + + + // Custom InputTypes + /** + * Session findUnique + */ + export type SessionFindUniqueArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter, which Session to fetch. + */ + where: SessionWhereUniqueInput + } + + /** + * Session findUniqueOrThrow + */ + export type SessionFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter, which Session to fetch. + */ + where: SessionWhereUniqueInput + } + + /** + * Session findFirst + */ + export type SessionFindFirstArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter, which Session to fetch. + */ + where?: SessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Sessions to fetch. + */ + orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Sessions. + */ + cursor?: SessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Sessions 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` Sessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Sessions. + */ + distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[] + } + + /** + * Session findFirstOrThrow + */ + export type SessionFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter, which Session to fetch. + */ + where?: SessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Sessions to fetch. + */ + orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Sessions. + */ + cursor?: SessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Sessions 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` Sessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Sessions. + */ + distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[] + } + + /** + * Session findMany + */ + export type SessionFindManyArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter, which Sessions to fetch. + */ + where?: SessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Sessions to fetch. + */ + orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Sessions. + */ + cursor?: SessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Sessions 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` Sessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Sessions. + */ + distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[] + } + + /** + * Session create + */ + export type SessionCreateArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * The data needed to create a Session. + */ + data: XOR + } + + /** + * Session createMany + */ + export type SessionCreateManyArgs = { + /** + * The data used to create many Sessions. + */ + data: SessionCreateManyInput | SessionCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Session createManyAndReturn + */ + export type SessionCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * The data used to create many Sessions. + */ + data: SessionCreateManyInput | SessionCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionIncludeCreateManyAndReturn | null + } + + /** + * Session update + */ + export type SessionUpdateArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * The data needed to update a Session. + */ + data: XOR + /** + * Choose, which Session to update. + */ + where: SessionWhereUniqueInput + } + + /** + * Session updateMany + */ + export type SessionUpdateManyArgs = { + /** + * The data used to update Sessions. + */ + data: XOR + /** + * Filter which Sessions to update + */ + where?: SessionWhereInput + /** + * Limit how many Sessions to update. + */ + limit?: number + } + + /** + * Session updateManyAndReturn + */ + export type SessionUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * The data used to update Sessions. + */ + data: XOR + /** + * Filter which Sessions to update + */ + where?: SessionWhereInput + /** + * Limit how many Sessions to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionIncludeUpdateManyAndReturn | null + } + + /** + * Session upsert + */ + export type SessionUpsertArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * The filter to search for the Session to update in case it exists. + */ + where: SessionWhereUniqueInput + /** + * In case the Session found by the `where` argument doesn't exist, create a new Session with this data. + */ + create: XOR + /** + * In case the Session was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Session delete + */ + export type SessionDeleteArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + /** + * Filter which Session to delete. + */ + where: SessionWhereUniqueInput + } + + /** + * Session deleteMany + */ + export type SessionDeleteManyArgs = { + /** + * Filter which Sessions to delete + */ + where?: SessionWhereInput + /** + * Limit how many Sessions to delete. + */ + limit?: number + } + + /** + * Session.device + */ + export type Session$deviceArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + where?: DeviceWhereInput + } + + /** + * Session without action + */ + export type SessionDefaultArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + } + + + /** + * Model BlogPost + */ + + export type AggregateBlogPost = { + _count: BlogPostCountAggregateOutputType | null + _avg: BlogPostAvgAggregateOutputType | null + _sum: BlogPostSumAggregateOutputType | null + _min: BlogPostMinAggregateOutputType | null + _max: BlogPostMaxAggregateOutputType | null + } + + export type BlogPostAvgAggregateOutputType = { + contentSize: number | null + viewCount: number | null + } + + export type BlogPostSumAggregateOutputType = { + contentSize: number | null + viewCount: number | null + } + + export type BlogPostMinAggregateOutputType = { + id: string | null + slug: string | null + title: string | null + contentKey: string | null + contentSize: number | null + excerpt: string | null + coverImage: string | null + authorId: string | null + isPublished: boolean | null + publishedAt: Date | null + viewCount: number | null + metaTitle: string | null + metaDescription: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type BlogPostMaxAggregateOutputType = { + id: string | null + slug: string | null + title: string | null + contentKey: string | null + contentSize: number | null + excerpt: string | null + coverImage: string | null + authorId: string | null + isPublished: boolean | null + publishedAt: Date | null + viewCount: number | null + metaTitle: string | null + metaDescription: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type BlogPostCountAggregateOutputType = { + id: number + slug: number + title: number + contentKey: number + contentSize: number + excerpt: number + coverImage: number + authorId: number + isPublished: number + publishedAt: number + viewCount: number + metaTitle: number + metaDescription: number + createdAt: number + updatedAt: number + _all: number + } + + + export type BlogPostAvgAggregateInputType = { + contentSize?: true + viewCount?: true + } + + export type BlogPostSumAggregateInputType = { + contentSize?: true + viewCount?: true + } + + export type BlogPostMinAggregateInputType = { + id?: true + slug?: true + title?: true + contentKey?: true + contentSize?: true + excerpt?: true + coverImage?: true + authorId?: true + isPublished?: true + publishedAt?: true + viewCount?: true + metaTitle?: true + metaDescription?: true + createdAt?: true + updatedAt?: true + } + + export type BlogPostMaxAggregateInputType = { + id?: true + slug?: true + title?: true + contentKey?: true + contentSize?: true + excerpt?: true + coverImage?: true + authorId?: true + isPublished?: true + publishedAt?: true + viewCount?: true + metaTitle?: true + metaDescription?: true + createdAt?: true + updatedAt?: true + } + + export type BlogPostCountAggregateInputType = { + id?: true + slug?: true + title?: true + contentKey?: true + contentSize?: true + excerpt?: true + coverImage?: true + authorId?: true + isPublished?: true + publishedAt?: true + viewCount?: true + metaTitle?: true + metaDescription?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type BlogPostAggregateArgs = { + /** + * Filter which BlogPost to aggregate. + */ + where?: BlogPostWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogPosts to fetch. + */ + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: BlogPostWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogPosts 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` BlogPosts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned BlogPosts + **/ + _count?: true | BlogPostCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: BlogPostAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: BlogPostSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: BlogPostMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: BlogPostMaxAggregateInputType + } + + export type GetBlogPostAggregateType = { + [P in keyof T & keyof AggregateBlogPost]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type BlogPostGroupByArgs = { + where?: BlogPostWhereInput + orderBy?: BlogPostOrderByWithAggregationInput | BlogPostOrderByWithAggregationInput[] + by: BlogPostScalarFieldEnum[] | BlogPostScalarFieldEnum + having?: BlogPostScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: BlogPostCountAggregateInputType | true + _avg?: BlogPostAvgAggregateInputType + _sum?: BlogPostSumAggregateInputType + _min?: BlogPostMinAggregateInputType + _max?: BlogPostMaxAggregateInputType + } + + export type BlogPostGroupByOutputType = { + id: string + slug: string + title: string + contentKey: string + contentSize: number | null + excerpt: string | null + coverImage: string | null + authorId: string + isPublished: boolean + publishedAt: Date | null + viewCount: number + metaTitle: string | null + metaDescription: string | null + createdAt: Date + updatedAt: Date + _count: BlogPostCountAggregateOutputType | null + _avg: BlogPostAvgAggregateOutputType | null + _sum: BlogPostSumAggregateOutputType | null + _min: BlogPostMinAggregateOutputType | null + _max: BlogPostMaxAggregateOutputType | null + } + + type GetBlogPostGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof BlogPostGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type BlogPostSelect = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + title?: boolean + contentKey?: boolean + contentSize?: boolean + excerpt?: boolean + coverImage?: boolean + authorId?: boolean + isPublished?: boolean + publishedAt?: boolean + viewCount?: boolean + metaTitle?: boolean + metaDescription?: boolean + createdAt?: boolean + updatedAt?: boolean + author?: boolean | UserDefaultArgs + tags?: boolean | BlogPost$tagsArgs + comments?: boolean | BlogPost$commentsArgs + _count?: boolean | BlogPostCountOutputTypeDefaultArgs + }, ExtArgs["result"]["blogPost"]> + + export type BlogPostSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + title?: boolean + contentKey?: boolean + contentSize?: boolean + excerpt?: boolean + coverImage?: boolean + authorId?: boolean + isPublished?: boolean + publishedAt?: boolean + viewCount?: boolean + metaTitle?: boolean + metaDescription?: boolean + createdAt?: boolean + updatedAt?: boolean + author?: boolean | UserDefaultArgs + }, ExtArgs["result"]["blogPost"]> + + export type BlogPostSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + title?: boolean + contentKey?: boolean + contentSize?: boolean + excerpt?: boolean + coverImage?: boolean + authorId?: boolean + isPublished?: boolean + publishedAt?: boolean + viewCount?: boolean + metaTitle?: boolean + metaDescription?: boolean + createdAt?: boolean + updatedAt?: boolean + author?: boolean | UserDefaultArgs + }, ExtArgs["result"]["blogPost"]> + + export type BlogPostSelectScalar = { + id?: boolean + slug?: boolean + title?: boolean + contentKey?: boolean + contentSize?: boolean + excerpt?: boolean + coverImage?: boolean + authorId?: boolean + isPublished?: boolean + publishedAt?: boolean + viewCount?: boolean + metaTitle?: boolean + metaDescription?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type BlogPostOmit = $Extensions.GetOmit<"id" | "slug" | "title" | "contentKey" | "contentSize" | "excerpt" | "coverImage" | "authorId" | "isPublished" | "publishedAt" | "viewCount" | "metaTitle" | "metaDescription" | "createdAt" | "updatedAt", ExtArgs["result"]["blogPost"]> + export type BlogPostInclude = { + author?: boolean | UserDefaultArgs + tags?: boolean | BlogPost$tagsArgs + comments?: boolean | BlogPost$commentsArgs + _count?: boolean | BlogPostCountOutputTypeDefaultArgs + } + export type BlogPostIncludeCreateManyAndReturn = { + author?: boolean | UserDefaultArgs + } + export type BlogPostIncludeUpdateManyAndReturn = { + author?: boolean | UserDefaultArgs + } + + export type $BlogPostPayload = { + name: "BlogPost" + objects: { + author: Prisma.$UserPayload + tags: Prisma.$BlogTagPayload[] + comments: Prisma.$BlogCommentPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + slug: string + title: string + contentKey: string + contentSize: number | null + excerpt: string | null + coverImage: string | null + authorId: string + isPublished: boolean + publishedAt: Date | null + viewCount: number + metaTitle: string | null + metaDescription: string | null + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["blogPost"]> + composites: {} + } + + type BlogPostGetPayload = $Result.GetResult + + type BlogPostCountArgs = + Omit & { + select?: BlogPostCountAggregateInputType | true + } + + export interface BlogPostDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['BlogPost'], meta: { name: 'BlogPost' } } + /** + * Find zero or one BlogPost that matches the filter. + * @param {BlogPostFindUniqueArgs} args - Arguments to find a BlogPost + * @example + * // Get one BlogPost + * const blogPost = await prisma.blogPost.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one BlogPost that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {BlogPostFindUniqueOrThrowArgs} args - Arguments to find a BlogPost + * @example + * // Get one BlogPost + * const blogPost = await prisma.blogPost.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogPost 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 {BlogPostFindFirstArgs} args - Arguments to find a BlogPost + * @example + * // Get one BlogPost + * const blogPost = await prisma.blogPost.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogPost 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 {BlogPostFindFirstOrThrowArgs} args - Arguments to find a BlogPost + * @example + * // Get one BlogPost + * const blogPost = await prisma.blogPost.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more BlogPosts 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 {BlogPostFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all BlogPosts + * const blogPosts = await prisma.blogPost.findMany() + * + * // Get first 10 BlogPosts + * const blogPosts = await prisma.blogPost.findMany({ take: 10 }) + * + * // Only select the `id` + * const blogPostWithIdOnly = await prisma.blogPost.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a BlogPost. + * @param {BlogPostCreateArgs} args - Arguments to create a BlogPost. + * @example + * // Create one BlogPost + * const BlogPost = await prisma.blogPost.create({ + * data: { + * // ... data to create a BlogPost + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many BlogPosts. + * @param {BlogPostCreateManyArgs} args - Arguments to create many BlogPosts. + * @example + * // Create many BlogPosts + * const blogPost = await prisma.blogPost.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many BlogPosts and returns the data saved in the database. + * @param {BlogPostCreateManyAndReturnArgs} args - Arguments to create many BlogPosts. + * @example + * // Create many BlogPosts + * const blogPost = await prisma.blogPost.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many BlogPosts and only return the `id` + * const blogPostWithIdOnly = await prisma.blogPost.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a BlogPost. + * @param {BlogPostDeleteArgs} args - Arguments to delete one BlogPost. + * @example + * // Delete one BlogPost + * const BlogPost = await prisma.blogPost.delete({ + * where: { + * // ... filter to delete one BlogPost + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one BlogPost. + * @param {BlogPostUpdateArgs} args - Arguments to update one BlogPost. + * @example + * // Update one BlogPost + * const blogPost = await prisma.blogPost.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more BlogPosts. + * @param {BlogPostDeleteManyArgs} args - Arguments to filter BlogPosts to delete. + * @example + * // Delete a few BlogPosts + * const { count } = await prisma.blogPost.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogPosts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogPostUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many BlogPosts + * const blogPost = await prisma.blogPost.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogPosts and returns the data updated in the database. + * @param {BlogPostUpdateManyAndReturnArgs} args - Arguments to update many BlogPosts. + * @example + * // Update many BlogPosts + * const blogPost = await prisma.blogPost.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more BlogPosts and only return the `id` + * const blogPostWithIdOnly = await prisma.blogPost.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one BlogPost. + * @param {BlogPostUpsertArgs} args - Arguments to update or create a BlogPost. + * @example + * // Update or create a BlogPost + * const blogPost = await prisma.blogPost.upsert({ + * create: { + * // ... data to create a BlogPost + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the BlogPost we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__BlogPostClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of BlogPosts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogPostCountArgs} args - Arguments to filter BlogPosts to count. + * @example + * // Count the number of BlogPosts + * const count = await prisma.blogPost.count({ + * where: { + * // ... the filter for the BlogPosts we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a BlogPost. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogPostAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by BlogPost. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogPostGroupByArgs} 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 BlogPostGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: BlogPostGroupByArgs['orderBy'] } + : { orderBy?: BlogPostGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetBlogPostGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the BlogPost model + */ + readonly fields: BlogPostFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for BlogPost. + * 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__BlogPostClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + author = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + tags = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + comments = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the BlogPost model + */ + interface BlogPostFieldRefs { + readonly id: FieldRef<"BlogPost", 'String'> + readonly slug: FieldRef<"BlogPost", 'String'> + readonly title: FieldRef<"BlogPost", 'String'> + readonly contentKey: FieldRef<"BlogPost", 'String'> + readonly contentSize: FieldRef<"BlogPost", 'Int'> + readonly excerpt: FieldRef<"BlogPost", 'String'> + readonly coverImage: FieldRef<"BlogPost", 'String'> + readonly authorId: FieldRef<"BlogPost", 'String'> + readonly isPublished: FieldRef<"BlogPost", 'Boolean'> + readonly publishedAt: FieldRef<"BlogPost", 'DateTime'> + readonly viewCount: FieldRef<"BlogPost", 'Int'> + readonly metaTitle: FieldRef<"BlogPost", 'String'> + readonly metaDescription: FieldRef<"BlogPost", 'String'> + readonly createdAt: FieldRef<"BlogPost", 'DateTime'> + readonly updatedAt: FieldRef<"BlogPost", 'DateTime'> + } + + + // Custom InputTypes + /** + * BlogPost findUnique + */ + export type BlogPostFindUniqueArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter, which BlogPost to fetch. + */ + where: BlogPostWhereUniqueInput + } + + /** + * BlogPost findUniqueOrThrow + */ + export type BlogPostFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter, which BlogPost to fetch. + */ + where: BlogPostWhereUniqueInput + } + + /** + * BlogPost findFirst + */ + export type BlogPostFindFirstArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter, which BlogPost to fetch. + */ + where?: BlogPostWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogPosts to fetch. + */ + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogPosts. + */ + cursor?: BlogPostWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogPosts 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` BlogPosts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogPosts. + */ + distinct?: BlogPostScalarFieldEnum | BlogPostScalarFieldEnum[] + } + + /** + * BlogPost findFirstOrThrow + */ + export type BlogPostFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter, which BlogPost to fetch. + */ + where?: BlogPostWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogPosts to fetch. + */ + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogPosts. + */ + cursor?: BlogPostWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogPosts 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` BlogPosts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogPosts. + */ + distinct?: BlogPostScalarFieldEnum | BlogPostScalarFieldEnum[] + } + + /** + * BlogPost findMany + */ + export type BlogPostFindManyArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter, which BlogPosts to fetch. + */ + where?: BlogPostWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogPosts to fetch. + */ + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing BlogPosts. + */ + cursor?: BlogPostWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogPosts 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` BlogPosts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogPosts. + */ + distinct?: BlogPostScalarFieldEnum | BlogPostScalarFieldEnum[] + } + + /** + * BlogPost create + */ + export type BlogPostCreateArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * The data needed to create a BlogPost. + */ + data: XOR + } + + /** + * BlogPost createMany + */ + export type BlogPostCreateManyArgs = { + /** + * The data used to create many BlogPosts. + */ + data: BlogPostCreateManyInput | BlogPostCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * BlogPost createManyAndReturn + */ + export type BlogPostCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelectCreateManyAndReturn | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * The data used to create many BlogPosts. + */ + data: BlogPostCreateManyInput | BlogPostCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostIncludeCreateManyAndReturn | null + } + + /** + * BlogPost update + */ + export type BlogPostUpdateArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * The data needed to update a BlogPost. + */ + data: XOR + /** + * Choose, which BlogPost to update. + */ + where: BlogPostWhereUniqueInput + } + + /** + * BlogPost updateMany + */ + export type BlogPostUpdateManyArgs = { + /** + * The data used to update BlogPosts. + */ + data: XOR + /** + * Filter which BlogPosts to update + */ + where?: BlogPostWhereInput + /** + * Limit how many BlogPosts to update. + */ + limit?: number + } + + /** + * BlogPost updateManyAndReturn + */ + export type BlogPostUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * The data used to update BlogPosts. + */ + data: XOR + /** + * Filter which BlogPosts to update + */ + where?: BlogPostWhereInput + /** + * Limit how many BlogPosts to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostIncludeUpdateManyAndReturn | null + } + + /** + * BlogPost upsert + */ + export type BlogPostUpsertArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * The filter to search for the BlogPost to update in case it exists. + */ + where: BlogPostWhereUniqueInput + /** + * In case the BlogPost found by the `where` argument doesn't exist, create a new BlogPost with this data. + */ + create: XOR + /** + * In case the BlogPost was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * BlogPost delete + */ + export type BlogPostDeleteArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + /** + * Filter which BlogPost to delete. + */ + where: BlogPostWhereUniqueInput + } + + /** + * BlogPost deleteMany + */ + export type BlogPostDeleteManyArgs = { + /** + * Filter which BlogPosts to delete + */ + where?: BlogPostWhereInput + /** + * Limit how many BlogPosts to delete. + */ + limit?: number + } + + /** + * BlogPost.tags + */ + export type BlogPost$tagsArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + where?: BlogTagWhereInput + orderBy?: BlogTagOrderByWithRelationInput | BlogTagOrderByWithRelationInput[] + cursor?: BlogTagWhereUniqueInput + take?: number + skip?: number + distinct?: BlogTagScalarFieldEnum | BlogTagScalarFieldEnum[] + } + + /** + * BlogPost.comments + */ + export type BlogPost$commentsArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + where?: BlogCommentWhereInput + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + cursor?: BlogCommentWhereUniqueInput + take?: number + skip?: number + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * BlogPost without action + */ + export type BlogPostDefaultArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + } + + + /** + * Model BlogTag + */ + + export type AggregateBlogTag = { + _count: BlogTagCountAggregateOutputType | null + _min: BlogTagMinAggregateOutputType | null + _max: BlogTagMaxAggregateOutputType | null + } + + export type BlogTagMinAggregateOutputType = { + id: string | null + name: string | null + slug: string | null + } + + export type BlogTagMaxAggregateOutputType = { + id: string | null + name: string | null + slug: string | null + } + + export type BlogTagCountAggregateOutputType = { + id: number + name: number + slug: number + _all: number + } + + + export type BlogTagMinAggregateInputType = { + id?: true + name?: true + slug?: true + } + + export type BlogTagMaxAggregateInputType = { + id?: true + name?: true + slug?: true + } + + export type BlogTagCountAggregateInputType = { + id?: true + name?: true + slug?: true + _all?: true + } + + export type BlogTagAggregateArgs = { + /** + * Filter which BlogTag to aggregate. + */ + where?: BlogTagWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogTags to fetch. + */ + orderBy?: BlogTagOrderByWithRelationInput | BlogTagOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: BlogTagWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogTags 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` BlogTags. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned BlogTags + **/ + _count?: true | BlogTagCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: BlogTagMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: BlogTagMaxAggregateInputType + } + + export type GetBlogTagAggregateType = { + [P in keyof T & keyof AggregateBlogTag]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type BlogTagGroupByArgs = { + where?: BlogTagWhereInput + orderBy?: BlogTagOrderByWithAggregationInput | BlogTagOrderByWithAggregationInput[] + by: BlogTagScalarFieldEnum[] | BlogTagScalarFieldEnum + having?: BlogTagScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: BlogTagCountAggregateInputType | true + _min?: BlogTagMinAggregateInputType + _max?: BlogTagMaxAggregateInputType + } + + export type BlogTagGroupByOutputType = { + id: string + name: string + slug: string + _count: BlogTagCountAggregateOutputType | null + _min: BlogTagMinAggregateOutputType | null + _max: BlogTagMaxAggregateOutputType | null + } + + type GetBlogTagGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof BlogTagGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type BlogTagSelect = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + slug?: boolean + posts?: boolean | BlogTag$postsArgs + _count?: boolean | BlogTagCountOutputTypeDefaultArgs + }, ExtArgs["result"]["blogTag"]> + + export type BlogTagSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + slug?: boolean + }, ExtArgs["result"]["blogTag"]> + + export type BlogTagSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + name?: boolean + slug?: boolean + }, ExtArgs["result"]["blogTag"]> + + export type BlogTagSelectScalar = { + id?: boolean + name?: boolean + slug?: boolean + } + + export type BlogTagOmit = $Extensions.GetOmit<"id" | "name" | "slug", ExtArgs["result"]["blogTag"]> + export type BlogTagInclude = { + posts?: boolean | BlogTag$postsArgs + _count?: boolean | BlogTagCountOutputTypeDefaultArgs + } + export type BlogTagIncludeCreateManyAndReturn = {} + export type BlogTagIncludeUpdateManyAndReturn = {} + + export type $BlogTagPayload = { + name: "BlogTag" + objects: { + posts: Prisma.$BlogPostPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + name: string + slug: string + }, ExtArgs["result"]["blogTag"]> + composites: {} + } + + type BlogTagGetPayload = $Result.GetResult + + type BlogTagCountArgs = + Omit & { + select?: BlogTagCountAggregateInputType | true + } + + export interface BlogTagDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['BlogTag'], meta: { name: 'BlogTag' } } + /** + * Find zero or one BlogTag that matches the filter. + * @param {BlogTagFindUniqueArgs} args - Arguments to find a BlogTag + * @example + * // Get one BlogTag + * const blogTag = await prisma.blogTag.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one BlogTag that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {BlogTagFindUniqueOrThrowArgs} args - Arguments to find a BlogTag + * @example + * // Get one BlogTag + * const blogTag = await prisma.blogTag.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogTag 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 {BlogTagFindFirstArgs} args - Arguments to find a BlogTag + * @example + * // Get one BlogTag + * const blogTag = await prisma.blogTag.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogTag 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 {BlogTagFindFirstOrThrowArgs} args - Arguments to find a BlogTag + * @example + * // Get one BlogTag + * const blogTag = await prisma.blogTag.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more BlogTags 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 {BlogTagFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all BlogTags + * const blogTags = await prisma.blogTag.findMany() + * + * // Get first 10 BlogTags + * const blogTags = await prisma.blogTag.findMany({ take: 10 }) + * + * // Only select the `id` + * const blogTagWithIdOnly = await prisma.blogTag.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a BlogTag. + * @param {BlogTagCreateArgs} args - Arguments to create a BlogTag. + * @example + * // Create one BlogTag + * const BlogTag = await prisma.blogTag.create({ + * data: { + * // ... data to create a BlogTag + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many BlogTags. + * @param {BlogTagCreateManyArgs} args - Arguments to create many BlogTags. + * @example + * // Create many BlogTags + * const blogTag = await prisma.blogTag.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many BlogTags and returns the data saved in the database. + * @param {BlogTagCreateManyAndReturnArgs} args - Arguments to create many BlogTags. + * @example + * // Create many BlogTags + * const blogTag = await prisma.blogTag.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many BlogTags and only return the `id` + * const blogTagWithIdOnly = await prisma.blogTag.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a BlogTag. + * @param {BlogTagDeleteArgs} args - Arguments to delete one BlogTag. + * @example + * // Delete one BlogTag + * const BlogTag = await prisma.blogTag.delete({ + * where: { + * // ... filter to delete one BlogTag + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one BlogTag. + * @param {BlogTagUpdateArgs} args - Arguments to update one BlogTag. + * @example + * // Update one BlogTag + * const blogTag = await prisma.blogTag.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more BlogTags. + * @param {BlogTagDeleteManyArgs} args - Arguments to filter BlogTags to delete. + * @example + * // Delete a few BlogTags + * const { count } = await prisma.blogTag.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogTags. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogTagUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many BlogTags + * const blogTag = await prisma.blogTag.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogTags and returns the data updated in the database. + * @param {BlogTagUpdateManyAndReturnArgs} args - Arguments to update many BlogTags. + * @example + * // Update many BlogTags + * const blogTag = await prisma.blogTag.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more BlogTags and only return the `id` + * const blogTagWithIdOnly = await prisma.blogTag.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one BlogTag. + * @param {BlogTagUpsertArgs} args - Arguments to update or create a BlogTag. + * @example + * // Update or create a BlogTag + * const blogTag = await prisma.blogTag.upsert({ + * create: { + * // ... data to create a BlogTag + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the BlogTag we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__BlogTagClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of BlogTags. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogTagCountArgs} args - Arguments to filter BlogTags to count. + * @example + * // Count the number of BlogTags + * const count = await prisma.blogTag.count({ + * where: { + * // ... the filter for the BlogTags we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a BlogTag. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogTagAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by BlogTag. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogTagGroupByArgs} 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 BlogTagGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: BlogTagGroupByArgs['orderBy'] } + : { orderBy?: BlogTagGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetBlogTagGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the BlogTag model + */ + readonly fields: BlogTagFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for BlogTag. + * 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__BlogTagClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + posts = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the BlogTag model + */ + interface BlogTagFieldRefs { + readonly id: FieldRef<"BlogTag", 'String'> + readonly name: FieldRef<"BlogTag", 'String'> + readonly slug: FieldRef<"BlogTag", 'String'> + } + + + // Custom InputTypes + /** + * BlogTag findUnique + */ + export type BlogTagFindUniqueArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter, which BlogTag to fetch. + */ + where: BlogTagWhereUniqueInput + } + + /** + * BlogTag findUniqueOrThrow + */ + export type BlogTagFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter, which BlogTag to fetch. + */ + where: BlogTagWhereUniqueInput + } + + /** + * BlogTag findFirst + */ + export type BlogTagFindFirstArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter, which BlogTag to fetch. + */ + where?: BlogTagWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogTags to fetch. + */ + orderBy?: BlogTagOrderByWithRelationInput | BlogTagOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogTags. + */ + cursor?: BlogTagWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogTags 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` BlogTags. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogTags. + */ + distinct?: BlogTagScalarFieldEnum | BlogTagScalarFieldEnum[] + } + + /** + * BlogTag findFirstOrThrow + */ + export type BlogTagFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter, which BlogTag to fetch. + */ + where?: BlogTagWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogTags to fetch. + */ + orderBy?: BlogTagOrderByWithRelationInput | BlogTagOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogTags. + */ + cursor?: BlogTagWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogTags 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` BlogTags. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogTags. + */ + distinct?: BlogTagScalarFieldEnum | BlogTagScalarFieldEnum[] + } + + /** + * BlogTag findMany + */ + export type BlogTagFindManyArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter, which BlogTags to fetch. + */ + where?: BlogTagWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogTags to fetch. + */ + orderBy?: BlogTagOrderByWithRelationInput | BlogTagOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing BlogTags. + */ + cursor?: BlogTagWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogTags 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` BlogTags. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogTags. + */ + distinct?: BlogTagScalarFieldEnum | BlogTagScalarFieldEnum[] + } + + /** + * BlogTag create + */ + export type BlogTagCreateArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * The data needed to create a BlogTag. + */ + data: XOR + } + + /** + * BlogTag createMany + */ + export type BlogTagCreateManyArgs = { + /** + * The data used to create many BlogTags. + */ + data: BlogTagCreateManyInput | BlogTagCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * BlogTag createManyAndReturn + */ + export type BlogTagCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelectCreateManyAndReturn | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * The data used to create many BlogTags. + */ + data: BlogTagCreateManyInput | BlogTagCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * BlogTag update + */ + export type BlogTagUpdateArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * The data needed to update a BlogTag. + */ + data: XOR + /** + * Choose, which BlogTag to update. + */ + where: BlogTagWhereUniqueInput + } + + /** + * BlogTag updateMany + */ + export type BlogTagUpdateManyArgs = { + /** + * The data used to update BlogTags. + */ + data: XOR + /** + * Filter which BlogTags to update + */ + where?: BlogTagWhereInput + /** + * Limit how many BlogTags to update. + */ + limit?: number + } + + /** + * BlogTag updateManyAndReturn + */ + export type BlogTagUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * The data used to update BlogTags. + */ + data: XOR + /** + * Filter which BlogTags to update + */ + where?: BlogTagWhereInput + /** + * Limit how many BlogTags to update. + */ + limit?: number + } + + /** + * BlogTag upsert + */ + export type BlogTagUpsertArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * The filter to search for the BlogTag to update in case it exists. + */ + where: BlogTagWhereUniqueInput + /** + * In case the BlogTag found by the `where` argument doesn't exist, create a new BlogTag with this data. + */ + create: XOR + /** + * In case the BlogTag was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * BlogTag delete + */ + export type BlogTagDeleteArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + /** + * Filter which BlogTag to delete. + */ + where: BlogTagWhereUniqueInput + } + + /** + * BlogTag deleteMany + */ + export type BlogTagDeleteManyArgs = { + /** + * Filter which BlogTags to delete + */ + where?: BlogTagWhereInput + /** + * Limit how many BlogTags to delete. + */ + limit?: number + } + + /** + * BlogTag.posts + */ + export type BlogTag$postsArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + where?: BlogPostWhereInput + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + cursor?: BlogPostWhereUniqueInput + take?: number + skip?: number + distinct?: BlogPostScalarFieldEnum | BlogPostScalarFieldEnum[] + } + + /** + * BlogTag without action + */ + export type BlogTagDefaultArgs = { + /** + * Select specific fields to fetch from the BlogTag + */ + select?: BlogTagSelect | null + /** + * Omit specific fields from the BlogTag + */ + omit?: BlogTagOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogTagInclude | null + } + + + /** + * Model BlogComment + */ + + export type AggregateBlogComment = { + _count: BlogCommentCountAggregateOutputType | null + _min: BlogCommentMinAggregateOutputType | null + _max: BlogCommentMaxAggregateOutputType | null + } + + export type BlogCommentMinAggregateOutputType = { + id: string | null + content: string | null + postId: string | null + authorId: string | null + parentId: string | null + isApproved: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type BlogCommentMaxAggregateOutputType = { + id: string | null + content: string | null + postId: string | null + authorId: string | null + parentId: string | null + isApproved: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type BlogCommentCountAggregateOutputType = { + id: number + content: number + postId: number + authorId: number + parentId: number + isApproved: number + createdAt: number + updatedAt: number + _all: number + } + + + export type BlogCommentMinAggregateInputType = { + id?: true + content?: true + postId?: true + authorId?: true + parentId?: true + isApproved?: true + createdAt?: true + updatedAt?: true + } + + export type BlogCommentMaxAggregateInputType = { + id?: true + content?: true + postId?: true + authorId?: true + parentId?: true + isApproved?: true + createdAt?: true + updatedAt?: true + } + + export type BlogCommentCountAggregateInputType = { + id?: true + content?: true + postId?: true + authorId?: true + parentId?: true + isApproved?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type BlogCommentAggregateArgs = { + /** + * Filter which BlogComment to aggregate. + */ + where?: BlogCommentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogComments to fetch. + */ + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: BlogCommentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogComments 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` BlogComments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned BlogComments + **/ + _count?: true | BlogCommentCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: BlogCommentMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: BlogCommentMaxAggregateInputType + } + + export type GetBlogCommentAggregateType = { + [P in keyof T & keyof AggregateBlogComment]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type BlogCommentGroupByArgs = { + where?: BlogCommentWhereInput + orderBy?: BlogCommentOrderByWithAggregationInput | BlogCommentOrderByWithAggregationInput[] + by: BlogCommentScalarFieldEnum[] | BlogCommentScalarFieldEnum + having?: BlogCommentScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: BlogCommentCountAggregateInputType | true + _min?: BlogCommentMinAggregateInputType + _max?: BlogCommentMaxAggregateInputType + } + + export type BlogCommentGroupByOutputType = { + id: string + content: string + postId: string + authorId: string + parentId: string | null + isApproved: boolean + createdAt: Date + updatedAt: Date + _count: BlogCommentCountAggregateOutputType | null + _min: BlogCommentMinAggregateOutputType | null + _max: BlogCommentMaxAggregateOutputType | null + } + + type GetBlogCommentGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof BlogCommentGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type BlogCommentSelect = $Extensions.GetSelect<{ + id?: boolean + content?: boolean + postId?: boolean + authorId?: boolean + parentId?: boolean + isApproved?: boolean + createdAt?: boolean + updatedAt?: boolean + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + replies?: boolean | BlogComment$repliesArgs + _count?: boolean | BlogCommentCountOutputTypeDefaultArgs + }, ExtArgs["result"]["blogComment"]> + + export type BlogCommentSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + content?: boolean + postId?: boolean + authorId?: boolean + parentId?: boolean + isApproved?: boolean + createdAt?: boolean + updatedAt?: boolean + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + }, ExtArgs["result"]["blogComment"]> + + export type BlogCommentSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + content?: boolean + postId?: boolean + authorId?: boolean + parentId?: boolean + isApproved?: boolean + createdAt?: boolean + updatedAt?: boolean + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + }, ExtArgs["result"]["blogComment"]> + + export type BlogCommentSelectScalar = { + id?: boolean + content?: boolean + postId?: boolean + authorId?: boolean + parentId?: boolean + isApproved?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type BlogCommentOmit = $Extensions.GetOmit<"id" | "content" | "postId" | "authorId" | "parentId" | "isApproved" | "createdAt" | "updatedAt", ExtArgs["result"]["blogComment"]> + export type BlogCommentInclude = { + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + replies?: boolean | BlogComment$repliesArgs + _count?: boolean | BlogCommentCountOutputTypeDefaultArgs + } + export type BlogCommentIncludeCreateManyAndReturn = { + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + } + export type BlogCommentIncludeUpdateManyAndReturn = { + post?: boolean | BlogPostDefaultArgs + author?: boolean | UserDefaultArgs + parent?: boolean | BlogComment$parentArgs + } + + export type $BlogCommentPayload = { + name: "BlogComment" + objects: { + post: Prisma.$BlogPostPayload + author: Prisma.$UserPayload + parent: Prisma.$BlogCommentPayload | null + replies: Prisma.$BlogCommentPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + content: string + postId: string + authorId: string + parentId: string | null + isApproved: boolean + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["blogComment"]> + composites: {} + } + + type BlogCommentGetPayload = $Result.GetResult + + type BlogCommentCountArgs = + Omit & { + select?: BlogCommentCountAggregateInputType | true + } + + export interface BlogCommentDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['BlogComment'], meta: { name: 'BlogComment' } } + /** + * Find zero or one BlogComment that matches the filter. + * @param {BlogCommentFindUniqueArgs} args - Arguments to find a BlogComment + * @example + * // Get one BlogComment + * const blogComment = await prisma.blogComment.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one BlogComment that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {BlogCommentFindUniqueOrThrowArgs} args - Arguments to find a BlogComment + * @example + * // Get one BlogComment + * const blogComment = await prisma.blogComment.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogComment 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 {BlogCommentFindFirstArgs} args - Arguments to find a BlogComment + * @example + * // Get one BlogComment + * const blogComment = await prisma.blogComment.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first BlogComment 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 {BlogCommentFindFirstOrThrowArgs} args - Arguments to find a BlogComment + * @example + * // Get one BlogComment + * const blogComment = await prisma.blogComment.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more BlogComments 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 {BlogCommentFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all BlogComments + * const blogComments = await prisma.blogComment.findMany() + * + * // Get first 10 BlogComments + * const blogComments = await prisma.blogComment.findMany({ take: 10 }) + * + * // Only select the `id` + * const blogCommentWithIdOnly = await prisma.blogComment.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a BlogComment. + * @param {BlogCommentCreateArgs} args - Arguments to create a BlogComment. + * @example + * // Create one BlogComment + * const BlogComment = await prisma.blogComment.create({ + * data: { + * // ... data to create a BlogComment + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many BlogComments. + * @param {BlogCommentCreateManyArgs} args - Arguments to create many BlogComments. + * @example + * // Create many BlogComments + * const blogComment = await prisma.blogComment.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many BlogComments and returns the data saved in the database. + * @param {BlogCommentCreateManyAndReturnArgs} args - Arguments to create many BlogComments. + * @example + * // Create many BlogComments + * const blogComment = await prisma.blogComment.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many BlogComments and only return the `id` + * const blogCommentWithIdOnly = await prisma.blogComment.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a BlogComment. + * @param {BlogCommentDeleteArgs} args - Arguments to delete one BlogComment. + * @example + * // Delete one BlogComment + * const BlogComment = await prisma.blogComment.delete({ + * where: { + * // ... filter to delete one BlogComment + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one BlogComment. + * @param {BlogCommentUpdateArgs} args - Arguments to update one BlogComment. + * @example + * // Update one BlogComment + * const blogComment = await prisma.blogComment.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more BlogComments. + * @param {BlogCommentDeleteManyArgs} args - Arguments to filter BlogComments to delete. + * @example + * // Delete a few BlogComments + * const { count } = await prisma.blogComment.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogComments. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogCommentUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many BlogComments + * const blogComment = await prisma.blogComment.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more BlogComments and returns the data updated in the database. + * @param {BlogCommentUpdateManyAndReturnArgs} args - Arguments to update many BlogComments. + * @example + * // Update many BlogComments + * const blogComment = await prisma.blogComment.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more BlogComments and only return the `id` + * const blogCommentWithIdOnly = await prisma.blogComment.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one BlogComment. + * @param {BlogCommentUpsertArgs} args - Arguments to update or create a BlogComment. + * @example + * // Update or create a BlogComment + * const blogComment = await prisma.blogComment.upsert({ + * create: { + * // ... data to create a BlogComment + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the BlogComment we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__BlogCommentClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of BlogComments. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogCommentCountArgs} args - Arguments to filter BlogComments to count. + * @example + * // Count the number of BlogComments + * const count = await prisma.blogComment.count({ + * where: { + * // ... the filter for the BlogComments we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a BlogComment. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogCommentAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by BlogComment. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {BlogCommentGroupByArgs} 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 BlogCommentGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: BlogCommentGroupByArgs['orderBy'] } + : { orderBy?: BlogCommentGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetBlogCommentGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the BlogComment model + */ + readonly fields: BlogCommentFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for BlogComment. + * 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__BlogCommentClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + post = {}>(args?: Subset>): Prisma__BlogPostClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + author = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + parent = {}>(args?: Subset>): Prisma__BlogCommentClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + replies = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the BlogComment model + */ + interface BlogCommentFieldRefs { + readonly id: FieldRef<"BlogComment", 'String'> + readonly content: FieldRef<"BlogComment", 'String'> + readonly postId: FieldRef<"BlogComment", 'String'> + readonly authorId: FieldRef<"BlogComment", 'String'> + readonly parentId: FieldRef<"BlogComment", 'String'> + readonly isApproved: FieldRef<"BlogComment", 'Boolean'> + readonly createdAt: FieldRef<"BlogComment", 'DateTime'> + readonly updatedAt: FieldRef<"BlogComment", 'DateTime'> + } + + + // Custom InputTypes + /** + * BlogComment findUnique + */ + export type BlogCommentFindUniqueArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter, which BlogComment to fetch. + */ + where: BlogCommentWhereUniqueInput + } + + /** + * BlogComment findUniqueOrThrow + */ + export type BlogCommentFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter, which BlogComment to fetch. + */ + where: BlogCommentWhereUniqueInput + } + + /** + * BlogComment findFirst + */ + export type BlogCommentFindFirstArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter, which BlogComment to fetch. + */ + where?: BlogCommentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogComments to fetch. + */ + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogComments. + */ + cursor?: BlogCommentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogComments 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` BlogComments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogComments. + */ + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * BlogComment findFirstOrThrow + */ + export type BlogCommentFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter, which BlogComment to fetch. + */ + where?: BlogCommentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogComments to fetch. + */ + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for BlogComments. + */ + cursor?: BlogCommentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogComments 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` BlogComments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogComments. + */ + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * BlogComment findMany + */ + export type BlogCommentFindManyArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter, which BlogComments to fetch. + */ + where?: BlogCommentWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of BlogComments to fetch. + */ + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing BlogComments. + */ + cursor?: BlogCommentWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` BlogComments 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` BlogComments. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of BlogComments. + */ + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * BlogComment create + */ + export type BlogCommentCreateArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * The data needed to create a BlogComment. + */ + data: XOR + } + + /** + * BlogComment createMany + */ + export type BlogCommentCreateManyArgs = { + /** + * The data used to create many BlogComments. + */ + data: BlogCommentCreateManyInput | BlogCommentCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * BlogComment createManyAndReturn + */ + export type BlogCommentCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelectCreateManyAndReturn | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * The data used to create many BlogComments. + */ + data: BlogCommentCreateManyInput | BlogCommentCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentIncludeCreateManyAndReturn | null + } + + /** + * BlogComment update + */ + export type BlogCommentUpdateArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * The data needed to update a BlogComment. + */ + data: XOR + /** + * Choose, which BlogComment to update. + */ + where: BlogCommentWhereUniqueInput + } + + /** + * BlogComment updateMany + */ + export type BlogCommentUpdateManyArgs = { + /** + * The data used to update BlogComments. + */ + data: XOR + /** + * Filter which BlogComments to update + */ + where?: BlogCommentWhereInput + /** + * Limit how many BlogComments to update. + */ + limit?: number + } + + /** + * BlogComment updateManyAndReturn + */ + export type BlogCommentUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * The data used to update BlogComments. + */ + data: XOR + /** + * Filter which BlogComments to update + */ + where?: BlogCommentWhereInput + /** + * Limit how many BlogComments to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentIncludeUpdateManyAndReturn | null + } + + /** + * BlogComment upsert + */ + export type BlogCommentUpsertArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * The filter to search for the BlogComment to update in case it exists. + */ + where: BlogCommentWhereUniqueInput + /** + * In case the BlogComment found by the `where` argument doesn't exist, create a new BlogComment with this data. + */ + create: XOR + /** + * In case the BlogComment was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * BlogComment delete + */ + export type BlogCommentDeleteArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + /** + * Filter which BlogComment to delete. + */ + where: BlogCommentWhereUniqueInput + } + + /** + * BlogComment deleteMany + */ + export type BlogCommentDeleteManyArgs = { + /** + * Filter which BlogComments to delete + */ + where?: BlogCommentWhereInput + /** + * Limit how many BlogComments to delete. + */ + limit?: number + } + + /** + * BlogComment.parent + */ + export type BlogComment$parentArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + where?: BlogCommentWhereInput + } + + /** + * BlogComment.replies + */ + export type BlogComment$repliesArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + where?: BlogCommentWhereInput + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + cursor?: BlogCommentWhereUniqueInput + take?: number + skip?: number + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * BlogComment without action + */ + export type BlogCommentDefaultArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + } + + + /** + * Model Event + */ + + export type AggregateEvent = { + _count: EventCountAggregateOutputType | null + _avg: EventAvgAggregateOutputType | null + _sum: EventSumAggregateOutputType | null + _min: EventMinAggregateOutputType | null + _max: EventMaxAggregateOutputType | null + } + + export type EventAvgAggregateOutputType = { + attendees: number | null + } + + export type EventSumAggregateOutputType = { + attendees: number | null + } + + export type EventMinAggregateOutputType = { + id: string | null + title: string | null + description: string | null + startDate: Date | null + endDate: Date | null + location: string | null + type: $Enums.EventType | null + organizer: string | null + attendees: number | null + surveyLink: string | null + createdBy: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type EventMaxAggregateOutputType = { + id: string | null + title: string | null + description: string | null + startDate: Date | null + endDate: Date | null + location: string | null + type: $Enums.EventType | null + organizer: string | null + attendees: number | null + surveyLink: string | null + createdBy: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type EventCountAggregateOutputType = { + id: number + title: number + description: number + startDate: number + endDate: number + location: number + type: number + organizer: number + attendees: number + surveyLink: number + createdBy: number + createdAt: number + updatedAt: number + _all: number + } + + + export type EventAvgAggregateInputType = { + attendees?: true + } + + export type EventSumAggregateInputType = { + attendees?: true + } + + export type EventMinAggregateInputType = { + id?: true + title?: true + description?: true + startDate?: true + endDate?: true + location?: true + type?: true + organizer?: true + attendees?: true + surveyLink?: true + createdBy?: true + createdAt?: true + updatedAt?: true + } + + export type EventMaxAggregateInputType = { + id?: true + title?: true + description?: true + startDate?: true + endDate?: true + location?: true + type?: true + organizer?: true + attendees?: true + surveyLink?: true + createdBy?: true + createdAt?: true + updatedAt?: true + } + + export type EventCountAggregateInputType = { + id?: true + title?: true + description?: true + startDate?: true + endDate?: true + location?: true + type?: true + organizer?: true + attendees?: true + surveyLink?: true + createdBy?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type EventAggregateArgs = { + /** + * Filter which Event to aggregate. + */ + where?: EventWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Events to fetch. + */ + orderBy?: EventOrderByWithRelationInput | EventOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: EventWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Events 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` Events. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Events + **/ + _count?: true | EventCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: EventAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: EventSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: EventMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: EventMaxAggregateInputType + } + + export type GetEventAggregateType = { + [P in keyof T & keyof AggregateEvent]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type EventGroupByArgs = { + where?: EventWhereInput + orderBy?: EventOrderByWithAggregationInput | EventOrderByWithAggregationInput[] + by: EventScalarFieldEnum[] | EventScalarFieldEnum + having?: EventScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: EventCountAggregateInputType | true + _avg?: EventAvgAggregateInputType + _sum?: EventSumAggregateInputType + _min?: EventMinAggregateInputType + _max?: EventMaxAggregateInputType + } + + export type EventGroupByOutputType = { + id: string + title: string + description: string | null + startDate: Date + endDate: Date + location: string | null + type: $Enums.EventType + organizer: string | null + attendees: number | null + surveyLink: string | null + createdBy: string | null + createdAt: Date + updatedAt: Date + _count: EventCountAggregateOutputType | null + _avg: EventAvgAggregateOutputType | null + _sum: EventSumAggregateOutputType | null + _min: EventMinAggregateOutputType | null + _max: EventMaxAggregateOutputType | null + } + + type GetEventGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof EventGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type EventSelect = $Extensions.GetSelect<{ + id?: boolean + title?: boolean + description?: boolean + startDate?: boolean + endDate?: boolean + location?: boolean + type?: boolean + organizer?: boolean + attendees?: boolean + surveyLink?: boolean + createdBy?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["event"]> + + export type EventSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + title?: boolean + description?: boolean + startDate?: boolean + endDate?: boolean + location?: boolean + type?: boolean + organizer?: boolean + attendees?: boolean + surveyLink?: boolean + createdBy?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["event"]> + + export type EventSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + title?: boolean + description?: boolean + startDate?: boolean + endDate?: boolean + location?: boolean + type?: boolean + organizer?: boolean + attendees?: boolean + surveyLink?: boolean + createdBy?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["event"]> + + export type EventSelectScalar = { + id?: boolean + title?: boolean + description?: boolean + startDate?: boolean + endDate?: boolean + location?: boolean + type?: boolean + organizer?: boolean + attendees?: boolean + surveyLink?: boolean + createdBy?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type EventOmit = $Extensions.GetOmit<"id" | "title" | "description" | "startDate" | "endDate" | "location" | "type" | "organizer" | "attendees" | "surveyLink" | "createdBy" | "createdAt" | "updatedAt", ExtArgs["result"]["event"]> + + export type $EventPayload = { + name: "Event" + objects: {} + scalars: $Extensions.GetPayloadResult<{ + id: string + title: string + description: string | null + startDate: Date + endDate: Date + location: string | null + type: $Enums.EventType + organizer: string | null + attendees: number | null + surveyLink: string | null + createdBy: string | null + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["event"]> + composites: {} + } + + type EventGetPayload = $Result.GetResult + + type EventCountArgs = + Omit & { + select?: EventCountAggregateInputType | true + } + + export interface EventDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Event'], meta: { name: 'Event' } } + /** + * Find zero or one Event that matches the filter. + * @param {EventFindUniqueArgs} args - Arguments to find a Event + * @example + * // Get one Event + * const event = await prisma.event.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Event that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {EventFindUniqueOrThrowArgs} args - Arguments to find a Event + * @example + * // Get one Event + * const event = await prisma.event.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Event 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 {EventFindFirstArgs} args - Arguments to find a Event + * @example + * // Get one Event + * const event = await prisma.event.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Event 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 {EventFindFirstOrThrowArgs} args - Arguments to find a Event + * @example + * // Get one Event + * const event = await prisma.event.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Events 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 {EventFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Events + * const events = await prisma.event.findMany() + * + * // Get first 10 Events + * const events = await prisma.event.findMany({ take: 10 }) + * + * // Only select the `id` + * const eventWithIdOnly = await prisma.event.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Event. + * @param {EventCreateArgs} args - Arguments to create a Event. + * @example + * // Create one Event + * const Event = await prisma.event.create({ + * data: { + * // ... data to create a Event + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Events. + * @param {EventCreateManyArgs} args - Arguments to create many Events. + * @example + * // Create many Events + * const event = await prisma.event.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Events and returns the data saved in the database. + * @param {EventCreateManyAndReturnArgs} args - Arguments to create many Events. + * @example + * // Create many Events + * const event = await prisma.event.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Events and only return the `id` + * const eventWithIdOnly = await prisma.event.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Event. + * @param {EventDeleteArgs} args - Arguments to delete one Event. + * @example + * // Delete one Event + * const Event = await prisma.event.delete({ + * where: { + * // ... filter to delete one Event + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Event. + * @param {EventUpdateArgs} args - Arguments to update one Event. + * @example + * // Update one Event + * const event = await prisma.event.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Events. + * @param {EventDeleteManyArgs} args - Arguments to filter Events to delete. + * @example + * // Delete a few Events + * const { count } = await prisma.event.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Events. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {EventUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Events + * const event = await prisma.event.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Events and returns the data updated in the database. + * @param {EventUpdateManyAndReturnArgs} args - Arguments to update many Events. + * @example + * // Update many Events + * const event = await prisma.event.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Events and only return the `id` + * const eventWithIdOnly = await prisma.event.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Event. + * @param {EventUpsertArgs} args - Arguments to update or create a Event. + * @example + * // Update or create a Event + * const event = await prisma.event.upsert({ + * create: { + * // ... data to create a Event + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Event we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__EventClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Events. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {EventCountArgs} args - Arguments to filter Events to count. + * @example + * // Count the number of Events + * const count = await prisma.event.count({ + * where: { + * // ... the filter for the Events we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Event. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {EventAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Event. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {EventGroupByArgs} 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 EventGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: EventGroupByArgs['orderBy'] } + : { orderBy?: EventGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetEventGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Event model + */ + readonly fields: EventFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Event. + * 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__EventClient extends Prisma.PrismaPromise { + 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Event model + */ + interface EventFieldRefs { + readonly id: FieldRef<"Event", 'String'> + readonly title: FieldRef<"Event", 'String'> + readonly description: FieldRef<"Event", 'String'> + readonly startDate: FieldRef<"Event", 'DateTime'> + readonly endDate: FieldRef<"Event", 'DateTime'> + readonly location: FieldRef<"Event", 'String'> + readonly type: FieldRef<"Event", 'EventType'> + readonly organizer: FieldRef<"Event", 'String'> + readonly attendees: FieldRef<"Event", 'Int'> + readonly surveyLink: FieldRef<"Event", 'String'> + readonly createdBy: FieldRef<"Event", 'String'> + readonly createdAt: FieldRef<"Event", 'DateTime'> + readonly updatedAt: FieldRef<"Event", 'DateTime'> + } + + + // Custom InputTypes + /** + * Event findUnique + */ + export type EventFindUniqueArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter, which Event to fetch. + */ + where: EventWhereUniqueInput + } + + /** + * Event findUniqueOrThrow + */ + export type EventFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter, which Event to fetch. + */ + where: EventWhereUniqueInput + } + + /** + * Event findFirst + */ + export type EventFindFirstArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter, which Event to fetch. + */ + where?: EventWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Events to fetch. + */ + orderBy?: EventOrderByWithRelationInput | EventOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Events. + */ + cursor?: EventWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Events 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` Events. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Events. + */ + distinct?: EventScalarFieldEnum | EventScalarFieldEnum[] + } + + /** + * Event findFirstOrThrow + */ + export type EventFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter, which Event to fetch. + */ + where?: EventWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Events to fetch. + */ + orderBy?: EventOrderByWithRelationInput | EventOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Events. + */ + cursor?: EventWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Events 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` Events. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Events. + */ + distinct?: EventScalarFieldEnum | EventScalarFieldEnum[] + } + + /** + * Event findMany + */ + export type EventFindManyArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter, which Events to fetch. + */ + where?: EventWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Events to fetch. + */ + orderBy?: EventOrderByWithRelationInput | EventOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Events. + */ + cursor?: EventWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Events 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` Events. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Events. + */ + distinct?: EventScalarFieldEnum | EventScalarFieldEnum[] + } + + /** + * Event create + */ + export type EventCreateArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * The data needed to create a Event. + */ + data: XOR + } + + /** + * Event createMany + */ + export type EventCreateManyArgs = { + /** + * The data used to create many Events. + */ + data: EventCreateManyInput | EventCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Event createManyAndReturn + */ + export type EventCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * The data used to create many Events. + */ + data: EventCreateManyInput | EventCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Event update + */ + export type EventUpdateArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * The data needed to update a Event. + */ + data: XOR + /** + * Choose, which Event to update. + */ + where: EventWhereUniqueInput + } + + /** + * Event updateMany + */ + export type EventUpdateManyArgs = { + /** + * The data used to update Events. + */ + data: XOR + /** + * Filter which Events to update + */ + where?: EventWhereInput + /** + * Limit how many Events to update. + */ + limit?: number + } + + /** + * Event updateManyAndReturn + */ + export type EventUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * The data used to update Events. + */ + data: XOR + /** + * Filter which Events to update + */ + where?: EventWhereInput + /** + * Limit how many Events to update. + */ + limit?: number + } + + /** + * Event upsert + */ + export type EventUpsertArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * The filter to search for the Event to update in case it exists. + */ + where: EventWhereUniqueInput + /** + * In case the Event found by the `where` argument doesn't exist, create a new Event with this data. + */ + create: XOR + /** + * In case the Event was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Event delete + */ + export type EventDeleteArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + /** + * Filter which Event to delete. + */ + where: EventWhereUniqueInput + } + + /** + * Event deleteMany + */ + export type EventDeleteManyArgs = { + /** + * Filter which Events to delete + */ + where?: EventWhereInput + /** + * Limit how many Events to delete. + */ + limit?: number + } + + /** + * Event without action + */ + export type EventDefaultArgs = { + /** + * Select specific fields to fetch from the Event + */ + select?: EventSelect | null + /** + * Omit specific fields from the Event + */ + omit?: EventOmit | null + } + + + /** + * Model Voucher + */ + + export type AggregateVoucher = { + _count: VoucherCountAggregateOutputType | null + _avg: VoucherAvgAggregateOutputType | null + _sum: VoucherSumAggregateOutputType | null + _min: VoucherMinAggregateOutputType | null + _max: VoucherMaxAggregateOutputType | null + } + + export type VoucherAvgAggregateOutputType = { + value: Decimal | null + minSpend: Decimal | null + maxDiscount: Decimal | null + usageLimit: number | null + usedCount: number | null + } + + export type VoucherSumAggregateOutputType = { + value: Decimal | null + minSpend: Decimal | null + maxDiscount: Decimal | null + usageLimit: number | null + usedCount: number | null + } + + export type VoucherMinAggregateOutputType = { + id: string | null + code: string | null + type: $Enums.DiscountType | null + value: Decimal | null + minSpend: Decimal | null + maxDiscount: Decimal | null + usageLimit: number | null + usedCount: number | null + startDate: Date | null + endDate: Date | null + isActive: boolean | null + } + + export type VoucherMaxAggregateOutputType = { + id: string | null + code: string | null + type: $Enums.DiscountType | null + value: Decimal | null + minSpend: Decimal | null + maxDiscount: Decimal | null + usageLimit: number | null + usedCount: number | null + startDate: Date | null + endDate: Date | null + isActive: boolean | null + } + + export type VoucherCountAggregateOutputType = { + id: number + code: number + type: number + value: number + minSpend: number + maxDiscount: number + usageLimit: number + usedCount: number + startDate: number + endDate: number + isActive: number + _all: number + } + + + export type VoucherAvgAggregateInputType = { + value?: true + minSpend?: true + maxDiscount?: true + usageLimit?: true + usedCount?: true + } + + export type VoucherSumAggregateInputType = { + value?: true + minSpend?: true + maxDiscount?: true + usageLimit?: true + usedCount?: true + } + + export type VoucherMinAggregateInputType = { + id?: true + code?: true + type?: true + value?: true + minSpend?: true + maxDiscount?: true + usageLimit?: true + usedCount?: true + startDate?: true + endDate?: true + isActive?: true + } + + export type VoucherMaxAggregateInputType = { + id?: true + code?: true + type?: true + value?: true + minSpend?: true + maxDiscount?: true + usageLimit?: true + usedCount?: true + startDate?: true + endDate?: true + isActive?: true + } + + export type VoucherCountAggregateInputType = { + id?: true + code?: true + type?: true + value?: true + minSpend?: true + maxDiscount?: true + usageLimit?: true + usedCount?: true + startDate?: true + endDate?: true + isActive?: true + _all?: true + } + + export type VoucherAggregateArgs = { + /** + * Filter which Voucher to aggregate. + */ + where?: VoucherWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Vouchers to fetch. + */ + orderBy?: VoucherOrderByWithRelationInput | VoucherOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: VoucherWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Vouchers 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` Vouchers. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Vouchers + **/ + _count?: true | VoucherCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: VoucherAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: VoucherSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: VoucherMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: VoucherMaxAggregateInputType + } + + export type GetVoucherAggregateType = { + [P in keyof T & keyof AggregateVoucher]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type VoucherGroupByArgs = { + where?: VoucherWhereInput + orderBy?: VoucherOrderByWithAggregationInput | VoucherOrderByWithAggregationInput[] + by: VoucherScalarFieldEnum[] | VoucherScalarFieldEnum + having?: VoucherScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: VoucherCountAggregateInputType | true + _avg?: VoucherAvgAggregateInputType + _sum?: VoucherSumAggregateInputType + _min?: VoucherMinAggregateInputType + _max?: VoucherMaxAggregateInputType + } + + export type VoucherGroupByOutputType = { + id: string + code: string + type: $Enums.DiscountType + value: Decimal + minSpend: Decimal | null + maxDiscount: Decimal | null + usageLimit: number + usedCount: number + startDate: Date + endDate: Date + isActive: boolean + _count: VoucherCountAggregateOutputType | null + _avg: VoucherAvgAggregateOutputType | null + _sum: VoucherSumAggregateOutputType | null + _min: VoucherMinAggregateOutputType | null + _max: VoucherMaxAggregateOutputType | null + } + + type GetVoucherGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof VoucherGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type VoucherSelect = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + type?: boolean + value?: boolean + minSpend?: boolean + maxDiscount?: boolean + usageLimit?: boolean + usedCount?: boolean + startDate?: boolean + endDate?: boolean + isActive?: boolean + }, ExtArgs["result"]["voucher"]> + + export type VoucherSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + type?: boolean + value?: boolean + minSpend?: boolean + maxDiscount?: boolean + usageLimit?: boolean + usedCount?: boolean + startDate?: boolean + endDate?: boolean + isActive?: boolean + }, ExtArgs["result"]["voucher"]> + + export type VoucherSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + type?: boolean + value?: boolean + minSpend?: boolean + maxDiscount?: boolean + usageLimit?: boolean + usedCount?: boolean + startDate?: boolean + endDate?: boolean + isActive?: boolean + }, ExtArgs["result"]["voucher"]> + + export type VoucherSelectScalar = { + id?: boolean + code?: boolean + type?: boolean + value?: boolean + minSpend?: boolean + maxDiscount?: boolean + usageLimit?: boolean + usedCount?: boolean + startDate?: boolean + endDate?: boolean + isActive?: boolean + } + + export type VoucherOmit = $Extensions.GetOmit<"id" | "code" | "type" | "value" | "minSpend" | "maxDiscount" | "usageLimit" | "usedCount" | "startDate" | "endDate" | "isActive", ExtArgs["result"]["voucher"]> + + export type $VoucherPayload = { + name: "Voucher" + objects: {} + scalars: $Extensions.GetPayloadResult<{ + id: string + code: string + type: $Enums.DiscountType + value: Prisma.Decimal + minSpend: Prisma.Decimal | null + maxDiscount: Prisma.Decimal | null + usageLimit: number + usedCount: number + startDate: Date + endDate: Date + isActive: boolean + }, ExtArgs["result"]["voucher"]> + composites: {} + } + + type VoucherGetPayload = $Result.GetResult + + type VoucherCountArgs = + Omit & { + select?: VoucherCountAggregateInputType | true + } + + export interface VoucherDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Voucher'], meta: { name: 'Voucher' } } + /** + * Find zero or one Voucher that matches the filter. + * @param {VoucherFindUniqueArgs} args - Arguments to find a Voucher + * @example + * // Get one Voucher + * const voucher = await prisma.voucher.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Voucher that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {VoucherFindUniqueOrThrowArgs} args - Arguments to find a Voucher + * @example + * // Get one Voucher + * const voucher = await prisma.voucher.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Voucher 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 {VoucherFindFirstArgs} args - Arguments to find a Voucher + * @example + * // Get one Voucher + * const voucher = await prisma.voucher.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Voucher 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 {VoucherFindFirstOrThrowArgs} args - Arguments to find a Voucher + * @example + * // Get one Voucher + * const voucher = await prisma.voucher.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Vouchers 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 {VoucherFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Vouchers + * const vouchers = await prisma.voucher.findMany() + * + * // Get first 10 Vouchers + * const vouchers = await prisma.voucher.findMany({ take: 10 }) + * + * // Only select the `id` + * const voucherWithIdOnly = await prisma.voucher.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Voucher. + * @param {VoucherCreateArgs} args - Arguments to create a Voucher. + * @example + * // Create one Voucher + * const Voucher = await prisma.voucher.create({ + * data: { + * // ... data to create a Voucher + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Vouchers. + * @param {VoucherCreateManyArgs} args - Arguments to create many Vouchers. + * @example + * // Create many Vouchers + * const voucher = await prisma.voucher.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Vouchers and returns the data saved in the database. + * @param {VoucherCreateManyAndReturnArgs} args - Arguments to create many Vouchers. + * @example + * // Create many Vouchers + * const voucher = await prisma.voucher.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Vouchers and only return the `id` + * const voucherWithIdOnly = await prisma.voucher.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Voucher. + * @param {VoucherDeleteArgs} args - Arguments to delete one Voucher. + * @example + * // Delete one Voucher + * const Voucher = await prisma.voucher.delete({ + * where: { + * // ... filter to delete one Voucher + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Voucher. + * @param {VoucherUpdateArgs} args - Arguments to update one Voucher. + * @example + * // Update one Voucher + * const voucher = await prisma.voucher.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Vouchers. + * @param {VoucherDeleteManyArgs} args - Arguments to filter Vouchers to delete. + * @example + * // Delete a few Vouchers + * const { count } = await prisma.voucher.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Vouchers. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {VoucherUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Vouchers + * const voucher = await prisma.voucher.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Vouchers and returns the data updated in the database. + * @param {VoucherUpdateManyAndReturnArgs} args - Arguments to update many Vouchers. + * @example + * // Update many Vouchers + * const voucher = await prisma.voucher.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Vouchers and only return the `id` + * const voucherWithIdOnly = await prisma.voucher.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Voucher. + * @param {VoucherUpsertArgs} args - Arguments to update or create a Voucher. + * @example + * // Update or create a Voucher + * const voucher = await prisma.voucher.upsert({ + * create: { + * // ... data to create a Voucher + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Voucher we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__VoucherClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Vouchers. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {VoucherCountArgs} args - Arguments to filter Vouchers to count. + * @example + * // Count the number of Vouchers + * const count = await prisma.voucher.count({ + * where: { + * // ... the filter for the Vouchers we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Voucher. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {VoucherAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Voucher. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {VoucherGroupByArgs} 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 VoucherGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: VoucherGroupByArgs['orderBy'] } + : { orderBy?: VoucherGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetVoucherGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Voucher model + */ + readonly fields: VoucherFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Voucher. + * 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__VoucherClient extends Prisma.PrismaPromise { + 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Voucher model + */ + interface VoucherFieldRefs { + readonly id: FieldRef<"Voucher", 'String'> + readonly code: FieldRef<"Voucher", 'String'> + readonly type: FieldRef<"Voucher", 'DiscountType'> + readonly value: FieldRef<"Voucher", 'Decimal'> + readonly minSpend: FieldRef<"Voucher", 'Decimal'> + readonly maxDiscount: FieldRef<"Voucher", 'Decimal'> + readonly usageLimit: FieldRef<"Voucher", 'Int'> + readonly usedCount: FieldRef<"Voucher", 'Int'> + readonly startDate: FieldRef<"Voucher", 'DateTime'> + readonly endDate: FieldRef<"Voucher", 'DateTime'> + readonly isActive: FieldRef<"Voucher", 'Boolean'> + } + + + // Custom InputTypes + /** + * Voucher findUnique + */ + export type VoucherFindUniqueArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter, which Voucher to fetch. + */ + where: VoucherWhereUniqueInput + } + + /** + * Voucher findUniqueOrThrow + */ + export type VoucherFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter, which Voucher to fetch. + */ + where: VoucherWhereUniqueInput + } + + /** + * Voucher findFirst + */ + export type VoucherFindFirstArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter, which Voucher to fetch. + */ + where?: VoucherWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Vouchers to fetch. + */ + orderBy?: VoucherOrderByWithRelationInput | VoucherOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Vouchers. + */ + cursor?: VoucherWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Vouchers 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` Vouchers. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Vouchers. + */ + distinct?: VoucherScalarFieldEnum | VoucherScalarFieldEnum[] + } + + /** + * Voucher findFirstOrThrow + */ + export type VoucherFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter, which Voucher to fetch. + */ + where?: VoucherWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Vouchers to fetch. + */ + orderBy?: VoucherOrderByWithRelationInput | VoucherOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Vouchers. + */ + cursor?: VoucherWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Vouchers 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` Vouchers. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Vouchers. + */ + distinct?: VoucherScalarFieldEnum | VoucherScalarFieldEnum[] + } + + /** + * Voucher findMany + */ + export type VoucherFindManyArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter, which Vouchers to fetch. + */ + where?: VoucherWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Vouchers to fetch. + */ + orderBy?: VoucherOrderByWithRelationInput | VoucherOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Vouchers. + */ + cursor?: VoucherWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Vouchers 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` Vouchers. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Vouchers. + */ + distinct?: VoucherScalarFieldEnum | VoucherScalarFieldEnum[] + } + + /** + * Voucher create + */ + export type VoucherCreateArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * The data needed to create a Voucher. + */ + data: XOR + } + + /** + * Voucher createMany + */ + export type VoucherCreateManyArgs = { + /** + * The data used to create many Vouchers. + */ + data: VoucherCreateManyInput | VoucherCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Voucher createManyAndReturn + */ + export type VoucherCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * The data used to create many Vouchers. + */ + data: VoucherCreateManyInput | VoucherCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Voucher update + */ + export type VoucherUpdateArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * The data needed to update a Voucher. + */ + data: XOR + /** + * Choose, which Voucher to update. + */ + where: VoucherWhereUniqueInput + } + + /** + * Voucher updateMany + */ + export type VoucherUpdateManyArgs = { + /** + * The data used to update Vouchers. + */ + data: XOR + /** + * Filter which Vouchers to update + */ + where?: VoucherWhereInput + /** + * Limit how many Vouchers to update. + */ + limit?: number + } + + /** + * Voucher updateManyAndReturn + */ + export type VoucherUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * The data used to update Vouchers. + */ + data: XOR + /** + * Filter which Vouchers to update + */ + where?: VoucherWhereInput + /** + * Limit how many Vouchers to update. + */ + limit?: number + } + + /** + * Voucher upsert + */ + export type VoucherUpsertArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * The filter to search for the Voucher to update in case it exists. + */ + where: VoucherWhereUniqueInput + /** + * In case the Voucher found by the `where` argument doesn't exist, create a new Voucher with this data. + */ + create: XOR + /** + * In case the Voucher was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Voucher delete + */ + export type VoucherDeleteArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + /** + * Filter which Voucher to delete. + */ + where: VoucherWhereUniqueInput + } + + /** + * Voucher deleteMany + */ + export type VoucherDeleteManyArgs = { + /** + * Filter which Vouchers to delete + */ + where?: VoucherWhereInput + /** + * Limit how many Vouchers to delete. + */ + limit?: number + } + + /** + * Voucher without action + */ + export type VoucherDefaultArgs = { + /** + * Select specific fields to fetch from the Voucher + */ + select?: VoucherSelect | null + /** + * Omit specific fields from the Voucher + */ + omit?: VoucherOmit | null + } + + + /** + * Model Review + */ + + export type AggregateReview = { + _count: ReviewCountAggregateOutputType | null + _avg: ReviewAvgAggregateOutputType | null + _sum: ReviewSumAggregateOutputType | null + _min: ReviewMinAggregateOutputType | null + _max: ReviewMaxAggregateOutputType | null + } + + export type ReviewAvgAggregateOutputType = { + rating: number | null + } + + export type ReviewSumAggregateOutputType = { + rating: number | null + } + + export type ReviewMinAggregateOutputType = { + id: string | null + rating: number | null + comment: string | null + userId: string | null + productId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ReviewMaxAggregateOutputType = { + id: string | null + rating: number | null + comment: string | null + userId: string | null + productId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ReviewCountAggregateOutputType = { + id: number + rating: number + comment: number + userId: number + productId: number + createdAt: number + updatedAt: number + _all: number + } + + + export type ReviewAvgAggregateInputType = { + rating?: true + } + + export type ReviewSumAggregateInputType = { + rating?: true + } + + export type ReviewMinAggregateInputType = { + id?: true + rating?: true + comment?: true + userId?: true + productId?: true + createdAt?: true + updatedAt?: true + } + + export type ReviewMaxAggregateInputType = { + id?: true + rating?: true + comment?: true + userId?: true + productId?: true + createdAt?: true + updatedAt?: true + } + + export type ReviewCountAggregateInputType = { + id?: true + rating?: true + comment?: true + userId?: true + productId?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type ReviewAggregateArgs = { + /** + * Filter which Review to aggregate. + */ + where?: ReviewWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Reviews to fetch. + */ + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ReviewWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Reviews 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` Reviews. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Reviews + **/ + _count?: true | ReviewCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ReviewAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ReviewSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ReviewMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ReviewMaxAggregateInputType + } + + export type GetReviewAggregateType = { + [P in keyof T & keyof AggregateReview]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ReviewGroupByArgs = { + where?: ReviewWhereInput + orderBy?: ReviewOrderByWithAggregationInput | ReviewOrderByWithAggregationInput[] + by: ReviewScalarFieldEnum[] | ReviewScalarFieldEnum + having?: ReviewScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ReviewCountAggregateInputType | true + _avg?: ReviewAvgAggregateInputType + _sum?: ReviewSumAggregateInputType + _min?: ReviewMinAggregateInputType + _max?: ReviewMaxAggregateInputType + } + + export type ReviewGroupByOutputType = { + id: string + rating: number + comment: string | null + userId: string + productId: string + createdAt: Date + updatedAt: Date + _count: ReviewCountAggregateOutputType | null + _avg: ReviewAvgAggregateOutputType | null + _sum: ReviewSumAggregateOutputType | null + _min: ReviewMinAggregateOutputType | null + _max: ReviewMaxAggregateOutputType | null + } + + type GetReviewGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ReviewGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ReviewSelect = $Extensions.GetSelect<{ + id?: boolean + rating?: boolean + comment?: boolean + userId?: boolean + productId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["review"]> + + export type ReviewSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + rating?: boolean + comment?: boolean + userId?: boolean + productId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["review"]> + + export type ReviewSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + rating?: boolean + comment?: boolean + userId?: boolean + productId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["review"]> + + export type ReviewSelectScalar = { + id?: boolean + rating?: boolean + comment?: boolean + userId?: boolean + productId?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type ReviewOmit = $Extensions.GetOmit<"id" | "rating" | "comment" | "userId" | "productId" | "createdAt" | "updatedAt", ExtArgs["result"]["review"]> + export type ReviewInclude = { + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + } + export type ReviewIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + } + export type ReviewIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + product?: boolean | ProductDefaultArgs + } + + export type $ReviewPayload = { + name: "Review" + objects: { + user: Prisma.$UserPayload + product: Prisma.$ProductPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + rating: number + comment: string | null + userId: string + productId: string + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["review"]> + composites: {} + } + + type ReviewGetPayload = $Result.GetResult + + type ReviewCountArgs = + Omit & { + select?: ReviewCountAggregateInputType | true + } + + export interface ReviewDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Review'], meta: { name: 'Review' } } + /** + * Find zero or one Review that matches the filter. + * @param {ReviewFindUniqueArgs} args - Arguments to find a Review + * @example + * // Get one Review + * const review = await prisma.review.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Review that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ReviewFindUniqueOrThrowArgs} args - Arguments to find a Review + * @example + * // Get one Review + * const review = await prisma.review.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Review 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 {ReviewFindFirstArgs} args - Arguments to find a Review + * @example + * // Get one Review + * const review = await prisma.review.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Review 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 {ReviewFindFirstOrThrowArgs} args - Arguments to find a Review + * @example + * // Get one Review + * const review = await prisma.review.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Reviews 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 {ReviewFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Reviews + * const reviews = await prisma.review.findMany() + * + * // Get first 10 Reviews + * const reviews = await prisma.review.findMany({ take: 10 }) + * + * // Only select the `id` + * const reviewWithIdOnly = await prisma.review.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Review. + * @param {ReviewCreateArgs} args - Arguments to create a Review. + * @example + * // Create one Review + * const Review = await prisma.review.create({ + * data: { + * // ... data to create a Review + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Reviews. + * @param {ReviewCreateManyArgs} args - Arguments to create many Reviews. + * @example + * // Create many Reviews + * const review = await prisma.review.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Reviews and returns the data saved in the database. + * @param {ReviewCreateManyAndReturnArgs} args - Arguments to create many Reviews. + * @example + * // Create many Reviews + * const review = await prisma.review.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Reviews and only return the `id` + * const reviewWithIdOnly = await prisma.review.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Review. + * @param {ReviewDeleteArgs} args - Arguments to delete one Review. + * @example + * // Delete one Review + * const Review = await prisma.review.delete({ + * where: { + * // ... filter to delete one Review + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Review. + * @param {ReviewUpdateArgs} args - Arguments to update one Review. + * @example + * // Update one Review + * const review = await prisma.review.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Reviews. + * @param {ReviewDeleteManyArgs} args - Arguments to filter Reviews to delete. + * @example + * // Delete a few Reviews + * const { count } = await prisma.review.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Reviews. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ReviewUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Reviews + * const review = await prisma.review.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Reviews and returns the data updated in the database. + * @param {ReviewUpdateManyAndReturnArgs} args - Arguments to update many Reviews. + * @example + * // Update many Reviews + * const review = await prisma.review.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Reviews and only return the `id` + * const reviewWithIdOnly = await prisma.review.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Review. + * @param {ReviewUpsertArgs} args - Arguments to update or create a Review. + * @example + * // Update or create a Review + * const review = await prisma.review.upsert({ + * create: { + * // ... data to create a Review + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Review we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ReviewClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Reviews. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ReviewCountArgs} args - Arguments to filter Reviews to count. + * @example + * // Count the number of Reviews + * const count = await prisma.review.count({ + * where: { + * // ... the filter for the Reviews we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Review. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ReviewAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Review. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ReviewGroupByArgs} 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 ReviewGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ReviewGroupByArgs['orderBy'] } + : { orderBy?: ReviewGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetReviewGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Review model + */ + readonly fields: ReviewFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Review. + * 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__ReviewClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + product = {}>(args?: Subset>): Prisma__ProductClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Review model + */ + interface ReviewFieldRefs { + readonly id: FieldRef<"Review", 'String'> + readonly rating: FieldRef<"Review", 'Int'> + readonly comment: FieldRef<"Review", 'String'> + readonly userId: FieldRef<"Review", 'String'> + readonly productId: FieldRef<"Review", 'String'> + readonly createdAt: FieldRef<"Review", 'DateTime'> + readonly updatedAt: FieldRef<"Review", 'DateTime'> + } + + + // Custom InputTypes + /** + * Review findUnique + */ + export type ReviewFindUniqueArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter, which Review to fetch. + */ + where: ReviewWhereUniqueInput + } + + /** + * Review findUniqueOrThrow + */ + export type ReviewFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter, which Review to fetch. + */ + where: ReviewWhereUniqueInput + } + + /** + * Review findFirst + */ + export type ReviewFindFirstArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter, which Review to fetch. + */ + where?: ReviewWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Reviews to fetch. + */ + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Reviews. + */ + cursor?: ReviewWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Reviews 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` Reviews. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Reviews. + */ + distinct?: ReviewScalarFieldEnum | ReviewScalarFieldEnum[] + } + + /** + * Review findFirstOrThrow + */ + export type ReviewFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter, which Review to fetch. + */ + where?: ReviewWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Reviews to fetch. + */ + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Reviews. + */ + cursor?: ReviewWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Reviews 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` Reviews. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Reviews. + */ + distinct?: ReviewScalarFieldEnum | ReviewScalarFieldEnum[] + } + + /** + * Review findMany + */ + export type ReviewFindManyArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter, which Reviews to fetch. + */ + where?: ReviewWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Reviews to fetch. + */ + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Reviews. + */ + cursor?: ReviewWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Reviews 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` Reviews. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Reviews. + */ + distinct?: ReviewScalarFieldEnum | ReviewScalarFieldEnum[] + } + + /** + * Review create + */ + export type ReviewCreateArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * The data needed to create a Review. + */ + data: XOR + } + + /** + * Review createMany + */ + export type ReviewCreateManyArgs = { + /** + * The data used to create many Reviews. + */ + data: ReviewCreateManyInput | ReviewCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Review createManyAndReturn + */ + export type ReviewCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * The data used to create many Reviews. + */ + data: ReviewCreateManyInput | ReviewCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewIncludeCreateManyAndReturn | null + } + + /** + * Review update + */ + export type ReviewUpdateArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * The data needed to update a Review. + */ + data: XOR + /** + * Choose, which Review to update. + */ + where: ReviewWhereUniqueInput + } + + /** + * Review updateMany + */ + export type ReviewUpdateManyArgs = { + /** + * The data used to update Reviews. + */ + data: XOR + /** + * Filter which Reviews to update + */ + where?: ReviewWhereInput + /** + * Limit how many Reviews to update. + */ + limit?: number + } + + /** + * Review updateManyAndReturn + */ + export type ReviewUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * The data used to update Reviews. + */ + data: XOR + /** + * Filter which Reviews to update + */ + where?: ReviewWhereInput + /** + * Limit how many Reviews to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewIncludeUpdateManyAndReturn | null + } + + /** + * Review upsert + */ + export type ReviewUpsertArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * The filter to search for the Review to update in case it exists. + */ + where: ReviewWhereUniqueInput + /** + * In case the Review found by the `where` argument doesn't exist, create a new Review with this data. + */ + create: XOR + /** + * In case the Review was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Review delete + */ + export type ReviewDeleteArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + /** + * Filter which Review to delete. + */ + where: ReviewWhereUniqueInput + } + + /** + * Review deleteMany + */ + export type ReviewDeleteManyArgs = { + /** + * Filter which Reviews to delete + */ + where?: ReviewWhereInput + /** + * Limit how many Reviews to delete. + */ + limit?: number + } + + /** + * Review without action + */ + export type ReviewDefaultArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + } + + + /** + * Model Cart + */ + + export type AggregateCart = { + _count: CartCountAggregateOutputType | null + _min: CartMinAggregateOutputType | null + _max: CartMaxAggregateOutputType | null + } + + export type CartMinAggregateOutputType = { + id: string | null + userId: string | null + updatedAt: Date | null + } + + export type CartMaxAggregateOutputType = { + id: string | null + userId: string | null + updatedAt: Date | null + } + + export type CartCountAggregateOutputType = { + id: number + userId: number + updatedAt: number + _all: number + } + + + export type CartMinAggregateInputType = { + id?: true + userId?: true + updatedAt?: true + } + + export type CartMaxAggregateInputType = { + id?: true + userId?: true + updatedAt?: true + } + + export type CartCountAggregateInputType = { + id?: true + userId?: true + updatedAt?: true + _all?: true + } + + export type CartAggregateArgs = { + /** + * Filter which Cart to aggregate. + */ + where?: CartWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Carts to fetch. + */ + orderBy?: CartOrderByWithRelationInput | CartOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: CartWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Carts 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` Carts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Carts + **/ + _count?: true | CartCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: CartMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: CartMaxAggregateInputType + } + + export type GetCartAggregateType = { + [P in keyof T & keyof AggregateCart]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type CartGroupByArgs = { + where?: CartWhereInput + orderBy?: CartOrderByWithAggregationInput | CartOrderByWithAggregationInput[] + by: CartScalarFieldEnum[] | CartScalarFieldEnum + having?: CartScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: CartCountAggregateInputType | true + _min?: CartMinAggregateInputType + _max?: CartMaxAggregateInputType + } + + export type CartGroupByOutputType = { + id: string + userId: string + updatedAt: Date + _count: CartCountAggregateOutputType | null + _min: CartMinAggregateOutputType | null + _max: CartMaxAggregateOutputType | null + } + + type GetCartGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof CartGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type CartSelect = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + items?: boolean | Cart$itemsArgs + _count?: boolean | CartCountOutputTypeDefaultArgs + }, ExtArgs["result"]["cart"]> + + export type CartSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["cart"]> + + export type CartSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["cart"]> + + export type CartSelectScalar = { + id?: boolean + userId?: boolean + updatedAt?: boolean + } + + export type CartOmit = $Extensions.GetOmit<"id" | "userId" | "updatedAt", ExtArgs["result"]["cart"]> + export type CartInclude = { + user?: boolean | UserDefaultArgs + items?: boolean | Cart$itemsArgs + _count?: boolean | CartCountOutputTypeDefaultArgs + } + export type CartIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type CartIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $CartPayload = { + name: "Cart" + objects: { + user: Prisma.$UserPayload + items: Prisma.$CartItemPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + userId: string + updatedAt: Date + }, ExtArgs["result"]["cart"]> + composites: {} + } + + type CartGetPayload = $Result.GetResult + + type CartCountArgs = + Omit & { + select?: CartCountAggregateInputType | true + } + + export interface CartDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Cart'], meta: { name: 'Cart' } } + /** + * Find zero or one Cart that matches the filter. + * @param {CartFindUniqueArgs} args - Arguments to find a Cart + * @example + * // Get one Cart + * const cart = await prisma.cart.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Cart that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {CartFindUniqueOrThrowArgs} args - Arguments to find a Cart + * @example + * // Get one Cart + * const cart = await prisma.cart.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Cart 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 {CartFindFirstArgs} args - Arguments to find a Cart + * @example + * // Get one Cart + * const cart = await prisma.cart.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Cart 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 {CartFindFirstOrThrowArgs} args - Arguments to find a Cart + * @example + * // Get one Cart + * const cart = await prisma.cart.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Carts 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 {CartFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Carts + * const carts = await prisma.cart.findMany() + * + * // Get first 10 Carts + * const carts = await prisma.cart.findMany({ take: 10 }) + * + * // Only select the `id` + * const cartWithIdOnly = await prisma.cart.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Cart. + * @param {CartCreateArgs} args - Arguments to create a Cart. + * @example + * // Create one Cart + * const Cart = await prisma.cart.create({ + * data: { + * // ... data to create a Cart + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Carts. + * @param {CartCreateManyArgs} args - Arguments to create many Carts. + * @example + * // Create many Carts + * const cart = await prisma.cart.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Carts and returns the data saved in the database. + * @param {CartCreateManyAndReturnArgs} args - Arguments to create many Carts. + * @example + * // Create many Carts + * const cart = await prisma.cart.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Carts and only return the `id` + * const cartWithIdOnly = await prisma.cart.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Cart. + * @param {CartDeleteArgs} args - Arguments to delete one Cart. + * @example + * // Delete one Cart + * const Cart = await prisma.cart.delete({ + * where: { + * // ... filter to delete one Cart + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Cart. + * @param {CartUpdateArgs} args - Arguments to update one Cart. + * @example + * // Update one Cart + * const cart = await prisma.cart.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Carts. + * @param {CartDeleteManyArgs} args - Arguments to filter Carts to delete. + * @example + * // Delete a few Carts + * const { count } = await prisma.cart.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Carts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Carts + * const cart = await prisma.cart.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Carts and returns the data updated in the database. + * @param {CartUpdateManyAndReturnArgs} args - Arguments to update many Carts. + * @example + * // Update many Carts + * const cart = await prisma.cart.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Carts and only return the `id` + * const cartWithIdOnly = await prisma.cart.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Cart. + * @param {CartUpsertArgs} args - Arguments to update or create a Cart. + * @example + * // Update or create a Cart + * const cart = await prisma.cart.upsert({ + * create: { + * // ... data to create a Cart + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Cart we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__CartClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Carts. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartCountArgs} args - Arguments to filter Carts to count. + * @example + * // Count the number of Carts + * const count = await prisma.cart.count({ + * where: { + * // ... the filter for the Carts we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Cart. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Cart. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartGroupByArgs} 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 CartGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: CartGroupByArgs['orderBy'] } + : { orderBy?: CartGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetCartGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Cart model + */ + readonly fields: CartFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Cart. + * 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__CartClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + items = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Cart model + */ + interface CartFieldRefs { + readonly id: FieldRef<"Cart", 'String'> + readonly userId: FieldRef<"Cart", 'String'> + readonly updatedAt: FieldRef<"Cart", 'DateTime'> + } + + + // Custom InputTypes + /** + * Cart findUnique + */ + export type CartFindUniqueArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter, which Cart to fetch. + */ + where: CartWhereUniqueInput + } + + /** + * Cart findUniqueOrThrow + */ + export type CartFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter, which Cart to fetch. + */ + where: CartWhereUniqueInput + } + + /** + * Cart findFirst + */ + export type CartFindFirstArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter, which Cart to fetch. + */ + where?: CartWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Carts to fetch. + */ + orderBy?: CartOrderByWithRelationInput | CartOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Carts. + */ + cursor?: CartWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Carts 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` Carts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Carts. + */ + distinct?: CartScalarFieldEnum | CartScalarFieldEnum[] + } + + /** + * Cart findFirstOrThrow + */ + export type CartFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter, which Cart to fetch. + */ + where?: CartWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Carts to fetch. + */ + orderBy?: CartOrderByWithRelationInput | CartOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Carts. + */ + cursor?: CartWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Carts 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` Carts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Carts. + */ + distinct?: CartScalarFieldEnum | CartScalarFieldEnum[] + } + + /** + * Cart findMany + */ + export type CartFindManyArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter, which Carts to fetch. + */ + where?: CartWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Carts to fetch. + */ + orderBy?: CartOrderByWithRelationInput | CartOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Carts. + */ + cursor?: CartWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Carts 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` Carts. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Carts. + */ + distinct?: CartScalarFieldEnum | CartScalarFieldEnum[] + } + + /** + * Cart create + */ + export type CartCreateArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * The data needed to create a Cart. + */ + data: XOR + } + + /** + * Cart createMany + */ + export type CartCreateManyArgs = { + /** + * The data used to create many Carts. + */ + data: CartCreateManyInput | CartCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Cart createManyAndReturn + */ + export type CartCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * The data used to create many Carts. + */ + data: CartCreateManyInput | CartCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: CartIncludeCreateManyAndReturn | null + } + + /** + * Cart update + */ + export type CartUpdateArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * The data needed to update a Cart. + */ + data: XOR + /** + * Choose, which Cart to update. + */ + where: CartWhereUniqueInput + } + + /** + * Cart updateMany + */ + export type CartUpdateManyArgs = { + /** + * The data used to update Carts. + */ + data: XOR + /** + * Filter which Carts to update + */ + where?: CartWhereInput + /** + * Limit how many Carts to update. + */ + limit?: number + } + + /** + * Cart updateManyAndReturn + */ + export type CartUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * The data used to update Carts. + */ + data: XOR + /** + * Filter which Carts to update + */ + where?: CartWhereInput + /** + * Limit how many Carts to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: CartIncludeUpdateManyAndReturn | null + } + + /** + * Cart upsert + */ + export type CartUpsertArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * The filter to search for the Cart to update in case it exists. + */ + where: CartWhereUniqueInput + /** + * In case the Cart found by the `where` argument doesn't exist, create a new Cart with this data. + */ + create: XOR + /** + * In case the Cart was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Cart delete + */ + export type CartDeleteArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + /** + * Filter which Cart to delete. + */ + where: CartWhereUniqueInput + } + + /** + * Cart deleteMany + */ + export type CartDeleteManyArgs = { + /** + * Filter which Carts to delete + */ + where?: CartWhereInput + /** + * Limit how many Carts to delete. + */ + limit?: number + } + + /** + * Cart.items + */ + export type Cart$itemsArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + where?: CartItemWhereInput + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + cursor?: CartItemWhereUniqueInput + take?: number + skip?: number + distinct?: CartItemScalarFieldEnum | CartItemScalarFieldEnum[] + } + + /** + * Cart without action + */ + export type CartDefaultArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + } + + + /** + * Model CartItem + */ + + export type AggregateCartItem = { + _count: CartItemCountAggregateOutputType | null + _avg: CartItemAvgAggregateOutputType | null + _sum: CartItemSumAggregateOutputType | null + _min: CartItemMinAggregateOutputType | null + _max: CartItemMaxAggregateOutputType | null + } + + export type CartItemAvgAggregateOutputType = { + quantity: number | null + } + + export type CartItemSumAggregateOutputType = { + quantity: number | null + } + + export type CartItemMinAggregateOutputType = { + id: string | null + cartId: string | null + productId: string | null + size: $Enums.ProductSize | null + quantity: number | null + } + + export type CartItemMaxAggregateOutputType = { + id: string | null + cartId: string | null + productId: string | null + size: $Enums.ProductSize | null + quantity: number | null + } + + export type CartItemCountAggregateOutputType = { + id: number + cartId: number + productId: number + size: number + quantity: number + _all: number + } + + + export type CartItemAvgAggregateInputType = { + quantity?: true + } + + export type CartItemSumAggregateInputType = { + quantity?: true + } + + export type CartItemMinAggregateInputType = { + id?: true + cartId?: true + productId?: true + size?: true + quantity?: true + } + + export type CartItemMaxAggregateInputType = { + id?: true + cartId?: true + productId?: true + size?: true + quantity?: true + } + + export type CartItemCountAggregateInputType = { + id?: true + cartId?: true + productId?: true + size?: true + quantity?: true + _all?: true + } + + export type CartItemAggregateArgs = { + /** + * Filter which CartItem to aggregate. + */ + where?: CartItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of CartItems to fetch. + */ + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: CartItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` CartItems 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` CartItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned CartItems + **/ + _count?: true | CartItemCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: CartItemAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: CartItemSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: CartItemMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: CartItemMaxAggregateInputType + } + + export type GetCartItemAggregateType = { + [P in keyof T & keyof AggregateCartItem]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type CartItemGroupByArgs = { + where?: CartItemWhereInput + orderBy?: CartItemOrderByWithAggregationInput | CartItemOrderByWithAggregationInput[] + by: CartItemScalarFieldEnum[] | CartItemScalarFieldEnum + having?: CartItemScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: CartItemCountAggregateInputType | true + _avg?: CartItemAvgAggregateInputType + _sum?: CartItemSumAggregateInputType + _min?: CartItemMinAggregateInputType + _max?: CartItemMaxAggregateInputType + } + + export type CartItemGroupByOutputType = { + id: string + cartId: string + productId: string + size: $Enums.ProductSize | null + quantity: number + _count: CartItemCountAggregateOutputType | null + _avg: CartItemAvgAggregateOutputType | null + _sum: CartItemSumAggregateOutputType | null + _min: CartItemMinAggregateOutputType | null + _max: CartItemMaxAggregateOutputType | null + } + + type GetCartItemGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof CartItemGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type CartItemSelect = $Extensions.GetSelect<{ + id?: boolean + cartId?: boolean + productId?: boolean + size?: boolean + quantity?: boolean + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["cartItem"]> + + export type CartItemSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + cartId?: boolean + productId?: boolean + size?: boolean + quantity?: boolean + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["cartItem"]> + + export type CartItemSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + cartId?: boolean + productId?: boolean + size?: boolean + quantity?: boolean + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["cartItem"]> + + export type CartItemSelectScalar = { + id?: boolean + cartId?: boolean + productId?: boolean + size?: boolean + quantity?: boolean + } + + export type CartItemOmit = $Extensions.GetOmit<"id" | "cartId" | "productId" | "size" | "quantity", ExtArgs["result"]["cartItem"]> + export type CartItemInclude = { + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + } + export type CartItemIncludeCreateManyAndReturn = { + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + } + export type CartItemIncludeUpdateManyAndReturn = { + cart?: boolean | CartDefaultArgs + product?: boolean | ProductDefaultArgs + } + + export type $CartItemPayload = { + name: "CartItem" + objects: { + cart: Prisma.$CartPayload + product: Prisma.$ProductPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + cartId: string + productId: string + size: $Enums.ProductSize | null + quantity: number + }, ExtArgs["result"]["cartItem"]> + composites: {} + } + + type CartItemGetPayload = $Result.GetResult + + type CartItemCountArgs = + Omit & { + select?: CartItemCountAggregateInputType | true + } + + export interface CartItemDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['CartItem'], meta: { name: 'CartItem' } } + /** + * Find zero or one CartItem that matches the filter. + * @param {CartItemFindUniqueArgs} args - Arguments to find a CartItem + * @example + * // Get one CartItem + * const cartItem = await prisma.cartItem.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one CartItem that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {CartItemFindUniqueOrThrowArgs} args - Arguments to find a CartItem + * @example + * // Get one CartItem + * const cartItem = await prisma.cartItem.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first CartItem 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 {CartItemFindFirstArgs} args - Arguments to find a CartItem + * @example + * // Get one CartItem + * const cartItem = await prisma.cartItem.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first CartItem 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 {CartItemFindFirstOrThrowArgs} args - Arguments to find a CartItem + * @example + * // Get one CartItem + * const cartItem = await prisma.cartItem.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more CartItems 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 {CartItemFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all CartItems + * const cartItems = await prisma.cartItem.findMany() + * + * // Get first 10 CartItems + * const cartItems = await prisma.cartItem.findMany({ take: 10 }) + * + * // Only select the `id` + * const cartItemWithIdOnly = await prisma.cartItem.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a CartItem. + * @param {CartItemCreateArgs} args - Arguments to create a CartItem. + * @example + * // Create one CartItem + * const CartItem = await prisma.cartItem.create({ + * data: { + * // ... data to create a CartItem + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many CartItems. + * @param {CartItemCreateManyArgs} args - Arguments to create many CartItems. + * @example + * // Create many CartItems + * const cartItem = await prisma.cartItem.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many CartItems and returns the data saved in the database. + * @param {CartItemCreateManyAndReturnArgs} args - Arguments to create many CartItems. + * @example + * // Create many CartItems + * const cartItem = await prisma.cartItem.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many CartItems and only return the `id` + * const cartItemWithIdOnly = await prisma.cartItem.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a CartItem. + * @param {CartItemDeleteArgs} args - Arguments to delete one CartItem. + * @example + * // Delete one CartItem + * const CartItem = await prisma.cartItem.delete({ + * where: { + * // ... filter to delete one CartItem + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one CartItem. + * @param {CartItemUpdateArgs} args - Arguments to update one CartItem. + * @example + * // Update one CartItem + * const cartItem = await prisma.cartItem.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more CartItems. + * @param {CartItemDeleteManyArgs} args - Arguments to filter CartItems to delete. + * @example + * // Delete a few CartItems + * const { count } = await prisma.cartItem.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more CartItems. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartItemUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many CartItems + * const cartItem = await prisma.cartItem.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more CartItems and returns the data updated in the database. + * @param {CartItemUpdateManyAndReturnArgs} args - Arguments to update many CartItems. + * @example + * // Update many CartItems + * const cartItem = await prisma.cartItem.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more CartItems and only return the `id` + * const cartItemWithIdOnly = await prisma.cartItem.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one CartItem. + * @param {CartItemUpsertArgs} args - Arguments to update or create a CartItem. + * @example + * // Update or create a CartItem + * const cartItem = await prisma.cartItem.upsert({ + * create: { + * // ... data to create a CartItem + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the CartItem we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__CartItemClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of CartItems. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartItemCountArgs} args - Arguments to filter CartItems to count. + * @example + * // Count the number of CartItems + * const count = await prisma.cartItem.count({ + * where: { + * // ... the filter for the CartItems we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a CartItem. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartItemAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by CartItem. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {CartItemGroupByArgs} 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 CartItemGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: CartItemGroupByArgs['orderBy'] } + : { orderBy?: CartItemGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetCartItemGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the CartItem model + */ + readonly fields: CartItemFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for CartItem. + * 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__CartItemClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + cart = {}>(args?: Subset>): Prisma__CartClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + product = {}>(args?: Subset>): Prisma__ProductClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the CartItem model + */ + interface CartItemFieldRefs { + readonly id: FieldRef<"CartItem", 'String'> + readonly cartId: FieldRef<"CartItem", 'String'> + readonly productId: FieldRef<"CartItem", 'String'> + readonly size: FieldRef<"CartItem", 'ProductSize'> + readonly quantity: FieldRef<"CartItem", 'Int'> + } + + + // Custom InputTypes + /** + * CartItem findUnique + */ + export type CartItemFindUniqueArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter, which CartItem to fetch. + */ + where: CartItemWhereUniqueInput + } + + /** + * CartItem findUniqueOrThrow + */ + export type CartItemFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter, which CartItem to fetch. + */ + where: CartItemWhereUniqueInput + } + + /** + * CartItem findFirst + */ + export type CartItemFindFirstArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter, which CartItem to fetch. + */ + where?: CartItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of CartItems to fetch. + */ + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for CartItems. + */ + cursor?: CartItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` CartItems 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` CartItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of CartItems. + */ + distinct?: CartItemScalarFieldEnum | CartItemScalarFieldEnum[] + } + + /** + * CartItem findFirstOrThrow + */ + export type CartItemFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter, which CartItem to fetch. + */ + where?: CartItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of CartItems to fetch. + */ + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for CartItems. + */ + cursor?: CartItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` CartItems 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` CartItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of CartItems. + */ + distinct?: CartItemScalarFieldEnum | CartItemScalarFieldEnum[] + } + + /** + * CartItem findMany + */ + export type CartItemFindManyArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter, which CartItems to fetch. + */ + where?: CartItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of CartItems to fetch. + */ + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing CartItems. + */ + cursor?: CartItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` CartItems 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` CartItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of CartItems. + */ + distinct?: CartItemScalarFieldEnum | CartItemScalarFieldEnum[] + } + + /** + * CartItem create + */ + export type CartItemCreateArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * The data needed to create a CartItem. + */ + data: XOR + } + + /** + * CartItem createMany + */ + export type CartItemCreateManyArgs = { + /** + * The data used to create many CartItems. + */ + data: CartItemCreateManyInput | CartItemCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * CartItem createManyAndReturn + */ + export type CartItemCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelectCreateManyAndReturn | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * The data used to create many CartItems. + */ + data: CartItemCreateManyInput | CartItemCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemIncludeCreateManyAndReturn | null + } + + /** + * CartItem update + */ + export type CartItemUpdateArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * The data needed to update a CartItem. + */ + data: XOR + /** + * Choose, which CartItem to update. + */ + where: CartItemWhereUniqueInput + } + + /** + * CartItem updateMany + */ + export type CartItemUpdateManyArgs = { + /** + * The data used to update CartItems. + */ + data: XOR + /** + * Filter which CartItems to update + */ + where?: CartItemWhereInput + /** + * Limit how many CartItems to update. + */ + limit?: number + } + + /** + * CartItem updateManyAndReturn + */ + export type CartItemUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * The data used to update CartItems. + */ + data: XOR + /** + * Filter which CartItems to update + */ + where?: CartItemWhereInput + /** + * Limit how many CartItems to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemIncludeUpdateManyAndReturn | null + } + + /** + * CartItem upsert + */ + export type CartItemUpsertArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * The filter to search for the CartItem to update in case it exists. + */ + where: CartItemWhereUniqueInput + /** + * In case the CartItem found by the `where` argument doesn't exist, create a new CartItem with this data. + */ + create: XOR + /** + * In case the CartItem was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * CartItem delete + */ + export type CartItemDeleteArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + /** + * Filter which CartItem to delete. + */ + where: CartItemWhereUniqueInput + } + + /** + * CartItem deleteMany + */ + export type CartItemDeleteManyArgs = { + /** + * Filter which CartItems to delete + */ + where?: CartItemWhereInput + /** + * Limit how many CartItems to delete. + */ + limit?: number + } + + /** + * CartItem without action + */ + export type CartItemDefaultArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + } + + + /** + * Model Order + */ + + export type AggregateOrder = { + _count: OrderCountAggregateOutputType | null + _avg: OrderAvgAggregateOutputType | null + _sum: OrderSumAggregateOutputType | null + _min: OrderMinAggregateOutputType | null + _max: OrderMaxAggregateOutputType | null + } + + export type OrderAvgAggregateOutputType = { + totalAmount: Decimal | null + shippingFee: Decimal | null + discountValue: Decimal | null + } + + export type OrderSumAggregateOutputType = { + totalAmount: Decimal | null + shippingFee: Decimal | null + discountValue: Decimal | null + } + + export type OrderMinAggregateOutputType = { + id: string | null + code: string | null + userId: string | null + status: $Enums.OrderStatus | null + paymentStatus: $Enums.PaymentStatus | null + totalAmount: Decimal | null + shippingFee: Decimal | null + discountValue: Decimal | null + shippingAddressId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type OrderMaxAggregateOutputType = { + id: string | null + code: string | null + userId: string | null + status: $Enums.OrderStatus | null + paymentStatus: $Enums.PaymentStatus | null + totalAmount: Decimal | null + shippingFee: Decimal | null + discountValue: Decimal | null + shippingAddressId: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type OrderCountAggregateOutputType = { + id: number + code: number + userId: number + status: number + paymentStatus: number + totalAmount: number + shippingFee: number + discountValue: number + shippingAddressId: number + createdAt: number + updatedAt: number + _all: number + } + + + export type OrderAvgAggregateInputType = { + totalAmount?: true + shippingFee?: true + discountValue?: true + } + + export type OrderSumAggregateInputType = { + totalAmount?: true + shippingFee?: true + discountValue?: true + } + + export type OrderMinAggregateInputType = { + id?: true + code?: true + userId?: true + status?: true + paymentStatus?: true + totalAmount?: true + shippingFee?: true + discountValue?: true + shippingAddressId?: true + createdAt?: true + updatedAt?: true + } + + export type OrderMaxAggregateInputType = { + id?: true + code?: true + userId?: true + status?: true + paymentStatus?: true + totalAmount?: true + shippingFee?: true + discountValue?: true + shippingAddressId?: true + createdAt?: true + updatedAt?: true + } + + export type OrderCountAggregateInputType = { + id?: true + code?: true + userId?: true + status?: true + paymentStatus?: true + totalAmount?: true + shippingFee?: true + discountValue?: true + shippingAddressId?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type OrderAggregateArgs = { + /** + * Filter which Order to aggregate. + */ + where?: OrderWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Orders to fetch. + */ + orderBy?: OrderOrderByWithRelationInput | OrderOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: OrderWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Orders 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` Orders. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Orders + **/ + _count?: true | OrderCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: OrderAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: OrderSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: OrderMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: OrderMaxAggregateInputType + } + + export type GetOrderAggregateType = { + [P in keyof T & keyof AggregateOrder]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type OrderGroupByArgs = { + where?: OrderWhereInput + orderBy?: OrderOrderByWithAggregationInput | OrderOrderByWithAggregationInput[] + by: OrderScalarFieldEnum[] | OrderScalarFieldEnum + having?: OrderScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: OrderCountAggregateInputType | true + _avg?: OrderAvgAggregateInputType + _sum?: OrderSumAggregateInputType + _min?: OrderMinAggregateInputType + _max?: OrderMaxAggregateInputType + } + + export type OrderGroupByOutputType = { + id: string + code: string + userId: string + status: $Enums.OrderStatus + paymentStatus: $Enums.PaymentStatus + totalAmount: Decimal + shippingFee: Decimal + discountValue: Decimal + shippingAddressId: string + createdAt: Date + updatedAt: Date + _count: OrderCountAggregateOutputType | null + _avg: OrderAvgAggregateOutputType | null + _sum: OrderSumAggregateOutputType | null + _min: OrderMinAggregateOutputType | null + _max: OrderMaxAggregateOutputType | null + } + + type GetOrderGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof OrderGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type OrderSelect = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + userId?: boolean + status?: boolean + paymentStatus?: boolean + totalAmount?: boolean + shippingFee?: boolean + discountValue?: boolean + shippingAddressId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + items?: boolean | Order$itemsArgs + paymentTransaction?: boolean | Order$paymentTransactionArgs + _count?: boolean | OrderCountOutputTypeDefaultArgs + }, ExtArgs["result"]["order"]> + + export type OrderSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + userId?: boolean + status?: boolean + paymentStatus?: boolean + totalAmount?: boolean + shippingFee?: boolean + discountValue?: boolean + shippingAddressId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + }, ExtArgs["result"]["order"]> + + export type OrderSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + code?: boolean + userId?: boolean + status?: boolean + paymentStatus?: boolean + totalAmount?: boolean + shippingFee?: boolean + discountValue?: boolean + shippingAddressId?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + }, ExtArgs["result"]["order"]> + + export type OrderSelectScalar = { + id?: boolean + code?: boolean + userId?: boolean + status?: boolean + paymentStatus?: boolean + totalAmount?: boolean + shippingFee?: boolean + discountValue?: boolean + shippingAddressId?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type OrderOmit = $Extensions.GetOmit<"id" | "code" | "userId" | "status" | "paymentStatus" | "totalAmount" | "shippingFee" | "discountValue" | "shippingAddressId" | "createdAt" | "updatedAt", ExtArgs["result"]["order"]> + export type OrderInclude = { + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + items?: boolean | Order$itemsArgs + paymentTransaction?: boolean | Order$paymentTransactionArgs + _count?: boolean | OrderCountOutputTypeDefaultArgs + } + export type OrderIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + } + export type OrderIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + shippingAddress?: boolean | ShippingAddressDefaultArgs + } + + export type $OrderPayload = { + name: "Order" + objects: { + user: Prisma.$UserPayload + shippingAddress: Prisma.$ShippingAddressPayload + items: Prisma.$OrderItemPayload[] + paymentTransaction: Prisma.$PaymentTransactionPayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + code: string + userId: string + status: $Enums.OrderStatus + paymentStatus: $Enums.PaymentStatus + totalAmount: Prisma.Decimal + shippingFee: Prisma.Decimal + discountValue: Prisma.Decimal + shippingAddressId: string + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["order"]> + composites: {} + } + + type OrderGetPayload = $Result.GetResult + + type OrderCountArgs = + Omit & { + select?: OrderCountAggregateInputType | true + } + + export interface OrderDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Order'], meta: { name: 'Order' } } + /** + * Find zero or one Order that matches the filter. + * @param {OrderFindUniqueArgs} args - Arguments to find a Order + * @example + * // Get one Order + * const order = await prisma.order.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Order that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {OrderFindUniqueOrThrowArgs} args - Arguments to find a Order + * @example + * // Get one Order + * const order = await prisma.order.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Order 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 {OrderFindFirstArgs} args - Arguments to find a Order + * @example + * // Get one Order + * const order = await prisma.order.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Order 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 {OrderFindFirstOrThrowArgs} args - Arguments to find a Order + * @example + * // Get one Order + * const order = await prisma.order.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Orders 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 {OrderFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Orders + * const orders = await prisma.order.findMany() + * + * // Get first 10 Orders + * const orders = await prisma.order.findMany({ take: 10 }) + * + * // Only select the `id` + * const orderWithIdOnly = await prisma.order.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Order. + * @param {OrderCreateArgs} args - Arguments to create a Order. + * @example + * // Create one Order + * const Order = await prisma.order.create({ + * data: { + * // ... data to create a Order + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Orders. + * @param {OrderCreateManyArgs} args - Arguments to create many Orders. + * @example + * // Create many Orders + * const order = await prisma.order.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Orders and returns the data saved in the database. + * @param {OrderCreateManyAndReturnArgs} args - Arguments to create many Orders. + * @example + * // Create many Orders + * const order = await prisma.order.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Orders and only return the `id` + * const orderWithIdOnly = await prisma.order.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Order. + * @param {OrderDeleteArgs} args - Arguments to delete one Order. + * @example + * // Delete one Order + * const Order = await prisma.order.delete({ + * where: { + * // ... filter to delete one Order + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Order. + * @param {OrderUpdateArgs} args - Arguments to update one Order. + * @example + * // Update one Order + * const order = await prisma.order.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Orders. + * @param {OrderDeleteManyArgs} args - Arguments to filter Orders to delete. + * @example + * // Delete a few Orders + * const { count } = await prisma.order.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Orders. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Orders + * const order = await prisma.order.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Orders and returns the data updated in the database. + * @param {OrderUpdateManyAndReturnArgs} args - Arguments to update many Orders. + * @example + * // Update many Orders + * const order = await prisma.order.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Orders and only return the `id` + * const orderWithIdOnly = await prisma.order.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Order. + * @param {OrderUpsertArgs} args - Arguments to update or create a Order. + * @example + * // Update or create a Order + * const order = await prisma.order.upsert({ + * create: { + * // ... data to create a Order + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Order we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__OrderClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Orders. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderCountArgs} args - Arguments to filter Orders to count. + * @example + * // Count the number of Orders + * const count = await prisma.order.count({ + * where: { + * // ... the filter for the Orders we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Order. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Order. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderGroupByArgs} 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 OrderGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: OrderGroupByArgs['orderBy'] } + : { orderBy?: OrderGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetOrderGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Order model + */ + readonly fields: OrderFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Order. + * 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__OrderClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + shippingAddress = {}>(args?: Subset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + items = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + paymentTransaction = {}>(args?: Subset>): Prisma__PaymentTransactionClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Order model + */ + interface OrderFieldRefs { + readonly id: FieldRef<"Order", 'String'> + readonly code: FieldRef<"Order", 'String'> + readonly userId: FieldRef<"Order", 'String'> + readonly status: FieldRef<"Order", 'OrderStatus'> + readonly paymentStatus: FieldRef<"Order", 'PaymentStatus'> + readonly totalAmount: FieldRef<"Order", 'Decimal'> + readonly shippingFee: FieldRef<"Order", 'Decimal'> + readonly discountValue: FieldRef<"Order", 'Decimal'> + readonly shippingAddressId: FieldRef<"Order", 'String'> + readonly createdAt: FieldRef<"Order", 'DateTime'> + readonly updatedAt: FieldRef<"Order", 'DateTime'> + } + + + // Custom InputTypes + /** + * Order findUnique + */ + export type OrderFindUniqueArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter, which Order to fetch. + */ + where: OrderWhereUniqueInput + } + + /** + * Order findUniqueOrThrow + */ + export type OrderFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter, which Order to fetch. + */ + where: OrderWhereUniqueInput + } + + /** + * Order findFirst + */ + export type OrderFindFirstArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter, which Order to fetch. + */ + where?: OrderWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Orders to fetch. + */ + orderBy?: OrderOrderByWithRelationInput | OrderOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Orders. + */ + cursor?: OrderWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Orders 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` Orders. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Orders. + */ + distinct?: OrderScalarFieldEnum | OrderScalarFieldEnum[] + } + + /** + * Order findFirstOrThrow + */ + export type OrderFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter, which Order to fetch. + */ + where?: OrderWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Orders to fetch. + */ + orderBy?: OrderOrderByWithRelationInput | OrderOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Orders. + */ + cursor?: OrderWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Orders 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` Orders. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Orders. + */ + distinct?: OrderScalarFieldEnum | OrderScalarFieldEnum[] + } + + /** + * Order findMany + */ + export type OrderFindManyArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter, which Orders to fetch. + */ + where?: OrderWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Orders to fetch. + */ + orderBy?: OrderOrderByWithRelationInput | OrderOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Orders. + */ + cursor?: OrderWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Orders 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` Orders. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Orders. + */ + distinct?: OrderScalarFieldEnum | OrderScalarFieldEnum[] + } + + /** + * Order create + */ + export type OrderCreateArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * The data needed to create a Order. + */ + data: XOR + } + + /** + * Order createMany + */ + export type OrderCreateManyArgs = { + /** + * The data used to create many Orders. + */ + data: OrderCreateManyInput | OrderCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Order createManyAndReturn + */ + export type OrderCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * The data used to create many Orders. + */ + data: OrderCreateManyInput | OrderCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderIncludeCreateManyAndReturn | null + } + + /** + * Order update + */ + export type OrderUpdateArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * The data needed to update a Order. + */ + data: XOR + /** + * Choose, which Order to update. + */ + where: OrderWhereUniqueInput + } + + /** + * Order updateMany + */ + export type OrderUpdateManyArgs = { + /** + * The data used to update Orders. + */ + data: XOR + /** + * Filter which Orders to update + */ + where?: OrderWhereInput + /** + * Limit how many Orders to update. + */ + limit?: number + } + + /** + * Order updateManyAndReturn + */ + export type OrderUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * The data used to update Orders. + */ + data: XOR + /** + * Filter which Orders to update + */ + where?: OrderWhereInput + /** + * Limit how many Orders to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderIncludeUpdateManyAndReturn | null + } + + /** + * Order upsert + */ + export type OrderUpsertArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * The filter to search for the Order to update in case it exists. + */ + where: OrderWhereUniqueInput + /** + * In case the Order found by the `where` argument doesn't exist, create a new Order with this data. + */ + create: XOR + /** + * In case the Order was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Order delete + */ + export type OrderDeleteArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + /** + * Filter which Order to delete. + */ + where: OrderWhereUniqueInput + } + + /** + * Order deleteMany + */ + export type OrderDeleteManyArgs = { + /** + * Filter which Orders to delete + */ + where?: OrderWhereInput + /** + * Limit how many Orders to delete. + */ + limit?: number + } + + /** + * Order.items + */ + export type Order$itemsArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + where?: OrderItemWhereInput + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + cursor?: OrderItemWhereUniqueInput + take?: number + skip?: number + distinct?: OrderItemScalarFieldEnum | OrderItemScalarFieldEnum[] + } + + /** + * Order.paymentTransaction + */ + export type Order$paymentTransactionArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + where?: PaymentTransactionWhereInput + } + + /** + * Order without action + */ + export type OrderDefaultArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + } + + + /** + * Model ShippingAddress + */ + + export type AggregateShippingAddress = { + _count: ShippingAddressCountAggregateOutputType | null + _min: ShippingAddressMinAggregateOutputType | null + _max: ShippingAddressMaxAggregateOutputType | null + } + + export type ShippingAddressMinAggregateOutputType = { + id: string | null + fullName: string | null + phone: string | null + addressLine1: string | null + addressLine2: string | null + city: string | null + district: string | null + ward: string | null + postalCode: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ShippingAddressMaxAggregateOutputType = { + id: string | null + fullName: string | null + phone: string | null + addressLine1: string | null + addressLine2: string | null + city: string | null + district: string | null + ward: string | null + postalCode: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ShippingAddressCountAggregateOutputType = { + id: number + fullName: number + phone: number + addressLine1: number + addressLine2: number + city: number + district: number + ward: number + postalCode: number + createdAt: number + updatedAt: number + _all: number + } + + + export type ShippingAddressMinAggregateInputType = { + id?: true + fullName?: true + phone?: true + addressLine1?: true + addressLine2?: true + city?: true + district?: true + ward?: true + postalCode?: true + createdAt?: true + updatedAt?: true + } + + export type ShippingAddressMaxAggregateInputType = { + id?: true + fullName?: true + phone?: true + addressLine1?: true + addressLine2?: true + city?: true + district?: true + ward?: true + postalCode?: true + createdAt?: true + updatedAt?: true + } + + export type ShippingAddressCountAggregateInputType = { + id?: true + fullName?: true + phone?: true + addressLine1?: true + addressLine2?: true + city?: true + district?: true + ward?: true + postalCode?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type ShippingAddressAggregateArgs = { + /** + * Filter which ShippingAddress to aggregate. + */ + where?: ShippingAddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ShippingAddresses to fetch. + */ + orderBy?: ShippingAddressOrderByWithRelationInput | ShippingAddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ShippingAddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ShippingAddresses 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` ShippingAddresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ShippingAddresses + **/ + _count?: true | ShippingAddressCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ShippingAddressMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ShippingAddressMaxAggregateInputType + } + + export type GetShippingAddressAggregateType = { + [P in keyof T & keyof AggregateShippingAddress]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ShippingAddressGroupByArgs = { + where?: ShippingAddressWhereInput + orderBy?: ShippingAddressOrderByWithAggregationInput | ShippingAddressOrderByWithAggregationInput[] + by: ShippingAddressScalarFieldEnum[] | ShippingAddressScalarFieldEnum + having?: ShippingAddressScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ShippingAddressCountAggregateInputType | true + _min?: ShippingAddressMinAggregateInputType + _max?: ShippingAddressMaxAggregateInputType + } + + export type ShippingAddressGroupByOutputType = { + id: string + fullName: string + phone: string + addressLine1: string + addressLine2: string | null + city: string + district: string + ward: string + postalCode: string + createdAt: Date + updatedAt: Date + _count: ShippingAddressCountAggregateOutputType | null + _min: ShippingAddressMinAggregateOutputType | null + _max: ShippingAddressMaxAggregateOutputType | null + } + + type GetShippingAddressGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ShippingAddressGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ShippingAddressSelect = $Extensions.GetSelect<{ + id?: boolean + fullName?: boolean + phone?: boolean + addressLine1?: boolean + addressLine2?: boolean + city?: boolean + district?: boolean + ward?: boolean + postalCode?: boolean + createdAt?: boolean + updatedAt?: boolean + order?: boolean | ShippingAddress$orderArgs + }, ExtArgs["result"]["shippingAddress"]> + + export type ShippingAddressSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + fullName?: boolean + phone?: boolean + addressLine1?: boolean + addressLine2?: boolean + city?: boolean + district?: boolean + ward?: boolean + postalCode?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["shippingAddress"]> + + export type ShippingAddressSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + fullName?: boolean + phone?: boolean + addressLine1?: boolean + addressLine2?: boolean + city?: boolean + district?: boolean + ward?: boolean + postalCode?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["shippingAddress"]> + + export type ShippingAddressSelectScalar = { + id?: boolean + fullName?: boolean + phone?: boolean + addressLine1?: boolean + addressLine2?: boolean + city?: boolean + district?: boolean + ward?: boolean + postalCode?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type ShippingAddressOmit = $Extensions.GetOmit<"id" | "fullName" | "phone" | "addressLine1" | "addressLine2" | "city" | "district" | "ward" | "postalCode" | "createdAt" | "updatedAt", ExtArgs["result"]["shippingAddress"]> + export type ShippingAddressInclude = { + order?: boolean | ShippingAddress$orderArgs + } + export type ShippingAddressIncludeCreateManyAndReturn = {} + export type ShippingAddressIncludeUpdateManyAndReturn = {} + + export type $ShippingAddressPayload = { + name: "ShippingAddress" + objects: { + order: Prisma.$OrderPayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + fullName: string + phone: string + addressLine1: string + addressLine2: string | null + city: string + district: string + ward: string + postalCode: string + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["shippingAddress"]> + composites: {} + } + + type ShippingAddressGetPayload = $Result.GetResult + + type ShippingAddressCountArgs = + Omit & { + select?: ShippingAddressCountAggregateInputType | true + } + + export interface ShippingAddressDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ShippingAddress'], meta: { name: 'ShippingAddress' } } + /** + * Find zero or one ShippingAddress that matches the filter. + * @param {ShippingAddressFindUniqueArgs} args - Arguments to find a ShippingAddress + * @example + * // Get one ShippingAddress + * const shippingAddress = await prisma.shippingAddress.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ShippingAddress that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ShippingAddressFindUniqueOrThrowArgs} args - Arguments to find a ShippingAddress + * @example + * // Get one ShippingAddress + * const shippingAddress = await prisma.shippingAddress.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ShippingAddress 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 {ShippingAddressFindFirstArgs} args - Arguments to find a ShippingAddress + * @example + * // Get one ShippingAddress + * const shippingAddress = await prisma.shippingAddress.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ShippingAddress 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 {ShippingAddressFindFirstOrThrowArgs} args - Arguments to find a ShippingAddress + * @example + * // Get one ShippingAddress + * const shippingAddress = await prisma.shippingAddress.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ShippingAddresses 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 {ShippingAddressFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ShippingAddresses + * const shippingAddresses = await prisma.shippingAddress.findMany() + * + * // Get first 10 ShippingAddresses + * const shippingAddresses = await prisma.shippingAddress.findMany({ take: 10 }) + * + * // Only select the `id` + * const shippingAddressWithIdOnly = await prisma.shippingAddress.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ShippingAddress. + * @param {ShippingAddressCreateArgs} args - Arguments to create a ShippingAddress. + * @example + * // Create one ShippingAddress + * const ShippingAddress = await prisma.shippingAddress.create({ + * data: { + * // ... data to create a ShippingAddress + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ShippingAddresses. + * @param {ShippingAddressCreateManyArgs} args - Arguments to create many ShippingAddresses. + * @example + * // Create many ShippingAddresses + * const shippingAddress = await prisma.shippingAddress.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many ShippingAddresses and returns the data saved in the database. + * @param {ShippingAddressCreateManyAndReturnArgs} args - Arguments to create many ShippingAddresses. + * @example + * // Create many ShippingAddresses + * const shippingAddress = await prisma.shippingAddress.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many ShippingAddresses and only return the `id` + * const shippingAddressWithIdOnly = await prisma.shippingAddress.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a ShippingAddress. + * @param {ShippingAddressDeleteArgs} args - Arguments to delete one ShippingAddress. + * @example + * // Delete one ShippingAddress + * const ShippingAddress = await prisma.shippingAddress.delete({ + * where: { + * // ... filter to delete one ShippingAddress + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ShippingAddress. + * @param {ShippingAddressUpdateArgs} args - Arguments to update one ShippingAddress. + * @example + * // Update one ShippingAddress + * const shippingAddress = await prisma.shippingAddress.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ShippingAddresses. + * @param {ShippingAddressDeleteManyArgs} args - Arguments to filter ShippingAddresses to delete. + * @example + * // Delete a few ShippingAddresses + * const { count } = await prisma.shippingAddress.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ShippingAddresses. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ShippingAddressUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ShippingAddresses + * const shippingAddress = await prisma.shippingAddress.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ShippingAddresses and returns the data updated in the database. + * @param {ShippingAddressUpdateManyAndReturnArgs} args - Arguments to update many ShippingAddresses. + * @example + * // Update many ShippingAddresses + * const shippingAddress = await prisma.shippingAddress.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more ShippingAddresses and only return the `id` + * const shippingAddressWithIdOnly = await prisma.shippingAddress.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one ShippingAddress. + * @param {ShippingAddressUpsertArgs} args - Arguments to update or create a ShippingAddress. + * @example + * // Update or create a ShippingAddress + * const shippingAddress = await prisma.shippingAddress.upsert({ + * create: { + * // ... data to create a ShippingAddress + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ShippingAddress we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ShippingAddressClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ShippingAddresses. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ShippingAddressCountArgs} args - Arguments to filter ShippingAddresses to count. + * @example + * // Count the number of ShippingAddresses + * const count = await prisma.shippingAddress.count({ + * where: { + * // ... the filter for the ShippingAddresses we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ShippingAddress. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ShippingAddressAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by ShippingAddress. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ShippingAddressGroupByArgs} 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 ShippingAddressGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ShippingAddressGroupByArgs['orderBy'] } + : { orderBy?: ShippingAddressGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetShippingAddressGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the ShippingAddress model + */ + readonly fields: ShippingAddressFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for ShippingAddress. + * 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__ShippingAddressClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + order = {}>(args?: Subset>): Prisma__OrderClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the ShippingAddress model + */ + interface ShippingAddressFieldRefs { + readonly id: FieldRef<"ShippingAddress", 'String'> + readonly fullName: FieldRef<"ShippingAddress", 'String'> + readonly phone: FieldRef<"ShippingAddress", 'String'> + readonly addressLine1: FieldRef<"ShippingAddress", 'String'> + readonly addressLine2: FieldRef<"ShippingAddress", 'String'> + readonly city: FieldRef<"ShippingAddress", 'String'> + readonly district: FieldRef<"ShippingAddress", 'String'> + readonly ward: FieldRef<"ShippingAddress", 'String'> + readonly postalCode: FieldRef<"ShippingAddress", 'String'> + readonly createdAt: FieldRef<"ShippingAddress", 'DateTime'> + readonly updatedAt: FieldRef<"ShippingAddress", 'DateTime'> + } + + + // Custom InputTypes + /** + * ShippingAddress findUnique + */ + export type ShippingAddressFindUniqueArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter, which ShippingAddress to fetch. + */ + where: ShippingAddressWhereUniqueInput + } + + /** + * ShippingAddress findUniqueOrThrow + */ + export type ShippingAddressFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter, which ShippingAddress to fetch. + */ + where: ShippingAddressWhereUniqueInput + } + + /** + * ShippingAddress findFirst + */ + export type ShippingAddressFindFirstArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter, which ShippingAddress to fetch. + */ + where?: ShippingAddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ShippingAddresses to fetch. + */ + orderBy?: ShippingAddressOrderByWithRelationInput | ShippingAddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ShippingAddresses. + */ + cursor?: ShippingAddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ShippingAddresses 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` ShippingAddresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ShippingAddresses. + */ + distinct?: ShippingAddressScalarFieldEnum | ShippingAddressScalarFieldEnum[] + } + + /** + * ShippingAddress findFirstOrThrow + */ + export type ShippingAddressFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter, which ShippingAddress to fetch. + */ + where?: ShippingAddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ShippingAddresses to fetch. + */ + orderBy?: ShippingAddressOrderByWithRelationInput | ShippingAddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ShippingAddresses. + */ + cursor?: ShippingAddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ShippingAddresses 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` ShippingAddresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ShippingAddresses. + */ + distinct?: ShippingAddressScalarFieldEnum | ShippingAddressScalarFieldEnum[] + } + + /** + * ShippingAddress findMany + */ + export type ShippingAddressFindManyArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter, which ShippingAddresses to fetch. + */ + where?: ShippingAddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ShippingAddresses to fetch. + */ + orderBy?: ShippingAddressOrderByWithRelationInput | ShippingAddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ShippingAddresses. + */ + cursor?: ShippingAddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ShippingAddresses 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` ShippingAddresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ShippingAddresses. + */ + distinct?: ShippingAddressScalarFieldEnum | ShippingAddressScalarFieldEnum[] + } + + /** + * ShippingAddress create + */ + export type ShippingAddressCreateArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * The data needed to create a ShippingAddress. + */ + data: XOR + } + + /** + * ShippingAddress createMany + */ + export type ShippingAddressCreateManyArgs = { + /** + * The data used to create many ShippingAddresses. + */ + data: ShippingAddressCreateManyInput | ShippingAddressCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * ShippingAddress createManyAndReturn + */ + export type ShippingAddressCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelectCreateManyAndReturn | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * The data used to create many ShippingAddresses. + */ + data: ShippingAddressCreateManyInput | ShippingAddressCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * ShippingAddress update + */ + export type ShippingAddressUpdateArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * The data needed to update a ShippingAddress. + */ + data: XOR + /** + * Choose, which ShippingAddress to update. + */ + where: ShippingAddressWhereUniqueInput + } + + /** + * ShippingAddress updateMany + */ + export type ShippingAddressUpdateManyArgs = { + /** + * The data used to update ShippingAddresses. + */ + data: XOR + /** + * Filter which ShippingAddresses to update + */ + where?: ShippingAddressWhereInput + /** + * Limit how many ShippingAddresses to update. + */ + limit?: number + } + + /** + * ShippingAddress updateManyAndReturn + */ + export type ShippingAddressUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * The data used to update ShippingAddresses. + */ + data: XOR + /** + * Filter which ShippingAddresses to update + */ + where?: ShippingAddressWhereInput + /** + * Limit how many ShippingAddresses to update. + */ + limit?: number + } + + /** + * ShippingAddress upsert + */ + export type ShippingAddressUpsertArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * The filter to search for the ShippingAddress to update in case it exists. + */ + where: ShippingAddressWhereUniqueInput + /** + * In case the ShippingAddress found by the `where` argument doesn't exist, create a new ShippingAddress with this data. + */ + create: XOR + /** + * In case the ShippingAddress was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * ShippingAddress delete + */ + export type ShippingAddressDeleteArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + /** + * Filter which ShippingAddress to delete. + */ + where: ShippingAddressWhereUniqueInput + } + + /** + * ShippingAddress deleteMany + */ + export type ShippingAddressDeleteManyArgs = { + /** + * Filter which ShippingAddresses to delete + */ + where?: ShippingAddressWhereInput + /** + * Limit how many ShippingAddresses to delete. + */ + limit?: number + } + + /** + * ShippingAddress.order + */ + export type ShippingAddress$orderArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + where?: OrderWhereInput + } + + /** + * ShippingAddress without action + */ + export type ShippingAddressDefaultArgs = { + /** + * Select specific fields to fetch from the ShippingAddress + */ + select?: ShippingAddressSelect | null + /** + * Omit specific fields from the ShippingAddress + */ + omit?: ShippingAddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ShippingAddressInclude | null + } + + + /** + * Model OrderItem + */ + + export type AggregateOrderItem = { + _count: OrderItemCountAggregateOutputType | null + _avg: OrderItemAvgAggregateOutputType | null + _sum: OrderItemSumAggregateOutputType | null + _min: OrderItemMinAggregateOutputType | null + _max: OrderItemMaxAggregateOutputType | null + } + + export type OrderItemAvgAggregateOutputType = { + price: Decimal | null + quantity: number | null + } + + export type OrderItemSumAggregateOutputType = { + price: Decimal | null + quantity: number | null + } + + export type OrderItemMinAggregateOutputType = { + id: string | null + orderId: string | null + productId: string | null + productSlug: $Enums.ProductSlug | null + productName: string | null + size: $Enums.ProductSize | null + price: Decimal | null + quantity: number | null + } + + export type OrderItemMaxAggregateOutputType = { + id: string | null + orderId: string | null + productId: string | null + productSlug: $Enums.ProductSlug | null + productName: string | null + size: $Enums.ProductSize | null + price: Decimal | null + quantity: number | null + } + + export type OrderItemCountAggregateOutputType = { + id: number + orderId: number + productId: number + productSlug: number + productName: number + size: number + price: number + quantity: number + _all: number + } + + + export type OrderItemAvgAggregateInputType = { + price?: true + quantity?: true + } + + export type OrderItemSumAggregateInputType = { + price?: true + quantity?: true + } + + export type OrderItemMinAggregateInputType = { + id?: true + orderId?: true + productId?: true + productSlug?: true + productName?: true + size?: true + price?: true + quantity?: true + } + + export type OrderItemMaxAggregateInputType = { + id?: true + orderId?: true + productId?: true + productSlug?: true + productName?: true + size?: true + price?: true + quantity?: true + } + + export type OrderItemCountAggregateInputType = { + id?: true + orderId?: true + productId?: true + productSlug?: true + productName?: true + size?: true + price?: true + quantity?: true + _all?: true + } + + export type OrderItemAggregateArgs = { + /** + * Filter which OrderItem to aggregate. + */ + where?: OrderItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of OrderItems to fetch. + */ + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: OrderItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` OrderItems 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` OrderItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned OrderItems + **/ + _count?: true | OrderItemCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: OrderItemAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: OrderItemSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: OrderItemMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: OrderItemMaxAggregateInputType + } + + export type GetOrderItemAggregateType = { + [P in keyof T & keyof AggregateOrderItem]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type OrderItemGroupByArgs = { + where?: OrderItemWhereInput + orderBy?: OrderItemOrderByWithAggregationInput | OrderItemOrderByWithAggregationInput[] + by: OrderItemScalarFieldEnum[] | OrderItemScalarFieldEnum + having?: OrderItemScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: OrderItemCountAggregateInputType | true + _avg?: OrderItemAvgAggregateInputType + _sum?: OrderItemSumAggregateInputType + _min?: OrderItemMinAggregateInputType + _max?: OrderItemMaxAggregateInputType + } + + export type OrderItemGroupByOutputType = { + id: string + orderId: string + productId: string | null + productSlug: $Enums.ProductSlug + productName: string + size: $Enums.ProductSize | null + price: Decimal + quantity: number + _count: OrderItemCountAggregateOutputType | null + _avg: OrderItemAvgAggregateOutputType | null + _sum: OrderItemSumAggregateOutputType | null + _min: OrderItemMinAggregateOutputType | null + _max: OrderItemMaxAggregateOutputType | null + } + + type GetOrderItemGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof OrderItemGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type OrderItemSelect = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + productId?: boolean + productSlug?: boolean + productName?: boolean + size?: boolean + price?: boolean + quantity?: boolean + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + }, ExtArgs["result"]["orderItem"]> + + export type OrderItemSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + productId?: boolean + productSlug?: boolean + productName?: boolean + size?: boolean + price?: boolean + quantity?: boolean + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + }, ExtArgs["result"]["orderItem"]> + + export type OrderItemSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + productId?: boolean + productSlug?: boolean + productName?: boolean + size?: boolean + price?: boolean + quantity?: boolean + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + }, ExtArgs["result"]["orderItem"]> + + export type OrderItemSelectScalar = { + id?: boolean + orderId?: boolean + productId?: boolean + productSlug?: boolean + productName?: boolean + size?: boolean + price?: boolean + quantity?: boolean + } + + export type OrderItemOmit = $Extensions.GetOmit<"id" | "orderId" | "productId" | "productSlug" | "productName" | "size" | "price" | "quantity", ExtArgs["result"]["orderItem"]> + export type OrderItemInclude = { + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + } + export type OrderItemIncludeCreateManyAndReturn = { + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + } + export type OrderItemIncludeUpdateManyAndReturn = { + order?: boolean | OrderDefaultArgs + product?: boolean | OrderItem$productArgs + } + + export type $OrderItemPayload = { + name: "OrderItem" + objects: { + order: Prisma.$OrderPayload + product: Prisma.$ProductPayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + orderId: string + productId: string | null + productSlug: $Enums.ProductSlug + productName: string + size: $Enums.ProductSize | null + price: Prisma.Decimal + quantity: number + }, ExtArgs["result"]["orderItem"]> + composites: {} + } + + type OrderItemGetPayload = $Result.GetResult + + type OrderItemCountArgs = + Omit & { + select?: OrderItemCountAggregateInputType | true + } + + export interface OrderItemDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['OrderItem'], meta: { name: 'OrderItem' } } + /** + * Find zero or one OrderItem that matches the filter. + * @param {OrderItemFindUniqueArgs} args - Arguments to find a OrderItem + * @example + * // Get one OrderItem + * const orderItem = await prisma.orderItem.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one OrderItem that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {OrderItemFindUniqueOrThrowArgs} args - Arguments to find a OrderItem + * @example + * // Get one OrderItem + * const orderItem = await prisma.orderItem.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first OrderItem 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 {OrderItemFindFirstArgs} args - Arguments to find a OrderItem + * @example + * // Get one OrderItem + * const orderItem = await prisma.orderItem.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first OrderItem 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 {OrderItemFindFirstOrThrowArgs} args - Arguments to find a OrderItem + * @example + * // Get one OrderItem + * const orderItem = await prisma.orderItem.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more OrderItems 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 {OrderItemFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all OrderItems + * const orderItems = await prisma.orderItem.findMany() + * + * // Get first 10 OrderItems + * const orderItems = await prisma.orderItem.findMany({ take: 10 }) + * + * // Only select the `id` + * const orderItemWithIdOnly = await prisma.orderItem.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a OrderItem. + * @param {OrderItemCreateArgs} args - Arguments to create a OrderItem. + * @example + * // Create one OrderItem + * const OrderItem = await prisma.orderItem.create({ + * data: { + * // ... data to create a OrderItem + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many OrderItems. + * @param {OrderItemCreateManyArgs} args - Arguments to create many OrderItems. + * @example + * // Create many OrderItems + * const orderItem = await prisma.orderItem.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many OrderItems and returns the data saved in the database. + * @param {OrderItemCreateManyAndReturnArgs} args - Arguments to create many OrderItems. + * @example + * // Create many OrderItems + * const orderItem = await prisma.orderItem.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many OrderItems and only return the `id` + * const orderItemWithIdOnly = await prisma.orderItem.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a OrderItem. + * @param {OrderItemDeleteArgs} args - Arguments to delete one OrderItem. + * @example + * // Delete one OrderItem + * const OrderItem = await prisma.orderItem.delete({ + * where: { + * // ... filter to delete one OrderItem + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one OrderItem. + * @param {OrderItemUpdateArgs} args - Arguments to update one OrderItem. + * @example + * // Update one OrderItem + * const orderItem = await prisma.orderItem.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more OrderItems. + * @param {OrderItemDeleteManyArgs} args - Arguments to filter OrderItems to delete. + * @example + * // Delete a few OrderItems + * const { count } = await prisma.orderItem.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more OrderItems. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderItemUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many OrderItems + * const orderItem = await prisma.orderItem.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more OrderItems and returns the data updated in the database. + * @param {OrderItemUpdateManyAndReturnArgs} args - Arguments to update many OrderItems. + * @example + * // Update many OrderItems + * const orderItem = await prisma.orderItem.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more OrderItems and only return the `id` + * const orderItemWithIdOnly = await prisma.orderItem.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one OrderItem. + * @param {OrderItemUpsertArgs} args - Arguments to update or create a OrderItem. + * @example + * // Update or create a OrderItem + * const orderItem = await prisma.orderItem.upsert({ + * create: { + * // ... data to create a OrderItem + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the OrderItem we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__OrderItemClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of OrderItems. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderItemCountArgs} args - Arguments to filter OrderItems to count. + * @example + * // Count the number of OrderItems + * const count = await prisma.orderItem.count({ + * where: { + * // ... the filter for the OrderItems we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a OrderItem. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderItemAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by OrderItem. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {OrderItemGroupByArgs} 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 OrderItemGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: OrderItemGroupByArgs['orderBy'] } + : { orderBy?: OrderItemGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetOrderItemGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the OrderItem model + */ + readonly fields: OrderItemFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for OrderItem. + * 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__OrderItemClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + order = {}>(args?: Subset>): Prisma__OrderClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + product = {}>(args?: Subset>): Prisma__ProductClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the OrderItem model + */ + interface OrderItemFieldRefs { + readonly id: FieldRef<"OrderItem", 'String'> + readonly orderId: FieldRef<"OrderItem", 'String'> + readonly productId: FieldRef<"OrderItem", 'String'> + readonly productSlug: FieldRef<"OrderItem", 'ProductSlug'> + readonly productName: FieldRef<"OrderItem", 'String'> + readonly size: FieldRef<"OrderItem", 'ProductSize'> + readonly price: FieldRef<"OrderItem", 'Decimal'> + readonly quantity: FieldRef<"OrderItem", 'Int'> + } + + + // Custom InputTypes + /** + * OrderItem findUnique + */ + export type OrderItemFindUniqueArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter, which OrderItem to fetch. + */ + where: OrderItemWhereUniqueInput + } + + /** + * OrderItem findUniqueOrThrow + */ + export type OrderItemFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter, which OrderItem to fetch. + */ + where: OrderItemWhereUniqueInput + } + + /** + * OrderItem findFirst + */ + export type OrderItemFindFirstArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter, which OrderItem to fetch. + */ + where?: OrderItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of OrderItems to fetch. + */ + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for OrderItems. + */ + cursor?: OrderItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` OrderItems 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` OrderItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of OrderItems. + */ + distinct?: OrderItemScalarFieldEnum | OrderItemScalarFieldEnum[] + } + + /** + * OrderItem findFirstOrThrow + */ + export type OrderItemFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter, which OrderItem to fetch. + */ + where?: OrderItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of OrderItems to fetch. + */ + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for OrderItems. + */ + cursor?: OrderItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` OrderItems 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` OrderItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of OrderItems. + */ + distinct?: OrderItemScalarFieldEnum | OrderItemScalarFieldEnum[] + } + + /** + * OrderItem findMany + */ + export type OrderItemFindManyArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter, which OrderItems to fetch. + */ + where?: OrderItemWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of OrderItems to fetch. + */ + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing OrderItems. + */ + cursor?: OrderItemWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` OrderItems 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` OrderItems. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of OrderItems. + */ + distinct?: OrderItemScalarFieldEnum | OrderItemScalarFieldEnum[] + } + + /** + * OrderItem create + */ + export type OrderItemCreateArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * The data needed to create a OrderItem. + */ + data: XOR + } + + /** + * OrderItem createMany + */ + export type OrderItemCreateManyArgs = { + /** + * The data used to create many OrderItems. + */ + data: OrderItemCreateManyInput | OrderItemCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * OrderItem createManyAndReturn + */ + export type OrderItemCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelectCreateManyAndReturn | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * The data used to create many OrderItems. + */ + data: OrderItemCreateManyInput | OrderItemCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemIncludeCreateManyAndReturn | null + } + + /** + * OrderItem update + */ + export type OrderItemUpdateArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * The data needed to update a OrderItem. + */ + data: XOR + /** + * Choose, which OrderItem to update. + */ + where: OrderItemWhereUniqueInput + } + + /** + * OrderItem updateMany + */ + export type OrderItemUpdateManyArgs = { + /** + * The data used to update OrderItems. + */ + data: XOR + /** + * Filter which OrderItems to update + */ + where?: OrderItemWhereInput + /** + * Limit how many OrderItems to update. + */ + limit?: number + } + + /** + * OrderItem updateManyAndReturn + */ + export type OrderItemUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * The data used to update OrderItems. + */ + data: XOR + /** + * Filter which OrderItems to update + */ + where?: OrderItemWhereInput + /** + * Limit how many OrderItems to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemIncludeUpdateManyAndReturn | null + } + + /** + * OrderItem upsert + */ + export type OrderItemUpsertArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * The filter to search for the OrderItem to update in case it exists. + */ + where: OrderItemWhereUniqueInput + /** + * In case the OrderItem found by the `where` argument doesn't exist, create a new OrderItem with this data. + */ + create: XOR + /** + * In case the OrderItem was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * OrderItem delete + */ + export type OrderItemDeleteArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + /** + * Filter which OrderItem to delete. + */ + where: OrderItemWhereUniqueInput + } + + /** + * OrderItem deleteMany + */ + export type OrderItemDeleteManyArgs = { + /** + * Filter which OrderItems to delete + */ + where?: OrderItemWhereInput + /** + * Limit how many OrderItems to delete. + */ + limit?: number + } + + /** + * OrderItem.product + */ + export type OrderItem$productArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + where?: ProductWhereInput + } + + /** + * OrderItem without action + */ + export type OrderItemDefaultArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + } + + + /** + * Model PaymentTransaction + */ + + export type AggregatePaymentTransaction = { + _count: PaymentTransactionCountAggregateOutputType | null + _avg: PaymentTransactionAvgAggregateOutputType | null + _sum: PaymentTransactionSumAggregateOutputType | null + _min: PaymentTransactionMinAggregateOutputType | null + _max: PaymentTransactionMaxAggregateOutputType | null + } + + export type PaymentTransactionAvgAggregateOutputType = { + amount: Decimal | null + } + + export type PaymentTransactionSumAggregateOutputType = { + amount: Decimal | null + } + + export type PaymentTransactionMinAggregateOutputType = { + id: string | null + orderId: string | null + transactionCode: string | null + amount: Decimal | null + status: $Enums.PaymentTransactionStatus | null + paymentUrl: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type PaymentTransactionMaxAggregateOutputType = { + id: string | null + orderId: string | null + transactionCode: string | null + amount: Decimal | null + status: $Enums.PaymentTransactionStatus | null + paymentUrl: string | null + createdAt: Date | null + updatedAt: Date | null + } + + export type PaymentTransactionCountAggregateOutputType = { + id: number + orderId: number + transactionCode: number + amount: number + status: number + paymentUrl: number + payosData: number + createdAt: number + updatedAt: number + _all: number + } + + + export type PaymentTransactionAvgAggregateInputType = { + amount?: true + } + + export type PaymentTransactionSumAggregateInputType = { + amount?: true + } + + export type PaymentTransactionMinAggregateInputType = { + id?: true + orderId?: true + transactionCode?: true + amount?: true + status?: true + paymentUrl?: true + createdAt?: true + updatedAt?: true + } + + export type PaymentTransactionMaxAggregateInputType = { + id?: true + orderId?: true + transactionCode?: true + amount?: true + status?: true + paymentUrl?: true + createdAt?: true + updatedAt?: true + } + + export type PaymentTransactionCountAggregateInputType = { + id?: true + orderId?: true + transactionCode?: true + amount?: true + status?: true + paymentUrl?: true + payosData?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type PaymentTransactionAggregateArgs = { + /** + * Filter which PaymentTransaction to aggregate. + */ + where?: PaymentTransactionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of PaymentTransactions to fetch. + */ + orderBy?: PaymentTransactionOrderByWithRelationInput | PaymentTransactionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: PaymentTransactionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` PaymentTransactions 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` PaymentTransactions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned PaymentTransactions + **/ + _count?: true | PaymentTransactionCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: PaymentTransactionAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: PaymentTransactionSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: PaymentTransactionMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: PaymentTransactionMaxAggregateInputType + } + + export type GetPaymentTransactionAggregateType = { + [P in keyof T & keyof AggregatePaymentTransaction]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type PaymentTransactionGroupByArgs = { + where?: PaymentTransactionWhereInput + orderBy?: PaymentTransactionOrderByWithAggregationInput | PaymentTransactionOrderByWithAggregationInput[] + by: PaymentTransactionScalarFieldEnum[] | PaymentTransactionScalarFieldEnum + having?: PaymentTransactionScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: PaymentTransactionCountAggregateInputType | true + _avg?: PaymentTransactionAvgAggregateInputType + _sum?: PaymentTransactionSumAggregateInputType + _min?: PaymentTransactionMinAggregateInputType + _max?: PaymentTransactionMaxAggregateInputType + } + + export type PaymentTransactionGroupByOutputType = { + id: string + orderId: string + transactionCode: string + amount: Decimal + status: $Enums.PaymentTransactionStatus + paymentUrl: string | null + payosData: JsonValue | null + createdAt: Date + updatedAt: Date + _count: PaymentTransactionCountAggregateOutputType | null + _avg: PaymentTransactionAvgAggregateOutputType | null + _sum: PaymentTransactionSumAggregateOutputType | null + _min: PaymentTransactionMinAggregateOutputType | null + _max: PaymentTransactionMaxAggregateOutputType | null + } + + type GetPaymentTransactionGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof PaymentTransactionGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type PaymentTransactionSelect = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + transactionCode?: boolean + amount?: boolean + status?: boolean + paymentUrl?: boolean + payosData?: boolean + createdAt?: boolean + updatedAt?: boolean + order?: boolean | OrderDefaultArgs + }, ExtArgs["result"]["paymentTransaction"]> + + export type PaymentTransactionSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + transactionCode?: boolean + amount?: boolean + status?: boolean + paymentUrl?: boolean + payosData?: boolean + createdAt?: boolean + updatedAt?: boolean + order?: boolean | OrderDefaultArgs + }, ExtArgs["result"]["paymentTransaction"]> + + export type PaymentTransactionSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + orderId?: boolean + transactionCode?: boolean + amount?: boolean + status?: boolean + paymentUrl?: boolean + payosData?: boolean + createdAt?: boolean + updatedAt?: boolean + order?: boolean | OrderDefaultArgs + }, ExtArgs["result"]["paymentTransaction"]> + + export type PaymentTransactionSelectScalar = { + id?: boolean + orderId?: boolean + transactionCode?: boolean + amount?: boolean + status?: boolean + paymentUrl?: boolean + payosData?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type PaymentTransactionOmit = $Extensions.GetOmit<"id" | "orderId" | "transactionCode" | "amount" | "status" | "paymentUrl" | "payosData" | "createdAt" | "updatedAt", ExtArgs["result"]["paymentTransaction"]> + export type PaymentTransactionInclude = { + order?: boolean | OrderDefaultArgs + } + export type PaymentTransactionIncludeCreateManyAndReturn = { + order?: boolean | OrderDefaultArgs + } + export type PaymentTransactionIncludeUpdateManyAndReturn = { + order?: boolean | OrderDefaultArgs + } + + export type $PaymentTransactionPayload = { + name: "PaymentTransaction" + objects: { + order: Prisma.$OrderPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + orderId: string + transactionCode: string + amount: Prisma.Decimal + status: $Enums.PaymentTransactionStatus + paymentUrl: string | null + payosData: Prisma.JsonValue | null + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["paymentTransaction"]> + composites: {} + } + + type PaymentTransactionGetPayload = $Result.GetResult + + type PaymentTransactionCountArgs = + Omit & { + select?: PaymentTransactionCountAggregateInputType | true + } + + export interface PaymentTransactionDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['PaymentTransaction'], meta: { name: 'PaymentTransaction' } } + /** + * Find zero or one PaymentTransaction that matches the filter. + * @param {PaymentTransactionFindUniqueArgs} args - Arguments to find a PaymentTransaction + * @example + * // Get one PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one PaymentTransaction that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {PaymentTransactionFindUniqueOrThrowArgs} args - Arguments to find a PaymentTransaction + * @example + * // Get one PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first PaymentTransaction 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 {PaymentTransactionFindFirstArgs} args - Arguments to find a PaymentTransaction + * @example + * // Get one PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first PaymentTransaction 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 {PaymentTransactionFindFirstOrThrowArgs} args - Arguments to find a PaymentTransaction + * @example + * // Get one PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more PaymentTransactions 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 {PaymentTransactionFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all PaymentTransactions + * const paymentTransactions = await prisma.paymentTransaction.findMany() + * + * // Get first 10 PaymentTransactions + * const paymentTransactions = await prisma.paymentTransaction.findMany({ take: 10 }) + * + * // Only select the `id` + * const paymentTransactionWithIdOnly = await prisma.paymentTransaction.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a PaymentTransaction. + * @param {PaymentTransactionCreateArgs} args - Arguments to create a PaymentTransaction. + * @example + * // Create one PaymentTransaction + * const PaymentTransaction = await prisma.paymentTransaction.create({ + * data: { + * // ... data to create a PaymentTransaction + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many PaymentTransactions. + * @param {PaymentTransactionCreateManyArgs} args - Arguments to create many PaymentTransactions. + * @example + * // Create many PaymentTransactions + * const paymentTransaction = await prisma.paymentTransaction.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many PaymentTransactions and returns the data saved in the database. + * @param {PaymentTransactionCreateManyAndReturnArgs} args - Arguments to create many PaymentTransactions. + * @example + * // Create many PaymentTransactions + * const paymentTransaction = await prisma.paymentTransaction.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many PaymentTransactions and only return the `id` + * const paymentTransactionWithIdOnly = await prisma.paymentTransaction.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a PaymentTransaction. + * @param {PaymentTransactionDeleteArgs} args - Arguments to delete one PaymentTransaction. + * @example + * // Delete one PaymentTransaction + * const PaymentTransaction = await prisma.paymentTransaction.delete({ + * where: { + * // ... filter to delete one PaymentTransaction + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one PaymentTransaction. + * @param {PaymentTransactionUpdateArgs} args - Arguments to update one PaymentTransaction. + * @example + * // Update one PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more PaymentTransactions. + * @param {PaymentTransactionDeleteManyArgs} args - Arguments to filter PaymentTransactions to delete. + * @example + * // Delete a few PaymentTransactions + * const { count } = await prisma.paymentTransaction.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more PaymentTransactions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentTransactionUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many PaymentTransactions + * const paymentTransaction = await prisma.paymentTransaction.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more PaymentTransactions and returns the data updated in the database. + * @param {PaymentTransactionUpdateManyAndReturnArgs} args - Arguments to update many PaymentTransactions. + * @example + * // Update many PaymentTransactions + * const paymentTransaction = await prisma.paymentTransaction.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more PaymentTransactions and only return the `id` + * const paymentTransactionWithIdOnly = await prisma.paymentTransaction.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one PaymentTransaction. + * @param {PaymentTransactionUpsertArgs} args - Arguments to update or create a PaymentTransaction. + * @example + * // Update or create a PaymentTransaction + * const paymentTransaction = await prisma.paymentTransaction.upsert({ + * create: { + * // ... data to create a PaymentTransaction + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the PaymentTransaction we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__PaymentTransactionClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of PaymentTransactions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentTransactionCountArgs} args - Arguments to filter PaymentTransactions to count. + * @example + * // Count the number of PaymentTransactions + * const count = await prisma.paymentTransaction.count({ + * where: { + * // ... the filter for the PaymentTransactions we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a PaymentTransaction. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentTransactionAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by PaymentTransaction. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {PaymentTransactionGroupByArgs} 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 PaymentTransactionGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: PaymentTransactionGroupByArgs['orderBy'] } + : { orderBy?: PaymentTransactionGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetPaymentTransactionGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the PaymentTransaction model + */ + readonly fields: PaymentTransactionFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for PaymentTransaction. + * 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__PaymentTransactionClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + order = {}>(args?: Subset>): Prisma__OrderClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the PaymentTransaction model + */ + interface PaymentTransactionFieldRefs { + readonly id: FieldRef<"PaymentTransaction", 'String'> + readonly orderId: FieldRef<"PaymentTransaction", 'String'> + readonly transactionCode: FieldRef<"PaymentTransaction", 'String'> + readonly amount: FieldRef<"PaymentTransaction", 'Decimal'> + readonly status: FieldRef<"PaymentTransaction", 'PaymentTransactionStatus'> + readonly paymentUrl: FieldRef<"PaymentTransaction", 'String'> + readonly payosData: FieldRef<"PaymentTransaction", 'Json'> + readonly createdAt: FieldRef<"PaymentTransaction", 'DateTime'> + readonly updatedAt: FieldRef<"PaymentTransaction", 'DateTime'> + } + + + // Custom InputTypes + /** + * PaymentTransaction findUnique + */ + export type PaymentTransactionFindUniqueArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter, which PaymentTransaction to fetch. + */ + where: PaymentTransactionWhereUniqueInput + } + + /** + * PaymentTransaction findUniqueOrThrow + */ + export type PaymentTransactionFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter, which PaymentTransaction to fetch. + */ + where: PaymentTransactionWhereUniqueInput + } + + /** + * PaymentTransaction findFirst + */ + export type PaymentTransactionFindFirstArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter, which PaymentTransaction to fetch. + */ + where?: PaymentTransactionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of PaymentTransactions to fetch. + */ + orderBy?: PaymentTransactionOrderByWithRelationInput | PaymentTransactionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for PaymentTransactions. + */ + cursor?: PaymentTransactionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` PaymentTransactions 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` PaymentTransactions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of PaymentTransactions. + */ + distinct?: PaymentTransactionScalarFieldEnum | PaymentTransactionScalarFieldEnum[] + } + + /** + * PaymentTransaction findFirstOrThrow + */ + export type PaymentTransactionFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter, which PaymentTransaction to fetch. + */ + where?: PaymentTransactionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of PaymentTransactions to fetch. + */ + orderBy?: PaymentTransactionOrderByWithRelationInput | PaymentTransactionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for PaymentTransactions. + */ + cursor?: PaymentTransactionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` PaymentTransactions 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` PaymentTransactions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of PaymentTransactions. + */ + distinct?: PaymentTransactionScalarFieldEnum | PaymentTransactionScalarFieldEnum[] + } + + /** + * PaymentTransaction findMany + */ + export type PaymentTransactionFindManyArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter, which PaymentTransactions to fetch. + */ + where?: PaymentTransactionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of PaymentTransactions to fetch. + */ + orderBy?: PaymentTransactionOrderByWithRelationInput | PaymentTransactionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing PaymentTransactions. + */ + cursor?: PaymentTransactionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` PaymentTransactions 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` PaymentTransactions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of PaymentTransactions. + */ + distinct?: PaymentTransactionScalarFieldEnum | PaymentTransactionScalarFieldEnum[] + } + + /** + * PaymentTransaction create + */ + export type PaymentTransactionCreateArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * The data needed to create a PaymentTransaction. + */ + data: XOR + } + + /** + * PaymentTransaction createMany + */ + export type PaymentTransactionCreateManyArgs = { + /** + * The data used to create many PaymentTransactions. + */ + data: PaymentTransactionCreateManyInput | PaymentTransactionCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * PaymentTransaction createManyAndReturn + */ + export type PaymentTransactionCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelectCreateManyAndReturn | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * The data used to create many PaymentTransactions. + */ + data: PaymentTransactionCreateManyInput | PaymentTransactionCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionIncludeCreateManyAndReturn | null + } + + /** + * PaymentTransaction update + */ + export type PaymentTransactionUpdateArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * The data needed to update a PaymentTransaction. + */ + data: XOR + /** + * Choose, which PaymentTransaction to update. + */ + where: PaymentTransactionWhereUniqueInput + } + + /** + * PaymentTransaction updateMany + */ + export type PaymentTransactionUpdateManyArgs = { + /** + * The data used to update PaymentTransactions. + */ + data: XOR + /** + * Filter which PaymentTransactions to update + */ + where?: PaymentTransactionWhereInput + /** + * Limit how many PaymentTransactions to update. + */ + limit?: number + } + + /** + * PaymentTransaction updateManyAndReturn + */ + export type PaymentTransactionUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * The data used to update PaymentTransactions. + */ + data: XOR + /** + * Filter which PaymentTransactions to update + */ + where?: PaymentTransactionWhereInput + /** + * Limit how many PaymentTransactions to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionIncludeUpdateManyAndReturn | null + } + + /** + * PaymentTransaction upsert + */ + export type PaymentTransactionUpsertArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * The filter to search for the PaymentTransaction to update in case it exists. + */ + where: PaymentTransactionWhereUniqueInput + /** + * In case the PaymentTransaction found by the `where` argument doesn't exist, create a new PaymentTransaction with this data. + */ + create: XOR + /** + * In case the PaymentTransaction was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * PaymentTransaction delete + */ + export type PaymentTransactionDeleteArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + /** + * Filter which PaymentTransaction to delete. + */ + where: PaymentTransactionWhereUniqueInput + } + + /** + * PaymentTransaction deleteMany + */ + export type PaymentTransactionDeleteManyArgs = { + /** + * Filter which PaymentTransactions to delete + */ + where?: PaymentTransactionWhereInput + /** + * Limit how many PaymentTransactions to delete. + */ + limit?: number + } + + /** + * PaymentTransaction without action + */ + export type PaymentTransactionDefaultArgs = { + /** + * Select specific fields to fetch from the PaymentTransaction + */ + select?: PaymentTransactionSelect | null + /** + * Omit specific fields from the PaymentTransaction + */ + omit?: PaymentTransactionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: PaymentTransactionInclude | null + } + + + /** + * Model Product + */ + + export type AggregateProduct = { + _count: ProductCountAggregateOutputType | null + _avg: ProductAvgAggregateOutputType | null + _sum: ProductSumAggregateOutputType | null + _min: ProductMinAggregateOutputType | null + _max: ProductMaxAggregateOutputType | null + } + + export type ProductAvgAggregateOutputType = { + priceCurrent: Decimal | null + priceOriginal: Decimal | null + priceDiscount: Decimal | null + stock: number | null + ratingValue: Decimal | null + ratingCount: number | null + } + + export type ProductSumAggregateOutputType = { + priceCurrent: Decimal | null + priceOriginal: Decimal | null + priceDiscount: Decimal | null + stock: number | null + ratingValue: Decimal | null + ratingCount: number | null + } + + export type ProductMinAggregateOutputType = { + id: string | null + slug: $Enums.ProductSlug | null + name: string | null + description: string | null + priceCurrent: Decimal | null + priceOriginal: Decimal | null + priceDiscount: Decimal | null + stock: number | null + hasSizes: boolean | null + badge: string | null + ratingValue: Decimal | null + ratingCount: number | null + isPublished: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ProductMaxAggregateOutputType = { + id: string | null + slug: $Enums.ProductSlug | null + name: string | null + description: string | null + priceCurrent: Decimal | null + priceOriginal: Decimal | null + priceDiscount: Decimal | null + stock: number | null + hasSizes: boolean | null + badge: string | null + ratingValue: Decimal | null + ratingCount: number | null + isPublished: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type ProductCountAggregateOutputType = { + id: number + slug: number + name: number + description: number + priceCurrent: number + priceOriginal: number + priceDiscount: number + stock: number + hasSizes: number + badge: number + ratingValue: number + ratingCount: number + isPublished: number + createdAt: number + updatedAt: number + _all: number + } + + + export type ProductAvgAggregateInputType = { + priceCurrent?: true + priceOriginal?: true + priceDiscount?: true + stock?: true + ratingValue?: true + ratingCount?: true + } + + export type ProductSumAggregateInputType = { + priceCurrent?: true + priceOriginal?: true + priceDiscount?: true + stock?: true + ratingValue?: true + ratingCount?: true + } + + export type ProductMinAggregateInputType = { + id?: true + slug?: true + name?: true + description?: true + priceCurrent?: true + priceOriginal?: true + priceDiscount?: true + stock?: true + hasSizes?: true + badge?: true + ratingValue?: true + ratingCount?: true + isPublished?: true + createdAt?: true + updatedAt?: true + } + + export type ProductMaxAggregateInputType = { + id?: true + slug?: true + name?: true + description?: true + priceCurrent?: true + priceOriginal?: true + priceDiscount?: true + stock?: true + hasSizes?: true + badge?: true + ratingValue?: true + ratingCount?: true + isPublished?: true + createdAt?: true + updatedAt?: true + } + + export type ProductCountAggregateInputType = { + id?: true + slug?: true + name?: true + description?: true + priceCurrent?: true + priceOriginal?: true + priceDiscount?: true + stock?: true + hasSizes?: true + badge?: true + ratingValue?: true + ratingCount?: true + isPublished?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type ProductAggregateArgs = { + /** + * Filter which Product to aggregate. + */ + where?: ProductWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Products to fetch. + */ + orderBy?: ProductOrderByWithRelationInput | ProductOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ProductWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Products 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` Products. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Products + **/ + _count?: true | ProductCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ProductAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ProductSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ProductMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ProductMaxAggregateInputType + } + + export type GetProductAggregateType = { + [P in keyof T & keyof AggregateProduct]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ProductGroupByArgs = { + where?: ProductWhereInput + orderBy?: ProductOrderByWithAggregationInput | ProductOrderByWithAggregationInput[] + by: ProductScalarFieldEnum[] | ProductScalarFieldEnum + having?: ProductScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ProductCountAggregateInputType | true + _avg?: ProductAvgAggregateInputType + _sum?: ProductSumAggregateInputType + _min?: ProductMinAggregateInputType + _max?: ProductMaxAggregateInputType + } + + export type ProductGroupByOutputType = { + id: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal + priceOriginal: Decimal | null + priceDiscount: Decimal | null + stock: number + hasSizes: boolean + badge: string | null + ratingValue: Decimal + ratingCount: number + isPublished: boolean + createdAt: Date + updatedAt: Date + _count: ProductCountAggregateOutputType | null + _avg: ProductAvgAggregateOutputType | null + _sum: ProductSumAggregateOutputType | null + _min: ProductMinAggregateOutputType | null + _max: ProductMaxAggregateOutputType | null + } + + type GetProductGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ProductGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ProductSelect = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + name?: boolean + description?: boolean + priceCurrent?: boolean + priceOriginal?: boolean + priceDiscount?: boolean + stock?: boolean + hasSizes?: boolean + badge?: boolean + ratingValue?: boolean + ratingCount?: boolean + isPublished?: boolean + createdAt?: boolean + updatedAt?: boolean + sizeStocks?: boolean | Product$sizeStocksArgs + cartItems?: boolean | Product$cartItemsArgs + orderItems?: boolean | Product$orderItemsArgs + reviews?: boolean | Product$reviewsArgs + _count?: boolean | ProductCountOutputTypeDefaultArgs + }, ExtArgs["result"]["product"]> + + export type ProductSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + name?: boolean + description?: boolean + priceCurrent?: boolean + priceOriginal?: boolean + priceDiscount?: boolean + stock?: boolean + hasSizes?: boolean + badge?: boolean + ratingValue?: boolean + ratingCount?: boolean + isPublished?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["product"]> + + export type ProductSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + slug?: boolean + name?: boolean + description?: boolean + priceCurrent?: boolean + priceOriginal?: boolean + priceDiscount?: boolean + stock?: boolean + hasSizes?: boolean + badge?: boolean + ratingValue?: boolean + ratingCount?: boolean + isPublished?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["product"]> + + export type ProductSelectScalar = { + id?: boolean + slug?: boolean + name?: boolean + description?: boolean + priceCurrent?: boolean + priceOriginal?: boolean + priceDiscount?: boolean + stock?: boolean + hasSizes?: boolean + badge?: boolean + ratingValue?: boolean + ratingCount?: boolean + isPublished?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type ProductOmit = $Extensions.GetOmit<"id" | "slug" | "name" | "description" | "priceCurrent" | "priceOriginal" | "priceDiscount" | "stock" | "hasSizes" | "badge" | "ratingValue" | "ratingCount" | "isPublished" | "createdAt" | "updatedAt", ExtArgs["result"]["product"]> + export type ProductInclude = { + sizeStocks?: boolean | Product$sizeStocksArgs + cartItems?: boolean | Product$cartItemsArgs + orderItems?: boolean | Product$orderItemsArgs + reviews?: boolean | Product$reviewsArgs + _count?: boolean | ProductCountOutputTypeDefaultArgs + } + export type ProductIncludeCreateManyAndReturn = {} + export type ProductIncludeUpdateManyAndReturn = {} + + export type $ProductPayload = { + name: "Product" + objects: { + sizeStocks: Prisma.$ProductSizeStockPayload[] + cartItems: Prisma.$CartItemPayload[] + orderItems: Prisma.$OrderItemPayload[] + reviews: Prisma.$ReviewPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Prisma.Decimal + priceOriginal: Prisma.Decimal | null + priceDiscount: Prisma.Decimal | null + stock: number + hasSizes: boolean + badge: string | null + ratingValue: Prisma.Decimal + ratingCount: number + isPublished: boolean + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["product"]> + composites: {} + } + + type ProductGetPayload = $Result.GetResult + + type ProductCountArgs = + Omit & { + select?: ProductCountAggregateInputType | true + } + + export interface ProductDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Product'], meta: { name: 'Product' } } + /** + * Find zero or one Product that matches the filter. + * @param {ProductFindUniqueArgs} args - Arguments to find a Product + * @example + * // Get one Product + * const product = await prisma.product.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Product that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ProductFindUniqueOrThrowArgs} args - Arguments to find a Product + * @example + * // Get one Product + * const product = await prisma.product.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Product 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 {ProductFindFirstArgs} args - Arguments to find a Product + * @example + * // Get one Product + * const product = await prisma.product.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Product 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 {ProductFindFirstOrThrowArgs} args - Arguments to find a Product + * @example + * // Get one Product + * const product = await prisma.product.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Products 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 {ProductFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Products + * const products = await prisma.product.findMany() + * + * // Get first 10 Products + * const products = await prisma.product.findMany({ take: 10 }) + * + * // Only select the `id` + * const productWithIdOnly = await prisma.product.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Product. + * @param {ProductCreateArgs} args - Arguments to create a Product. + * @example + * // Create one Product + * const Product = await prisma.product.create({ + * data: { + * // ... data to create a Product + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Products. + * @param {ProductCreateManyArgs} args - Arguments to create many Products. + * @example + * // Create many Products + * const product = await prisma.product.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Products and returns the data saved in the database. + * @param {ProductCreateManyAndReturnArgs} args - Arguments to create many Products. + * @example + * // Create many Products + * const product = await prisma.product.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Products and only return the `id` + * const productWithIdOnly = await prisma.product.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Product. + * @param {ProductDeleteArgs} args - Arguments to delete one Product. + * @example + * // Delete one Product + * const Product = await prisma.product.delete({ + * where: { + * // ... filter to delete one Product + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Product. + * @param {ProductUpdateArgs} args - Arguments to update one Product. + * @example + * // Update one Product + * const product = await prisma.product.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Products. + * @param {ProductDeleteManyArgs} args - Arguments to filter Products to delete. + * @example + * // Delete a few Products + * const { count } = await prisma.product.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Products. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Products + * const product = await prisma.product.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Products and returns the data updated in the database. + * @param {ProductUpdateManyAndReturnArgs} args - Arguments to update many Products. + * @example + * // Update many Products + * const product = await prisma.product.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Products and only return the `id` + * const productWithIdOnly = await prisma.product.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Product. + * @param {ProductUpsertArgs} args - Arguments to update or create a Product. + * @example + * // Update or create a Product + * const product = await prisma.product.upsert({ + * create: { + * // ... data to create a Product + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Product we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ProductClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Products. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductCountArgs} args - Arguments to filter Products to count. + * @example + * // Count the number of Products + * const count = await prisma.product.count({ + * where: { + * // ... the filter for the Products we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Product. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Product. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductGroupByArgs} 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 ProductGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ProductGroupByArgs['orderBy'] } + : { orderBy?: ProductGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetProductGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Product model + */ + readonly fields: ProductFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Product. + * 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__ProductClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + sizeStocks = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + cartItems = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + orderItems = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + reviews = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Product model + */ + interface ProductFieldRefs { + readonly id: FieldRef<"Product", 'String'> + readonly slug: FieldRef<"Product", 'ProductSlug'> + readonly name: FieldRef<"Product", 'String'> + readonly description: FieldRef<"Product", 'String'> + readonly priceCurrent: FieldRef<"Product", 'Decimal'> + readonly priceOriginal: FieldRef<"Product", 'Decimal'> + readonly priceDiscount: FieldRef<"Product", 'Decimal'> + readonly stock: FieldRef<"Product", 'Int'> + readonly hasSizes: FieldRef<"Product", 'Boolean'> + readonly badge: FieldRef<"Product", 'String'> + readonly ratingValue: FieldRef<"Product", 'Decimal'> + readonly ratingCount: FieldRef<"Product", 'Int'> + readonly isPublished: FieldRef<"Product", 'Boolean'> + readonly createdAt: FieldRef<"Product", 'DateTime'> + readonly updatedAt: FieldRef<"Product", 'DateTime'> + } + + + // Custom InputTypes + /** + * Product findUnique + */ + export type ProductFindUniqueArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter, which Product to fetch. + */ + where: ProductWhereUniqueInput + } + + /** + * Product findUniqueOrThrow + */ + export type ProductFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter, which Product to fetch. + */ + where: ProductWhereUniqueInput + } + + /** + * Product findFirst + */ + export type ProductFindFirstArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter, which Product to fetch. + */ + where?: ProductWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Products to fetch. + */ + orderBy?: ProductOrderByWithRelationInput | ProductOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Products. + */ + cursor?: ProductWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Products 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` Products. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Products. + */ + distinct?: ProductScalarFieldEnum | ProductScalarFieldEnum[] + } + + /** + * Product findFirstOrThrow + */ + export type ProductFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter, which Product to fetch. + */ + where?: ProductWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Products to fetch. + */ + orderBy?: ProductOrderByWithRelationInput | ProductOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Products. + */ + cursor?: ProductWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Products 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` Products. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Products. + */ + distinct?: ProductScalarFieldEnum | ProductScalarFieldEnum[] + } + + /** + * Product findMany + */ + export type ProductFindManyArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter, which Products to fetch. + */ + where?: ProductWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Products to fetch. + */ + orderBy?: ProductOrderByWithRelationInput | ProductOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Products. + */ + cursor?: ProductWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Products 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` Products. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Products. + */ + distinct?: ProductScalarFieldEnum | ProductScalarFieldEnum[] + } + + /** + * Product create + */ + export type ProductCreateArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * The data needed to create a Product. + */ + data: XOR + } + + /** + * Product createMany + */ + export type ProductCreateManyArgs = { + /** + * The data used to create many Products. + */ + data: ProductCreateManyInput | ProductCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Product createManyAndReturn + */ + export type ProductCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * The data used to create many Products. + */ + data: ProductCreateManyInput | ProductCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Product update + */ + export type ProductUpdateArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * The data needed to update a Product. + */ + data: XOR + /** + * Choose, which Product to update. + */ + where: ProductWhereUniqueInput + } + + /** + * Product updateMany + */ + export type ProductUpdateManyArgs = { + /** + * The data used to update Products. + */ + data: XOR + /** + * Filter which Products to update + */ + where?: ProductWhereInput + /** + * Limit how many Products to update. + */ + limit?: number + } + + /** + * Product updateManyAndReturn + */ + export type ProductUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * The data used to update Products. + */ + data: XOR + /** + * Filter which Products to update + */ + where?: ProductWhereInput + /** + * Limit how many Products to update. + */ + limit?: number + } + + /** + * Product upsert + */ + export type ProductUpsertArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * The filter to search for the Product to update in case it exists. + */ + where: ProductWhereUniqueInput + /** + * In case the Product found by the `where` argument doesn't exist, create a new Product with this data. + */ + create: XOR + /** + * In case the Product was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Product delete + */ + export type ProductDeleteArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + /** + * Filter which Product to delete. + */ + where: ProductWhereUniqueInput + } + + /** + * Product deleteMany + */ + export type ProductDeleteManyArgs = { + /** + * Filter which Products to delete + */ + where?: ProductWhereInput + /** + * Limit how many Products to delete. + */ + limit?: number + } + + /** + * Product.sizeStocks + */ + export type Product$sizeStocksArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + where?: ProductSizeStockWhereInput + orderBy?: ProductSizeStockOrderByWithRelationInput | ProductSizeStockOrderByWithRelationInput[] + cursor?: ProductSizeStockWhereUniqueInput + take?: number + skip?: number + distinct?: ProductSizeStockScalarFieldEnum | ProductSizeStockScalarFieldEnum[] + } + + /** + * Product.cartItems + */ + export type Product$cartItemsArgs = { + /** + * Select specific fields to fetch from the CartItem + */ + select?: CartItemSelect | null + /** + * Omit specific fields from the CartItem + */ + omit?: CartItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartItemInclude | null + where?: CartItemWhereInput + orderBy?: CartItemOrderByWithRelationInput | CartItemOrderByWithRelationInput[] + cursor?: CartItemWhereUniqueInput + take?: number + skip?: number + distinct?: CartItemScalarFieldEnum | CartItemScalarFieldEnum[] + } + + /** + * Product.orderItems + */ + export type Product$orderItemsArgs = { + /** + * Select specific fields to fetch from the OrderItem + */ + select?: OrderItemSelect | null + /** + * Omit specific fields from the OrderItem + */ + omit?: OrderItemOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderItemInclude | null + where?: OrderItemWhereInput + orderBy?: OrderItemOrderByWithRelationInput | OrderItemOrderByWithRelationInput[] + cursor?: OrderItemWhereUniqueInput + take?: number + skip?: number + distinct?: OrderItemScalarFieldEnum | OrderItemScalarFieldEnum[] + } + + /** + * Product.reviews + */ + export type Product$reviewsArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + where?: ReviewWhereInput + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + cursor?: ReviewWhereUniqueInput + take?: number + skip?: number + distinct?: ReviewScalarFieldEnum | ReviewScalarFieldEnum[] + } + + /** + * Product without action + */ + export type ProductDefaultArgs = { + /** + * Select specific fields to fetch from the Product + */ + select?: ProductSelect | null + /** + * Omit specific fields from the Product + */ + omit?: ProductOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductInclude | null + } + + + /** + * Model ProductSizeStock + */ + + export type AggregateProductSizeStock = { + _count: ProductSizeStockCountAggregateOutputType | null + _avg: ProductSizeStockAvgAggregateOutputType | null + _sum: ProductSizeStockSumAggregateOutputType | null + _min: ProductSizeStockMinAggregateOutputType | null + _max: ProductSizeStockMaxAggregateOutputType | null + } + + export type ProductSizeStockAvgAggregateOutputType = { + stock: number | null + } + + export type ProductSizeStockSumAggregateOutputType = { + stock: number | null + } + + export type ProductSizeStockMinAggregateOutputType = { + id: string | null + size: $Enums.ProductSize | null + stock: number | null + productId: string | null + } + + export type ProductSizeStockMaxAggregateOutputType = { + id: string | null + size: $Enums.ProductSize | null + stock: number | null + productId: string | null + } + + export type ProductSizeStockCountAggregateOutputType = { + id: number + size: number + stock: number + productId: number + _all: number + } + + + export type ProductSizeStockAvgAggregateInputType = { + stock?: true + } + + export type ProductSizeStockSumAggregateInputType = { + stock?: true + } + + export type ProductSizeStockMinAggregateInputType = { + id?: true + size?: true + stock?: true + productId?: true + } + + export type ProductSizeStockMaxAggregateInputType = { + id?: true + size?: true + stock?: true + productId?: true + } + + export type ProductSizeStockCountAggregateInputType = { + id?: true + size?: true + stock?: true + productId?: true + _all?: true + } + + export type ProductSizeStockAggregateArgs = { + /** + * Filter which ProductSizeStock to aggregate. + */ + where?: ProductSizeStockWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ProductSizeStocks to fetch. + */ + orderBy?: ProductSizeStockOrderByWithRelationInput | ProductSizeStockOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ProductSizeStockWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ProductSizeStocks 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` ProductSizeStocks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ProductSizeStocks + **/ + _count?: true | ProductSizeStockCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ProductSizeStockAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ProductSizeStockSumAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ProductSizeStockMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ProductSizeStockMaxAggregateInputType + } + + export type GetProductSizeStockAggregateType = { + [P in keyof T & keyof AggregateProductSizeStock]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ProductSizeStockGroupByArgs = { + where?: ProductSizeStockWhereInput + orderBy?: ProductSizeStockOrderByWithAggregationInput | ProductSizeStockOrderByWithAggregationInput[] + by: ProductSizeStockScalarFieldEnum[] | ProductSizeStockScalarFieldEnum + having?: ProductSizeStockScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ProductSizeStockCountAggregateInputType | true + _avg?: ProductSizeStockAvgAggregateInputType + _sum?: ProductSizeStockSumAggregateInputType + _min?: ProductSizeStockMinAggregateInputType + _max?: ProductSizeStockMaxAggregateInputType + } + + export type ProductSizeStockGroupByOutputType = { + id: string + size: $Enums.ProductSize + stock: number + productId: string + _count: ProductSizeStockCountAggregateOutputType | null + _avg: ProductSizeStockAvgAggregateOutputType | null + _sum: ProductSizeStockSumAggregateOutputType | null + _min: ProductSizeStockMinAggregateOutputType | null + _max: ProductSizeStockMaxAggregateOutputType | null + } + + type GetProductSizeStockGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ProductSizeStockGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ProductSizeStockSelect = $Extensions.GetSelect<{ + id?: boolean + size?: boolean + stock?: boolean + productId?: boolean + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["productSizeStock"]> + + export type ProductSizeStockSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + size?: boolean + stock?: boolean + productId?: boolean + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["productSizeStock"]> + + export type ProductSizeStockSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + size?: boolean + stock?: boolean + productId?: boolean + product?: boolean | ProductDefaultArgs + }, ExtArgs["result"]["productSizeStock"]> + + export type ProductSizeStockSelectScalar = { + id?: boolean + size?: boolean + stock?: boolean + productId?: boolean + } + + export type ProductSizeStockOmit = $Extensions.GetOmit<"id" | "size" | "stock" | "productId", ExtArgs["result"]["productSizeStock"]> + export type ProductSizeStockInclude = { + product?: boolean | ProductDefaultArgs + } + export type ProductSizeStockIncludeCreateManyAndReturn = { + product?: boolean | ProductDefaultArgs + } + export type ProductSizeStockIncludeUpdateManyAndReturn = { + product?: boolean | ProductDefaultArgs + } + + export type $ProductSizeStockPayload = { + name: "ProductSizeStock" + objects: { + product: Prisma.$ProductPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + size: $Enums.ProductSize + stock: number + productId: string + }, ExtArgs["result"]["productSizeStock"]> + composites: {} + } + + type ProductSizeStockGetPayload = $Result.GetResult + + type ProductSizeStockCountArgs = + Omit & { + select?: ProductSizeStockCountAggregateInputType | true + } + + export interface ProductSizeStockDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ProductSizeStock'], meta: { name: 'ProductSizeStock' } } + /** + * Find zero or one ProductSizeStock that matches the filter. + * @param {ProductSizeStockFindUniqueArgs} args - Arguments to find a ProductSizeStock + * @example + * // Get one ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ProductSizeStock that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ProductSizeStockFindUniqueOrThrowArgs} args - Arguments to find a ProductSizeStock + * @example + * // Get one ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ProductSizeStock 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 {ProductSizeStockFindFirstArgs} args - Arguments to find a ProductSizeStock + * @example + * // Get one ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ProductSizeStock 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 {ProductSizeStockFindFirstOrThrowArgs} args - Arguments to find a ProductSizeStock + * @example + * // Get one ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ProductSizeStocks 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 {ProductSizeStockFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ProductSizeStocks + * const productSizeStocks = await prisma.productSizeStock.findMany() + * + * // Get first 10 ProductSizeStocks + * const productSizeStocks = await prisma.productSizeStock.findMany({ take: 10 }) + * + * // Only select the `id` + * const productSizeStockWithIdOnly = await prisma.productSizeStock.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ProductSizeStock. + * @param {ProductSizeStockCreateArgs} args - Arguments to create a ProductSizeStock. + * @example + * // Create one ProductSizeStock + * const ProductSizeStock = await prisma.productSizeStock.create({ + * data: { + * // ... data to create a ProductSizeStock + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ProductSizeStocks. + * @param {ProductSizeStockCreateManyArgs} args - Arguments to create many ProductSizeStocks. + * @example + * // Create many ProductSizeStocks + * const productSizeStock = await prisma.productSizeStock.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many ProductSizeStocks and returns the data saved in the database. + * @param {ProductSizeStockCreateManyAndReturnArgs} args - Arguments to create many ProductSizeStocks. + * @example + * // Create many ProductSizeStocks + * const productSizeStock = await prisma.productSizeStock.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many ProductSizeStocks and only return the `id` + * const productSizeStockWithIdOnly = await prisma.productSizeStock.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a ProductSizeStock. + * @param {ProductSizeStockDeleteArgs} args - Arguments to delete one ProductSizeStock. + * @example + * // Delete one ProductSizeStock + * const ProductSizeStock = await prisma.productSizeStock.delete({ + * where: { + * // ... filter to delete one ProductSizeStock + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ProductSizeStock. + * @param {ProductSizeStockUpdateArgs} args - Arguments to update one ProductSizeStock. + * @example + * // Update one ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ProductSizeStocks. + * @param {ProductSizeStockDeleteManyArgs} args - Arguments to filter ProductSizeStocks to delete. + * @example + * // Delete a few ProductSizeStocks + * const { count } = await prisma.productSizeStock.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ProductSizeStocks. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductSizeStockUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ProductSizeStocks + * const productSizeStock = await prisma.productSizeStock.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ProductSizeStocks and returns the data updated in the database. + * @param {ProductSizeStockUpdateManyAndReturnArgs} args - Arguments to update many ProductSizeStocks. + * @example + * // Update many ProductSizeStocks + * const productSizeStock = await prisma.productSizeStock.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more ProductSizeStocks and only return the `id` + * const productSizeStockWithIdOnly = await prisma.productSizeStock.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one ProductSizeStock. + * @param {ProductSizeStockUpsertArgs} args - Arguments to update or create a ProductSizeStock. + * @example + * // Update or create a ProductSizeStock + * const productSizeStock = await prisma.productSizeStock.upsert({ + * create: { + * // ... data to create a ProductSizeStock + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ProductSizeStock we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ProductSizeStockClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ProductSizeStocks. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductSizeStockCountArgs} args - Arguments to filter ProductSizeStocks to count. + * @example + * // Count the number of ProductSizeStocks + * const count = await prisma.productSizeStock.count({ + * where: { + * // ... the filter for the ProductSizeStocks we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ProductSizeStock. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductSizeStockAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by ProductSizeStock. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ProductSizeStockGroupByArgs} 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 ProductSizeStockGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ProductSizeStockGroupByArgs['orderBy'] } + : { orderBy?: ProductSizeStockGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetProductSizeStockGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the ProductSizeStock model + */ + readonly fields: ProductSizeStockFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for ProductSizeStock. + * 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__ProductSizeStockClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + product = {}>(args?: Subset>): Prisma__ProductClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the ProductSizeStock model + */ + interface ProductSizeStockFieldRefs { + readonly id: FieldRef<"ProductSizeStock", 'String'> + readonly size: FieldRef<"ProductSizeStock", 'ProductSize'> + readonly stock: FieldRef<"ProductSizeStock", 'Int'> + readonly productId: FieldRef<"ProductSizeStock", 'String'> + } + + + // Custom InputTypes + /** + * ProductSizeStock findUnique + */ + export type ProductSizeStockFindUniqueArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter, which ProductSizeStock to fetch. + */ + where: ProductSizeStockWhereUniqueInput + } + + /** + * ProductSizeStock findUniqueOrThrow + */ + export type ProductSizeStockFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter, which ProductSizeStock to fetch. + */ + where: ProductSizeStockWhereUniqueInput + } + + /** + * ProductSizeStock findFirst + */ + export type ProductSizeStockFindFirstArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter, which ProductSizeStock to fetch. + */ + where?: ProductSizeStockWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ProductSizeStocks to fetch. + */ + orderBy?: ProductSizeStockOrderByWithRelationInput | ProductSizeStockOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ProductSizeStocks. + */ + cursor?: ProductSizeStockWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ProductSizeStocks 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` ProductSizeStocks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ProductSizeStocks. + */ + distinct?: ProductSizeStockScalarFieldEnum | ProductSizeStockScalarFieldEnum[] + } + + /** + * ProductSizeStock findFirstOrThrow + */ + export type ProductSizeStockFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter, which ProductSizeStock to fetch. + */ + where?: ProductSizeStockWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ProductSizeStocks to fetch. + */ + orderBy?: ProductSizeStockOrderByWithRelationInput | ProductSizeStockOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ProductSizeStocks. + */ + cursor?: ProductSizeStockWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ProductSizeStocks 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` ProductSizeStocks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ProductSizeStocks. + */ + distinct?: ProductSizeStockScalarFieldEnum | ProductSizeStockScalarFieldEnum[] + } + + /** + * ProductSizeStock findMany + */ + export type ProductSizeStockFindManyArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter, which ProductSizeStocks to fetch. + */ + where?: ProductSizeStockWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ProductSizeStocks to fetch. + */ + orderBy?: ProductSizeStockOrderByWithRelationInput | ProductSizeStockOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ProductSizeStocks. + */ + cursor?: ProductSizeStockWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ProductSizeStocks 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` ProductSizeStocks. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ProductSizeStocks. + */ + distinct?: ProductSizeStockScalarFieldEnum | ProductSizeStockScalarFieldEnum[] + } + + /** + * ProductSizeStock create + */ + export type ProductSizeStockCreateArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * The data needed to create a ProductSizeStock. + */ + data: XOR + } + + /** + * ProductSizeStock createMany + */ + export type ProductSizeStockCreateManyArgs = { + /** + * The data used to create many ProductSizeStocks. + */ + data: ProductSizeStockCreateManyInput | ProductSizeStockCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * ProductSizeStock createManyAndReturn + */ + export type ProductSizeStockCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelectCreateManyAndReturn | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * The data used to create many ProductSizeStocks. + */ + data: ProductSizeStockCreateManyInput | ProductSizeStockCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockIncludeCreateManyAndReturn | null + } + + /** + * ProductSizeStock update + */ + export type ProductSizeStockUpdateArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * The data needed to update a ProductSizeStock. + */ + data: XOR + /** + * Choose, which ProductSizeStock to update. + */ + where: ProductSizeStockWhereUniqueInput + } + + /** + * ProductSizeStock updateMany + */ + export type ProductSizeStockUpdateManyArgs = { + /** + * The data used to update ProductSizeStocks. + */ + data: XOR + /** + * Filter which ProductSizeStocks to update + */ + where?: ProductSizeStockWhereInput + /** + * Limit how many ProductSizeStocks to update. + */ + limit?: number + } + + /** + * ProductSizeStock updateManyAndReturn + */ + export type ProductSizeStockUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * The data used to update ProductSizeStocks. + */ + data: XOR + /** + * Filter which ProductSizeStocks to update + */ + where?: ProductSizeStockWhereInput + /** + * Limit how many ProductSizeStocks to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockIncludeUpdateManyAndReturn | null + } + + /** + * ProductSizeStock upsert + */ + export type ProductSizeStockUpsertArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * The filter to search for the ProductSizeStock to update in case it exists. + */ + where: ProductSizeStockWhereUniqueInput + /** + * In case the ProductSizeStock found by the `where` argument doesn't exist, create a new ProductSizeStock with this data. + */ + create: XOR + /** + * In case the ProductSizeStock was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * ProductSizeStock delete + */ + export type ProductSizeStockDeleteArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + /** + * Filter which ProductSizeStock to delete. + */ + where: ProductSizeStockWhereUniqueInput + } + + /** + * ProductSizeStock deleteMany + */ + export type ProductSizeStockDeleteManyArgs = { + /** + * Filter which ProductSizeStocks to delete + */ + where?: ProductSizeStockWhereInput + /** + * Limit how many ProductSizeStocks to delete. + */ + limit?: number + } + + /** + * ProductSizeStock without action + */ + export type ProductSizeStockDefaultArgs = { + /** + * Select specific fields to fetch from the ProductSizeStock + */ + select?: ProductSizeStockSelect | null + /** + * Omit specific fields from the ProductSizeStock + */ + omit?: ProductSizeStockOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ProductSizeStockInclude | null + } + + + /** + * Model SecurityLog + */ + + export type AggregateSecurityLog = { + _count: SecurityLogCountAggregateOutputType | null + _min: SecurityLogMinAggregateOutputType | null + _max: SecurityLogMaxAggregateOutputType | null + } + + export type SecurityLogMinAggregateOutputType = { + id: string | null + type: string | null + severity: string | null + message: string | null + userId: string | null + ipAddress: string | null + userAgent: string | null + path: string | null + method: string | null + timestamp: Date | null + } + + export type SecurityLogMaxAggregateOutputType = { + id: string | null + type: string | null + severity: string | null + message: string | null + userId: string | null + ipAddress: string | null + userAgent: string | null + path: string | null + method: string | null + timestamp: Date | null + } + + export type SecurityLogCountAggregateOutputType = { + id: number + type: number + severity: number + message: number + userId: number + ipAddress: number + userAgent: number + path: number + method: number + metadata: number + timestamp: number + _all: number + } + + + export type SecurityLogMinAggregateInputType = { + id?: true + type?: true + severity?: true + message?: true + userId?: true + ipAddress?: true + userAgent?: true + path?: true + method?: true + timestamp?: true + } + + export type SecurityLogMaxAggregateInputType = { + id?: true + type?: true + severity?: true + message?: true + userId?: true + ipAddress?: true + userAgent?: true + path?: true + method?: true + timestamp?: true + } + + export type SecurityLogCountAggregateInputType = { + id?: true + type?: true + severity?: true + message?: true + userId?: true + ipAddress?: true + userAgent?: true + path?: true + method?: true + metadata?: true + timestamp?: true + _all?: true + } + + export type SecurityLogAggregateArgs = { + /** + * Filter which SecurityLog to aggregate. + */ + where?: SecurityLogWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of SecurityLogs to fetch. + */ + orderBy?: SecurityLogOrderByWithRelationInput | SecurityLogOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: SecurityLogWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` SecurityLogs 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` SecurityLogs. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned SecurityLogs + **/ + _count?: true | SecurityLogCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: SecurityLogMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: SecurityLogMaxAggregateInputType + } + + export type GetSecurityLogAggregateType = { + [P in keyof T & keyof AggregateSecurityLog]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type SecurityLogGroupByArgs = { + where?: SecurityLogWhereInput + orderBy?: SecurityLogOrderByWithAggregationInput | SecurityLogOrderByWithAggregationInput[] + by: SecurityLogScalarFieldEnum[] | SecurityLogScalarFieldEnum + having?: SecurityLogScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: SecurityLogCountAggregateInputType | true + _min?: SecurityLogMinAggregateInputType + _max?: SecurityLogMaxAggregateInputType + } + + export type SecurityLogGroupByOutputType = { + id: string + type: string + severity: string + message: string + userId: string | null + ipAddress: string | null + userAgent: string | null + path: string | null + method: string | null + metadata: JsonValue | null + timestamp: Date + _count: SecurityLogCountAggregateOutputType | null + _min: SecurityLogMinAggregateOutputType | null + _max: SecurityLogMaxAggregateOutputType | null + } + + type GetSecurityLogGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof SecurityLogGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type SecurityLogSelect = $Extensions.GetSelect<{ + id?: boolean + type?: boolean + severity?: boolean + message?: boolean + userId?: boolean + ipAddress?: boolean + userAgent?: boolean + path?: boolean + method?: boolean + metadata?: boolean + timestamp?: boolean + }, ExtArgs["result"]["securityLog"]> + + export type SecurityLogSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + type?: boolean + severity?: boolean + message?: boolean + userId?: boolean + ipAddress?: boolean + userAgent?: boolean + path?: boolean + method?: boolean + metadata?: boolean + timestamp?: boolean + }, ExtArgs["result"]["securityLog"]> + + export type SecurityLogSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + type?: boolean + severity?: boolean + message?: boolean + userId?: boolean + ipAddress?: boolean + userAgent?: boolean + path?: boolean + method?: boolean + metadata?: boolean + timestamp?: boolean + }, ExtArgs["result"]["securityLog"]> + + export type SecurityLogSelectScalar = { + id?: boolean + type?: boolean + severity?: boolean + message?: boolean + userId?: boolean + ipAddress?: boolean + userAgent?: boolean + path?: boolean + method?: boolean + metadata?: boolean + timestamp?: boolean + } + + export type SecurityLogOmit = $Extensions.GetOmit<"id" | "type" | "severity" | "message" | "userId" | "ipAddress" | "userAgent" | "path" | "method" | "metadata" | "timestamp", ExtArgs["result"]["securityLog"]> + + export type $SecurityLogPayload = { + name: "SecurityLog" + objects: {} + scalars: $Extensions.GetPayloadResult<{ + id: string + type: string + severity: string + message: string + userId: string | null + ipAddress: string | null + userAgent: string | null + path: string | null + method: string | null + metadata: Prisma.JsonValue | null + timestamp: Date + }, ExtArgs["result"]["securityLog"]> + composites: {} + } + + type SecurityLogGetPayload = $Result.GetResult + + type SecurityLogCountArgs = + Omit & { + select?: SecurityLogCountAggregateInputType | true + } + + export interface SecurityLogDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['SecurityLog'], meta: { name: 'SecurityLog' } } + /** + * Find zero or one SecurityLog that matches the filter. + * @param {SecurityLogFindUniqueArgs} args - Arguments to find a SecurityLog + * @example + * // Get one SecurityLog + * const securityLog = await prisma.securityLog.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one SecurityLog that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {SecurityLogFindUniqueOrThrowArgs} args - Arguments to find a SecurityLog + * @example + * // Get one SecurityLog + * const securityLog = await prisma.securityLog.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first SecurityLog 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 {SecurityLogFindFirstArgs} args - Arguments to find a SecurityLog + * @example + * // Get one SecurityLog + * const securityLog = await prisma.securityLog.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first SecurityLog 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 {SecurityLogFindFirstOrThrowArgs} args - Arguments to find a SecurityLog + * @example + * // Get one SecurityLog + * const securityLog = await prisma.securityLog.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more SecurityLogs 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 {SecurityLogFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all SecurityLogs + * const securityLogs = await prisma.securityLog.findMany() + * + * // Get first 10 SecurityLogs + * const securityLogs = await prisma.securityLog.findMany({ take: 10 }) + * + * // Only select the `id` + * const securityLogWithIdOnly = await prisma.securityLog.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a SecurityLog. + * @param {SecurityLogCreateArgs} args - Arguments to create a SecurityLog. + * @example + * // Create one SecurityLog + * const SecurityLog = await prisma.securityLog.create({ + * data: { + * // ... data to create a SecurityLog + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many SecurityLogs. + * @param {SecurityLogCreateManyArgs} args - Arguments to create many SecurityLogs. + * @example + * // Create many SecurityLogs + * const securityLog = await prisma.securityLog.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many SecurityLogs and returns the data saved in the database. + * @param {SecurityLogCreateManyAndReturnArgs} args - Arguments to create many SecurityLogs. + * @example + * // Create many SecurityLogs + * const securityLog = await prisma.securityLog.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many SecurityLogs and only return the `id` + * const securityLogWithIdOnly = await prisma.securityLog.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a SecurityLog. + * @param {SecurityLogDeleteArgs} args - Arguments to delete one SecurityLog. + * @example + * // Delete one SecurityLog + * const SecurityLog = await prisma.securityLog.delete({ + * where: { + * // ... filter to delete one SecurityLog + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one SecurityLog. + * @param {SecurityLogUpdateArgs} args - Arguments to update one SecurityLog. + * @example + * // Update one SecurityLog + * const securityLog = await prisma.securityLog.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more SecurityLogs. + * @param {SecurityLogDeleteManyArgs} args - Arguments to filter SecurityLogs to delete. + * @example + * // Delete a few SecurityLogs + * const { count } = await prisma.securityLog.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more SecurityLogs. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SecurityLogUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many SecurityLogs + * const securityLog = await prisma.securityLog.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more SecurityLogs and returns the data updated in the database. + * @param {SecurityLogUpdateManyAndReturnArgs} args - Arguments to update many SecurityLogs. + * @example + * // Update many SecurityLogs + * const securityLog = await prisma.securityLog.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more SecurityLogs and only return the `id` + * const securityLogWithIdOnly = await prisma.securityLog.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one SecurityLog. + * @param {SecurityLogUpsertArgs} args - Arguments to update or create a SecurityLog. + * @example + * // Update or create a SecurityLog + * const securityLog = await prisma.securityLog.upsert({ + * create: { + * // ... data to create a SecurityLog + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the SecurityLog we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__SecurityLogClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of SecurityLogs. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SecurityLogCountArgs} args - Arguments to filter SecurityLogs to count. + * @example + * // Count the number of SecurityLogs + * const count = await prisma.securityLog.count({ + * where: { + * // ... the filter for the SecurityLogs we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a SecurityLog. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SecurityLogAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by SecurityLog. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {SecurityLogGroupByArgs} 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 SecurityLogGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: SecurityLogGroupByArgs['orderBy'] } + : { orderBy?: SecurityLogGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetSecurityLogGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the SecurityLog model + */ + readonly fields: SecurityLogFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for SecurityLog. + * 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__SecurityLogClient extends Prisma.PrismaPromise { + 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the SecurityLog model + */ + interface SecurityLogFieldRefs { + readonly id: FieldRef<"SecurityLog", 'String'> + readonly type: FieldRef<"SecurityLog", 'String'> + readonly severity: FieldRef<"SecurityLog", 'String'> + readonly message: FieldRef<"SecurityLog", 'String'> + readonly userId: FieldRef<"SecurityLog", 'String'> + readonly ipAddress: FieldRef<"SecurityLog", 'String'> + readonly userAgent: FieldRef<"SecurityLog", 'String'> + readonly path: FieldRef<"SecurityLog", 'String'> + readonly method: FieldRef<"SecurityLog", 'String'> + readonly metadata: FieldRef<"SecurityLog", 'Json'> + readonly timestamp: FieldRef<"SecurityLog", 'DateTime'> + } + + + // Custom InputTypes + /** + * SecurityLog findUnique + */ + export type SecurityLogFindUniqueArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter, which SecurityLog to fetch. + */ + where: SecurityLogWhereUniqueInput + } + + /** + * SecurityLog findUniqueOrThrow + */ + export type SecurityLogFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter, which SecurityLog to fetch. + */ + where: SecurityLogWhereUniqueInput + } + + /** + * SecurityLog findFirst + */ + export type SecurityLogFindFirstArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter, which SecurityLog to fetch. + */ + where?: SecurityLogWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of SecurityLogs to fetch. + */ + orderBy?: SecurityLogOrderByWithRelationInput | SecurityLogOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for SecurityLogs. + */ + cursor?: SecurityLogWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` SecurityLogs 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` SecurityLogs. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of SecurityLogs. + */ + distinct?: SecurityLogScalarFieldEnum | SecurityLogScalarFieldEnum[] + } + + /** + * SecurityLog findFirstOrThrow + */ + export type SecurityLogFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter, which SecurityLog to fetch. + */ + where?: SecurityLogWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of SecurityLogs to fetch. + */ + orderBy?: SecurityLogOrderByWithRelationInput | SecurityLogOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for SecurityLogs. + */ + cursor?: SecurityLogWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` SecurityLogs 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` SecurityLogs. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of SecurityLogs. + */ + distinct?: SecurityLogScalarFieldEnum | SecurityLogScalarFieldEnum[] + } + + /** + * SecurityLog findMany + */ + export type SecurityLogFindManyArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter, which SecurityLogs to fetch. + */ + where?: SecurityLogWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of SecurityLogs to fetch. + */ + orderBy?: SecurityLogOrderByWithRelationInput | SecurityLogOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing SecurityLogs. + */ + cursor?: SecurityLogWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` SecurityLogs 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` SecurityLogs. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of SecurityLogs. + */ + distinct?: SecurityLogScalarFieldEnum | SecurityLogScalarFieldEnum[] + } + + /** + * SecurityLog create + */ + export type SecurityLogCreateArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * The data needed to create a SecurityLog. + */ + data: XOR + } + + /** + * SecurityLog createMany + */ + export type SecurityLogCreateManyArgs = { + /** + * The data used to create many SecurityLogs. + */ + data: SecurityLogCreateManyInput | SecurityLogCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * SecurityLog createManyAndReturn + */ + export type SecurityLogCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelectCreateManyAndReturn | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * The data used to create many SecurityLogs. + */ + data: SecurityLogCreateManyInput | SecurityLogCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * SecurityLog update + */ + export type SecurityLogUpdateArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * The data needed to update a SecurityLog. + */ + data: XOR + /** + * Choose, which SecurityLog to update. + */ + where: SecurityLogWhereUniqueInput + } + + /** + * SecurityLog updateMany + */ + export type SecurityLogUpdateManyArgs = { + /** + * The data used to update SecurityLogs. + */ + data: XOR + /** + * Filter which SecurityLogs to update + */ + where?: SecurityLogWhereInput + /** + * Limit how many SecurityLogs to update. + */ + limit?: number + } + + /** + * SecurityLog updateManyAndReturn + */ + export type SecurityLogUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * The data used to update SecurityLogs. + */ + data: XOR + /** + * Filter which SecurityLogs to update + */ + where?: SecurityLogWhereInput + /** + * Limit how many SecurityLogs to update. + */ + limit?: number + } + + /** + * SecurityLog upsert + */ + export type SecurityLogUpsertArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * The filter to search for the SecurityLog to update in case it exists. + */ + where: SecurityLogWhereUniqueInput + /** + * In case the SecurityLog found by the `where` argument doesn't exist, create a new SecurityLog with this data. + */ + create: XOR + /** + * In case the SecurityLog was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * SecurityLog delete + */ + export type SecurityLogDeleteArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + /** + * Filter which SecurityLog to delete. + */ + where: SecurityLogWhereUniqueInput + } + + /** + * SecurityLog deleteMany + */ + export type SecurityLogDeleteManyArgs = { + /** + * Filter which SecurityLogs to delete + */ + where?: SecurityLogWhereInput + /** + * Limit how many SecurityLogs to delete. + */ + limit?: number + } + + /** + * SecurityLog without action + */ + export type SecurityLogDefaultArgs = { + /** + * Select specific fields to fetch from the SecurityLog + */ + select?: SecurityLogSelect | null + /** + * Omit specific fields from the SecurityLog + */ + omit?: SecurityLogOmit | null + } + + + /** + * Model User + */ + + export type AggregateUser = { + _count: UserCountAggregateOutputType | null + _min: UserMinAggregateOutputType | null + _max: UserMaxAggregateOutputType | null + } + + export type UserMinAggregateOutputType = { + id: string | null + email: string | null + password: string | null + fullName: string | null + phone: string | null + avatar: string | null + role: $Enums.UserRole | null + mfaEnabled: boolean | null + mfaSecret: string | null + emailVerified: boolean | null + phoneVerified: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type UserMaxAggregateOutputType = { + id: string | null + email: string | null + password: string | null + fullName: string | null + phone: string | null + avatar: string | null + role: $Enums.UserRole | null + mfaEnabled: boolean | null + mfaSecret: string | null + emailVerified: boolean | null + phoneVerified: boolean | null + createdAt: Date | null + updatedAt: Date | null + } + + export type UserCountAggregateOutputType = { + id: number + email: number + password: number + fullName: number + phone: number + avatar: number + role: number + mfaEnabled: number + mfaSecret: number + emailVerified: number + phoneVerified: number + createdAt: number + updatedAt: number + _all: number + } + + + export type UserMinAggregateInputType = { + id?: true + email?: true + password?: true + fullName?: true + phone?: true + avatar?: true + role?: true + mfaEnabled?: true + mfaSecret?: true + emailVerified?: true + phoneVerified?: true + createdAt?: true + updatedAt?: true + } + + export type UserMaxAggregateInputType = { + id?: true + email?: true + password?: true + fullName?: true + phone?: true + avatar?: true + role?: true + mfaEnabled?: true + mfaSecret?: true + emailVerified?: true + phoneVerified?: true + createdAt?: true + updatedAt?: true + } + + export type UserCountAggregateInputType = { + id?: true + email?: true + password?: true + fullName?: true + phone?: true + avatar?: true + role?: true + mfaEnabled?: true + mfaSecret?: true + emailVerified?: true + phoneVerified?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type UserAggregateArgs = { + /** + * 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 = { + [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type UserGroupByArgs = { + 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 + email: string + password: string | null + fullName: string | null + phone: string | null + avatar: string | null + role: $Enums.UserRole + mfaEnabled: boolean + mfaSecret: string | null + emailVerified: boolean + phoneVerified: boolean + createdAt: Date + updatedAt: Date + _count: UserCountAggregateOutputType | null + _min: UserMinAggregateOutputType | null + _max: UserMaxAggregateOutputType | null + } + + type GetUserGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof UserGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type UserSelect = $Extensions.GetSelect<{ + id?: boolean + email?: boolean + password?: boolean + fullName?: boolean + phone?: boolean + avatar?: boolean + role?: boolean + mfaEnabled?: boolean + mfaSecret?: boolean + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: boolean + updatedAt?: boolean + addresses?: boolean | User$addressesArgs + orders?: boolean | User$ordersArgs + reviews?: boolean | User$reviewsArgs + cart?: boolean | User$cartArgs + externalAccounts?: boolean | User$externalAccountsArgs + mfaMethods?: boolean | User$mfaMethodsArgs + mfaBackupCodes?: boolean | User$mfaBackupCodesArgs + devices?: boolean | User$devicesArgs + sessions?: boolean | User$sessionsArgs + blogPosts?: boolean | User$blogPostsArgs + blogComments?: boolean | User$blogCommentsArgs + _count?: boolean | UserCountOutputTypeDefaultArgs + }, ExtArgs["result"]["user"]> + + export type UserSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + email?: boolean + password?: boolean + fullName?: boolean + phone?: boolean + avatar?: boolean + role?: boolean + mfaEnabled?: boolean + mfaSecret?: boolean + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["user"]> + + export type UserSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + email?: boolean + password?: boolean + fullName?: boolean + phone?: boolean + avatar?: boolean + role?: boolean + mfaEnabled?: boolean + mfaSecret?: boolean + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: boolean + updatedAt?: boolean + }, ExtArgs["result"]["user"]> + + export type UserSelectScalar = { + id?: boolean + email?: boolean + password?: boolean + fullName?: boolean + phone?: boolean + avatar?: boolean + role?: boolean + mfaEnabled?: boolean + mfaSecret?: boolean + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type UserOmit = $Extensions.GetOmit<"id" | "email" | "password" | "fullName" | "phone" | "avatar" | "role" | "mfaEnabled" | "mfaSecret" | "emailVerified" | "phoneVerified" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]> + export type UserInclude = { + addresses?: boolean | User$addressesArgs + orders?: boolean | User$ordersArgs + reviews?: boolean | User$reviewsArgs + cart?: boolean | User$cartArgs + externalAccounts?: boolean | User$externalAccountsArgs + mfaMethods?: boolean | User$mfaMethodsArgs + mfaBackupCodes?: boolean | User$mfaBackupCodesArgs + devices?: boolean | User$devicesArgs + sessions?: boolean | User$sessionsArgs + blogPosts?: boolean | User$blogPostsArgs + blogComments?: boolean | User$blogCommentsArgs + _count?: boolean | UserCountOutputTypeDefaultArgs + } + export type UserIncludeCreateManyAndReturn = {} + export type UserIncludeUpdateManyAndReturn = {} + + export type $UserPayload = { + name: "User" + objects: { + addresses: Prisma.$AddressPayload[] + orders: Prisma.$OrderPayload[] + reviews: Prisma.$ReviewPayload[] + cart: Prisma.$CartPayload | null + externalAccounts: Prisma.$ExternalAccountPayload[] + mfaMethods: Prisma.$UserMFAMethodPayload[] + mfaBackupCodes: Prisma.$MFABackupCodePayload[] + devices: Prisma.$DevicePayload[] + sessions: Prisma.$SessionPayload[] + blogPosts: Prisma.$BlogPostPayload[] + blogComments: Prisma.$BlogCommentPayload[] + } + scalars: $Extensions.GetPayloadResult<{ + id: string + email: string + password: string | null + fullName: string | null + phone: string | null + avatar: string | null + role: $Enums.UserRole + mfaEnabled: boolean + mfaSecret: string | null + emailVerified: boolean + phoneVerified: boolean + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["user"]> + composites: {} + } + + type UserGetPayload = $Result.GetResult + + type UserCountArgs = + Omit & { + select?: UserCountAggregateInputType | true + } + + export interface UserDelegate { + [K: symbol]: { types: Prisma.TypeMap['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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args?: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args?: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, 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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * 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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, 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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * 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(args: SelectSubset>): Prisma.PrismaPromise + + /** + * 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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, 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(args: SelectSubset>): Prisma__UserClient<$Result.GetResult, 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( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : 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(args: Subset): Prisma.PrismaPromise> + + /** + * 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>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: UserGroupByArgs['orderBy'] } + : { orderBy?: UserGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetUserGroupByPayload : Prisma.PrismaPromise + /** + * 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 extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + addresses = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + orders = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + reviews = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + cart = {}>(args?: Subset>): Prisma__CartClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + externalAccounts = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + mfaMethods = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + mfaBackupCodes = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + devices = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + sessions = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + blogPosts = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + blogComments = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the User model + */ + interface UserFieldRefs { + readonly id: FieldRef<"User", 'String'> + readonly email: FieldRef<"User", 'String'> + readonly password: FieldRef<"User", 'String'> + readonly fullName: FieldRef<"User", 'String'> + readonly phone: FieldRef<"User", 'String'> + readonly avatar: FieldRef<"User", 'String'> + readonly role: FieldRef<"User", 'UserRole'> + readonly mfaEnabled: FieldRef<"User", 'Boolean'> + readonly mfaSecret: FieldRef<"User", 'String'> + readonly emailVerified: FieldRef<"User", 'Boolean'> + readonly phoneVerified: FieldRef<"User", 'Boolean'> + readonly createdAt: FieldRef<"User", 'DateTime'> + readonly updatedAt: FieldRef<"User", 'DateTime'> + } + + + // Custom InputTypes + /** + * User findUnique + */ + export type UserFindUniqueArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * Filter, which User to fetch. + */ + where: UserWhereUniqueInput + } + + /** + * User findUniqueOrThrow + */ + export type UserFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * Filter, which User to fetch. + */ + where: UserWhereUniqueInput + } + + /** + * User findFirst + */ + export type UserFindFirstArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | 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 = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | 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 = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * Filter, which Users to fetch. + */ + where?: UserWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Users to fetch. + */ + orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Users. + */ + cursor?: UserWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Users from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` Users. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Users. + */ + distinct?: UserScalarFieldEnum | UserScalarFieldEnum[] + } + + /** + * User create + */ + export type UserCreateArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * The data needed to create a User. + */ + data: XOR + } + + /** + * User createMany + */ + export type UserCreateManyArgs = { + /** + * The data used to create many Users. + */ + data: UserCreateManyInput | UserCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * User createManyAndReturn + */ + export type UserCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelectCreateManyAndReturn | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * The data used to create many Users. + */ + data: UserCreateManyInput | UserCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * User update + */ + export type UserUpdateArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * The data needed to update a User. + */ + data: XOR + /** + * Choose, which User to update. + */ + where: UserWhereUniqueInput + } + + /** + * User updateMany + */ + export type UserUpdateManyArgs = { + /** + * The data used to update Users. + */ + data: XOR + /** + * Filter which Users to update + */ + where?: UserWhereInput + /** + * Limit how many Users to update. + */ + limit?: number + } + + /** + * User updateManyAndReturn + */ + export type UserUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * The data used to update Users. + */ + data: XOR + /** + * Filter which Users to update + */ + where?: UserWhereInput + /** + * Limit how many Users to update. + */ + limit?: number + } + + /** + * User upsert + */ + export type UserUpsertArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | 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 + /** + * In case the User was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * User delete + */ + export type UserDeleteArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + /** + * Filter which User to delete. + */ + where: UserWhereUniqueInput + } + + /** + * User deleteMany + */ + export type UserDeleteManyArgs = { + /** + * Filter which Users to delete + */ + where?: UserWhereInput + /** + * Limit how many Users to delete. + */ + limit?: number + } + + /** + * User.addresses + */ + export type User$addressesArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + where?: AddressWhereInput + orderBy?: AddressOrderByWithRelationInput | AddressOrderByWithRelationInput[] + cursor?: AddressWhereUniqueInput + take?: number + skip?: number + distinct?: AddressScalarFieldEnum | AddressScalarFieldEnum[] + } + + /** + * User.orders + */ + export type User$ordersArgs = { + /** + * Select specific fields to fetch from the Order + */ + select?: OrderSelect | null + /** + * Omit specific fields from the Order + */ + omit?: OrderOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: OrderInclude | null + where?: OrderWhereInput + orderBy?: OrderOrderByWithRelationInput | OrderOrderByWithRelationInput[] + cursor?: OrderWhereUniqueInput + take?: number + skip?: number + distinct?: OrderScalarFieldEnum | OrderScalarFieldEnum[] + } + + /** + * User.reviews + */ + export type User$reviewsArgs = { + /** + * Select specific fields to fetch from the Review + */ + select?: ReviewSelect | null + /** + * Omit specific fields from the Review + */ + omit?: ReviewOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ReviewInclude | null + where?: ReviewWhereInput + orderBy?: ReviewOrderByWithRelationInput | ReviewOrderByWithRelationInput[] + cursor?: ReviewWhereUniqueInput + take?: number + skip?: number + distinct?: ReviewScalarFieldEnum | ReviewScalarFieldEnum[] + } + + /** + * User.cart + */ + export type User$cartArgs = { + /** + * Select specific fields to fetch from the Cart + */ + select?: CartSelect | null + /** + * Omit specific fields from the Cart + */ + omit?: CartOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: CartInclude | null + where?: CartWhereInput + } + + /** + * User.externalAccounts + */ + export type User$externalAccountsArgs = { + /** + * Select specific fields to fetch from the ExternalAccount + */ + select?: ExternalAccountSelect | null + /** + * Omit specific fields from the ExternalAccount + */ + omit?: ExternalAccountOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ExternalAccountInclude | null + where?: ExternalAccountWhereInput + orderBy?: ExternalAccountOrderByWithRelationInput | ExternalAccountOrderByWithRelationInput[] + cursor?: ExternalAccountWhereUniqueInput + take?: number + skip?: number + distinct?: ExternalAccountScalarFieldEnum | ExternalAccountScalarFieldEnum[] + } + + /** + * User.mfaMethods + */ + export type User$mfaMethodsArgs = { + /** + * Select specific fields to fetch from the UserMFAMethod + */ + select?: UserMFAMethodSelect | null + /** + * Omit specific fields from the UserMFAMethod + */ + omit?: UserMFAMethodOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserMFAMethodInclude | null + where?: UserMFAMethodWhereInput + orderBy?: UserMFAMethodOrderByWithRelationInput | UserMFAMethodOrderByWithRelationInput[] + cursor?: UserMFAMethodWhereUniqueInput + take?: number + skip?: number + distinct?: UserMFAMethodScalarFieldEnum | UserMFAMethodScalarFieldEnum[] + } + + /** + * User.mfaBackupCodes + */ + export type User$mfaBackupCodesArgs = { + /** + * Select specific fields to fetch from the MFABackupCode + */ + select?: MFABackupCodeSelect | null + /** + * Omit specific fields from the MFABackupCode + */ + omit?: MFABackupCodeOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: MFABackupCodeInclude | null + where?: MFABackupCodeWhereInput + orderBy?: MFABackupCodeOrderByWithRelationInput | MFABackupCodeOrderByWithRelationInput[] + cursor?: MFABackupCodeWhereUniqueInput + take?: number + skip?: number + distinct?: MFABackupCodeScalarFieldEnum | MFABackupCodeScalarFieldEnum[] + } + + /** + * User.devices + */ + export type User$devicesArgs = { + /** + * Select specific fields to fetch from the Device + */ + select?: DeviceSelect | null + /** + * Omit specific fields from the Device + */ + omit?: DeviceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: DeviceInclude | null + where?: DeviceWhereInput + orderBy?: DeviceOrderByWithRelationInput | DeviceOrderByWithRelationInput[] + cursor?: DeviceWhereUniqueInput + take?: number + skip?: number + distinct?: DeviceScalarFieldEnum | DeviceScalarFieldEnum[] + } + + /** + * User.sessions + */ + export type User$sessionsArgs = { + /** + * Select specific fields to fetch from the Session + */ + select?: SessionSelect | null + /** + * Omit specific fields from the Session + */ + omit?: SessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: SessionInclude | null + where?: SessionWhereInput + orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[] + cursor?: SessionWhereUniqueInput + take?: number + skip?: number + distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[] + } + + /** + * User.blogPosts + */ + export type User$blogPostsArgs = { + /** + * Select specific fields to fetch from the BlogPost + */ + select?: BlogPostSelect | null + /** + * Omit specific fields from the BlogPost + */ + omit?: BlogPostOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogPostInclude | null + where?: BlogPostWhereInput + orderBy?: BlogPostOrderByWithRelationInput | BlogPostOrderByWithRelationInput[] + cursor?: BlogPostWhereUniqueInput + take?: number + skip?: number + distinct?: BlogPostScalarFieldEnum | BlogPostScalarFieldEnum[] + } + + /** + * User.blogComments + */ + export type User$blogCommentsArgs = { + /** + * Select specific fields to fetch from the BlogComment + */ + select?: BlogCommentSelect | null + /** + * Omit specific fields from the BlogComment + */ + omit?: BlogCommentOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: BlogCommentInclude | null + where?: BlogCommentWhereInput + orderBy?: BlogCommentOrderByWithRelationInput | BlogCommentOrderByWithRelationInput[] + cursor?: BlogCommentWhereUniqueInput + take?: number + skip?: number + distinct?: BlogCommentScalarFieldEnum | BlogCommentScalarFieldEnum[] + } + + /** + * User without action + */ + export type UserDefaultArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + } + + + /** + * Model Address + */ + + export type AggregateAddress = { + _count: AddressCountAggregateOutputType | null + _min: AddressMinAggregateOutputType | null + _max: AddressMaxAggregateOutputType | null + } + + export type AddressMinAggregateOutputType = { + id: string | null + userId: string | null + recipient: string | null + phone: string | null + street: string | null + city: string | null + district: string | null + ward: string | null + isDefault: boolean | null + } + + export type AddressMaxAggregateOutputType = { + id: string | null + userId: string | null + recipient: string | null + phone: string | null + street: string | null + city: string | null + district: string | null + ward: string | null + isDefault: boolean | null + } + + export type AddressCountAggregateOutputType = { + id: number + userId: number + recipient: number + phone: number + street: number + city: number + district: number + ward: number + isDefault: number + _all: number + } + + + export type AddressMinAggregateInputType = { + id?: true + userId?: true + recipient?: true + phone?: true + street?: true + city?: true + district?: true + ward?: true + isDefault?: true + } + + export type AddressMaxAggregateInputType = { + id?: true + userId?: true + recipient?: true + phone?: true + street?: true + city?: true + district?: true + ward?: true + isDefault?: true + } + + export type AddressCountAggregateInputType = { + id?: true + userId?: true + recipient?: true + phone?: true + street?: true + city?: true + district?: true + ward?: true + isDefault?: true + _all?: true + } + + export type AddressAggregateArgs = { + /** + * Filter which Address to aggregate. + */ + where?: AddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Addresses to fetch. + */ + orderBy?: AddressOrderByWithRelationInput | AddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: AddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Addresses 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` Addresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned Addresses + **/ + _count?: true | AddressCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: AddressMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: AddressMaxAggregateInputType + } + + export type GetAddressAggregateType = { + [P in keyof T & keyof AggregateAddress]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type AddressGroupByArgs = { + where?: AddressWhereInput + orderBy?: AddressOrderByWithAggregationInput | AddressOrderByWithAggregationInput[] + by: AddressScalarFieldEnum[] | AddressScalarFieldEnum + having?: AddressScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: AddressCountAggregateInputType | true + _min?: AddressMinAggregateInputType + _max?: AddressMaxAggregateInputType + } + + export type AddressGroupByOutputType = { + id: string + userId: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault: boolean + _count: AddressCountAggregateOutputType | null + _min: AddressMinAggregateOutputType | null + _max: AddressMaxAggregateOutputType | null + } + + type GetAddressGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof AddressGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type AddressSelect = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + recipient?: boolean + phone?: boolean + street?: boolean + city?: boolean + district?: boolean + ward?: boolean + isDefault?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["address"]> + + export type AddressSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + recipient?: boolean + phone?: boolean + street?: boolean + city?: boolean + district?: boolean + ward?: boolean + isDefault?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["address"]> + + export type AddressSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + recipient?: boolean + phone?: boolean + street?: boolean + city?: boolean + district?: boolean + ward?: boolean + isDefault?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["address"]> + + export type AddressSelectScalar = { + id?: boolean + userId?: boolean + recipient?: boolean + phone?: boolean + street?: boolean + city?: boolean + district?: boolean + ward?: boolean + isDefault?: boolean + } + + export type AddressOmit = $Extensions.GetOmit<"id" | "userId" | "recipient" | "phone" | "street" | "city" | "district" | "ward" | "isDefault", ExtArgs["result"]["address"]> + export type AddressInclude = { + user?: boolean | UserDefaultArgs + } + export type AddressIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type AddressIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $AddressPayload = { + name: "Address" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + userId: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault: boolean + }, ExtArgs["result"]["address"]> + composites: {} + } + + type AddressGetPayload = $Result.GetResult + + type AddressCountArgs = + Omit & { + select?: AddressCountAggregateInputType | true + } + + export interface AddressDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['Address'], meta: { name: 'Address' } } + /** + * Find zero or one Address that matches the filter. + * @param {AddressFindUniqueArgs} args - Arguments to find a Address + * @example + * // Get one Address + * const address = await prisma.address.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one Address that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {AddressFindUniqueOrThrowArgs} args - Arguments to find a Address + * @example + * // Get one Address + * const address = await prisma.address.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Address 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 {AddressFindFirstArgs} args - Arguments to find a Address + * @example + * // Get one Address + * const address = await prisma.address.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first Address 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 {AddressFindFirstOrThrowArgs} args - Arguments to find a Address + * @example + * // Get one Address + * const address = await prisma.address.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more Addresses 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 {AddressFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all Addresses + * const addresses = await prisma.address.findMany() + * + * // Get first 10 Addresses + * const addresses = await prisma.address.findMany({ take: 10 }) + * + * // Only select the `id` + * const addressWithIdOnly = await prisma.address.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a Address. + * @param {AddressCreateArgs} args - Arguments to create a Address. + * @example + * // Create one Address + * const Address = await prisma.address.create({ + * data: { + * // ... data to create a Address + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many Addresses. + * @param {AddressCreateManyArgs} args - Arguments to create many Addresses. + * @example + * // Create many Addresses + * const address = await prisma.address.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many Addresses and returns the data saved in the database. + * @param {AddressCreateManyAndReturnArgs} args - Arguments to create many Addresses. + * @example + * // Create many Addresses + * const address = await prisma.address.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many Addresses and only return the `id` + * const addressWithIdOnly = await prisma.address.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(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a Address. + * @param {AddressDeleteArgs} args - Arguments to delete one Address. + * @example + * // Delete one Address + * const Address = await prisma.address.delete({ + * where: { + * // ... filter to delete one Address + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one Address. + * @param {AddressUpdateArgs} args - Arguments to update one Address. + * @example + * // Update one Address + * const address = await prisma.address.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more Addresses. + * @param {AddressDeleteManyArgs} args - Arguments to filter Addresses to delete. + * @example + * // Delete a few Addresses + * const { count } = await prisma.address.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Addresses. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {AddressUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many Addresses + * const address = await prisma.address.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more Addresses and returns the data updated in the database. + * @param {AddressUpdateManyAndReturnArgs} args - Arguments to update many Addresses. + * @example + * // Update many Addresses + * const address = await prisma.address.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more Addresses and only return the `id` + * const addressWithIdOnly = await prisma.address.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(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one Address. + * @param {AddressUpsertArgs} args - Arguments to update or create a Address. + * @example + * // Update or create a Address + * const address = await prisma.address.upsert({ + * create: { + * // ... data to create a Address + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the Address we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__AddressClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of Addresses. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {AddressCountArgs} args - Arguments to filter Addresses to count. + * @example + * // Count the number of Addresses + * const count = await prisma.address.count({ + * where: { + * // ... the filter for the Addresses we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a Address. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {AddressAggregateArgs} 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(args: Subset): Prisma.PrismaPromise> + + /** + * Group by Address. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {AddressGroupByArgs} 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 AddressGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: AddressGroupByArgs['orderBy'] } + : { orderBy?: AddressGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + 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 + ? 'orderBy' extends Keys + ? 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 + ? 'orderBy' extends Keys + ? 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 & InputErrors): {} extends InputErrors ? GetAddressGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the Address model + */ + readonly fields: AddressFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for Address. + * 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__AddressClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, 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(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * 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 + } + + + + + /** + * Fields of the Address model + */ + interface AddressFieldRefs { + readonly id: FieldRef<"Address", 'String'> + readonly userId: FieldRef<"Address", 'String'> + readonly recipient: FieldRef<"Address", 'String'> + readonly phone: FieldRef<"Address", 'String'> + readonly street: FieldRef<"Address", 'String'> + readonly city: FieldRef<"Address", 'String'> + readonly district: FieldRef<"Address", 'String'> + readonly ward: FieldRef<"Address", 'String'> + readonly isDefault: FieldRef<"Address", 'Boolean'> + } + + + // Custom InputTypes + /** + * Address findUnique + */ + export type AddressFindUniqueArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter, which Address to fetch. + */ + where: AddressWhereUniqueInput + } + + /** + * Address findUniqueOrThrow + */ + export type AddressFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter, which Address to fetch. + */ + where: AddressWhereUniqueInput + } + + /** + * Address findFirst + */ + export type AddressFindFirstArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter, which Address to fetch. + */ + where?: AddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Addresses to fetch. + */ + orderBy?: AddressOrderByWithRelationInput | AddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Addresses. + */ + cursor?: AddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Addresses 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` Addresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Addresses. + */ + distinct?: AddressScalarFieldEnum | AddressScalarFieldEnum[] + } + + /** + * Address findFirstOrThrow + */ + export type AddressFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter, which Address to fetch. + */ + where?: AddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Addresses to fetch. + */ + orderBy?: AddressOrderByWithRelationInput | AddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for Addresses. + */ + cursor?: AddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Addresses 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` Addresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Addresses. + */ + distinct?: AddressScalarFieldEnum | AddressScalarFieldEnum[] + } + + /** + * Address findMany + */ + export type AddressFindManyArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter, which Addresses to fetch. + */ + where?: AddressWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of Addresses to fetch. + */ + orderBy?: AddressOrderByWithRelationInput | AddressOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing Addresses. + */ + cursor?: AddressWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` Addresses 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` Addresses. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of Addresses. + */ + distinct?: AddressScalarFieldEnum | AddressScalarFieldEnum[] + } + + /** + * Address create + */ + export type AddressCreateArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * The data needed to create a Address. + */ + data: XOR + } + + /** + * Address createMany + */ + export type AddressCreateManyArgs = { + /** + * The data used to create many Addresses. + */ + data: AddressCreateManyInput | AddressCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * Address createManyAndReturn + */ + export type AddressCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelectCreateManyAndReturn | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * The data used to create many Addresses. + */ + data: AddressCreateManyInput | AddressCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressIncludeCreateManyAndReturn | null + } + + /** + * Address update + */ + export type AddressUpdateArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * The data needed to update a Address. + */ + data: XOR + /** + * Choose, which Address to update. + */ + where: AddressWhereUniqueInput + } + + /** + * Address updateMany + */ + export type AddressUpdateManyArgs = { + /** + * The data used to update Addresses. + */ + data: XOR + /** + * Filter which Addresses to update + */ + where?: AddressWhereInput + /** + * Limit how many Addresses to update. + */ + limit?: number + } + + /** + * Address updateManyAndReturn + */ + export type AddressUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * The data used to update Addresses. + */ + data: XOR + /** + * Filter which Addresses to update + */ + where?: AddressWhereInput + /** + * Limit how many Addresses to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressIncludeUpdateManyAndReturn | null + } + + /** + * Address upsert + */ + export type AddressUpsertArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * The filter to search for the Address to update in case it exists. + */ + where: AddressWhereUniqueInput + /** + * In case the Address found by the `where` argument doesn't exist, create a new Address with this data. + */ + create: XOR + /** + * In case the Address was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * Address delete + */ + export type AddressDeleteArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + /** + * Filter which Address to delete. + */ + where: AddressWhereUniqueInput + } + + /** + * Address deleteMany + */ + export type AddressDeleteManyArgs = { + /** + * Filter which Addresses to delete + */ + where?: AddressWhereInput + /** + * Limit how many Addresses to delete. + */ + limit?: number + } + + /** + * Address without action + */ + export type AddressDefaultArgs = { + /** + * Select specific fields to fetch from the Address + */ + select?: AddressSelect | null + /** + * Omit specific fields from the Address + */ + omit?: AddressOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: AddressInclude | null + } + + + /** + * Enums + */ + + export const TransactionIsolationLevel: { + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable' + }; + + export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel] + + + export const ExternalAccountScalarFieldEnum: { + id: 'id', + provider: 'provider', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + expiresAt: 'expiresAt', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type ExternalAccountScalarFieldEnum = (typeof ExternalAccountScalarFieldEnum)[keyof typeof ExternalAccountScalarFieldEnum] + + + export const UserMFAMethodScalarFieldEnum: { + id: 'id', + methodType: 'methodType', + secret: 'secret', + phone: 'phone', + isActive: 'isActive', + isVerified: 'isVerified', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + lastUsedAt: 'lastUsedAt' + }; + + export type UserMFAMethodScalarFieldEnum = (typeof UserMFAMethodScalarFieldEnum)[keyof typeof UserMFAMethodScalarFieldEnum] + + + export const MFABackupCodeScalarFieldEnum: { + id: 'id', + code: 'code', + isUsed: 'isUsed', + usedAt: 'usedAt', + userId: 'userId', + createdAt: 'createdAt' + }; + + export type MFABackupCodeScalarFieldEnum = (typeof MFABackupCodeScalarFieldEnum)[keyof typeof MFABackupCodeScalarFieldEnum] + + + export const DeviceScalarFieldEnum: { + id: 'id', + name: 'name', + type: 'type', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId', + isTrusted: 'isTrusted', + lastSeenAt: 'lastSeenAt', + createdAt: 'createdAt' + }; + + export type DeviceScalarFieldEnum = (typeof DeviceScalarFieldEnum)[keyof typeof DeviceScalarFieldEnum] + + + export const SessionScalarFieldEnum: { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + status: 'status', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type SessionScalarFieldEnum = (typeof SessionScalarFieldEnum)[keyof typeof SessionScalarFieldEnum] + + + export const BlogPostScalarFieldEnum: { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + contentSize: 'contentSize', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + isPublished: 'isPublished', + publishedAt: 'publishedAt', + viewCount: 'viewCount', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type BlogPostScalarFieldEnum = (typeof BlogPostScalarFieldEnum)[keyof typeof BlogPostScalarFieldEnum] + + + export const BlogTagScalarFieldEnum: { + id: 'id', + name: 'name', + slug: 'slug' + }; + + export type BlogTagScalarFieldEnum = (typeof BlogTagScalarFieldEnum)[keyof typeof BlogTagScalarFieldEnum] + + + export const BlogCommentScalarFieldEnum: { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId', + isApproved: 'isApproved', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type BlogCommentScalarFieldEnum = (typeof BlogCommentScalarFieldEnum)[keyof typeof BlogCommentScalarFieldEnum] + + + export const EventScalarFieldEnum: { + id: 'id', + title: 'title', + description: 'description', + startDate: 'startDate', + endDate: 'endDate', + location: 'location', + type: 'type', + organizer: 'organizer', + attendees: 'attendees', + surveyLink: 'surveyLink', + createdBy: 'createdBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type EventScalarFieldEnum = (typeof EventScalarFieldEnum)[keyof typeof EventScalarFieldEnum] + + + export const VoucherScalarFieldEnum: { + id: 'id', + code: 'code', + type: 'type', + value: 'value', + minSpend: 'minSpend', + maxDiscount: 'maxDiscount', + usageLimit: 'usageLimit', + usedCount: 'usedCount', + startDate: 'startDate', + endDate: 'endDate', + isActive: 'isActive' + }; + + export type VoucherScalarFieldEnum = (typeof VoucherScalarFieldEnum)[keyof typeof VoucherScalarFieldEnum] + + + export const ReviewScalarFieldEnum: { + id: 'id', + rating: 'rating', + comment: 'comment', + userId: 'userId', + productId: 'productId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type ReviewScalarFieldEnum = (typeof ReviewScalarFieldEnum)[keyof typeof ReviewScalarFieldEnum] + + + export const CartScalarFieldEnum: { + id: 'id', + userId: 'userId', + updatedAt: 'updatedAt' + }; + + export type CartScalarFieldEnum = (typeof CartScalarFieldEnum)[keyof typeof CartScalarFieldEnum] + + + export const CartItemScalarFieldEnum: { + id: 'id', + cartId: 'cartId', + productId: 'productId', + size: 'size', + quantity: 'quantity' + }; + + export type CartItemScalarFieldEnum = (typeof CartItemScalarFieldEnum)[keyof typeof CartItemScalarFieldEnum] + + + export const OrderScalarFieldEnum: { + id: 'id', + code: 'code', + userId: 'userId', + status: 'status', + paymentStatus: 'paymentStatus', + totalAmount: 'totalAmount', + shippingFee: 'shippingFee', + discountValue: 'discountValue', + shippingAddressId: 'shippingAddressId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type OrderScalarFieldEnum = (typeof OrderScalarFieldEnum)[keyof typeof OrderScalarFieldEnum] + + + export const ShippingAddressScalarFieldEnum: { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type ShippingAddressScalarFieldEnum = (typeof ShippingAddressScalarFieldEnum)[keyof typeof ShippingAddressScalarFieldEnum] + + + export const OrderItemScalarFieldEnum: { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productSlug: 'productSlug', + productName: 'productName', + size: 'size', + price: 'price', + quantity: 'quantity' + }; + + export type OrderItemScalarFieldEnum = (typeof OrderItemScalarFieldEnum)[keyof typeof OrderItemScalarFieldEnum] + + + export const PaymentTransactionScalarFieldEnum: { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + amount: 'amount', + status: 'status', + paymentUrl: 'paymentUrl', + payosData: 'payosData', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type PaymentTransactionScalarFieldEnum = (typeof PaymentTransactionScalarFieldEnum)[keyof typeof PaymentTransactionScalarFieldEnum] + + + export const ProductScalarFieldEnum: { + id: 'id', + slug: 'slug', + name: 'name', + description: 'description', + priceCurrent: 'priceCurrent', + priceOriginal: 'priceOriginal', + priceDiscount: 'priceDiscount', + stock: 'stock', + hasSizes: 'hasSizes', + badge: 'badge', + ratingValue: 'ratingValue', + ratingCount: 'ratingCount', + isPublished: 'isPublished', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type ProductScalarFieldEnum = (typeof ProductScalarFieldEnum)[keyof typeof ProductScalarFieldEnum] + + + export const ProductSizeStockScalarFieldEnum: { + id: 'id', + size: 'size', + stock: 'stock', + productId: 'productId' + }; + + export type ProductSizeStockScalarFieldEnum = (typeof ProductSizeStockScalarFieldEnum)[keyof typeof ProductSizeStockScalarFieldEnum] + + + export const SecurityLogScalarFieldEnum: { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method', + metadata: 'metadata', + timestamp: 'timestamp' + }; + + export type SecurityLogScalarFieldEnum = (typeof SecurityLogScalarFieldEnum)[keyof typeof SecurityLogScalarFieldEnum] + + + export const UserScalarFieldEnum: { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + role: 'role', + mfaEnabled: 'mfaEnabled', + mfaSecret: 'mfaSecret', + emailVerified: 'emailVerified', + phoneVerified: 'phoneVerified', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum] + + + export const AddressScalarFieldEnum: { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward', + isDefault: 'isDefault' + }; + + export type AddressScalarFieldEnum = (typeof AddressScalarFieldEnum)[keyof typeof AddressScalarFieldEnum] + + + export const SortOrder: { + asc: 'asc', + desc: 'desc' + }; + + export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder] + + + export const NullableJsonNullValueInput: { + DbNull: typeof DbNull, + JsonNull: typeof JsonNull + }; + + export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput] + + + export const QueryMode: { + default: 'default', + insensitive: 'insensitive' + }; + + export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode] + + + export const NullsOrder: { + first: 'first', + last: 'last' + }; + + export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] + + + export const ExternalAccountOrderByRelevanceFieldEnum: { + id: 'id', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + userId: 'userId' + }; + + export type ExternalAccountOrderByRelevanceFieldEnum = (typeof ExternalAccountOrderByRelevanceFieldEnum)[keyof typeof ExternalAccountOrderByRelevanceFieldEnum] + + + export const UserMFAMethodOrderByRelevanceFieldEnum: { + id: 'id', + secret: 'secret', + phone: 'phone', + userId: 'userId' + }; + + export type UserMFAMethodOrderByRelevanceFieldEnum = (typeof UserMFAMethodOrderByRelevanceFieldEnum)[keyof typeof UserMFAMethodOrderByRelevanceFieldEnum] + + + export const MFABackupCodeOrderByRelevanceFieldEnum: { + id: 'id', + code: 'code', + userId: 'userId' + }; + + export type MFABackupCodeOrderByRelevanceFieldEnum = (typeof MFABackupCodeOrderByRelevanceFieldEnum)[keyof typeof MFABackupCodeOrderByRelevanceFieldEnum] + + + export const DeviceOrderByRelevanceFieldEnum: { + id: 'id', + name: 'name', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId' + }; + + export type DeviceOrderByRelevanceFieldEnum = (typeof DeviceOrderByRelevanceFieldEnum)[keyof typeof DeviceOrderByRelevanceFieldEnum] + + + export const SessionOrderByRelevanceFieldEnum: { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent' + }; + + export type SessionOrderByRelevanceFieldEnum = (typeof SessionOrderByRelevanceFieldEnum)[keyof typeof SessionOrderByRelevanceFieldEnum] + + + export const BlogPostOrderByRelevanceFieldEnum: { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription' + }; + + export type BlogPostOrderByRelevanceFieldEnum = (typeof BlogPostOrderByRelevanceFieldEnum)[keyof typeof BlogPostOrderByRelevanceFieldEnum] + + + export const BlogTagOrderByRelevanceFieldEnum: { + id: 'id', + name: 'name', + slug: 'slug' + }; + + export type BlogTagOrderByRelevanceFieldEnum = (typeof BlogTagOrderByRelevanceFieldEnum)[keyof typeof BlogTagOrderByRelevanceFieldEnum] + + + export const BlogCommentOrderByRelevanceFieldEnum: { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId' + }; + + export type BlogCommentOrderByRelevanceFieldEnum = (typeof BlogCommentOrderByRelevanceFieldEnum)[keyof typeof BlogCommentOrderByRelevanceFieldEnum] + + + export const EventOrderByRelevanceFieldEnum: { + id: 'id', + title: 'title', + description: 'description', + location: 'location', + organizer: 'organizer', + surveyLink: 'surveyLink', + createdBy: 'createdBy' + }; + + export type EventOrderByRelevanceFieldEnum = (typeof EventOrderByRelevanceFieldEnum)[keyof typeof EventOrderByRelevanceFieldEnum] + + + export const VoucherOrderByRelevanceFieldEnum: { + id: 'id', + code: 'code' + }; + + export type VoucherOrderByRelevanceFieldEnum = (typeof VoucherOrderByRelevanceFieldEnum)[keyof typeof VoucherOrderByRelevanceFieldEnum] + + + export const ReviewOrderByRelevanceFieldEnum: { + id: 'id', + comment: 'comment', + userId: 'userId', + productId: 'productId' + }; + + export type ReviewOrderByRelevanceFieldEnum = (typeof ReviewOrderByRelevanceFieldEnum)[keyof typeof ReviewOrderByRelevanceFieldEnum] + + + export const CartOrderByRelevanceFieldEnum: { + id: 'id', + userId: 'userId' + }; + + export type CartOrderByRelevanceFieldEnum = (typeof CartOrderByRelevanceFieldEnum)[keyof typeof CartOrderByRelevanceFieldEnum] + + + export const CartItemOrderByRelevanceFieldEnum: { + id: 'id', + cartId: 'cartId', + productId: 'productId' + }; + + export type CartItemOrderByRelevanceFieldEnum = (typeof CartItemOrderByRelevanceFieldEnum)[keyof typeof CartItemOrderByRelevanceFieldEnum] + + + export const OrderOrderByRelevanceFieldEnum: { + id: 'id', + code: 'code', + userId: 'userId', + shippingAddressId: 'shippingAddressId' + }; + + export type OrderOrderByRelevanceFieldEnum = (typeof OrderOrderByRelevanceFieldEnum)[keyof typeof OrderOrderByRelevanceFieldEnum] + + + export const ShippingAddressOrderByRelevanceFieldEnum: { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode' + }; + + export type ShippingAddressOrderByRelevanceFieldEnum = (typeof ShippingAddressOrderByRelevanceFieldEnum)[keyof typeof ShippingAddressOrderByRelevanceFieldEnum] + + + export const OrderItemOrderByRelevanceFieldEnum: { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productName: 'productName' + }; + + export type OrderItemOrderByRelevanceFieldEnum = (typeof OrderItemOrderByRelevanceFieldEnum)[keyof typeof OrderItemOrderByRelevanceFieldEnum] + + + export const JsonNullValueFilter: { + DbNull: typeof DbNull, + JsonNull: typeof JsonNull, + AnyNull: typeof AnyNull + }; + + export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter] + + + export const PaymentTransactionOrderByRelevanceFieldEnum: { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + paymentUrl: 'paymentUrl' + }; + + export type PaymentTransactionOrderByRelevanceFieldEnum = (typeof PaymentTransactionOrderByRelevanceFieldEnum)[keyof typeof PaymentTransactionOrderByRelevanceFieldEnum] + + + export const ProductOrderByRelevanceFieldEnum: { + id: 'id', + name: 'name', + description: 'description', + badge: 'badge' + }; + + export type ProductOrderByRelevanceFieldEnum = (typeof ProductOrderByRelevanceFieldEnum)[keyof typeof ProductOrderByRelevanceFieldEnum] + + + export const ProductSizeStockOrderByRelevanceFieldEnum: { + id: 'id', + productId: 'productId' + }; + + export type ProductSizeStockOrderByRelevanceFieldEnum = (typeof ProductSizeStockOrderByRelevanceFieldEnum)[keyof typeof ProductSizeStockOrderByRelevanceFieldEnum] + + + export const SecurityLogOrderByRelevanceFieldEnum: { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method' + }; + + export type SecurityLogOrderByRelevanceFieldEnum = (typeof SecurityLogOrderByRelevanceFieldEnum)[keyof typeof SecurityLogOrderByRelevanceFieldEnum] + + + export const UserOrderByRelevanceFieldEnum: { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + mfaSecret: 'mfaSecret' + }; + + export type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum] + + + export const AddressOrderByRelevanceFieldEnum: { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward' + }; + + export type AddressOrderByRelevanceFieldEnum = (typeof AddressOrderByRelevanceFieldEnum)[keyof typeof AddressOrderByRelevanceFieldEnum] + + + /** + * 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 'OAuthProvider' + */ + export type EnumOAuthProviderFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'OAuthProvider'> + + + + /** + * Reference to a field of type 'OAuthProvider[]' + */ + export type ListEnumOAuthProviderFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'OAuthProvider[]'> + + + + /** + * 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 'MFAMethod' + */ + export type EnumMFAMethodFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'MFAMethod'> + + + + /** + * Reference to a field of type 'MFAMethod[]' + */ + export type ListEnumMFAMethodFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'MFAMethod[]'> + + + + /** + * Reference to a field of type 'Boolean' + */ + export type BooleanFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Boolean'> + + + + /** + * Reference to a field of type 'DeviceType' + */ + export type EnumDeviceTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DeviceType'> + + + + /** + * Reference to a field of type 'DeviceType[]' + */ + export type ListEnumDeviceTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DeviceType[]'> + + + + /** + * Reference to a field of type 'SessionStatus' + */ + export type EnumSessionStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'SessionStatus'> + + + + /** + * Reference to a field of type 'SessionStatus[]' + */ + export type ListEnumSessionStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'SessionStatus[]'> + + + + /** + * 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 'EventType' + */ + export type EnumEventTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'EventType'> + + + + /** + * Reference to a field of type 'EventType[]' + */ + export type ListEnumEventTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'EventType[]'> + + + + /** + * Reference to a field of type 'DiscountType' + */ + export type EnumDiscountTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DiscountType'> + + + + /** + * Reference to a field of type 'DiscountType[]' + */ + export type ListEnumDiscountTypeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DiscountType[]'> + + + + /** + * Reference to a field of type 'Decimal' + */ + export type DecimalFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Decimal'> + + + + /** + * Reference to a field of type 'Decimal[]' + */ + export type ListDecimalFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Decimal[]'> + + + + /** + * Reference to a field of type 'ProductSize' + */ + export type EnumProductSizeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'ProductSize'> + + + + /** + * Reference to a field of type 'ProductSize[]' + */ + export type ListEnumProductSizeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'ProductSize[]'> + + + + /** + * Reference to a field of type 'OrderStatus' + */ + export type EnumOrderStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'OrderStatus'> + + + + /** + * Reference to a field of type 'OrderStatus[]' + */ + export type ListEnumOrderStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'OrderStatus[]'> + + + + /** + * Reference to a field of type 'PaymentStatus' + */ + export type EnumPaymentStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentStatus'> + + + + /** + * Reference to a field of type 'PaymentStatus[]' + */ + export type ListEnumPaymentStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentStatus[]'> + + + + /** + * Reference to a field of type 'ProductSlug' + */ + export type EnumProductSlugFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'ProductSlug'> + + + + /** + * Reference to a field of type 'ProductSlug[]' + */ + export type ListEnumProductSlugFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'ProductSlug[]'> + + + + /** + * Reference to a field of type 'PaymentTransactionStatus' + */ + export type EnumPaymentTransactionStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentTransactionStatus'> + + + + /** + * Reference to a field of type 'PaymentTransactionStatus[]' + */ + export type ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'PaymentTransactionStatus[]'> + + + + /** + * Reference to a field of type 'Json' + */ + export type JsonFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Json'> + + + + /** + * Reference to a field of type 'QueryMode' + */ + export type EnumQueryModeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'QueryMode'> + + + + /** + * Reference to a field of type 'UserRole' + */ + export type EnumUserRoleFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'UserRole'> + + + + /** + * Reference to a field of type 'UserRole[]' + */ + export type ListEnumUserRoleFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'UserRole[]'> + + + + /** + * 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[]'> + + /** + * Deep Input Types + */ + + + export type ExternalAccountWhereInput = { + AND?: ExternalAccountWhereInput | ExternalAccountWhereInput[] + OR?: ExternalAccountWhereInput[] + NOT?: ExternalAccountWhereInput | ExternalAccountWhereInput[] + id?: StringFilter<"ExternalAccount"> | string + provider?: EnumOAuthProviderFilter<"ExternalAccount"> | $Enums.OAuthProvider + providerId?: StringFilter<"ExternalAccount"> | string + providerEmail?: StringNullableFilter<"ExternalAccount"> | string | null + accessToken?: StringNullableFilter<"ExternalAccount"> | string | null + refreshToken?: StringNullableFilter<"ExternalAccount"> | string | null + expiresAt?: DateTimeNullableFilter<"ExternalAccount"> | Date | string | null + userId?: StringFilter<"ExternalAccount"> | string + createdAt?: DateTimeFilter<"ExternalAccount"> | Date | string + updatedAt?: DateTimeFilter<"ExternalAccount"> | Date | string + user?: XOR + } + + export type ExternalAccountOrderByWithRelationInput = { + id?: SortOrder + provider?: SortOrder + providerId?: SortOrder + providerEmail?: SortOrderInput | SortOrder + accessToken?: SortOrderInput | SortOrder + refreshToken?: SortOrderInput | SortOrder + expiresAt?: SortOrderInput | SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + _relevance?: ExternalAccountOrderByRelevanceInput + } + + export type ExternalAccountWhereUniqueInput = Prisma.AtLeast<{ + id?: string + provider_providerId?: ExternalAccountProviderProviderIdCompoundUniqueInput + provider_userId?: ExternalAccountProviderUserIdCompoundUniqueInput + AND?: ExternalAccountWhereInput | ExternalAccountWhereInput[] + OR?: ExternalAccountWhereInput[] + NOT?: ExternalAccountWhereInput | ExternalAccountWhereInput[] + provider?: EnumOAuthProviderFilter<"ExternalAccount"> | $Enums.OAuthProvider + providerId?: StringFilter<"ExternalAccount"> | string + providerEmail?: StringNullableFilter<"ExternalAccount"> | string | null + accessToken?: StringNullableFilter<"ExternalAccount"> | string | null + refreshToken?: StringNullableFilter<"ExternalAccount"> | string | null + expiresAt?: DateTimeNullableFilter<"ExternalAccount"> | Date | string | null + userId?: StringFilter<"ExternalAccount"> | string + createdAt?: DateTimeFilter<"ExternalAccount"> | Date | string + updatedAt?: DateTimeFilter<"ExternalAccount"> | Date | string + user?: XOR + }, "id" | "provider_providerId" | "provider_userId"> + + export type ExternalAccountOrderByWithAggregationInput = { + id?: SortOrder + provider?: SortOrder + providerId?: SortOrder + providerEmail?: SortOrderInput | SortOrder + accessToken?: SortOrderInput | SortOrder + refreshToken?: SortOrderInput | SortOrder + expiresAt?: SortOrderInput | SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: ExternalAccountCountOrderByAggregateInput + _max?: ExternalAccountMaxOrderByAggregateInput + _min?: ExternalAccountMinOrderByAggregateInput + } + + export type ExternalAccountScalarWhereWithAggregatesInput = { + AND?: ExternalAccountScalarWhereWithAggregatesInput | ExternalAccountScalarWhereWithAggregatesInput[] + OR?: ExternalAccountScalarWhereWithAggregatesInput[] + NOT?: ExternalAccountScalarWhereWithAggregatesInput | ExternalAccountScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"ExternalAccount"> | string + provider?: EnumOAuthProviderWithAggregatesFilter<"ExternalAccount"> | $Enums.OAuthProvider + providerId?: StringWithAggregatesFilter<"ExternalAccount"> | string + providerEmail?: StringNullableWithAggregatesFilter<"ExternalAccount"> | string | null + accessToken?: StringNullableWithAggregatesFilter<"ExternalAccount"> | string | null + refreshToken?: StringNullableWithAggregatesFilter<"ExternalAccount"> | string | null + expiresAt?: DateTimeNullableWithAggregatesFilter<"ExternalAccount"> | Date | string | null + userId?: StringWithAggregatesFilter<"ExternalAccount"> | string + createdAt?: DateTimeWithAggregatesFilter<"ExternalAccount"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"ExternalAccount"> | Date | string + } + + export type UserMFAMethodWhereInput = { + AND?: UserMFAMethodWhereInput | UserMFAMethodWhereInput[] + OR?: UserMFAMethodWhereInput[] + NOT?: UserMFAMethodWhereInput | UserMFAMethodWhereInput[] + id?: StringFilter<"UserMFAMethod"> | string + methodType?: EnumMFAMethodFilter<"UserMFAMethod"> | $Enums.MFAMethod + secret?: StringNullableFilter<"UserMFAMethod"> | string | null + phone?: StringNullableFilter<"UserMFAMethod"> | string | null + isActive?: BoolFilter<"UserMFAMethod"> | boolean + isVerified?: BoolFilter<"UserMFAMethod"> | boolean + userId?: StringFilter<"UserMFAMethod"> | string + createdAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + updatedAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + lastUsedAt?: DateTimeNullableFilter<"UserMFAMethod"> | Date | string | null + user?: XOR + } + + export type UserMFAMethodOrderByWithRelationInput = { + id?: SortOrder + methodType?: SortOrder + secret?: SortOrderInput | SortOrder + phone?: SortOrderInput | SortOrder + isActive?: SortOrder + isVerified?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + lastUsedAt?: SortOrderInput | SortOrder + user?: UserOrderByWithRelationInput + _relevance?: UserMFAMethodOrderByRelevanceInput + } + + export type UserMFAMethodWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: UserMFAMethodWhereInput | UserMFAMethodWhereInput[] + OR?: UserMFAMethodWhereInput[] + NOT?: UserMFAMethodWhereInput | UserMFAMethodWhereInput[] + methodType?: EnumMFAMethodFilter<"UserMFAMethod"> | $Enums.MFAMethod + secret?: StringNullableFilter<"UserMFAMethod"> | string | null + phone?: StringNullableFilter<"UserMFAMethod"> | string | null + isActive?: BoolFilter<"UserMFAMethod"> | boolean + isVerified?: BoolFilter<"UserMFAMethod"> | boolean + userId?: StringFilter<"UserMFAMethod"> | string + createdAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + updatedAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + lastUsedAt?: DateTimeNullableFilter<"UserMFAMethod"> | Date | string | null + user?: XOR + }, "id"> + + export type UserMFAMethodOrderByWithAggregationInput = { + id?: SortOrder + methodType?: SortOrder + secret?: SortOrderInput | SortOrder + phone?: SortOrderInput | SortOrder + isActive?: SortOrder + isVerified?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + lastUsedAt?: SortOrderInput | SortOrder + _count?: UserMFAMethodCountOrderByAggregateInput + _max?: UserMFAMethodMaxOrderByAggregateInput + _min?: UserMFAMethodMinOrderByAggregateInput + } + + export type UserMFAMethodScalarWhereWithAggregatesInput = { + AND?: UserMFAMethodScalarWhereWithAggregatesInput | UserMFAMethodScalarWhereWithAggregatesInput[] + OR?: UserMFAMethodScalarWhereWithAggregatesInput[] + NOT?: UserMFAMethodScalarWhereWithAggregatesInput | UserMFAMethodScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"UserMFAMethod"> | string + methodType?: EnumMFAMethodWithAggregatesFilter<"UserMFAMethod"> | $Enums.MFAMethod + secret?: StringNullableWithAggregatesFilter<"UserMFAMethod"> | string | null + phone?: StringNullableWithAggregatesFilter<"UserMFAMethod"> | string | null + isActive?: BoolWithAggregatesFilter<"UserMFAMethod"> | boolean + isVerified?: BoolWithAggregatesFilter<"UserMFAMethod"> | boolean + userId?: StringWithAggregatesFilter<"UserMFAMethod"> | string + createdAt?: DateTimeWithAggregatesFilter<"UserMFAMethod"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"UserMFAMethod"> | Date | string + lastUsedAt?: DateTimeNullableWithAggregatesFilter<"UserMFAMethod"> | Date | string | null + } + + export type MFABackupCodeWhereInput = { + AND?: MFABackupCodeWhereInput | MFABackupCodeWhereInput[] + OR?: MFABackupCodeWhereInput[] + NOT?: MFABackupCodeWhereInput | MFABackupCodeWhereInput[] + id?: StringFilter<"MFABackupCode"> | string + code?: StringFilter<"MFABackupCode"> | string + isUsed?: BoolFilter<"MFABackupCode"> | boolean + usedAt?: DateTimeNullableFilter<"MFABackupCode"> | Date | string | null + userId?: StringFilter<"MFABackupCode"> | string + createdAt?: DateTimeFilter<"MFABackupCode"> | Date | string + user?: XOR + } + + export type MFABackupCodeOrderByWithRelationInput = { + id?: SortOrder + code?: SortOrder + isUsed?: SortOrder + usedAt?: SortOrderInput | SortOrder + userId?: SortOrder + createdAt?: SortOrder + user?: UserOrderByWithRelationInput + _relevance?: MFABackupCodeOrderByRelevanceInput + } + + export type MFABackupCodeWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: MFABackupCodeWhereInput | MFABackupCodeWhereInput[] + OR?: MFABackupCodeWhereInput[] + NOT?: MFABackupCodeWhereInput | MFABackupCodeWhereInput[] + code?: StringFilter<"MFABackupCode"> | string + isUsed?: BoolFilter<"MFABackupCode"> | boolean + usedAt?: DateTimeNullableFilter<"MFABackupCode"> | Date | string | null + userId?: StringFilter<"MFABackupCode"> | string + createdAt?: DateTimeFilter<"MFABackupCode"> | Date | string + user?: XOR + }, "id"> + + export type MFABackupCodeOrderByWithAggregationInput = { + id?: SortOrder + code?: SortOrder + isUsed?: SortOrder + usedAt?: SortOrderInput | SortOrder + userId?: SortOrder + createdAt?: SortOrder + _count?: MFABackupCodeCountOrderByAggregateInput + _max?: MFABackupCodeMaxOrderByAggregateInput + _min?: MFABackupCodeMinOrderByAggregateInput + } + + export type MFABackupCodeScalarWhereWithAggregatesInput = { + AND?: MFABackupCodeScalarWhereWithAggregatesInput | MFABackupCodeScalarWhereWithAggregatesInput[] + OR?: MFABackupCodeScalarWhereWithAggregatesInput[] + NOT?: MFABackupCodeScalarWhereWithAggregatesInput | MFABackupCodeScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"MFABackupCode"> | string + code?: StringWithAggregatesFilter<"MFABackupCode"> | string + isUsed?: BoolWithAggregatesFilter<"MFABackupCode"> | boolean + usedAt?: DateTimeNullableWithAggregatesFilter<"MFABackupCode"> | Date | string | null + userId?: StringWithAggregatesFilter<"MFABackupCode"> | string + createdAt?: DateTimeWithAggregatesFilter<"MFABackupCode"> | Date | string + } + + export type DeviceWhereInput = { + AND?: DeviceWhereInput | DeviceWhereInput[] + OR?: DeviceWhereInput[] + NOT?: DeviceWhereInput | DeviceWhereInput[] + id?: StringFilter<"Device"> | string + name?: StringNullableFilter<"Device"> | string | null + type?: EnumDeviceTypeFilter<"Device"> | $Enums.DeviceType + userAgent?: StringNullableFilter<"Device"> | string | null + ipAddress?: StringNullableFilter<"Device"> | string | null + fingerprint?: StringNullableFilter<"Device"> | string | null + userId?: StringFilter<"Device"> | string + isTrusted?: BoolFilter<"Device"> | boolean + lastSeenAt?: DateTimeFilter<"Device"> | Date | string + createdAt?: DateTimeFilter<"Device"> | Date | string + user?: XOR + session?: XOR | null + } + + export type DeviceOrderByWithRelationInput = { + id?: SortOrder + name?: SortOrderInput | SortOrder + type?: SortOrder + userAgent?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + fingerprint?: SortOrderInput | SortOrder + userId?: SortOrder + isTrusted?: SortOrder + lastSeenAt?: SortOrder + createdAt?: SortOrder + user?: UserOrderByWithRelationInput + session?: SessionOrderByWithRelationInput + _relevance?: DeviceOrderByRelevanceInput + } + + export type DeviceWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: DeviceWhereInput | DeviceWhereInput[] + OR?: DeviceWhereInput[] + NOT?: DeviceWhereInput | DeviceWhereInput[] + name?: StringNullableFilter<"Device"> | string | null + type?: EnumDeviceTypeFilter<"Device"> | $Enums.DeviceType + userAgent?: StringNullableFilter<"Device"> | string | null + ipAddress?: StringNullableFilter<"Device"> | string | null + fingerprint?: StringNullableFilter<"Device"> | string | null + userId?: StringFilter<"Device"> | string + isTrusted?: BoolFilter<"Device"> | boolean + lastSeenAt?: DateTimeFilter<"Device"> | Date | string + createdAt?: DateTimeFilter<"Device"> | Date | string + user?: XOR + session?: XOR | null + }, "id"> + + export type DeviceOrderByWithAggregationInput = { + id?: SortOrder + name?: SortOrderInput | SortOrder + type?: SortOrder + userAgent?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + fingerprint?: SortOrderInput | SortOrder + userId?: SortOrder + isTrusted?: SortOrder + lastSeenAt?: SortOrder + createdAt?: SortOrder + _count?: DeviceCountOrderByAggregateInput + _max?: DeviceMaxOrderByAggregateInput + _min?: DeviceMinOrderByAggregateInput + } + + export type DeviceScalarWhereWithAggregatesInput = { + AND?: DeviceScalarWhereWithAggregatesInput | DeviceScalarWhereWithAggregatesInput[] + OR?: DeviceScalarWhereWithAggregatesInput[] + NOT?: DeviceScalarWhereWithAggregatesInput | DeviceScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Device"> | string + name?: StringNullableWithAggregatesFilter<"Device"> | string | null + type?: EnumDeviceTypeWithAggregatesFilter<"Device"> | $Enums.DeviceType + userAgent?: StringNullableWithAggregatesFilter<"Device"> | string | null + ipAddress?: StringNullableWithAggregatesFilter<"Device"> | string | null + fingerprint?: StringNullableWithAggregatesFilter<"Device"> | string | null + userId?: StringWithAggregatesFilter<"Device"> | string + isTrusted?: BoolWithAggregatesFilter<"Device"> | boolean + lastSeenAt?: DateTimeWithAggregatesFilter<"Device"> | Date | string + createdAt?: DateTimeWithAggregatesFilter<"Device"> | Date | string + } + + export type SessionWhereInput = { + AND?: SessionWhereInput | SessionWhereInput[] + OR?: SessionWhereInput[] + NOT?: SessionWhereInput | SessionWhereInput[] + id?: StringFilter<"Session"> | string + token?: StringFilter<"Session"> | string + refreshToken?: StringNullableFilter<"Session"> | string | null + userId?: StringFilter<"Session"> | string + deviceId?: StringNullableFilter<"Session"> | string | null + ipAddress?: StringNullableFilter<"Session"> | string | null + userAgent?: StringNullableFilter<"Session"> | string | null + status?: EnumSessionStatusFilter<"Session"> | $Enums.SessionStatus + expiresAt?: DateTimeFilter<"Session"> | Date | string + revokedAt?: DateTimeNullableFilter<"Session"> | Date | string | null + createdAt?: DateTimeFilter<"Session"> | Date | string + updatedAt?: DateTimeFilter<"Session"> | Date | string + user?: XOR + device?: XOR | null + } + + export type SessionOrderByWithRelationInput = { + id?: SortOrder + token?: SortOrder + refreshToken?: SortOrderInput | SortOrder + userId?: SortOrder + deviceId?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + userAgent?: SortOrderInput | SortOrder + status?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + device?: DeviceOrderByWithRelationInput + _relevance?: SessionOrderByRelevanceInput + } + + export type SessionWhereUniqueInput = Prisma.AtLeast<{ + id?: string + token?: string + refreshToken?: string + deviceId?: string + AND?: SessionWhereInput | SessionWhereInput[] + OR?: SessionWhereInput[] + NOT?: SessionWhereInput | SessionWhereInput[] + userId?: StringFilter<"Session"> | string + ipAddress?: StringNullableFilter<"Session"> | string | null + userAgent?: StringNullableFilter<"Session"> | string | null + status?: EnumSessionStatusFilter<"Session"> | $Enums.SessionStatus + expiresAt?: DateTimeFilter<"Session"> | Date | string + revokedAt?: DateTimeNullableFilter<"Session"> | Date | string | null + createdAt?: DateTimeFilter<"Session"> | Date | string + updatedAt?: DateTimeFilter<"Session"> | Date | string + user?: XOR + device?: XOR | null + }, "id" | "token" | "refreshToken" | "deviceId"> + + export type SessionOrderByWithAggregationInput = { + id?: SortOrder + token?: SortOrder + refreshToken?: SortOrderInput | SortOrder + userId?: SortOrder + deviceId?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + userAgent?: SortOrderInput | SortOrder + status?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: SessionCountOrderByAggregateInput + _max?: SessionMaxOrderByAggregateInput + _min?: SessionMinOrderByAggregateInput + } + + export type SessionScalarWhereWithAggregatesInput = { + AND?: SessionScalarWhereWithAggregatesInput | SessionScalarWhereWithAggregatesInput[] + OR?: SessionScalarWhereWithAggregatesInput[] + NOT?: SessionScalarWhereWithAggregatesInput | SessionScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Session"> | string + token?: StringWithAggregatesFilter<"Session"> | string + refreshToken?: StringNullableWithAggregatesFilter<"Session"> | string | null + userId?: StringWithAggregatesFilter<"Session"> | string + deviceId?: StringNullableWithAggregatesFilter<"Session"> | string | null + ipAddress?: StringNullableWithAggregatesFilter<"Session"> | string | null + userAgent?: StringNullableWithAggregatesFilter<"Session"> | string | null + status?: EnumSessionStatusWithAggregatesFilter<"Session"> | $Enums.SessionStatus + expiresAt?: DateTimeWithAggregatesFilter<"Session"> | Date | string + revokedAt?: DateTimeNullableWithAggregatesFilter<"Session"> | Date | string | null + createdAt?: DateTimeWithAggregatesFilter<"Session"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"Session"> | Date | string + } + + export type BlogPostWhereInput = { + AND?: BlogPostWhereInput | BlogPostWhereInput[] + OR?: BlogPostWhereInput[] + NOT?: BlogPostWhereInput | BlogPostWhereInput[] + id?: StringFilter<"BlogPost"> | string + slug?: StringFilter<"BlogPost"> | string + title?: StringFilter<"BlogPost"> | string + contentKey?: StringFilter<"BlogPost"> | string + contentSize?: IntNullableFilter<"BlogPost"> | number | null + excerpt?: StringNullableFilter<"BlogPost"> | string | null + coverImage?: StringNullableFilter<"BlogPost"> | string | null + authorId?: StringFilter<"BlogPost"> | string + isPublished?: BoolFilter<"BlogPost"> | boolean + publishedAt?: DateTimeNullableFilter<"BlogPost"> | Date | string | null + viewCount?: IntFilter<"BlogPost"> | number + metaTitle?: StringNullableFilter<"BlogPost"> | string | null + metaDescription?: StringNullableFilter<"BlogPost"> | string | null + createdAt?: DateTimeFilter<"BlogPost"> | Date | string + updatedAt?: DateTimeFilter<"BlogPost"> | Date | string + author?: XOR + tags?: BlogTagListRelationFilter + comments?: BlogCommentListRelationFilter + } + + export type BlogPostOrderByWithRelationInput = { + id?: SortOrder + slug?: SortOrder + title?: SortOrder + contentKey?: SortOrder + contentSize?: SortOrderInput | SortOrder + excerpt?: SortOrderInput | SortOrder + coverImage?: SortOrderInput | SortOrder + authorId?: SortOrder + isPublished?: SortOrder + publishedAt?: SortOrderInput | SortOrder + viewCount?: SortOrder + metaTitle?: SortOrderInput | SortOrder + metaDescription?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + author?: UserOrderByWithRelationInput + tags?: BlogTagOrderByRelationAggregateInput + comments?: BlogCommentOrderByRelationAggregateInput + _relevance?: BlogPostOrderByRelevanceInput + } + + export type BlogPostWhereUniqueInput = Prisma.AtLeast<{ + id?: string + slug?: string + AND?: BlogPostWhereInput | BlogPostWhereInput[] + OR?: BlogPostWhereInput[] + NOT?: BlogPostWhereInput | BlogPostWhereInput[] + title?: StringFilter<"BlogPost"> | string + contentKey?: StringFilter<"BlogPost"> | string + contentSize?: IntNullableFilter<"BlogPost"> | number | null + excerpt?: StringNullableFilter<"BlogPost"> | string | null + coverImage?: StringNullableFilter<"BlogPost"> | string | null + authorId?: StringFilter<"BlogPost"> | string + isPublished?: BoolFilter<"BlogPost"> | boolean + publishedAt?: DateTimeNullableFilter<"BlogPost"> | Date | string | null + viewCount?: IntFilter<"BlogPost"> | number + metaTitle?: StringNullableFilter<"BlogPost"> | string | null + metaDescription?: StringNullableFilter<"BlogPost"> | string | null + createdAt?: DateTimeFilter<"BlogPost"> | Date | string + updatedAt?: DateTimeFilter<"BlogPost"> | Date | string + author?: XOR + tags?: BlogTagListRelationFilter + comments?: BlogCommentListRelationFilter + }, "id" | "slug"> + + export type BlogPostOrderByWithAggregationInput = { + id?: SortOrder + slug?: SortOrder + title?: SortOrder + contentKey?: SortOrder + contentSize?: SortOrderInput | SortOrder + excerpt?: SortOrderInput | SortOrder + coverImage?: SortOrderInput | SortOrder + authorId?: SortOrder + isPublished?: SortOrder + publishedAt?: SortOrderInput | SortOrder + viewCount?: SortOrder + metaTitle?: SortOrderInput | SortOrder + metaDescription?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: BlogPostCountOrderByAggregateInput + _avg?: BlogPostAvgOrderByAggregateInput + _max?: BlogPostMaxOrderByAggregateInput + _min?: BlogPostMinOrderByAggregateInput + _sum?: BlogPostSumOrderByAggregateInput + } + + export type BlogPostScalarWhereWithAggregatesInput = { + AND?: BlogPostScalarWhereWithAggregatesInput | BlogPostScalarWhereWithAggregatesInput[] + OR?: BlogPostScalarWhereWithAggregatesInput[] + NOT?: BlogPostScalarWhereWithAggregatesInput | BlogPostScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"BlogPost"> | string + slug?: StringWithAggregatesFilter<"BlogPost"> | string + title?: StringWithAggregatesFilter<"BlogPost"> | string + contentKey?: StringWithAggregatesFilter<"BlogPost"> | string + contentSize?: IntNullableWithAggregatesFilter<"BlogPost"> | number | null + excerpt?: StringNullableWithAggregatesFilter<"BlogPost"> | string | null + coverImage?: StringNullableWithAggregatesFilter<"BlogPost"> | string | null + authorId?: StringWithAggregatesFilter<"BlogPost"> | string + isPublished?: BoolWithAggregatesFilter<"BlogPost"> | boolean + publishedAt?: DateTimeNullableWithAggregatesFilter<"BlogPost"> | Date | string | null + viewCount?: IntWithAggregatesFilter<"BlogPost"> | number + metaTitle?: StringNullableWithAggregatesFilter<"BlogPost"> | string | null + metaDescription?: StringNullableWithAggregatesFilter<"BlogPost"> | string | null + createdAt?: DateTimeWithAggregatesFilter<"BlogPost"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"BlogPost"> | Date | string + } + + export type BlogTagWhereInput = { + AND?: BlogTagWhereInput | BlogTagWhereInput[] + OR?: BlogTagWhereInput[] + NOT?: BlogTagWhereInput | BlogTagWhereInput[] + id?: StringFilter<"BlogTag"> | string + name?: StringFilter<"BlogTag"> | string + slug?: StringFilter<"BlogTag"> | string + posts?: BlogPostListRelationFilter + } + + export type BlogTagOrderByWithRelationInput = { + id?: SortOrder + name?: SortOrder + slug?: SortOrder + posts?: BlogPostOrderByRelationAggregateInput + _relevance?: BlogTagOrderByRelevanceInput + } + + export type BlogTagWhereUniqueInput = Prisma.AtLeast<{ + id?: string + name?: string + slug?: string + AND?: BlogTagWhereInput | BlogTagWhereInput[] + OR?: BlogTagWhereInput[] + NOT?: BlogTagWhereInput | BlogTagWhereInput[] + posts?: BlogPostListRelationFilter + }, "id" | "name" | "slug"> + + export type BlogTagOrderByWithAggregationInput = { + id?: SortOrder + name?: SortOrder + slug?: SortOrder + _count?: BlogTagCountOrderByAggregateInput + _max?: BlogTagMaxOrderByAggregateInput + _min?: BlogTagMinOrderByAggregateInput + } + + export type BlogTagScalarWhereWithAggregatesInput = { + AND?: BlogTagScalarWhereWithAggregatesInput | BlogTagScalarWhereWithAggregatesInput[] + OR?: BlogTagScalarWhereWithAggregatesInput[] + NOT?: BlogTagScalarWhereWithAggregatesInput | BlogTagScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"BlogTag"> | string + name?: StringWithAggregatesFilter<"BlogTag"> | string + slug?: StringWithAggregatesFilter<"BlogTag"> | string + } + + export type BlogCommentWhereInput = { + AND?: BlogCommentWhereInput | BlogCommentWhereInput[] + OR?: BlogCommentWhereInput[] + NOT?: BlogCommentWhereInput | BlogCommentWhereInput[] + id?: StringFilter<"BlogComment"> | string + content?: StringFilter<"BlogComment"> | string + postId?: StringFilter<"BlogComment"> | string + authorId?: StringFilter<"BlogComment"> | string + parentId?: StringNullableFilter<"BlogComment"> | string | null + isApproved?: BoolFilter<"BlogComment"> | boolean + createdAt?: DateTimeFilter<"BlogComment"> | Date | string + updatedAt?: DateTimeFilter<"BlogComment"> | Date | string + post?: XOR + author?: XOR + parent?: XOR | null + replies?: BlogCommentListRelationFilter + } + + export type BlogCommentOrderByWithRelationInput = { + id?: SortOrder + content?: SortOrder + postId?: SortOrder + authorId?: SortOrder + parentId?: SortOrderInput | SortOrder + isApproved?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + post?: BlogPostOrderByWithRelationInput + author?: UserOrderByWithRelationInput + parent?: BlogCommentOrderByWithRelationInput + replies?: BlogCommentOrderByRelationAggregateInput + _relevance?: BlogCommentOrderByRelevanceInput + } + + export type BlogCommentWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: BlogCommentWhereInput | BlogCommentWhereInput[] + OR?: BlogCommentWhereInput[] + NOT?: BlogCommentWhereInput | BlogCommentWhereInput[] + content?: StringFilter<"BlogComment"> | string + postId?: StringFilter<"BlogComment"> | string + authorId?: StringFilter<"BlogComment"> | string + parentId?: StringNullableFilter<"BlogComment"> | string | null + isApproved?: BoolFilter<"BlogComment"> | boolean + createdAt?: DateTimeFilter<"BlogComment"> | Date | string + updatedAt?: DateTimeFilter<"BlogComment"> | Date | string + post?: XOR + author?: XOR + parent?: XOR | null + replies?: BlogCommentListRelationFilter + }, "id"> + + export type BlogCommentOrderByWithAggregationInput = { + id?: SortOrder + content?: SortOrder + postId?: SortOrder + authorId?: SortOrder + parentId?: SortOrderInput | SortOrder + isApproved?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: BlogCommentCountOrderByAggregateInput + _max?: BlogCommentMaxOrderByAggregateInput + _min?: BlogCommentMinOrderByAggregateInput + } + + export type BlogCommentScalarWhereWithAggregatesInput = { + AND?: BlogCommentScalarWhereWithAggregatesInput | BlogCommentScalarWhereWithAggregatesInput[] + OR?: BlogCommentScalarWhereWithAggregatesInput[] + NOT?: BlogCommentScalarWhereWithAggregatesInput | BlogCommentScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"BlogComment"> | string + content?: StringWithAggregatesFilter<"BlogComment"> | string + postId?: StringWithAggregatesFilter<"BlogComment"> | string + authorId?: StringWithAggregatesFilter<"BlogComment"> | string + parentId?: StringNullableWithAggregatesFilter<"BlogComment"> | string | null + isApproved?: BoolWithAggregatesFilter<"BlogComment"> | boolean + createdAt?: DateTimeWithAggregatesFilter<"BlogComment"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"BlogComment"> | Date | string + } + + export type EventWhereInput = { + AND?: EventWhereInput | EventWhereInput[] + OR?: EventWhereInput[] + NOT?: EventWhereInput | EventWhereInput[] + id?: StringFilter<"Event"> | string + title?: StringFilter<"Event"> | string + description?: StringNullableFilter<"Event"> | string | null + startDate?: DateTimeFilter<"Event"> | Date | string + endDate?: DateTimeFilter<"Event"> | Date | string + location?: StringNullableFilter<"Event"> | string | null + type?: EnumEventTypeFilter<"Event"> | $Enums.EventType + organizer?: StringNullableFilter<"Event"> | string | null + attendees?: IntNullableFilter<"Event"> | number | null + surveyLink?: StringNullableFilter<"Event"> | string | null + createdBy?: StringNullableFilter<"Event"> | string | null + createdAt?: DateTimeFilter<"Event"> | Date | string + updatedAt?: DateTimeFilter<"Event"> | Date | string + } + + export type EventOrderByWithRelationInput = { + id?: SortOrder + title?: SortOrder + description?: SortOrderInput | SortOrder + startDate?: SortOrder + endDate?: SortOrder + location?: SortOrderInput | SortOrder + type?: SortOrder + organizer?: SortOrderInput | SortOrder + attendees?: SortOrderInput | SortOrder + surveyLink?: SortOrderInput | SortOrder + createdBy?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _relevance?: EventOrderByRelevanceInput + } + + export type EventWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: EventWhereInput | EventWhereInput[] + OR?: EventWhereInput[] + NOT?: EventWhereInput | EventWhereInput[] + title?: StringFilter<"Event"> | string + description?: StringNullableFilter<"Event"> | string | null + startDate?: DateTimeFilter<"Event"> | Date | string + endDate?: DateTimeFilter<"Event"> | Date | string + location?: StringNullableFilter<"Event"> | string | null + type?: EnumEventTypeFilter<"Event"> | $Enums.EventType + organizer?: StringNullableFilter<"Event"> | string | null + attendees?: IntNullableFilter<"Event"> | number | null + surveyLink?: StringNullableFilter<"Event"> | string | null + createdBy?: StringNullableFilter<"Event"> | string | null + createdAt?: DateTimeFilter<"Event"> | Date | string + updatedAt?: DateTimeFilter<"Event"> | Date | string + }, "id"> + + export type EventOrderByWithAggregationInput = { + id?: SortOrder + title?: SortOrder + description?: SortOrderInput | SortOrder + startDate?: SortOrder + endDate?: SortOrder + location?: SortOrderInput | SortOrder + type?: SortOrder + organizer?: SortOrderInput | SortOrder + attendees?: SortOrderInput | SortOrder + surveyLink?: SortOrderInput | SortOrder + createdBy?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: EventCountOrderByAggregateInput + _avg?: EventAvgOrderByAggregateInput + _max?: EventMaxOrderByAggregateInput + _min?: EventMinOrderByAggregateInput + _sum?: EventSumOrderByAggregateInput + } + + export type EventScalarWhereWithAggregatesInput = { + AND?: EventScalarWhereWithAggregatesInput | EventScalarWhereWithAggregatesInput[] + OR?: EventScalarWhereWithAggregatesInput[] + NOT?: EventScalarWhereWithAggregatesInput | EventScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Event"> | string + title?: StringWithAggregatesFilter<"Event"> | string + description?: StringNullableWithAggregatesFilter<"Event"> | string | null + startDate?: DateTimeWithAggregatesFilter<"Event"> | Date | string + endDate?: DateTimeWithAggregatesFilter<"Event"> | Date | string + location?: StringNullableWithAggregatesFilter<"Event"> | string | null + type?: EnumEventTypeWithAggregatesFilter<"Event"> | $Enums.EventType + organizer?: StringNullableWithAggregatesFilter<"Event"> | string | null + attendees?: IntNullableWithAggregatesFilter<"Event"> | number | null + surveyLink?: StringNullableWithAggregatesFilter<"Event"> | string | null + createdBy?: StringNullableWithAggregatesFilter<"Event"> | string | null + createdAt?: DateTimeWithAggregatesFilter<"Event"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"Event"> | Date | string + } + + export type VoucherWhereInput = { + AND?: VoucherWhereInput | VoucherWhereInput[] + OR?: VoucherWhereInput[] + NOT?: VoucherWhereInput | VoucherWhereInput[] + id?: StringFilter<"Voucher"> | string + code?: StringFilter<"Voucher"> | string + type?: EnumDiscountTypeFilter<"Voucher"> | $Enums.DiscountType + value?: DecimalFilter<"Voucher"> | Decimal | DecimalJsLike | number | string + minSpend?: DecimalNullableFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + maxDiscount?: DecimalNullableFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFilter<"Voucher"> | number + usedCount?: IntFilter<"Voucher"> | number + startDate?: DateTimeFilter<"Voucher"> | Date | string + endDate?: DateTimeFilter<"Voucher"> | Date | string + isActive?: BoolFilter<"Voucher"> | boolean + } + + export type VoucherOrderByWithRelationInput = { + id?: SortOrder + code?: SortOrder + type?: SortOrder + value?: SortOrder + minSpend?: SortOrderInput | SortOrder + maxDiscount?: SortOrderInput | SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + isActive?: SortOrder + _relevance?: VoucherOrderByRelevanceInput + } + + export type VoucherWhereUniqueInput = Prisma.AtLeast<{ + id?: string + code?: string + AND?: VoucherWhereInput | VoucherWhereInput[] + OR?: VoucherWhereInput[] + NOT?: VoucherWhereInput | VoucherWhereInput[] + type?: EnumDiscountTypeFilter<"Voucher"> | $Enums.DiscountType + value?: DecimalFilter<"Voucher"> | Decimal | DecimalJsLike | number | string + minSpend?: DecimalNullableFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + maxDiscount?: DecimalNullableFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFilter<"Voucher"> | number + usedCount?: IntFilter<"Voucher"> | number + startDate?: DateTimeFilter<"Voucher"> | Date | string + endDate?: DateTimeFilter<"Voucher"> | Date | string + isActive?: BoolFilter<"Voucher"> | boolean + }, "id" | "code"> + + export type VoucherOrderByWithAggregationInput = { + id?: SortOrder + code?: SortOrder + type?: SortOrder + value?: SortOrder + minSpend?: SortOrderInput | SortOrder + maxDiscount?: SortOrderInput | SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + isActive?: SortOrder + _count?: VoucherCountOrderByAggregateInput + _avg?: VoucherAvgOrderByAggregateInput + _max?: VoucherMaxOrderByAggregateInput + _min?: VoucherMinOrderByAggregateInput + _sum?: VoucherSumOrderByAggregateInput + } + + export type VoucherScalarWhereWithAggregatesInput = { + AND?: VoucherScalarWhereWithAggregatesInput | VoucherScalarWhereWithAggregatesInput[] + OR?: VoucherScalarWhereWithAggregatesInput[] + NOT?: VoucherScalarWhereWithAggregatesInput | VoucherScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Voucher"> | string + code?: StringWithAggregatesFilter<"Voucher"> | string + type?: EnumDiscountTypeWithAggregatesFilter<"Voucher"> | $Enums.DiscountType + value?: DecimalWithAggregatesFilter<"Voucher"> | Decimal | DecimalJsLike | number | string + minSpend?: DecimalNullableWithAggregatesFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + maxDiscount?: DecimalNullableWithAggregatesFilter<"Voucher"> | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntWithAggregatesFilter<"Voucher"> | number + usedCount?: IntWithAggregatesFilter<"Voucher"> | number + startDate?: DateTimeWithAggregatesFilter<"Voucher"> | Date | string + endDate?: DateTimeWithAggregatesFilter<"Voucher"> | Date | string + isActive?: BoolWithAggregatesFilter<"Voucher"> | boolean + } + + export type ReviewWhereInput = { + AND?: ReviewWhereInput | ReviewWhereInput[] + OR?: ReviewWhereInput[] + NOT?: ReviewWhereInput | ReviewWhereInput[] + id?: StringFilter<"Review"> | string + rating?: IntFilter<"Review"> | number + comment?: StringNullableFilter<"Review"> | string | null + userId?: StringFilter<"Review"> | string + productId?: StringFilter<"Review"> | string + createdAt?: DateTimeFilter<"Review"> | Date | string + updatedAt?: DateTimeFilter<"Review"> | Date | string + user?: XOR + product?: XOR + } + + export type ReviewOrderByWithRelationInput = { + id?: SortOrder + rating?: SortOrder + comment?: SortOrderInput | SortOrder + userId?: SortOrder + productId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + product?: ProductOrderByWithRelationInput + _relevance?: ReviewOrderByRelevanceInput + } + + export type ReviewWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: ReviewWhereInput | ReviewWhereInput[] + OR?: ReviewWhereInput[] + NOT?: ReviewWhereInput | ReviewWhereInput[] + rating?: IntFilter<"Review"> | number + comment?: StringNullableFilter<"Review"> | string | null + userId?: StringFilter<"Review"> | string + productId?: StringFilter<"Review"> | string + createdAt?: DateTimeFilter<"Review"> | Date | string + updatedAt?: DateTimeFilter<"Review"> | Date | string + user?: XOR + product?: XOR + }, "id"> + + export type ReviewOrderByWithAggregationInput = { + id?: SortOrder + rating?: SortOrder + comment?: SortOrderInput | SortOrder + userId?: SortOrder + productId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: ReviewCountOrderByAggregateInput + _avg?: ReviewAvgOrderByAggregateInput + _max?: ReviewMaxOrderByAggregateInput + _min?: ReviewMinOrderByAggregateInput + _sum?: ReviewSumOrderByAggregateInput + } + + export type ReviewScalarWhereWithAggregatesInput = { + AND?: ReviewScalarWhereWithAggregatesInput | ReviewScalarWhereWithAggregatesInput[] + OR?: ReviewScalarWhereWithAggregatesInput[] + NOT?: ReviewScalarWhereWithAggregatesInput | ReviewScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Review"> | string + rating?: IntWithAggregatesFilter<"Review"> | number + comment?: StringNullableWithAggregatesFilter<"Review"> | string | null + userId?: StringWithAggregatesFilter<"Review"> | string + productId?: StringWithAggregatesFilter<"Review"> | string + createdAt?: DateTimeWithAggregatesFilter<"Review"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"Review"> | Date | string + } + + export type CartWhereInput = { + AND?: CartWhereInput | CartWhereInput[] + OR?: CartWhereInput[] + NOT?: CartWhereInput | CartWhereInput[] + id?: StringFilter<"Cart"> | string + userId?: StringFilter<"Cart"> | string + updatedAt?: DateTimeFilter<"Cart"> | Date | string + user?: XOR + items?: CartItemListRelationFilter + } + + export type CartOrderByWithRelationInput = { + id?: SortOrder + userId?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + items?: CartItemOrderByRelationAggregateInput + _relevance?: CartOrderByRelevanceInput + } + + export type CartWhereUniqueInput = Prisma.AtLeast<{ + id?: string + userId?: string + AND?: CartWhereInput | CartWhereInput[] + OR?: CartWhereInput[] + NOT?: CartWhereInput | CartWhereInput[] + updatedAt?: DateTimeFilter<"Cart"> | Date | string + user?: XOR + items?: CartItemListRelationFilter + }, "id" | "userId"> + + export type CartOrderByWithAggregationInput = { + id?: SortOrder + userId?: SortOrder + updatedAt?: SortOrder + _count?: CartCountOrderByAggregateInput + _max?: CartMaxOrderByAggregateInput + _min?: CartMinOrderByAggregateInput + } + + export type CartScalarWhereWithAggregatesInput = { + AND?: CartScalarWhereWithAggregatesInput | CartScalarWhereWithAggregatesInput[] + OR?: CartScalarWhereWithAggregatesInput[] + NOT?: CartScalarWhereWithAggregatesInput | CartScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Cart"> | string + userId?: StringWithAggregatesFilter<"Cart"> | string + updatedAt?: DateTimeWithAggregatesFilter<"Cart"> | Date | string + } + + export type CartItemWhereInput = { + AND?: CartItemWhereInput | CartItemWhereInput[] + OR?: CartItemWhereInput[] + NOT?: CartItemWhereInput | CartItemWhereInput[] + id?: StringFilter<"CartItem"> | string + cartId?: StringFilter<"CartItem"> | string + productId?: StringFilter<"CartItem"> | string + size?: EnumProductSizeNullableFilter<"CartItem"> | $Enums.ProductSize | null + quantity?: IntFilter<"CartItem"> | number + cart?: XOR + product?: XOR + } + + export type CartItemOrderByWithRelationInput = { + id?: SortOrder + cartId?: SortOrder + productId?: SortOrder + size?: SortOrderInput | SortOrder + quantity?: SortOrder + cart?: CartOrderByWithRelationInput + product?: ProductOrderByWithRelationInput + _relevance?: CartItemOrderByRelevanceInput + } + + export type CartItemWhereUniqueInput = Prisma.AtLeast<{ + id?: string + cartId_productId_size?: CartItemCartIdProductIdSizeCompoundUniqueInput + AND?: CartItemWhereInput | CartItemWhereInput[] + OR?: CartItemWhereInput[] + NOT?: CartItemWhereInput | CartItemWhereInput[] + cartId?: StringFilter<"CartItem"> | string + productId?: StringFilter<"CartItem"> | string + size?: EnumProductSizeNullableFilter<"CartItem"> | $Enums.ProductSize | null + quantity?: IntFilter<"CartItem"> | number + cart?: XOR + product?: XOR + }, "id" | "cartId_productId_size"> + + export type CartItemOrderByWithAggregationInput = { + id?: SortOrder + cartId?: SortOrder + productId?: SortOrder + size?: SortOrderInput | SortOrder + quantity?: SortOrder + _count?: CartItemCountOrderByAggregateInput + _avg?: CartItemAvgOrderByAggregateInput + _max?: CartItemMaxOrderByAggregateInput + _min?: CartItemMinOrderByAggregateInput + _sum?: CartItemSumOrderByAggregateInput + } + + export type CartItemScalarWhereWithAggregatesInput = { + AND?: CartItemScalarWhereWithAggregatesInput | CartItemScalarWhereWithAggregatesInput[] + OR?: CartItemScalarWhereWithAggregatesInput[] + NOT?: CartItemScalarWhereWithAggregatesInput | CartItemScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"CartItem"> | string + cartId?: StringWithAggregatesFilter<"CartItem"> | string + productId?: StringWithAggregatesFilter<"CartItem"> | string + size?: EnumProductSizeNullableWithAggregatesFilter<"CartItem"> | $Enums.ProductSize | null + quantity?: IntWithAggregatesFilter<"CartItem"> | number + } + + export type OrderWhereInput = { + AND?: OrderWhereInput | OrderWhereInput[] + OR?: OrderWhereInput[] + NOT?: OrderWhereInput | OrderWhereInput[] + id?: StringFilter<"Order"> | string + code?: StringFilter<"Order"> | string + userId?: StringFilter<"Order"> | string + status?: EnumOrderStatusFilter<"Order"> | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFilter<"Order"> | $Enums.PaymentStatus + totalAmount?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFilter<"Order"> | string + createdAt?: DateTimeFilter<"Order"> | Date | string + updatedAt?: DateTimeFilter<"Order"> | Date | string + user?: XOR + shippingAddress?: XOR + items?: OrderItemListRelationFilter + paymentTransaction?: XOR | null + } + + export type OrderOrderByWithRelationInput = { + id?: SortOrder + code?: SortOrder + userId?: SortOrder + status?: SortOrder + paymentStatus?: SortOrder + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + shippingAddressId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + shippingAddress?: ShippingAddressOrderByWithRelationInput + items?: OrderItemOrderByRelationAggregateInput + paymentTransaction?: PaymentTransactionOrderByWithRelationInput + _relevance?: OrderOrderByRelevanceInput + } + + export type OrderWhereUniqueInput = Prisma.AtLeast<{ + id?: string + code?: string + shippingAddressId?: string + AND?: OrderWhereInput | OrderWhereInput[] + OR?: OrderWhereInput[] + NOT?: OrderWhereInput | OrderWhereInput[] + userId?: StringFilter<"Order"> | string + status?: EnumOrderStatusFilter<"Order"> | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFilter<"Order"> | $Enums.PaymentStatus + totalAmount?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFilter<"Order"> | Date | string + updatedAt?: DateTimeFilter<"Order"> | Date | string + user?: XOR + shippingAddress?: XOR + items?: OrderItemListRelationFilter + paymentTransaction?: XOR | null + }, "id" | "code" | "shippingAddressId"> + + export type OrderOrderByWithAggregationInput = { + id?: SortOrder + code?: SortOrder + userId?: SortOrder + status?: SortOrder + paymentStatus?: SortOrder + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + shippingAddressId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: OrderCountOrderByAggregateInput + _avg?: OrderAvgOrderByAggregateInput + _max?: OrderMaxOrderByAggregateInput + _min?: OrderMinOrderByAggregateInput + _sum?: OrderSumOrderByAggregateInput + } + + export type OrderScalarWhereWithAggregatesInput = { + AND?: OrderScalarWhereWithAggregatesInput | OrderScalarWhereWithAggregatesInput[] + OR?: OrderScalarWhereWithAggregatesInput[] + NOT?: OrderScalarWhereWithAggregatesInput | OrderScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Order"> | string + code?: StringWithAggregatesFilter<"Order"> | string + userId?: StringWithAggregatesFilter<"Order"> | string + status?: EnumOrderStatusWithAggregatesFilter<"Order"> | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusWithAggregatesFilter<"Order"> | $Enums.PaymentStatus + totalAmount?: DecimalWithAggregatesFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalWithAggregatesFilter<"Order"> | Decimal | DecimalJsLike | number | string + discountValue?: DecimalWithAggregatesFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringWithAggregatesFilter<"Order"> | string + createdAt?: DateTimeWithAggregatesFilter<"Order"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"Order"> | Date | string + } + + export type ShippingAddressWhereInput = { + AND?: ShippingAddressWhereInput | ShippingAddressWhereInput[] + OR?: ShippingAddressWhereInput[] + NOT?: ShippingAddressWhereInput | ShippingAddressWhereInput[] + id?: StringFilter<"ShippingAddress"> | string + fullName?: StringFilter<"ShippingAddress"> | string + phone?: StringFilter<"ShippingAddress"> | string + addressLine1?: StringFilter<"ShippingAddress"> | string + addressLine2?: StringNullableFilter<"ShippingAddress"> | string | null + city?: StringFilter<"ShippingAddress"> | string + district?: StringFilter<"ShippingAddress"> | string + ward?: StringFilter<"ShippingAddress"> | string + postalCode?: StringFilter<"ShippingAddress"> | string + createdAt?: DateTimeFilter<"ShippingAddress"> | Date | string + updatedAt?: DateTimeFilter<"ShippingAddress"> | Date | string + order?: XOR | null + } + + export type ShippingAddressOrderByWithRelationInput = { + id?: SortOrder + fullName?: SortOrder + phone?: SortOrder + addressLine1?: SortOrder + addressLine2?: SortOrderInput | SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + postalCode?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + order?: OrderOrderByWithRelationInput + _relevance?: ShippingAddressOrderByRelevanceInput + } + + export type ShippingAddressWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: ShippingAddressWhereInput | ShippingAddressWhereInput[] + OR?: ShippingAddressWhereInput[] + NOT?: ShippingAddressWhereInput | ShippingAddressWhereInput[] + fullName?: StringFilter<"ShippingAddress"> | string + phone?: StringFilter<"ShippingAddress"> | string + addressLine1?: StringFilter<"ShippingAddress"> | string + addressLine2?: StringNullableFilter<"ShippingAddress"> | string | null + city?: StringFilter<"ShippingAddress"> | string + district?: StringFilter<"ShippingAddress"> | string + ward?: StringFilter<"ShippingAddress"> | string + postalCode?: StringFilter<"ShippingAddress"> | string + createdAt?: DateTimeFilter<"ShippingAddress"> | Date | string + updatedAt?: DateTimeFilter<"ShippingAddress"> | Date | string + order?: XOR | null + }, "id"> + + export type ShippingAddressOrderByWithAggregationInput = { + id?: SortOrder + fullName?: SortOrder + phone?: SortOrder + addressLine1?: SortOrder + addressLine2?: SortOrderInput | SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + postalCode?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: ShippingAddressCountOrderByAggregateInput + _max?: ShippingAddressMaxOrderByAggregateInput + _min?: ShippingAddressMinOrderByAggregateInput + } + + export type ShippingAddressScalarWhereWithAggregatesInput = { + AND?: ShippingAddressScalarWhereWithAggregatesInput | ShippingAddressScalarWhereWithAggregatesInput[] + OR?: ShippingAddressScalarWhereWithAggregatesInput[] + NOT?: ShippingAddressScalarWhereWithAggregatesInput | ShippingAddressScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"ShippingAddress"> | string + fullName?: StringWithAggregatesFilter<"ShippingAddress"> | string + phone?: StringWithAggregatesFilter<"ShippingAddress"> | string + addressLine1?: StringWithAggregatesFilter<"ShippingAddress"> | string + addressLine2?: StringNullableWithAggregatesFilter<"ShippingAddress"> | string | null + city?: StringWithAggregatesFilter<"ShippingAddress"> | string + district?: StringWithAggregatesFilter<"ShippingAddress"> | string + ward?: StringWithAggregatesFilter<"ShippingAddress"> | string + postalCode?: StringWithAggregatesFilter<"ShippingAddress"> | string + createdAt?: DateTimeWithAggregatesFilter<"ShippingAddress"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"ShippingAddress"> | Date | string + } + + export type OrderItemWhereInput = { + AND?: OrderItemWhereInput | OrderItemWhereInput[] + OR?: OrderItemWhereInput[] + NOT?: OrderItemWhereInput | OrderItemWhereInput[] + id?: StringFilter<"OrderItem"> | string + orderId?: StringFilter<"OrderItem"> | string + productId?: StringNullableFilter<"OrderItem"> | string | null + productSlug?: EnumProductSlugFilter<"OrderItem"> | $Enums.ProductSlug + productName?: StringFilter<"OrderItem"> | string + size?: EnumProductSizeNullableFilter<"OrderItem"> | $Enums.ProductSize | null + price?: DecimalFilter<"OrderItem"> | Decimal | DecimalJsLike | number | string + quantity?: IntFilter<"OrderItem"> | number + order?: XOR + product?: XOR | null + } + + export type OrderItemOrderByWithRelationInput = { + id?: SortOrder + orderId?: SortOrder + productId?: SortOrderInput | SortOrder + productSlug?: SortOrder + productName?: SortOrder + size?: SortOrderInput | SortOrder + price?: SortOrder + quantity?: SortOrder + order?: OrderOrderByWithRelationInput + product?: ProductOrderByWithRelationInput + _relevance?: OrderItemOrderByRelevanceInput + } + + export type OrderItemWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: OrderItemWhereInput | OrderItemWhereInput[] + OR?: OrderItemWhereInput[] + NOT?: OrderItemWhereInput | OrderItemWhereInput[] + orderId?: StringFilter<"OrderItem"> | string + productId?: StringNullableFilter<"OrderItem"> | string | null + productSlug?: EnumProductSlugFilter<"OrderItem"> | $Enums.ProductSlug + productName?: StringFilter<"OrderItem"> | string + size?: EnumProductSizeNullableFilter<"OrderItem"> | $Enums.ProductSize | null + price?: DecimalFilter<"OrderItem"> | Decimal | DecimalJsLike | number | string + quantity?: IntFilter<"OrderItem"> | number + order?: XOR + product?: XOR | null + }, "id"> + + export type OrderItemOrderByWithAggregationInput = { + id?: SortOrder + orderId?: SortOrder + productId?: SortOrderInput | SortOrder + productSlug?: SortOrder + productName?: SortOrder + size?: SortOrderInput | SortOrder + price?: SortOrder + quantity?: SortOrder + _count?: OrderItemCountOrderByAggregateInput + _avg?: OrderItemAvgOrderByAggregateInput + _max?: OrderItemMaxOrderByAggregateInput + _min?: OrderItemMinOrderByAggregateInput + _sum?: OrderItemSumOrderByAggregateInput + } + + export type OrderItemScalarWhereWithAggregatesInput = { + AND?: OrderItemScalarWhereWithAggregatesInput | OrderItemScalarWhereWithAggregatesInput[] + OR?: OrderItemScalarWhereWithAggregatesInput[] + NOT?: OrderItemScalarWhereWithAggregatesInput | OrderItemScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"OrderItem"> | string + orderId?: StringWithAggregatesFilter<"OrderItem"> | string + productId?: StringNullableWithAggregatesFilter<"OrderItem"> | string | null + productSlug?: EnumProductSlugWithAggregatesFilter<"OrderItem"> | $Enums.ProductSlug + productName?: StringWithAggregatesFilter<"OrderItem"> | string + size?: EnumProductSizeNullableWithAggregatesFilter<"OrderItem"> | $Enums.ProductSize | null + price?: DecimalWithAggregatesFilter<"OrderItem"> | Decimal | DecimalJsLike | number | string + quantity?: IntWithAggregatesFilter<"OrderItem"> | number + } + + export type PaymentTransactionWhereInput = { + AND?: PaymentTransactionWhereInput | PaymentTransactionWhereInput[] + OR?: PaymentTransactionWhereInput[] + NOT?: PaymentTransactionWhereInput | PaymentTransactionWhereInput[] + id?: StringFilter<"PaymentTransaction"> | string + orderId?: StringFilter<"PaymentTransaction"> | string + transactionCode?: StringFilter<"PaymentTransaction"> | string + amount?: DecimalFilter<"PaymentTransaction"> | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFilter<"PaymentTransaction"> | $Enums.PaymentTransactionStatus + paymentUrl?: StringNullableFilter<"PaymentTransaction"> | string | null + payosData?: JsonNullableFilter<"PaymentTransaction"> + createdAt?: DateTimeFilter<"PaymentTransaction"> | Date | string + updatedAt?: DateTimeFilter<"PaymentTransaction"> | Date | string + order?: XOR + } + + export type PaymentTransactionOrderByWithRelationInput = { + id?: SortOrder + orderId?: SortOrder + transactionCode?: SortOrder + amount?: SortOrder + status?: SortOrder + paymentUrl?: SortOrderInput | SortOrder + payosData?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + order?: OrderOrderByWithRelationInput + _relevance?: PaymentTransactionOrderByRelevanceInput + } + + export type PaymentTransactionWhereUniqueInput = Prisma.AtLeast<{ + id?: string + orderId?: string + transactionCode?: string + AND?: PaymentTransactionWhereInput | PaymentTransactionWhereInput[] + OR?: PaymentTransactionWhereInput[] + NOT?: PaymentTransactionWhereInput | PaymentTransactionWhereInput[] + amount?: DecimalFilter<"PaymentTransaction"> | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFilter<"PaymentTransaction"> | $Enums.PaymentTransactionStatus + paymentUrl?: StringNullableFilter<"PaymentTransaction"> | string | null + payosData?: JsonNullableFilter<"PaymentTransaction"> + createdAt?: DateTimeFilter<"PaymentTransaction"> | Date | string + updatedAt?: DateTimeFilter<"PaymentTransaction"> | Date | string + order?: XOR + }, "id" | "orderId" | "transactionCode"> + + export type PaymentTransactionOrderByWithAggregationInput = { + id?: SortOrder + orderId?: SortOrder + transactionCode?: SortOrder + amount?: SortOrder + status?: SortOrder + paymentUrl?: SortOrderInput | SortOrder + payosData?: SortOrderInput | SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: PaymentTransactionCountOrderByAggregateInput + _avg?: PaymentTransactionAvgOrderByAggregateInput + _max?: PaymentTransactionMaxOrderByAggregateInput + _min?: PaymentTransactionMinOrderByAggregateInput + _sum?: PaymentTransactionSumOrderByAggregateInput + } + + export type PaymentTransactionScalarWhereWithAggregatesInput = { + AND?: PaymentTransactionScalarWhereWithAggregatesInput | PaymentTransactionScalarWhereWithAggregatesInput[] + OR?: PaymentTransactionScalarWhereWithAggregatesInput[] + NOT?: PaymentTransactionScalarWhereWithAggregatesInput | PaymentTransactionScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"PaymentTransaction"> | string + orderId?: StringWithAggregatesFilter<"PaymentTransaction"> | string + transactionCode?: StringWithAggregatesFilter<"PaymentTransaction"> | string + amount?: DecimalWithAggregatesFilter<"PaymentTransaction"> | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusWithAggregatesFilter<"PaymentTransaction"> | $Enums.PaymentTransactionStatus + paymentUrl?: StringNullableWithAggregatesFilter<"PaymentTransaction"> | string | null + payosData?: JsonNullableWithAggregatesFilter<"PaymentTransaction"> + createdAt?: DateTimeWithAggregatesFilter<"PaymentTransaction"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"PaymentTransaction"> | Date | string + } + + export type ProductWhereInput = { + AND?: ProductWhereInput | ProductWhereInput[] + OR?: ProductWhereInput[] + NOT?: ProductWhereInput | ProductWhereInput[] + id?: StringFilter<"Product"> | string + slug?: EnumProductSlugFilter<"Product"> | $Enums.ProductSlug + name?: StringFilter<"Product"> | string + description?: StringFilter<"Product"> | string + priceCurrent?: DecimalFilter<"Product"> | Decimal | DecimalJsLike | number | string + priceOriginal?: DecimalNullableFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + priceDiscount?: DecimalNullableFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + stock?: IntFilter<"Product"> | number + hasSizes?: BoolFilter<"Product"> | boolean + badge?: StringNullableFilter<"Product"> | string | null + ratingValue?: DecimalFilter<"Product"> | Decimal | DecimalJsLike | number | string + ratingCount?: IntFilter<"Product"> | number + isPublished?: BoolFilter<"Product"> | boolean + createdAt?: DateTimeFilter<"Product"> | Date | string + updatedAt?: DateTimeFilter<"Product"> | Date | string + sizeStocks?: ProductSizeStockListRelationFilter + cartItems?: CartItemListRelationFilter + orderItems?: OrderItemListRelationFilter + reviews?: ReviewListRelationFilter + } + + export type ProductOrderByWithRelationInput = { + id?: SortOrder + slug?: SortOrder + name?: SortOrder + description?: SortOrder + priceCurrent?: SortOrder + priceOriginal?: SortOrderInput | SortOrder + priceDiscount?: SortOrderInput | SortOrder + stock?: SortOrder + hasSizes?: SortOrder + badge?: SortOrderInput | SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + isPublished?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + sizeStocks?: ProductSizeStockOrderByRelationAggregateInput + cartItems?: CartItemOrderByRelationAggregateInput + orderItems?: OrderItemOrderByRelationAggregateInput + reviews?: ReviewOrderByRelationAggregateInput + _relevance?: ProductOrderByRelevanceInput + } + + export type ProductWhereUniqueInput = Prisma.AtLeast<{ + id?: string + slug?: $Enums.ProductSlug + AND?: ProductWhereInput | ProductWhereInput[] + OR?: ProductWhereInput[] + NOT?: ProductWhereInput | ProductWhereInput[] + name?: StringFilter<"Product"> | string + description?: StringFilter<"Product"> | string + priceCurrent?: DecimalFilter<"Product"> | Decimal | DecimalJsLike | number | string + priceOriginal?: DecimalNullableFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + priceDiscount?: DecimalNullableFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + stock?: IntFilter<"Product"> | number + hasSizes?: BoolFilter<"Product"> | boolean + badge?: StringNullableFilter<"Product"> | string | null + ratingValue?: DecimalFilter<"Product"> | Decimal | DecimalJsLike | number | string + ratingCount?: IntFilter<"Product"> | number + isPublished?: BoolFilter<"Product"> | boolean + createdAt?: DateTimeFilter<"Product"> | Date | string + updatedAt?: DateTimeFilter<"Product"> | Date | string + sizeStocks?: ProductSizeStockListRelationFilter + cartItems?: CartItemListRelationFilter + orderItems?: OrderItemListRelationFilter + reviews?: ReviewListRelationFilter + }, "id" | "slug"> + + export type ProductOrderByWithAggregationInput = { + id?: SortOrder + slug?: SortOrder + name?: SortOrder + description?: SortOrder + priceCurrent?: SortOrder + priceOriginal?: SortOrderInput | SortOrder + priceDiscount?: SortOrderInput | SortOrder + stock?: SortOrder + hasSizes?: SortOrder + badge?: SortOrderInput | SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + isPublished?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: ProductCountOrderByAggregateInput + _avg?: ProductAvgOrderByAggregateInput + _max?: ProductMaxOrderByAggregateInput + _min?: ProductMinOrderByAggregateInput + _sum?: ProductSumOrderByAggregateInput + } + + export type ProductScalarWhereWithAggregatesInput = { + AND?: ProductScalarWhereWithAggregatesInput | ProductScalarWhereWithAggregatesInput[] + OR?: ProductScalarWhereWithAggregatesInput[] + NOT?: ProductScalarWhereWithAggregatesInput | ProductScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Product"> | string + slug?: EnumProductSlugWithAggregatesFilter<"Product"> | $Enums.ProductSlug + name?: StringWithAggregatesFilter<"Product"> | string + description?: StringWithAggregatesFilter<"Product"> | string + priceCurrent?: DecimalWithAggregatesFilter<"Product"> | Decimal | DecimalJsLike | number | string + priceOriginal?: DecimalNullableWithAggregatesFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + priceDiscount?: DecimalNullableWithAggregatesFilter<"Product"> | Decimal | DecimalJsLike | number | string | null + stock?: IntWithAggregatesFilter<"Product"> | number + hasSizes?: BoolWithAggregatesFilter<"Product"> | boolean + badge?: StringNullableWithAggregatesFilter<"Product"> | string | null + ratingValue?: DecimalWithAggregatesFilter<"Product"> | Decimal | DecimalJsLike | number | string + ratingCount?: IntWithAggregatesFilter<"Product"> | number + isPublished?: BoolWithAggregatesFilter<"Product"> | boolean + createdAt?: DateTimeWithAggregatesFilter<"Product"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"Product"> | Date | string + } + + export type ProductSizeStockWhereInput = { + AND?: ProductSizeStockWhereInput | ProductSizeStockWhereInput[] + OR?: ProductSizeStockWhereInput[] + NOT?: ProductSizeStockWhereInput | ProductSizeStockWhereInput[] + id?: StringFilter<"ProductSizeStock"> | string + size?: EnumProductSizeFilter<"ProductSizeStock"> | $Enums.ProductSize + stock?: IntFilter<"ProductSizeStock"> | number + productId?: StringFilter<"ProductSizeStock"> | string + product?: XOR + } + + export type ProductSizeStockOrderByWithRelationInput = { + id?: SortOrder + size?: SortOrder + stock?: SortOrder + productId?: SortOrder + product?: ProductOrderByWithRelationInput + _relevance?: ProductSizeStockOrderByRelevanceInput + } + + export type ProductSizeStockWhereUniqueInput = Prisma.AtLeast<{ + id?: string + productId_size?: ProductSizeStockProductIdSizeCompoundUniqueInput + AND?: ProductSizeStockWhereInput | ProductSizeStockWhereInput[] + OR?: ProductSizeStockWhereInput[] + NOT?: ProductSizeStockWhereInput | ProductSizeStockWhereInput[] + size?: EnumProductSizeFilter<"ProductSizeStock"> | $Enums.ProductSize + stock?: IntFilter<"ProductSizeStock"> | number + productId?: StringFilter<"ProductSizeStock"> | string + product?: XOR + }, "id" | "productId_size"> + + export type ProductSizeStockOrderByWithAggregationInput = { + id?: SortOrder + size?: SortOrder + stock?: SortOrder + productId?: SortOrder + _count?: ProductSizeStockCountOrderByAggregateInput + _avg?: ProductSizeStockAvgOrderByAggregateInput + _max?: ProductSizeStockMaxOrderByAggregateInput + _min?: ProductSizeStockMinOrderByAggregateInput + _sum?: ProductSizeStockSumOrderByAggregateInput + } + + export type ProductSizeStockScalarWhereWithAggregatesInput = { + AND?: ProductSizeStockScalarWhereWithAggregatesInput | ProductSizeStockScalarWhereWithAggregatesInput[] + OR?: ProductSizeStockScalarWhereWithAggregatesInput[] + NOT?: ProductSizeStockScalarWhereWithAggregatesInput | ProductSizeStockScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"ProductSizeStock"> | string + size?: EnumProductSizeWithAggregatesFilter<"ProductSizeStock"> | $Enums.ProductSize + stock?: IntWithAggregatesFilter<"ProductSizeStock"> | number + productId?: StringWithAggregatesFilter<"ProductSizeStock"> | string + } + + export type SecurityLogWhereInput = { + AND?: SecurityLogWhereInput | SecurityLogWhereInput[] + OR?: SecurityLogWhereInput[] + NOT?: SecurityLogWhereInput | SecurityLogWhereInput[] + id?: StringFilter<"SecurityLog"> | string + type?: StringFilter<"SecurityLog"> | string + severity?: StringFilter<"SecurityLog"> | string + message?: StringFilter<"SecurityLog"> | string + userId?: StringNullableFilter<"SecurityLog"> | string | null + ipAddress?: StringNullableFilter<"SecurityLog"> | string | null + userAgent?: StringNullableFilter<"SecurityLog"> | string | null + path?: StringNullableFilter<"SecurityLog"> | string | null + method?: StringNullableFilter<"SecurityLog"> | string | null + metadata?: JsonNullableFilter<"SecurityLog"> + timestamp?: DateTimeFilter<"SecurityLog"> | Date | string + } + + export type SecurityLogOrderByWithRelationInput = { + id?: SortOrder + type?: SortOrder + severity?: SortOrder + message?: SortOrder + userId?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + userAgent?: SortOrderInput | SortOrder + path?: SortOrderInput | SortOrder + method?: SortOrderInput | SortOrder + metadata?: SortOrderInput | SortOrder + timestamp?: SortOrder + _relevance?: SecurityLogOrderByRelevanceInput + } + + export type SecurityLogWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: SecurityLogWhereInput | SecurityLogWhereInput[] + OR?: SecurityLogWhereInput[] + NOT?: SecurityLogWhereInput | SecurityLogWhereInput[] + type?: StringFilter<"SecurityLog"> | string + severity?: StringFilter<"SecurityLog"> | string + message?: StringFilter<"SecurityLog"> | string + userId?: StringNullableFilter<"SecurityLog"> | string | null + ipAddress?: StringNullableFilter<"SecurityLog"> | string | null + userAgent?: StringNullableFilter<"SecurityLog"> | string | null + path?: StringNullableFilter<"SecurityLog"> | string | null + method?: StringNullableFilter<"SecurityLog"> | string | null + metadata?: JsonNullableFilter<"SecurityLog"> + timestamp?: DateTimeFilter<"SecurityLog"> | Date | string + }, "id"> + + export type SecurityLogOrderByWithAggregationInput = { + id?: SortOrder + type?: SortOrder + severity?: SortOrder + message?: SortOrder + userId?: SortOrderInput | SortOrder + ipAddress?: SortOrderInput | SortOrder + userAgent?: SortOrderInput | SortOrder + path?: SortOrderInput | SortOrder + method?: SortOrderInput | SortOrder + metadata?: SortOrderInput | SortOrder + timestamp?: SortOrder + _count?: SecurityLogCountOrderByAggregateInput + _max?: SecurityLogMaxOrderByAggregateInput + _min?: SecurityLogMinOrderByAggregateInput + } + + export type SecurityLogScalarWhereWithAggregatesInput = { + AND?: SecurityLogScalarWhereWithAggregatesInput | SecurityLogScalarWhereWithAggregatesInput[] + OR?: SecurityLogScalarWhereWithAggregatesInput[] + NOT?: SecurityLogScalarWhereWithAggregatesInput | SecurityLogScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"SecurityLog"> | string + type?: StringWithAggregatesFilter<"SecurityLog"> | string + severity?: StringWithAggregatesFilter<"SecurityLog"> | string + message?: StringWithAggregatesFilter<"SecurityLog"> | string + userId?: StringNullableWithAggregatesFilter<"SecurityLog"> | string | null + ipAddress?: StringNullableWithAggregatesFilter<"SecurityLog"> | string | null + userAgent?: StringNullableWithAggregatesFilter<"SecurityLog"> | string | null + path?: StringNullableWithAggregatesFilter<"SecurityLog"> | string | null + method?: StringNullableWithAggregatesFilter<"SecurityLog"> | string | null + metadata?: JsonNullableWithAggregatesFilter<"SecurityLog"> + timestamp?: DateTimeWithAggregatesFilter<"SecurityLog"> | Date | string + } + + export type UserWhereInput = { + AND?: UserWhereInput | UserWhereInput[] + OR?: UserWhereInput[] + NOT?: UserWhereInput | UserWhereInput[] + id?: StringFilter<"User"> | string + email?: StringFilter<"User"> | string + password?: StringNullableFilter<"User"> | string | null + fullName?: StringNullableFilter<"User"> | string | null + phone?: StringNullableFilter<"User"> | string | null + avatar?: StringNullableFilter<"User"> | string | null + role?: EnumUserRoleFilter<"User"> | $Enums.UserRole + mfaEnabled?: BoolFilter<"User"> | boolean + mfaSecret?: StringNullableFilter<"User"> | string | null + emailVerified?: BoolFilter<"User"> | boolean + phoneVerified?: BoolFilter<"User"> | boolean + createdAt?: DateTimeFilter<"User"> | Date | string + updatedAt?: DateTimeFilter<"User"> | Date | string + addresses?: AddressListRelationFilter + orders?: OrderListRelationFilter + reviews?: ReviewListRelationFilter + cart?: XOR | null + externalAccounts?: ExternalAccountListRelationFilter + mfaMethods?: UserMFAMethodListRelationFilter + mfaBackupCodes?: MFABackupCodeListRelationFilter + devices?: DeviceListRelationFilter + sessions?: SessionListRelationFilter + blogPosts?: BlogPostListRelationFilter + blogComments?: BlogCommentListRelationFilter + } + + export type UserOrderByWithRelationInput = { + id?: SortOrder + email?: SortOrder + password?: SortOrderInput | SortOrder + fullName?: SortOrderInput | SortOrder + phone?: SortOrderInput | SortOrder + avatar?: SortOrderInput | SortOrder + role?: SortOrder + mfaEnabled?: SortOrder + mfaSecret?: SortOrderInput | SortOrder + emailVerified?: SortOrder + phoneVerified?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + addresses?: AddressOrderByRelationAggregateInput + orders?: OrderOrderByRelationAggregateInput + reviews?: ReviewOrderByRelationAggregateInput + cart?: CartOrderByWithRelationInput + externalAccounts?: ExternalAccountOrderByRelationAggregateInput + mfaMethods?: UserMFAMethodOrderByRelationAggregateInput + mfaBackupCodes?: MFABackupCodeOrderByRelationAggregateInput + devices?: DeviceOrderByRelationAggregateInput + sessions?: SessionOrderByRelationAggregateInput + blogPosts?: BlogPostOrderByRelationAggregateInput + blogComments?: BlogCommentOrderByRelationAggregateInput + _relevance?: UserOrderByRelevanceInput + } + + export type UserWhereUniqueInput = Prisma.AtLeast<{ + id?: string + email?: string + AND?: UserWhereInput | UserWhereInput[] + OR?: UserWhereInput[] + NOT?: UserWhereInput | UserWhereInput[] + password?: StringNullableFilter<"User"> | string | null + fullName?: StringNullableFilter<"User"> | string | null + phone?: StringNullableFilter<"User"> | string | null + avatar?: StringNullableFilter<"User"> | string | null + role?: EnumUserRoleFilter<"User"> | $Enums.UserRole + mfaEnabled?: BoolFilter<"User"> | boolean + mfaSecret?: StringNullableFilter<"User"> | string | null + emailVerified?: BoolFilter<"User"> | boolean + phoneVerified?: BoolFilter<"User"> | boolean + createdAt?: DateTimeFilter<"User"> | Date | string + updatedAt?: DateTimeFilter<"User"> | Date | string + addresses?: AddressListRelationFilter + orders?: OrderListRelationFilter + reviews?: ReviewListRelationFilter + cart?: XOR | null + externalAccounts?: ExternalAccountListRelationFilter + mfaMethods?: UserMFAMethodListRelationFilter + mfaBackupCodes?: MFABackupCodeListRelationFilter + devices?: DeviceListRelationFilter + sessions?: SessionListRelationFilter + blogPosts?: BlogPostListRelationFilter + blogComments?: BlogCommentListRelationFilter + }, "id" | "email"> + + export type UserOrderByWithAggregationInput = { + id?: SortOrder + email?: SortOrder + password?: SortOrderInput | SortOrder + fullName?: SortOrderInput | SortOrder + phone?: SortOrderInput | SortOrder + avatar?: SortOrderInput | SortOrder + role?: SortOrder + mfaEnabled?: SortOrder + mfaSecret?: SortOrderInput | SortOrder + emailVerified?: SortOrder + phoneVerified?: 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 + email?: StringWithAggregatesFilter<"User"> | string + password?: StringNullableWithAggregatesFilter<"User"> | string | null + fullName?: StringNullableWithAggregatesFilter<"User"> | string | null + phone?: StringNullableWithAggregatesFilter<"User"> | string | null + avatar?: StringNullableWithAggregatesFilter<"User"> | string | null + role?: EnumUserRoleWithAggregatesFilter<"User"> | $Enums.UserRole + mfaEnabled?: BoolWithAggregatesFilter<"User"> | boolean + mfaSecret?: StringNullableWithAggregatesFilter<"User"> | string | null + emailVerified?: BoolWithAggregatesFilter<"User"> | boolean + phoneVerified?: BoolWithAggregatesFilter<"User"> | boolean + createdAt?: DateTimeWithAggregatesFilter<"User"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"User"> | Date | string + } + + export type AddressWhereInput = { + AND?: AddressWhereInput | AddressWhereInput[] + OR?: AddressWhereInput[] + NOT?: AddressWhereInput | AddressWhereInput[] + id?: StringFilter<"Address"> | string + userId?: StringFilter<"Address"> | string + recipient?: StringFilter<"Address"> | string + phone?: StringFilter<"Address"> | string + street?: StringFilter<"Address"> | string + city?: StringFilter<"Address"> | string + district?: StringFilter<"Address"> | string + ward?: StringFilter<"Address"> | string + isDefault?: BoolFilter<"Address"> | boolean + user?: XOR + } + + export type AddressOrderByWithRelationInput = { + id?: SortOrder + userId?: SortOrder + recipient?: SortOrder + phone?: SortOrder + street?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + isDefault?: SortOrder + user?: UserOrderByWithRelationInput + _relevance?: AddressOrderByRelevanceInput + } + + export type AddressWhereUniqueInput = Prisma.AtLeast<{ + id?: string + AND?: AddressWhereInput | AddressWhereInput[] + OR?: AddressWhereInput[] + NOT?: AddressWhereInput | AddressWhereInput[] + userId?: StringFilter<"Address"> | string + recipient?: StringFilter<"Address"> | string + phone?: StringFilter<"Address"> | string + street?: StringFilter<"Address"> | string + city?: StringFilter<"Address"> | string + district?: StringFilter<"Address"> | string + ward?: StringFilter<"Address"> | string + isDefault?: BoolFilter<"Address"> | boolean + user?: XOR + }, "id"> + + export type AddressOrderByWithAggregationInput = { + id?: SortOrder + userId?: SortOrder + recipient?: SortOrder + phone?: SortOrder + street?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + isDefault?: SortOrder + _count?: AddressCountOrderByAggregateInput + _max?: AddressMaxOrderByAggregateInput + _min?: AddressMinOrderByAggregateInput + } + + export type AddressScalarWhereWithAggregatesInput = { + AND?: AddressScalarWhereWithAggregatesInput | AddressScalarWhereWithAggregatesInput[] + OR?: AddressScalarWhereWithAggregatesInput[] + NOT?: AddressScalarWhereWithAggregatesInput | AddressScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"Address"> | string + userId?: StringWithAggregatesFilter<"Address"> | string + recipient?: StringWithAggregatesFilter<"Address"> | string + phone?: StringWithAggregatesFilter<"Address"> | string + street?: StringWithAggregatesFilter<"Address"> | string + city?: StringWithAggregatesFilter<"Address"> | string + district?: StringWithAggregatesFilter<"Address"> | string + ward?: StringWithAggregatesFilter<"Address"> | string + isDefault?: BoolWithAggregatesFilter<"Address"> | boolean + } + + export type ExternalAccountCreateInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutExternalAccountsInput + } + + export type ExternalAccountUncheckedCreateInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + userId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ExternalAccountUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutExternalAccountsNestedInput + } + + export type ExternalAccountUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ExternalAccountCreateManyInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + userId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ExternalAccountUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ExternalAccountUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserMFAMethodCreateInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + user: UserCreateNestedOneWithoutMfaMethodsInput + } + + export type UserMFAMethodUncheckedCreateInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + userId: string + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + } + + export type UserMFAMethodUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + user?: UserUpdateOneRequiredWithoutMfaMethodsNestedInput + } + + export type UserMFAMethodUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type UserMFAMethodCreateManyInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + userId: string + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + } + + export type UserMFAMethodUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type UserMFAMethodUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type MFABackupCodeCreateInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + createdAt?: Date | string + user: UserCreateNestedOneWithoutMfaBackupCodesInput + } + + export type MFABackupCodeUncheckedCreateInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + userId: string + createdAt?: Date | string + } + + export type MFABackupCodeUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutMfaBackupCodesNestedInput + } + + export type MFABackupCodeUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type MFABackupCodeCreateManyInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + userId: string + createdAt?: Date | string + } + + export type MFABackupCodeUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type MFABackupCodeUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type DeviceCreateInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + user: UserCreateNestedOneWithoutDevicesInput + session?: SessionCreateNestedOneWithoutDeviceInput + } + + export type DeviceUncheckedCreateInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + userId: string + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + session?: SessionUncheckedCreateNestedOneWithoutDeviceInput + } + + export type DeviceUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutDevicesNestedInput + session?: SessionUpdateOneWithoutDeviceNestedInput + } + + export type DeviceUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + session?: SessionUncheckedUpdateOneWithoutDeviceNestedInput + } + + export type DeviceCreateManyInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + userId: string + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + } + + export type DeviceUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type DeviceUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SessionCreateInput = { + id?: string + token: string + refreshToken?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutSessionsInput + device?: DeviceCreateNestedOneWithoutSessionInput + } + + export type SessionUncheckedCreateInput = { + id?: string + token: string + refreshToken?: string | null + userId: string + deviceId?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type SessionUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutSessionsNestedInput + device?: DeviceUpdateOneWithoutSessionNestedInput + } + + export type SessionUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + deviceId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SessionCreateManyInput = { + id?: string + token: string + refreshToken?: string | null + userId: string + deviceId?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type SessionUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SessionUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + deviceId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogPostCreateInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + author: UserCreateNestedOneWithoutBlogPostsInput + tags?: BlogTagCreateNestedManyWithoutPostsInput + comments?: BlogCommentCreateNestedManyWithoutPostInput + } + + export type BlogPostUncheckedCreateInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + authorId: string + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + tags?: BlogTagUncheckedCreateNestedManyWithoutPostsInput + comments?: BlogCommentUncheckedCreateNestedManyWithoutPostInput + } + + export type BlogPostUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + author?: UserUpdateOneRequiredWithoutBlogPostsNestedInput + tags?: BlogTagUpdateManyWithoutPostsNestedInput + comments?: BlogCommentUpdateManyWithoutPostNestedInput + } + + export type BlogPostUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + authorId?: StringFieldUpdateOperationsInput | string + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + tags?: BlogTagUncheckedUpdateManyWithoutPostsNestedInput + comments?: BlogCommentUncheckedUpdateManyWithoutPostNestedInput + } + + export type BlogPostCreateManyInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + authorId: string + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogPostUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogPostUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + authorId?: StringFieldUpdateOperationsInput | string + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogTagCreateInput = { + id?: string + name: string + slug: string + posts?: BlogPostCreateNestedManyWithoutTagsInput + } + + export type BlogTagUncheckedCreateInput = { + id?: string + name: string + slug: string + posts?: BlogPostUncheckedCreateNestedManyWithoutTagsInput + } + + export type BlogTagUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + posts?: BlogPostUpdateManyWithoutTagsNestedInput + } + + export type BlogTagUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + posts?: BlogPostUncheckedUpdateManyWithoutTagsNestedInput + } + + export type BlogTagCreateManyInput = { + id?: string + name: string + slug: string + } + + export type BlogTagUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + } + + export type BlogTagUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + } + + export type BlogCommentCreateInput = { + id?: string + content: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + post: BlogPostCreateNestedOneWithoutCommentsInput + author: UserCreateNestedOneWithoutBlogCommentsInput + parent?: BlogCommentCreateNestedOneWithoutRepliesInput + replies?: BlogCommentCreateNestedManyWithoutParentInput + } + + export type BlogCommentUncheckedCreateInput = { + id?: string + content: string + postId: string + authorId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + replies?: BlogCommentUncheckedCreateNestedManyWithoutParentInput + } + + export type BlogCommentUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + post?: BlogPostUpdateOneRequiredWithoutCommentsNestedInput + author?: UserUpdateOneRequiredWithoutBlogCommentsNestedInput + parent?: BlogCommentUpdateOneWithoutRepliesNestedInput + replies?: BlogCommentUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + replies?: BlogCommentUncheckedUpdateManyWithoutParentNestedInput + } + + export type BlogCommentCreateManyInput = { + id?: string + content: string + postId: string + authorId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogCommentUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogCommentUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type EventCreateInput = { + id?: string + title: string + description?: string | null + startDate: Date | string + endDate: Date | string + location?: string | null + type: $Enums.EventType + organizer?: string | null + attendees?: number | null + surveyLink?: string | null + createdBy?: string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type EventUncheckedCreateInput = { + id?: string + title: string + description?: string | null + startDate: Date | string + endDate: Date | string + location?: string | null + type: $Enums.EventType + organizer?: string | null + attendees?: number | null + surveyLink?: string | null + createdBy?: string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type EventUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + location?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType + organizer?: NullableStringFieldUpdateOperationsInput | string | null + attendees?: NullableIntFieldUpdateOperationsInput | number | null + surveyLink?: NullableStringFieldUpdateOperationsInput | string | null + createdBy?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type EventUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + location?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType + organizer?: NullableStringFieldUpdateOperationsInput | string | null + attendees?: NullableIntFieldUpdateOperationsInput | number | null + surveyLink?: NullableStringFieldUpdateOperationsInput | string | null + createdBy?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type EventCreateManyInput = { + id?: string + title: string + description?: string | null + startDate: Date | string + endDate: Date | string + location?: string | null + type: $Enums.EventType + organizer?: string | null + attendees?: number | null + surveyLink?: string | null + createdBy?: string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type EventUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + location?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType + organizer?: NullableStringFieldUpdateOperationsInput | string | null + attendees?: NullableIntFieldUpdateOperationsInput | number | null + surveyLink?: NullableStringFieldUpdateOperationsInput | string | null + createdBy?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type EventUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + location?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumEventTypeFieldUpdateOperationsInput | $Enums.EventType + organizer?: NullableStringFieldUpdateOperationsInput | string | null + attendees?: NullableIntFieldUpdateOperationsInput | number | null + surveyLink?: NullableStringFieldUpdateOperationsInput | string | null + createdBy?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type VoucherCreateInput = { + id?: string + code: string + type: $Enums.DiscountType + value: Decimal | DecimalJsLike | number | string + minSpend?: Decimal | DecimalJsLike | number | string | null + maxDiscount?: Decimal | DecimalJsLike | number | string | null + usageLimit?: number + usedCount?: number + startDate: Date | string + endDate: Date | string + isActive?: boolean + } + + export type VoucherUncheckedCreateInput = { + id?: string + code: string + type: $Enums.DiscountType + value: Decimal | DecimalJsLike | number | string + minSpend?: Decimal | DecimalJsLike | number | string | null + maxDiscount?: Decimal | DecimalJsLike | number | string | null + usageLimit?: number + usedCount?: number + startDate: Date | string + endDate: Date | string + isActive?: boolean + } + + export type VoucherUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + type?: EnumDiscountTypeFieldUpdateOperationsInput | $Enums.DiscountType + value?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + minSpend?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + maxDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFieldUpdateOperationsInput | number + usedCount?: IntFieldUpdateOperationsInput | number + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + isActive?: BoolFieldUpdateOperationsInput | boolean + } + + export type VoucherUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + type?: EnumDiscountTypeFieldUpdateOperationsInput | $Enums.DiscountType + value?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + minSpend?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + maxDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFieldUpdateOperationsInput | number + usedCount?: IntFieldUpdateOperationsInput | number + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + isActive?: BoolFieldUpdateOperationsInput | boolean + } + + export type VoucherCreateManyInput = { + id?: string + code: string + type: $Enums.DiscountType + value: Decimal | DecimalJsLike | number | string + minSpend?: Decimal | DecimalJsLike | number | string | null + maxDiscount?: Decimal | DecimalJsLike | number | string | null + usageLimit?: number + usedCount?: number + startDate: Date | string + endDate: Date | string + isActive?: boolean + } + + export type VoucherUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + type?: EnumDiscountTypeFieldUpdateOperationsInput | $Enums.DiscountType + value?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + minSpend?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + maxDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFieldUpdateOperationsInput | number + usedCount?: IntFieldUpdateOperationsInput | number + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + isActive?: BoolFieldUpdateOperationsInput | boolean + } + + export type VoucherUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + type?: EnumDiscountTypeFieldUpdateOperationsInput | $Enums.DiscountType + value?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + minSpend?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + maxDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + usageLimit?: IntFieldUpdateOperationsInput | number + usedCount?: IntFieldUpdateOperationsInput | number + startDate?: DateTimeFieldUpdateOperationsInput | Date | string + endDate?: DateTimeFieldUpdateOperationsInput | Date | string + isActive?: BoolFieldUpdateOperationsInput | boolean + } + + export type ReviewCreateInput = { + id?: string + rating?: number + comment?: string | null + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutReviewsInput + product: ProductCreateNestedOneWithoutReviewsInput + } + + export type ReviewUncheckedCreateInput = { + id?: string + rating?: number + comment?: string | null + userId: string + productId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ReviewUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutReviewsNestedInput + product?: ProductUpdateOneRequiredWithoutReviewsNestedInput + } + + export type ReviewUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ReviewCreateManyInput = { + id?: string + rating?: number + comment?: string | null + userId: string + productId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ReviewUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ReviewUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type CartCreateInput = { + id?: string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutCartInput + items?: CartItemCreateNestedManyWithoutCartInput + } + + export type CartUncheckedCreateInput = { + id?: string + userId: string + updatedAt?: Date | string + items?: CartItemUncheckedCreateNestedManyWithoutCartInput + } + + export type CartUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutCartNestedInput + items?: CartItemUpdateManyWithoutCartNestedInput + } + + export type CartUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: CartItemUncheckedUpdateManyWithoutCartNestedInput + } + + export type CartCreateManyInput = { + id?: string + userId: string + updatedAt?: Date | string + } + + export type CartUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type CartUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type CartItemCreateInput = { + id?: string + size?: $Enums.ProductSize | null + quantity?: number + cart: CartCreateNestedOneWithoutItemsInput + product: ProductCreateNestedOneWithoutCartItemsInput + } + + export type CartItemUncheckedCreateInput = { + id?: string + cartId: string + productId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type CartItemUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + cart?: CartUpdateOneRequiredWithoutItemsNestedInput + product?: ProductUpdateOneRequiredWithoutCartItemsNestedInput + } + + export type CartItemUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + cartId?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type CartItemCreateManyInput = { + id?: string + cartId: string + productId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type CartItemUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type CartItemUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + cartId?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderCreateInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutOrdersInput + shippingAddress: ShippingAddressCreateNestedOneWithoutOrderInput + items?: OrderItemCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionCreateNestedOneWithoutOrderInput + } + + export type OrderUncheckedCreateInput = { + id?: string + code: string + userId: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + items?: OrderItemUncheckedCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionUncheckedCreateNestedOneWithoutOrderInput + } + + export type OrderUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutOrdersNestedInput + shippingAddress?: ShippingAddressUpdateOneRequiredWithoutOrderNestedInput + items?: OrderItemUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUpdateOneWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: OrderItemUncheckedUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUncheckedUpdateOneWithoutOrderNestedInput + } + + export type OrderCreateManyInput = { + id?: string + code: string + userId: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type OrderUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type OrderUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ShippingAddressCreateInput = { + id?: string + fullName: string + phone: string + addressLine1: string + addressLine2?: string | null + city: string + district: string + ward: string + postalCode: string + createdAt?: Date | string + updatedAt?: Date | string + order?: OrderCreateNestedOneWithoutShippingAddressInput + } + + export type ShippingAddressUncheckedCreateInput = { + id?: string + fullName: string + phone: string + addressLine1: string + addressLine2?: string | null + city: string + district: string + ward: string + postalCode: string + createdAt?: Date | string + updatedAt?: Date | string + order?: OrderUncheckedCreateNestedOneWithoutShippingAddressInput + } + + export type ShippingAddressUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + order?: OrderUpdateOneWithoutShippingAddressNestedInput + } + + export type ShippingAddressUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + order?: OrderUncheckedUpdateOneWithoutShippingAddressNestedInput + } + + export type ShippingAddressCreateManyInput = { + id?: string + fullName: string + phone: string + addressLine1: string + addressLine2?: string | null + city: string + district: string + ward: string + postalCode: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ShippingAddressUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ShippingAddressUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type OrderItemCreateInput = { + id?: string + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + order: OrderCreateNestedOneWithoutItemsInput + product?: ProductCreateNestedOneWithoutOrderItemsInput + } + + export type OrderItemUncheckedCreateInput = { + id?: string + orderId: string + productId?: string | null + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type OrderItemUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + order?: OrderUpdateOneRequiredWithoutItemsNestedInput + product?: ProductUpdateOneWithoutOrderItemsNestedInput + } + + export type OrderItemUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + productId?: NullableStringFieldUpdateOperationsInput | string | null + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemCreateManyInput = { + id?: string + orderId: string + productId?: string | null + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type OrderItemUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + productId?: NullableStringFieldUpdateOperationsInput | string | null + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type PaymentTransactionCreateInput = { + id?: string + transactionCode: string + amount: Decimal | DecimalJsLike | number | string + status?: $Enums.PaymentTransactionStatus + paymentUrl?: string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: Date | string + updatedAt?: Date | string + order: OrderCreateNestedOneWithoutPaymentTransactionInput + } + + export type PaymentTransactionUncheckedCreateInput = { + id?: string + orderId: string + transactionCode: string + amount: Decimal | DecimalJsLike | number | string + status?: $Enums.PaymentTransactionStatus + paymentUrl?: string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: Date | string + updatedAt?: Date | string + } + + export type PaymentTransactionUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + order?: OrderUpdateOneRequiredWithoutPaymentTransactionNestedInput + } + + export type PaymentTransactionUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type PaymentTransactionCreateManyInput = { + id?: string + orderId: string + transactionCode: string + amount: Decimal | DecimalJsLike | number | string + status?: $Enums.PaymentTransactionStatus + paymentUrl?: string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: Date | string + updatedAt?: Date | string + } + + export type PaymentTransactionUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type PaymentTransactionUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ProductCreateInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockCreateNestedManyWithoutProductInput + cartItems?: CartItemCreateNestedManyWithoutProductInput + orderItems?: OrderItemCreateNestedManyWithoutProductInput + reviews?: ReviewCreateNestedManyWithoutProductInput + } + + export type ProductUncheckedCreateInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockUncheckedCreateNestedManyWithoutProductInput + cartItems?: CartItemUncheckedCreateNestedManyWithoutProductInput + orderItems?: OrderItemUncheckedCreateNestedManyWithoutProductInput + reviews?: ReviewUncheckedCreateNestedManyWithoutProductInput + } + + export type ProductUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUpdateManyWithoutProductNestedInput + cartItems?: CartItemUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUpdateManyWithoutProductNestedInput + reviews?: ReviewUpdateManyWithoutProductNestedInput + } + + export type ProductUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUncheckedUpdateManyWithoutProductNestedInput + cartItems?: CartItemUncheckedUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUncheckedUpdateManyWithoutProductNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutProductNestedInput + } + + export type ProductCreateManyInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ProductUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ProductUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ProductSizeStockCreateInput = { + id?: string + size: $Enums.ProductSize + stock?: number + product: ProductCreateNestedOneWithoutSizeStocksInput + } + + export type ProductSizeStockUncheckedCreateInput = { + id?: string + size: $Enums.ProductSize + stock?: number + productId: string + } + + export type ProductSizeStockUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + product?: ProductUpdateOneRequiredWithoutSizeStocksNestedInput + } + + export type ProductSizeStockUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + productId?: StringFieldUpdateOperationsInput | string + } + + export type ProductSizeStockCreateManyInput = { + id?: string + size: $Enums.ProductSize + stock?: number + productId: string + } + + export type ProductSizeStockUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + } + + export type ProductSizeStockUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + productId?: StringFieldUpdateOperationsInput | string + } + + export type SecurityLogCreateInput = { + id?: string + type: string + severity: string + message: string + userId?: string | null + ipAddress?: string | null + userAgent?: string | null + path?: string | null + method?: string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: Date | string + } + + export type SecurityLogUncheckedCreateInput = { + id?: string + type: string + severity: string + message: string + userId?: string | null + ipAddress?: string | null + userAgent?: string | null + path?: string | null + method?: string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: Date | string + } + + export type SecurityLogUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + type?: StringFieldUpdateOperationsInput | string + severity?: StringFieldUpdateOperationsInput | string + message?: StringFieldUpdateOperationsInput | string + userId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + path?: NullableStringFieldUpdateOperationsInput | string | null + method?: NullableStringFieldUpdateOperationsInput | string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SecurityLogUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + type?: StringFieldUpdateOperationsInput | string + severity?: StringFieldUpdateOperationsInput | string + message?: StringFieldUpdateOperationsInput | string + userId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + path?: NullableStringFieldUpdateOperationsInput | string | null + method?: NullableStringFieldUpdateOperationsInput | string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SecurityLogCreateManyInput = { + id?: string + type: string + severity: string + message: string + userId?: string | null + ipAddress?: string | null + userAgent?: string | null + path?: string | null + method?: string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: Date | string + } + + export type SecurityLogUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + type?: StringFieldUpdateOperationsInput | string + severity?: StringFieldUpdateOperationsInput | string + message?: StringFieldUpdateOperationsInput | string + userId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + path?: NullableStringFieldUpdateOperationsInput | string | null + method?: NullableStringFieldUpdateOperationsInput | string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SecurityLogUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + type?: StringFieldUpdateOperationsInput | string + severity?: StringFieldUpdateOperationsInput | string + message?: StringFieldUpdateOperationsInput | string + userId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + path?: NullableStringFieldUpdateOperationsInput | string | null + method?: NullableStringFieldUpdateOperationsInput | string | null + metadata?: NullableJsonNullValueInput | InputJsonValue + timestamp?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserCreateInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type UserCreateManyInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type UserUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type AddressCreateInput = { + id?: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + user: UserCreateNestedOneWithoutAddressesInput + } + + export type AddressUncheckedCreateInput = { + id?: string + userId: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + } + + export type AddressUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + user?: UserUpdateOneRequiredWithoutAddressesNestedInput + } + + export type AddressUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + } + + export type AddressCreateManyInput = { + id?: string + userId: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + } + + export type AddressUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + } + + export type AddressUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: 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> + search?: string + mode?: QueryMode + not?: NestedStringFilter<$PrismaModel> | string + } + + export type EnumOAuthProviderFilter<$PrismaModel = never> = { + equals?: $Enums.OAuthProvider | EnumOAuthProviderFieldRefInput<$PrismaModel> + in?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + not?: NestedEnumOAuthProviderFilter<$PrismaModel> | $Enums.OAuthProvider + } + + 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> + search?: string + mode?: QueryMode + not?: NestedStringNullableFilter<$PrismaModel> | string | null + } + + 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 UserScalarRelationFilter = { + is?: UserWhereInput + isNot?: UserWhereInput + } + + export type SortOrderInput = { + sort: SortOrder + nulls?: NullsOrder + } + + export type ExternalAccountOrderByRelevanceInput = { + fields: ExternalAccountOrderByRelevanceFieldEnum | ExternalAccountOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ExternalAccountProviderProviderIdCompoundUniqueInput = { + provider: $Enums.OAuthProvider + providerId: string + } + + export type ExternalAccountProviderUserIdCompoundUniqueInput = { + provider: $Enums.OAuthProvider + userId: string + } + + export type ExternalAccountCountOrderByAggregateInput = { + id?: SortOrder + provider?: SortOrder + providerId?: SortOrder + providerEmail?: SortOrder + accessToken?: SortOrder + refreshToken?: SortOrder + expiresAt?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ExternalAccountMaxOrderByAggregateInput = { + id?: SortOrder + provider?: SortOrder + providerId?: SortOrder + providerEmail?: SortOrder + accessToken?: SortOrder + refreshToken?: SortOrder + expiresAt?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ExternalAccountMinOrderByAggregateInput = { + id?: SortOrder + provider?: SortOrder + providerId?: SortOrder + providerEmail?: SortOrder + accessToken?: SortOrder + refreshToken?: SortOrder + expiresAt?: SortOrder + userId?: 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> + search?: string + mode?: QueryMode + not?: NestedStringWithAggregatesFilter<$PrismaModel> | string + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedStringFilter<$PrismaModel> + _max?: NestedStringFilter<$PrismaModel> + } + + export type EnumOAuthProviderWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.OAuthProvider | EnumOAuthProviderFieldRefInput<$PrismaModel> + in?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + not?: NestedEnumOAuthProviderWithAggregatesFilter<$PrismaModel> | $Enums.OAuthProvider + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumOAuthProviderFilter<$PrismaModel> + _max?: NestedEnumOAuthProviderFilter<$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> + search?: string + mode?: QueryMode + not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedStringNullableFilter<$PrismaModel> + _max?: NestedStringNullableFilter<$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 EnumMFAMethodFilter<$PrismaModel = never> = { + equals?: $Enums.MFAMethod | EnumMFAMethodFieldRefInput<$PrismaModel> + in?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + notIn?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + not?: NestedEnumMFAMethodFilter<$PrismaModel> | $Enums.MFAMethod + } + + export type BoolFilter<$PrismaModel = never> = { + equals?: boolean | BooleanFieldRefInput<$PrismaModel> + not?: NestedBoolFilter<$PrismaModel> | boolean + } + + export type UserMFAMethodOrderByRelevanceInput = { + fields: UserMFAMethodOrderByRelevanceFieldEnum | UserMFAMethodOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type UserMFAMethodCountOrderByAggregateInput = { + id?: SortOrder + methodType?: SortOrder + secret?: SortOrder + phone?: SortOrder + isActive?: SortOrder + isVerified?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + lastUsedAt?: SortOrder + } + + export type UserMFAMethodMaxOrderByAggregateInput = { + id?: SortOrder + methodType?: SortOrder + secret?: SortOrder + phone?: SortOrder + isActive?: SortOrder + isVerified?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + lastUsedAt?: SortOrder + } + + export type UserMFAMethodMinOrderByAggregateInput = { + id?: SortOrder + methodType?: SortOrder + secret?: SortOrder + phone?: SortOrder + isActive?: SortOrder + isVerified?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + lastUsedAt?: SortOrder + } + + export type EnumMFAMethodWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.MFAMethod | EnumMFAMethodFieldRefInput<$PrismaModel> + in?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + notIn?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + not?: NestedEnumMFAMethodWithAggregatesFilter<$PrismaModel> | $Enums.MFAMethod + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumMFAMethodFilter<$PrismaModel> + _max?: NestedEnumMFAMethodFilter<$PrismaModel> + } + + export type BoolWithAggregatesFilter<$PrismaModel = never> = { + equals?: boolean | BooleanFieldRefInput<$PrismaModel> + not?: NestedBoolWithAggregatesFilter<$PrismaModel> | boolean + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedBoolFilter<$PrismaModel> + _max?: NestedBoolFilter<$PrismaModel> + } + + export type MFABackupCodeOrderByRelevanceInput = { + fields: MFABackupCodeOrderByRelevanceFieldEnum | MFABackupCodeOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type MFABackupCodeCountOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + isUsed?: SortOrder + usedAt?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + } + + export type MFABackupCodeMaxOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + isUsed?: SortOrder + usedAt?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + } + + export type MFABackupCodeMinOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + isUsed?: SortOrder + usedAt?: SortOrder + userId?: SortOrder + createdAt?: SortOrder + } + + export type EnumDeviceTypeFilter<$PrismaModel = never> = { + equals?: $Enums.DeviceType | EnumDeviceTypeFieldRefInput<$PrismaModel> + in?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDeviceTypeFilter<$PrismaModel> | $Enums.DeviceType + } + + export type SessionNullableScalarRelationFilter = { + is?: SessionWhereInput | null + isNot?: SessionWhereInput | null + } + + export type DeviceOrderByRelevanceInput = { + fields: DeviceOrderByRelevanceFieldEnum | DeviceOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type DeviceCountOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + type?: SortOrder + userAgent?: SortOrder + ipAddress?: SortOrder + fingerprint?: SortOrder + userId?: SortOrder + isTrusted?: SortOrder + lastSeenAt?: SortOrder + createdAt?: SortOrder + } + + export type DeviceMaxOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + type?: SortOrder + userAgent?: SortOrder + ipAddress?: SortOrder + fingerprint?: SortOrder + userId?: SortOrder + isTrusted?: SortOrder + lastSeenAt?: SortOrder + createdAt?: SortOrder + } + + export type DeviceMinOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + type?: SortOrder + userAgent?: SortOrder + ipAddress?: SortOrder + fingerprint?: SortOrder + userId?: SortOrder + isTrusted?: SortOrder + lastSeenAt?: SortOrder + createdAt?: SortOrder + } + + export type EnumDeviceTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.DeviceType | EnumDeviceTypeFieldRefInput<$PrismaModel> + in?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDeviceTypeWithAggregatesFilter<$PrismaModel> | $Enums.DeviceType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumDeviceTypeFilter<$PrismaModel> + _max?: NestedEnumDeviceTypeFilter<$PrismaModel> + } + + export type EnumSessionStatusFilter<$PrismaModel = never> = { + equals?: $Enums.SessionStatus | EnumSessionStatusFieldRefInput<$PrismaModel> + in?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumSessionStatusFilter<$PrismaModel> | $Enums.SessionStatus + } + + export type DeviceNullableScalarRelationFilter = { + is?: DeviceWhereInput | null + isNot?: DeviceWhereInput | null + } + + export type SessionOrderByRelevanceInput = { + fields: SessionOrderByRelevanceFieldEnum | SessionOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type SessionCountOrderByAggregateInput = { + id?: SortOrder + token?: SortOrder + refreshToken?: SortOrder + userId?: SortOrder + deviceId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + status?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type SessionMaxOrderByAggregateInput = { + id?: SortOrder + token?: SortOrder + refreshToken?: SortOrder + userId?: SortOrder + deviceId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + status?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type SessionMinOrderByAggregateInput = { + id?: SortOrder + token?: SortOrder + refreshToken?: SortOrder + userId?: SortOrder + deviceId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + status?: SortOrder + expiresAt?: SortOrder + revokedAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EnumSessionStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.SessionStatus | EnumSessionStatusFieldRefInput<$PrismaModel> + in?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumSessionStatusWithAggregatesFilter<$PrismaModel> | $Enums.SessionStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumSessionStatusFilter<$PrismaModel> + _max?: NestedEnumSessionStatusFilter<$PrismaModel> + } + + export type IntNullableFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableFilter<$PrismaModel> | number | null + } + + export type 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 BlogTagListRelationFilter = { + every?: BlogTagWhereInput + some?: BlogTagWhereInput + none?: BlogTagWhereInput + } + + export type BlogCommentListRelationFilter = { + every?: BlogCommentWhereInput + some?: BlogCommentWhereInput + none?: BlogCommentWhereInput + } + + export type BlogTagOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type BlogCommentOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type BlogPostOrderByRelevanceInput = { + fields: BlogPostOrderByRelevanceFieldEnum | BlogPostOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type BlogPostCountOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + title?: SortOrder + contentKey?: SortOrder + contentSize?: SortOrder + excerpt?: SortOrder + coverImage?: SortOrder + authorId?: SortOrder + isPublished?: SortOrder + publishedAt?: SortOrder + viewCount?: SortOrder + metaTitle?: SortOrder + metaDescription?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type BlogPostAvgOrderByAggregateInput = { + contentSize?: SortOrder + viewCount?: SortOrder + } + + export type BlogPostMaxOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + title?: SortOrder + contentKey?: SortOrder + contentSize?: SortOrder + excerpt?: SortOrder + coverImage?: SortOrder + authorId?: SortOrder + isPublished?: SortOrder + publishedAt?: SortOrder + viewCount?: SortOrder + metaTitle?: SortOrder + metaDescription?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type BlogPostMinOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + title?: SortOrder + contentKey?: SortOrder + contentSize?: SortOrder + excerpt?: SortOrder + coverImage?: SortOrder + authorId?: SortOrder + isPublished?: SortOrder + publishedAt?: SortOrder + viewCount?: SortOrder + metaTitle?: SortOrder + metaDescription?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type BlogPostSumOrderByAggregateInput = { + contentSize?: SortOrder + viewCount?: SortOrder + } + + export type IntNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedIntNullableFilter<$PrismaModel> + _max?: NestedIntNullableFilter<$PrismaModel> + } + + export type 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 BlogPostListRelationFilter = { + every?: BlogPostWhereInput + some?: BlogPostWhereInput + none?: BlogPostWhereInput + } + + export type BlogPostOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type BlogTagOrderByRelevanceInput = { + fields: BlogTagOrderByRelevanceFieldEnum | BlogTagOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type BlogTagCountOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + slug?: SortOrder + } + + export type BlogTagMaxOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + slug?: SortOrder + } + + export type BlogTagMinOrderByAggregateInput = { + id?: SortOrder + name?: SortOrder + slug?: SortOrder + } + + export type BlogPostScalarRelationFilter = { + is?: BlogPostWhereInput + isNot?: BlogPostWhereInput + } + + export type BlogCommentNullableScalarRelationFilter = { + is?: BlogCommentWhereInput | null + isNot?: BlogCommentWhereInput | null + } + + export type BlogCommentOrderByRelevanceInput = { + fields: BlogCommentOrderByRelevanceFieldEnum | BlogCommentOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type BlogCommentCountOrderByAggregateInput = { + id?: SortOrder + content?: SortOrder + postId?: SortOrder + authorId?: SortOrder + parentId?: SortOrder + isApproved?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type BlogCommentMaxOrderByAggregateInput = { + id?: SortOrder + content?: SortOrder + postId?: SortOrder + authorId?: SortOrder + parentId?: SortOrder + isApproved?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type BlogCommentMinOrderByAggregateInput = { + id?: SortOrder + content?: SortOrder + postId?: SortOrder + authorId?: SortOrder + parentId?: SortOrder + isApproved?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EnumEventTypeFilter<$PrismaModel = never> = { + equals?: $Enums.EventType | EnumEventTypeFieldRefInput<$PrismaModel> + in?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + not?: NestedEnumEventTypeFilter<$PrismaModel> | $Enums.EventType + } + + export type EventOrderByRelevanceInput = { + fields: EventOrderByRelevanceFieldEnum | EventOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type EventCountOrderByAggregateInput = { + id?: SortOrder + title?: SortOrder + description?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + location?: SortOrder + type?: SortOrder + organizer?: SortOrder + attendees?: SortOrder + surveyLink?: SortOrder + createdBy?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EventAvgOrderByAggregateInput = { + attendees?: SortOrder + } + + export type EventMaxOrderByAggregateInput = { + id?: SortOrder + title?: SortOrder + description?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + location?: SortOrder + type?: SortOrder + organizer?: SortOrder + attendees?: SortOrder + surveyLink?: SortOrder + createdBy?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EventMinOrderByAggregateInput = { + id?: SortOrder + title?: SortOrder + description?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + location?: SortOrder + type?: SortOrder + organizer?: SortOrder + attendees?: SortOrder + surveyLink?: SortOrder + createdBy?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EventSumOrderByAggregateInput = { + attendees?: SortOrder + } + + export type EnumEventTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.EventType | EnumEventTypeFieldRefInput<$PrismaModel> + in?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + not?: NestedEnumEventTypeWithAggregatesFilter<$PrismaModel> | $Enums.EventType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumEventTypeFilter<$PrismaModel> + _max?: NestedEnumEventTypeFilter<$PrismaModel> + } + + export type EnumDiscountTypeFilter<$PrismaModel = never> = { + equals?: $Enums.DiscountType | EnumDiscountTypeFieldRefInput<$PrismaModel> + in?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDiscountTypeFilter<$PrismaModel> | $Enums.DiscountType + } + + export type DecimalFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string + } + + export type DecimalNullableFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalNullableFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null + } + + export type VoucherOrderByRelevanceInput = { + fields: VoucherOrderByRelevanceFieldEnum | VoucherOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type VoucherCountOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + type?: SortOrder + value?: SortOrder + minSpend?: SortOrder + maxDiscount?: SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + isActive?: SortOrder + } + + export type VoucherAvgOrderByAggregateInput = { + value?: SortOrder + minSpend?: SortOrder + maxDiscount?: SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + } + + export type VoucherMaxOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + type?: SortOrder + value?: SortOrder + minSpend?: SortOrder + maxDiscount?: SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + isActive?: SortOrder + } + + export type VoucherMinOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + type?: SortOrder + value?: SortOrder + minSpend?: SortOrder + maxDiscount?: SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + startDate?: SortOrder + endDate?: SortOrder + isActive?: SortOrder + } + + export type VoucherSumOrderByAggregateInput = { + value?: SortOrder + minSpend?: SortOrder + maxDiscount?: SortOrder + usageLimit?: SortOrder + usedCount?: SortOrder + } + + export type EnumDiscountTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.DiscountType | EnumDiscountTypeFieldRefInput<$PrismaModel> + in?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDiscountTypeWithAggregatesFilter<$PrismaModel> | $Enums.DiscountType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumDiscountTypeFilter<$PrismaModel> + _max?: NestedEnumDiscountTypeFilter<$PrismaModel> + } + + export type DecimalWithAggregatesFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string + _count?: NestedIntFilter<$PrismaModel> + _avg?: NestedDecimalFilter<$PrismaModel> + _sum?: NestedDecimalFilter<$PrismaModel> + _min?: NestedDecimalFilter<$PrismaModel> + _max?: NestedDecimalFilter<$PrismaModel> + } + + export type DecimalNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalNullableWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedDecimalNullableFilter<$PrismaModel> + _sum?: NestedDecimalNullableFilter<$PrismaModel> + _min?: NestedDecimalNullableFilter<$PrismaModel> + _max?: NestedDecimalNullableFilter<$PrismaModel> + } + + export type ProductScalarRelationFilter = { + is?: ProductWhereInput + isNot?: ProductWhereInput + } + + export type ReviewOrderByRelevanceInput = { + fields: ReviewOrderByRelevanceFieldEnum | ReviewOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ReviewCountOrderByAggregateInput = { + id?: SortOrder + rating?: SortOrder + comment?: SortOrder + userId?: SortOrder + productId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ReviewAvgOrderByAggregateInput = { + rating?: SortOrder + } + + export type ReviewMaxOrderByAggregateInput = { + id?: SortOrder + rating?: SortOrder + comment?: SortOrder + userId?: SortOrder + productId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ReviewMinOrderByAggregateInput = { + id?: SortOrder + rating?: SortOrder + comment?: SortOrder + userId?: SortOrder + productId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ReviewSumOrderByAggregateInput = { + rating?: SortOrder + } + + export type CartItemListRelationFilter = { + every?: CartItemWhereInput + some?: CartItemWhereInput + none?: CartItemWhereInput + } + + export type CartItemOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type CartOrderByRelevanceInput = { + fields: CartOrderByRelevanceFieldEnum | CartOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type CartCountOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + updatedAt?: SortOrder + } + + export type CartMaxOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + updatedAt?: SortOrder + } + + export type CartMinOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + updatedAt?: SortOrder + } + + export type EnumProductSizeNullableFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> | null + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + not?: NestedEnumProductSizeNullableFilter<$PrismaModel> | $Enums.ProductSize | null + } + + export type CartScalarRelationFilter = { + is?: CartWhereInput + isNot?: CartWhereInput + } + + export type CartItemOrderByRelevanceInput = { + fields: CartItemOrderByRelevanceFieldEnum | CartItemOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type CartItemCartIdProductIdSizeCompoundUniqueInput = { + cartId: string + productId: string + size: $Enums.ProductSize + } + + export type CartItemCountOrderByAggregateInput = { + id?: SortOrder + cartId?: SortOrder + productId?: SortOrder + size?: SortOrder + quantity?: SortOrder + } + + export type CartItemAvgOrderByAggregateInput = { + quantity?: SortOrder + } + + export type CartItemMaxOrderByAggregateInput = { + id?: SortOrder + cartId?: SortOrder + productId?: SortOrder + size?: SortOrder + quantity?: SortOrder + } + + export type CartItemMinOrderByAggregateInput = { + id?: SortOrder + cartId?: SortOrder + productId?: SortOrder + size?: SortOrder + quantity?: SortOrder + } + + export type CartItemSumOrderByAggregateInput = { + quantity?: SortOrder + } + + export type EnumProductSizeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> | null + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + not?: NestedEnumProductSizeNullableWithAggregatesFilter<$PrismaModel> | $Enums.ProductSize | null + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedEnumProductSizeNullableFilter<$PrismaModel> + _max?: NestedEnumProductSizeNullableFilter<$PrismaModel> + } + + export type EnumOrderStatusFilter<$PrismaModel = never> = { + equals?: $Enums.OrderStatus | EnumOrderStatusFieldRefInput<$PrismaModel> + in?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + not?: NestedEnumOrderStatusFilter<$PrismaModel> | $Enums.OrderStatus + } + + export type EnumPaymentStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentStatusFilter<$PrismaModel> | $Enums.PaymentStatus + } + + export type ShippingAddressScalarRelationFilter = { + is?: ShippingAddressWhereInput + isNot?: ShippingAddressWhereInput + } + + export type OrderItemListRelationFilter = { + every?: OrderItemWhereInput + some?: OrderItemWhereInput + none?: OrderItemWhereInput + } + + export type PaymentTransactionNullableScalarRelationFilter = { + is?: PaymentTransactionWhereInput | null + isNot?: PaymentTransactionWhereInput | null + } + + export type OrderItemOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type OrderOrderByRelevanceInput = { + fields: OrderOrderByRelevanceFieldEnum | OrderOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type OrderCountOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + userId?: SortOrder + status?: SortOrder + paymentStatus?: SortOrder + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + shippingAddressId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type OrderAvgOrderByAggregateInput = { + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + } + + export type OrderMaxOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + userId?: SortOrder + status?: SortOrder + paymentStatus?: SortOrder + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + shippingAddressId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type OrderMinOrderByAggregateInput = { + id?: SortOrder + code?: SortOrder + userId?: SortOrder + status?: SortOrder + paymentStatus?: SortOrder + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + shippingAddressId?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type OrderSumOrderByAggregateInput = { + totalAmount?: SortOrder + shippingFee?: SortOrder + discountValue?: SortOrder + } + + export type EnumOrderStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.OrderStatus | EnumOrderStatusFieldRefInput<$PrismaModel> + in?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + not?: NestedEnumOrderStatusWithAggregatesFilter<$PrismaModel> | $Enums.OrderStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumOrderStatusFilter<$PrismaModel> + _max?: NestedEnumOrderStatusFilter<$PrismaModel> + } + + export type EnumPaymentStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumPaymentStatusFilter<$PrismaModel> + _max?: NestedEnumPaymentStatusFilter<$PrismaModel> + } + + export type OrderNullableScalarRelationFilter = { + is?: OrderWhereInput | null + isNot?: OrderWhereInput | null + } + + export type ShippingAddressOrderByRelevanceInput = { + fields: ShippingAddressOrderByRelevanceFieldEnum | ShippingAddressOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ShippingAddressCountOrderByAggregateInput = { + id?: SortOrder + fullName?: SortOrder + phone?: SortOrder + addressLine1?: SortOrder + addressLine2?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + postalCode?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ShippingAddressMaxOrderByAggregateInput = { + id?: SortOrder + fullName?: SortOrder + phone?: SortOrder + addressLine1?: SortOrder + addressLine2?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + postalCode?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ShippingAddressMinOrderByAggregateInput = { + id?: SortOrder + fullName?: SortOrder + phone?: SortOrder + addressLine1?: SortOrder + addressLine2?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + postalCode?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EnumProductSlugFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSlug | EnumProductSlugFieldRefInput<$PrismaModel> + in?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + not?: NestedEnumProductSlugFilter<$PrismaModel> | $Enums.ProductSlug + } + + export type OrderScalarRelationFilter = { + is?: OrderWhereInput + isNot?: OrderWhereInput + } + + export type ProductNullableScalarRelationFilter = { + is?: ProductWhereInput | null + isNot?: ProductWhereInput | null + } + + export type OrderItemOrderByRelevanceInput = { + fields: OrderItemOrderByRelevanceFieldEnum | OrderItemOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type OrderItemCountOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + productId?: SortOrder + productSlug?: SortOrder + productName?: SortOrder + size?: SortOrder + price?: SortOrder + quantity?: SortOrder + } + + export type OrderItemAvgOrderByAggregateInput = { + price?: SortOrder + quantity?: SortOrder + } + + export type OrderItemMaxOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + productId?: SortOrder + productSlug?: SortOrder + productName?: SortOrder + size?: SortOrder + price?: SortOrder + quantity?: SortOrder + } + + export type OrderItemMinOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + productId?: SortOrder + productSlug?: SortOrder + productName?: SortOrder + size?: SortOrder + price?: SortOrder + quantity?: SortOrder + } + + export type OrderItemSumOrderByAggregateInput = { + price?: SortOrder + quantity?: SortOrder + } + + export type EnumProductSlugWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSlug | EnumProductSlugFieldRefInput<$PrismaModel> + in?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + not?: NestedEnumProductSlugWithAggregatesFilter<$PrismaModel> | $Enums.ProductSlug + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumProductSlugFilter<$PrismaModel> + _max?: NestedEnumProductSlugFilter<$PrismaModel> + } + + export type EnumPaymentTransactionStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentTransactionStatus | EnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> | $Enums.PaymentTransactionStatus + } + export type JsonNullableFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, Exclude>, 'path'>>, + Required> + > + | OptionalFlat>, 'path'>> + + export type JsonNullableFilterBase<$PrismaModel = never> = { + equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + path?: string[] + mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | StringFieldRefInput<$PrismaModel> + string_starts_with?: string | StringFieldRefInput<$PrismaModel> + string_ends_with?: string | StringFieldRefInput<$PrismaModel> + array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + } + + export type PaymentTransactionOrderByRelevanceInput = { + fields: PaymentTransactionOrderByRelevanceFieldEnum | PaymentTransactionOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type PaymentTransactionCountOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + transactionCode?: SortOrder + amount?: SortOrder + status?: SortOrder + paymentUrl?: SortOrder + payosData?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type PaymentTransactionAvgOrderByAggregateInput = { + amount?: SortOrder + } + + export type PaymentTransactionMaxOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + transactionCode?: SortOrder + amount?: SortOrder + status?: SortOrder + paymentUrl?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type PaymentTransactionMinOrderByAggregateInput = { + id?: SortOrder + orderId?: SortOrder + transactionCode?: SortOrder + amount?: SortOrder + status?: SortOrder + paymentUrl?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type PaymentTransactionSumOrderByAggregateInput = { + amount?: SortOrder + } + + export type EnumPaymentTransactionStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentTransactionStatus | EnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentTransactionStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentTransactionStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> + _max?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> + } + export type JsonNullableWithAggregatesFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, Exclude>, 'path'>>, + Required> + > + | OptionalFlat>, 'path'>> + + export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = { + equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + path?: string[] + mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | StringFieldRefInput<$PrismaModel> + string_starts_with?: string | StringFieldRefInput<$PrismaModel> + string_ends_with?: string | StringFieldRefInput<$PrismaModel> + array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedJsonNullableFilter<$PrismaModel> + _max?: NestedJsonNullableFilter<$PrismaModel> + } + + export type ProductSizeStockListRelationFilter = { + every?: ProductSizeStockWhereInput + some?: ProductSizeStockWhereInput + none?: ProductSizeStockWhereInput + } + + export type ReviewListRelationFilter = { + every?: ReviewWhereInput + some?: ReviewWhereInput + none?: ReviewWhereInput + } + + export type ProductSizeStockOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type ReviewOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type ProductOrderByRelevanceInput = { + fields: ProductOrderByRelevanceFieldEnum | ProductOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ProductCountOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + name?: SortOrder + description?: SortOrder + priceCurrent?: SortOrder + priceOriginal?: SortOrder + priceDiscount?: SortOrder + stock?: SortOrder + hasSizes?: SortOrder + badge?: SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + isPublished?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ProductAvgOrderByAggregateInput = { + priceCurrent?: SortOrder + priceOriginal?: SortOrder + priceDiscount?: SortOrder + stock?: SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + } + + export type ProductMaxOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + name?: SortOrder + description?: SortOrder + priceCurrent?: SortOrder + priceOriginal?: SortOrder + priceDiscount?: SortOrder + stock?: SortOrder + hasSizes?: SortOrder + badge?: SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + isPublished?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ProductMinOrderByAggregateInput = { + id?: SortOrder + slug?: SortOrder + name?: SortOrder + description?: SortOrder + priceCurrent?: SortOrder + priceOriginal?: SortOrder + priceDiscount?: SortOrder + stock?: SortOrder + hasSizes?: SortOrder + badge?: SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + isPublished?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type ProductSumOrderByAggregateInput = { + priceCurrent?: SortOrder + priceOriginal?: SortOrder + priceDiscount?: SortOrder + stock?: SortOrder + ratingValue?: SortOrder + ratingCount?: SortOrder + } + + export type EnumProductSizeFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + not?: NestedEnumProductSizeFilter<$PrismaModel> | $Enums.ProductSize + } + + export type ProductSizeStockOrderByRelevanceInput = { + fields: ProductSizeStockOrderByRelevanceFieldEnum | ProductSizeStockOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ProductSizeStockProductIdSizeCompoundUniqueInput = { + productId: string + size: $Enums.ProductSize + } + + export type ProductSizeStockCountOrderByAggregateInput = { + id?: SortOrder + size?: SortOrder + stock?: SortOrder + productId?: SortOrder + } + + export type ProductSizeStockAvgOrderByAggregateInput = { + stock?: SortOrder + } + + export type ProductSizeStockMaxOrderByAggregateInput = { + id?: SortOrder + size?: SortOrder + stock?: SortOrder + productId?: SortOrder + } + + export type ProductSizeStockMinOrderByAggregateInput = { + id?: SortOrder + size?: SortOrder + stock?: SortOrder + productId?: SortOrder + } + + export type ProductSizeStockSumOrderByAggregateInput = { + stock?: SortOrder + } + + export type EnumProductSizeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + not?: NestedEnumProductSizeWithAggregatesFilter<$PrismaModel> | $Enums.ProductSize + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumProductSizeFilter<$PrismaModel> + _max?: NestedEnumProductSizeFilter<$PrismaModel> + } + + export type SecurityLogOrderByRelevanceInput = { + fields: SecurityLogOrderByRelevanceFieldEnum | SecurityLogOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type SecurityLogCountOrderByAggregateInput = { + id?: SortOrder + type?: SortOrder + severity?: SortOrder + message?: SortOrder + userId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + path?: SortOrder + method?: SortOrder + metadata?: SortOrder + timestamp?: SortOrder + } + + export type SecurityLogMaxOrderByAggregateInput = { + id?: SortOrder + type?: SortOrder + severity?: SortOrder + message?: SortOrder + userId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + path?: SortOrder + method?: SortOrder + timestamp?: SortOrder + } + + export type SecurityLogMinOrderByAggregateInput = { + id?: SortOrder + type?: SortOrder + severity?: SortOrder + message?: SortOrder + userId?: SortOrder + ipAddress?: SortOrder + userAgent?: SortOrder + path?: SortOrder + method?: SortOrder + timestamp?: SortOrder + } + + export type EnumUserRoleFilter<$PrismaModel = never> = { + equals?: $Enums.UserRole | EnumUserRoleFieldRefInput<$PrismaModel> + in?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + notIn?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + not?: NestedEnumUserRoleFilter<$PrismaModel> | $Enums.UserRole + } + + export type AddressListRelationFilter = { + every?: AddressWhereInput + some?: AddressWhereInput + none?: AddressWhereInput + } + + export type OrderListRelationFilter = { + every?: OrderWhereInput + some?: OrderWhereInput + none?: OrderWhereInput + } + + export type CartNullableScalarRelationFilter = { + is?: CartWhereInput | null + isNot?: CartWhereInput | null + } + + export type ExternalAccountListRelationFilter = { + every?: ExternalAccountWhereInput + some?: ExternalAccountWhereInput + none?: ExternalAccountWhereInput + } + + export type UserMFAMethodListRelationFilter = { + every?: UserMFAMethodWhereInput + some?: UserMFAMethodWhereInput + none?: UserMFAMethodWhereInput + } + + export type MFABackupCodeListRelationFilter = { + every?: MFABackupCodeWhereInput + some?: MFABackupCodeWhereInput + none?: MFABackupCodeWhereInput + } + + export type DeviceListRelationFilter = { + every?: DeviceWhereInput + some?: DeviceWhereInput + none?: DeviceWhereInput + } + + export type SessionListRelationFilter = { + every?: SessionWhereInput + some?: SessionWhereInput + none?: SessionWhereInput + } + + export type AddressOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type OrderOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type ExternalAccountOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type UserMFAMethodOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type MFABackupCodeOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type DeviceOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type SessionOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type UserOrderByRelevanceInput = { + fields: UserOrderByRelevanceFieldEnum | UserOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type UserCountOrderByAggregateInput = { + id?: SortOrder + email?: SortOrder + password?: SortOrder + fullName?: SortOrder + phone?: SortOrder + avatar?: SortOrder + role?: SortOrder + mfaEnabled?: SortOrder + mfaSecret?: SortOrder + emailVerified?: SortOrder + phoneVerified?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type UserMaxOrderByAggregateInput = { + id?: SortOrder + email?: SortOrder + password?: SortOrder + fullName?: SortOrder + phone?: SortOrder + avatar?: SortOrder + role?: SortOrder + mfaEnabled?: SortOrder + mfaSecret?: SortOrder + emailVerified?: SortOrder + phoneVerified?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type UserMinOrderByAggregateInput = { + id?: SortOrder + email?: SortOrder + password?: SortOrder + fullName?: SortOrder + phone?: SortOrder + avatar?: SortOrder + role?: SortOrder + mfaEnabled?: SortOrder + mfaSecret?: SortOrder + emailVerified?: SortOrder + phoneVerified?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type EnumUserRoleWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.UserRole | EnumUserRoleFieldRefInput<$PrismaModel> + in?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + notIn?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + not?: NestedEnumUserRoleWithAggregatesFilter<$PrismaModel> | $Enums.UserRole + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumUserRoleFilter<$PrismaModel> + _max?: NestedEnumUserRoleFilter<$PrismaModel> + } + + export type AddressOrderByRelevanceInput = { + fields: AddressOrderByRelevanceFieldEnum | AddressOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type AddressCountOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + recipient?: SortOrder + phone?: SortOrder + street?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + isDefault?: SortOrder + } + + export type AddressMaxOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + recipient?: SortOrder + phone?: SortOrder + street?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + isDefault?: SortOrder + } + + export type AddressMinOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + recipient?: SortOrder + phone?: SortOrder + street?: SortOrder + city?: SortOrder + district?: SortOrder + ward?: SortOrder + isDefault?: SortOrder + } + + export type UserCreateNestedOneWithoutExternalAccountsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutExternalAccountsInput + connect?: UserWhereUniqueInput + } + + export type StringFieldUpdateOperationsInput = { + set?: string + } + + export type EnumOAuthProviderFieldUpdateOperationsInput = { + set?: $Enums.OAuthProvider + } + + export type NullableStringFieldUpdateOperationsInput = { + set?: string | null + } + + export type NullableDateTimeFieldUpdateOperationsInput = { + set?: Date | string | null + } + + export type DateTimeFieldUpdateOperationsInput = { + set?: Date | string + } + + export type UserUpdateOneRequiredWithoutExternalAccountsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutExternalAccountsInput + upsert?: UserUpsertWithoutExternalAccountsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutExternalAccountsInput> + } + + export type UserCreateNestedOneWithoutMfaMethodsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutMfaMethodsInput + connect?: UserWhereUniqueInput + } + + export type EnumMFAMethodFieldUpdateOperationsInput = { + set?: $Enums.MFAMethod + } + + export type BoolFieldUpdateOperationsInput = { + set?: boolean + } + + export type UserUpdateOneRequiredWithoutMfaMethodsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutMfaMethodsInput + upsert?: UserUpsertWithoutMfaMethodsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutMfaMethodsInput> + } + + export type UserCreateNestedOneWithoutMfaBackupCodesInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutMfaBackupCodesInput + connect?: UserWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutMfaBackupCodesNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutMfaBackupCodesInput + upsert?: UserUpsertWithoutMfaBackupCodesInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutMfaBackupCodesInput> + } + + export type UserCreateNestedOneWithoutDevicesInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutDevicesInput + connect?: UserWhereUniqueInput + } + + export type SessionCreateNestedOneWithoutDeviceInput = { + create?: XOR + connectOrCreate?: SessionCreateOrConnectWithoutDeviceInput + connect?: SessionWhereUniqueInput + } + + export type SessionUncheckedCreateNestedOneWithoutDeviceInput = { + create?: XOR + connectOrCreate?: SessionCreateOrConnectWithoutDeviceInput + connect?: SessionWhereUniqueInput + } + + export type EnumDeviceTypeFieldUpdateOperationsInput = { + set?: $Enums.DeviceType + } + + export type UserUpdateOneRequiredWithoutDevicesNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutDevicesInput + upsert?: UserUpsertWithoutDevicesInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutDevicesInput> + } + + export type SessionUpdateOneWithoutDeviceNestedInput = { + create?: XOR + connectOrCreate?: SessionCreateOrConnectWithoutDeviceInput + upsert?: SessionUpsertWithoutDeviceInput + disconnect?: SessionWhereInput | boolean + delete?: SessionWhereInput | boolean + connect?: SessionWhereUniqueInput + update?: XOR, SessionUncheckedUpdateWithoutDeviceInput> + } + + export type SessionUncheckedUpdateOneWithoutDeviceNestedInput = { + create?: XOR + connectOrCreate?: SessionCreateOrConnectWithoutDeviceInput + upsert?: SessionUpsertWithoutDeviceInput + disconnect?: SessionWhereInput | boolean + delete?: SessionWhereInput | boolean + connect?: SessionWhereUniqueInput + update?: XOR, SessionUncheckedUpdateWithoutDeviceInput> + } + + export type UserCreateNestedOneWithoutSessionsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutSessionsInput + connect?: UserWhereUniqueInput + } + + export type DeviceCreateNestedOneWithoutSessionInput = { + create?: XOR + connectOrCreate?: DeviceCreateOrConnectWithoutSessionInput + connect?: DeviceWhereUniqueInput + } + + export type EnumSessionStatusFieldUpdateOperationsInput = { + set?: $Enums.SessionStatus + } + + export type UserUpdateOneRequiredWithoutSessionsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutSessionsInput + upsert?: UserUpsertWithoutSessionsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutSessionsInput> + } + + export type DeviceUpdateOneWithoutSessionNestedInput = { + create?: XOR + connectOrCreate?: DeviceCreateOrConnectWithoutSessionInput + upsert?: DeviceUpsertWithoutSessionInput + disconnect?: DeviceWhereInput | boolean + delete?: DeviceWhereInput | boolean + connect?: DeviceWhereUniqueInput + update?: XOR, DeviceUncheckedUpdateWithoutSessionInput> + } + + export type UserCreateNestedOneWithoutBlogPostsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutBlogPostsInput + connect?: UserWhereUniqueInput + } + + export type BlogTagCreateNestedManyWithoutPostsInput = { + create?: XOR | BlogTagCreateWithoutPostsInput[] | BlogTagUncheckedCreateWithoutPostsInput[] + connectOrCreate?: BlogTagCreateOrConnectWithoutPostsInput | BlogTagCreateOrConnectWithoutPostsInput[] + connect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + } + + export type BlogCommentCreateNestedManyWithoutPostInput = { + create?: XOR | BlogCommentCreateWithoutPostInput[] | BlogCommentUncheckedCreateWithoutPostInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutPostInput | BlogCommentCreateOrConnectWithoutPostInput[] + createMany?: BlogCommentCreateManyPostInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type BlogTagUncheckedCreateNestedManyWithoutPostsInput = { + create?: XOR | BlogTagCreateWithoutPostsInput[] | BlogTagUncheckedCreateWithoutPostsInput[] + connectOrCreate?: BlogTagCreateOrConnectWithoutPostsInput | BlogTagCreateOrConnectWithoutPostsInput[] + connect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + } + + export type BlogCommentUncheckedCreateNestedManyWithoutPostInput = { + create?: XOR | BlogCommentCreateWithoutPostInput[] | BlogCommentUncheckedCreateWithoutPostInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutPostInput | BlogCommentCreateOrConnectWithoutPostInput[] + createMany?: BlogCommentCreateManyPostInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type NullableIntFieldUpdateOperationsInput = { + set?: number | null + increment?: number + decrement?: number + multiply?: number + divide?: number + } + + export type IntFieldUpdateOperationsInput = { + set?: number + increment?: number + decrement?: number + multiply?: number + divide?: number + } + + export type UserUpdateOneRequiredWithoutBlogPostsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutBlogPostsInput + upsert?: UserUpsertWithoutBlogPostsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutBlogPostsInput> + } + + export type BlogTagUpdateManyWithoutPostsNestedInput = { + create?: XOR | BlogTagCreateWithoutPostsInput[] | BlogTagUncheckedCreateWithoutPostsInput[] + connectOrCreate?: BlogTagCreateOrConnectWithoutPostsInput | BlogTagCreateOrConnectWithoutPostsInput[] + upsert?: BlogTagUpsertWithWhereUniqueWithoutPostsInput | BlogTagUpsertWithWhereUniqueWithoutPostsInput[] + set?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + disconnect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + delete?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + connect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + update?: BlogTagUpdateWithWhereUniqueWithoutPostsInput | BlogTagUpdateWithWhereUniqueWithoutPostsInput[] + updateMany?: BlogTagUpdateManyWithWhereWithoutPostsInput | BlogTagUpdateManyWithWhereWithoutPostsInput[] + deleteMany?: BlogTagScalarWhereInput | BlogTagScalarWhereInput[] + } + + export type BlogCommentUpdateManyWithoutPostNestedInput = { + create?: XOR | BlogCommentCreateWithoutPostInput[] | BlogCommentUncheckedCreateWithoutPostInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutPostInput | BlogCommentCreateOrConnectWithoutPostInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutPostInput | BlogCommentUpsertWithWhereUniqueWithoutPostInput[] + createMany?: BlogCommentCreateManyPostInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutPostInput | BlogCommentUpdateWithWhereUniqueWithoutPostInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutPostInput | BlogCommentUpdateManyWithWhereWithoutPostInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type BlogTagUncheckedUpdateManyWithoutPostsNestedInput = { + create?: XOR | BlogTagCreateWithoutPostsInput[] | BlogTagUncheckedCreateWithoutPostsInput[] + connectOrCreate?: BlogTagCreateOrConnectWithoutPostsInput | BlogTagCreateOrConnectWithoutPostsInput[] + upsert?: BlogTagUpsertWithWhereUniqueWithoutPostsInput | BlogTagUpsertWithWhereUniqueWithoutPostsInput[] + set?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + disconnect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + delete?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + connect?: BlogTagWhereUniqueInput | BlogTagWhereUniqueInput[] + update?: BlogTagUpdateWithWhereUniqueWithoutPostsInput | BlogTagUpdateWithWhereUniqueWithoutPostsInput[] + updateMany?: BlogTagUpdateManyWithWhereWithoutPostsInput | BlogTagUpdateManyWithWhereWithoutPostsInput[] + deleteMany?: BlogTagScalarWhereInput | BlogTagScalarWhereInput[] + } + + export type BlogCommentUncheckedUpdateManyWithoutPostNestedInput = { + create?: XOR | BlogCommentCreateWithoutPostInput[] | BlogCommentUncheckedCreateWithoutPostInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutPostInput | BlogCommentCreateOrConnectWithoutPostInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutPostInput | BlogCommentUpsertWithWhereUniqueWithoutPostInput[] + createMany?: BlogCommentCreateManyPostInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutPostInput | BlogCommentUpdateWithWhereUniqueWithoutPostInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutPostInput | BlogCommentUpdateManyWithWhereWithoutPostInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type BlogPostCreateNestedManyWithoutTagsInput = { + create?: XOR | BlogPostCreateWithoutTagsInput[] | BlogPostUncheckedCreateWithoutTagsInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutTagsInput | BlogPostCreateOrConnectWithoutTagsInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + } + + export type BlogPostUncheckedCreateNestedManyWithoutTagsInput = { + create?: XOR | BlogPostCreateWithoutTagsInput[] | BlogPostUncheckedCreateWithoutTagsInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutTagsInput | BlogPostCreateOrConnectWithoutTagsInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + } + + export type BlogPostUpdateManyWithoutTagsNestedInput = { + create?: XOR | BlogPostCreateWithoutTagsInput[] | BlogPostUncheckedCreateWithoutTagsInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutTagsInput | BlogPostCreateOrConnectWithoutTagsInput[] + upsert?: BlogPostUpsertWithWhereUniqueWithoutTagsInput | BlogPostUpsertWithWhereUniqueWithoutTagsInput[] + set?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + disconnect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + delete?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + update?: BlogPostUpdateWithWhereUniqueWithoutTagsInput | BlogPostUpdateWithWhereUniqueWithoutTagsInput[] + updateMany?: BlogPostUpdateManyWithWhereWithoutTagsInput | BlogPostUpdateManyWithWhereWithoutTagsInput[] + deleteMany?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + } + + export type BlogPostUncheckedUpdateManyWithoutTagsNestedInput = { + create?: XOR | BlogPostCreateWithoutTagsInput[] | BlogPostUncheckedCreateWithoutTagsInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutTagsInput | BlogPostCreateOrConnectWithoutTagsInput[] + upsert?: BlogPostUpsertWithWhereUniqueWithoutTagsInput | BlogPostUpsertWithWhereUniqueWithoutTagsInput[] + set?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + disconnect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + delete?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + update?: BlogPostUpdateWithWhereUniqueWithoutTagsInput | BlogPostUpdateWithWhereUniqueWithoutTagsInput[] + updateMany?: BlogPostUpdateManyWithWhereWithoutTagsInput | BlogPostUpdateManyWithWhereWithoutTagsInput[] + deleteMany?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + } + + export type BlogPostCreateNestedOneWithoutCommentsInput = { + create?: XOR + connectOrCreate?: BlogPostCreateOrConnectWithoutCommentsInput + connect?: BlogPostWhereUniqueInput + } + + export type UserCreateNestedOneWithoutBlogCommentsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutBlogCommentsInput + connect?: UserWhereUniqueInput + } + + export type BlogCommentCreateNestedOneWithoutRepliesInput = { + create?: XOR + connectOrCreate?: BlogCommentCreateOrConnectWithoutRepliesInput + connect?: BlogCommentWhereUniqueInput + } + + export type BlogCommentCreateNestedManyWithoutParentInput = { + create?: XOR | BlogCommentCreateWithoutParentInput[] | BlogCommentUncheckedCreateWithoutParentInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutParentInput | BlogCommentCreateOrConnectWithoutParentInput[] + createMany?: BlogCommentCreateManyParentInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type BlogCommentUncheckedCreateNestedManyWithoutParentInput = { + create?: XOR | BlogCommentCreateWithoutParentInput[] | BlogCommentUncheckedCreateWithoutParentInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutParentInput | BlogCommentCreateOrConnectWithoutParentInput[] + createMany?: BlogCommentCreateManyParentInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type BlogPostUpdateOneRequiredWithoutCommentsNestedInput = { + create?: XOR + connectOrCreate?: BlogPostCreateOrConnectWithoutCommentsInput + upsert?: BlogPostUpsertWithoutCommentsInput + connect?: BlogPostWhereUniqueInput + update?: XOR, BlogPostUncheckedUpdateWithoutCommentsInput> + } + + export type UserUpdateOneRequiredWithoutBlogCommentsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutBlogCommentsInput + upsert?: UserUpsertWithoutBlogCommentsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutBlogCommentsInput> + } + + export type BlogCommentUpdateOneWithoutRepliesNestedInput = { + create?: XOR + connectOrCreate?: BlogCommentCreateOrConnectWithoutRepliesInput + upsert?: BlogCommentUpsertWithoutRepliesInput + disconnect?: BlogCommentWhereInput | boolean + delete?: BlogCommentWhereInput | boolean + connect?: BlogCommentWhereUniqueInput + update?: XOR, BlogCommentUncheckedUpdateWithoutRepliesInput> + } + + export type BlogCommentUpdateManyWithoutParentNestedInput = { + create?: XOR | BlogCommentCreateWithoutParentInput[] | BlogCommentUncheckedCreateWithoutParentInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutParentInput | BlogCommentCreateOrConnectWithoutParentInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutParentInput | BlogCommentUpsertWithWhereUniqueWithoutParentInput[] + createMany?: BlogCommentCreateManyParentInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutParentInput | BlogCommentUpdateWithWhereUniqueWithoutParentInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutParentInput | BlogCommentUpdateManyWithWhereWithoutParentInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type BlogCommentUncheckedUpdateManyWithoutParentNestedInput = { + create?: XOR | BlogCommentCreateWithoutParentInput[] | BlogCommentUncheckedCreateWithoutParentInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutParentInput | BlogCommentCreateOrConnectWithoutParentInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutParentInput | BlogCommentUpsertWithWhereUniqueWithoutParentInput[] + createMany?: BlogCommentCreateManyParentInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutParentInput | BlogCommentUpdateWithWhereUniqueWithoutParentInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutParentInput | BlogCommentUpdateManyWithWhereWithoutParentInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type EnumEventTypeFieldUpdateOperationsInput = { + set?: $Enums.EventType + } + + export type EnumDiscountTypeFieldUpdateOperationsInput = { + set?: $Enums.DiscountType + } + + export type DecimalFieldUpdateOperationsInput = { + set?: Decimal | DecimalJsLike | number | string + increment?: Decimal | DecimalJsLike | number | string + decrement?: Decimal | DecimalJsLike | number | string + multiply?: Decimal | DecimalJsLike | number | string + divide?: Decimal | DecimalJsLike | number | string + } + + export type NullableDecimalFieldUpdateOperationsInput = { + set?: Decimal | DecimalJsLike | number | string | null + increment?: Decimal | DecimalJsLike | number | string + decrement?: Decimal | DecimalJsLike | number | string + multiply?: Decimal | DecimalJsLike | number | string + divide?: Decimal | DecimalJsLike | number | string + } + + export type UserCreateNestedOneWithoutReviewsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutReviewsInput + connect?: UserWhereUniqueInput + } + + export type ProductCreateNestedOneWithoutReviewsInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutReviewsInput + connect?: ProductWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutReviewsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutReviewsInput + upsert?: UserUpsertWithoutReviewsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutReviewsInput> + } + + export type ProductUpdateOneRequiredWithoutReviewsNestedInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutReviewsInput + upsert?: ProductUpsertWithoutReviewsInput + connect?: ProductWhereUniqueInput + update?: XOR, ProductUncheckedUpdateWithoutReviewsInput> + } + + export type UserCreateNestedOneWithoutCartInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutCartInput + connect?: UserWhereUniqueInput + } + + export type CartItemCreateNestedManyWithoutCartInput = { + create?: XOR | CartItemCreateWithoutCartInput[] | CartItemUncheckedCreateWithoutCartInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutCartInput | CartItemCreateOrConnectWithoutCartInput[] + createMany?: CartItemCreateManyCartInputEnvelope + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + } + + export type CartItemUncheckedCreateNestedManyWithoutCartInput = { + create?: XOR | CartItemCreateWithoutCartInput[] | CartItemUncheckedCreateWithoutCartInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutCartInput | CartItemCreateOrConnectWithoutCartInput[] + createMany?: CartItemCreateManyCartInputEnvelope + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + } + + export type UserUpdateOneRequiredWithoutCartNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutCartInput + upsert?: UserUpsertWithoutCartInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutCartInput> + } + + export type CartItemUpdateManyWithoutCartNestedInput = { + create?: XOR | CartItemCreateWithoutCartInput[] | CartItemUncheckedCreateWithoutCartInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutCartInput | CartItemCreateOrConnectWithoutCartInput[] + upsert?: CartItemUpsertWithWhereUniqueWithoutCartInput | CartItemUpsertWithWhereUniqueWithoutCartInput[] + createMany?: CartItemCreateManyCartInputEnvelope + set?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + disconnect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + delete?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + update?: CartItemUpdateWithWhereUniqueWithoutCartInput | CartItemUpdateWithWhereUniqueWithoutCartInput[] + updateMany?: CartItemUpdateManyWithWhereWithoutCartInput | CartItemUpdateManyWithWhereWithoutCartInput[] + deleteMany?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + } + + export type CartItemUncheckedUpdateManyWithoutCartNestedInput = { + create?: XOR | CartItemCreateWithoutCartInput[] | CartItemUncheckedCreateWithoutCartInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutCartInput | CartItemCreateOrConnectWithoutCartInput[] + upsert?: CartItemUpsertWithWhereUniqueWithoutCartInput | CartItemUpsertWithWhereUniqueWithoutCartInput[] + createMany?: CartItemCreateManyCartInputEnvelope + set?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + disconnect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + delete?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + update?: CartItemUpdateWithWhereUniqueWithoutCartInput | CartItemUpdateWithWhereUniqueWithoutCartInput[] + updateMany?: CartItemUpdateManyWithWhereWithoutCartInput | CartItemUpdateManyWithWhereWithoutCartInput[] + deleteMany?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + } + + export type CartCreateNestedOneWithoutItemsInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutItemsInput + connect?: CartWhereUniqueInput + } + + export type ProductCreateNestedOneWithoutCartItemsInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutCartItemsInput + connect?: ProductWhereUniqueInput + } + + export type NullableEnumProductSizeFieldUpdateOperationsInput = { + set?: $Enums.ProductSize | null + } + + export type CartUpdateOneRequiredWithoutItemsNestedInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutItemsInput + upsert?: CartUpsertWithoutItemsInput + connect?: CartWhereUniqueInput + update?: XOR, CartUncheckedUpdateWithoutItemsInput> + } + + export type ProductUpdateOneRequiredWithoutCartItemsNestedInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutCartItemsInput + upsert?: ProductUpsertWithoutCartItemsInput + connect?: ProductWhereUniqueInput + update?: XOR, ProductUncheckedUpdateWithoutCartItemsInput> + } + + export type UserCreateNestedOneWithoutOrdersInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutOrdersInput + connect?: UserWhereUniqueInput + } + + export type ShippingAddressCreateNestedOneWithoutOrderInput = { + create?: XOR + connectOrCreate?: ShippingAddressCreateOrConnectWithoutOrderInput + connect?: ShippingAddressWhereUniqueInput + } + + export type OrderItemCreateNestedManyWithoutOrderInput = { + create?: XOR | OrderItemCreateWithoutOrderInput[] | OrderItemUncheckedCreateWithoutOrderInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutOrderInput | OrderItemCreateOrConnectWithoutOrderInput[] + createMany?: OrderItemCreateManyOrderInputEnvelope + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + } + + export type PaymentTransactionCreateNestedOneWithoutOrderInput = { + create?: XOR + connectOrCreate?: PaymentTransactionCreateOrConnectWithoutOrderInput + connect?: PaymentTransactionWhereUniqueInput + } + + export type OrderItemUncheckedCreateNestedManyWithoutOrderInput = { + create?: XOR | OrderItemCreateWithoutOrderInput[] | OrderItemUncheckedCreateWithoutOrderInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutOrderInput | OrderItemCreateOrConnectWithoutOrderInput[] + createMany?: OrderItemCreateManyOrderInputEnvelope + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + } + + export type PaymentTransactionUncheckedCreateNestedOneWithoutOrderInput = { + create?: XOR + connectOrCreate?: PaymentTransactionCreateOrConnectWithoutOrderInput + connect?: PaymentTransactionWhereUniqueInput + } + + export type EnumOrderStatusFieldUpdateOperationsInput = { + set?: $Enums.OrderStatus + } + + export type EnumPaymentStatusFieldUpdateOperationsInput = { + set?: $Enums.PaymentStatus + } + + export type UserUpdateOneRequiredWithoutOrdersNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutOrdersInput + upsert?: UserUpsertWithoutOrdersInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutOrdersInput> + } + + export type ShippingAddressUpdateOneRequiredWithoutOrderNestedInput = { + create?: XOR + connectOrCreate?: ShippingAddressCreateOrConnectWithoutOrderInput + upsert?: ShippingAddressUpsertWithoutOrderInput + connect?: ShippingAddressWhereUniqueInput + update?: XOR, ShippingAddressUncheckedUpdateWithoutOrderInput> + } + + export type OrderItemUpdateManyWithoutOrderNestedInput = { + create?: XOR | OrderItemCreateWithoutOrderInput[] | OrderItemUncheckedCreateWithoutOrderInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutOrderInput | OrderItemCreateOrConnectWithoutOrderInput[] + upsert?: OrderItemUpsertWithWhereUniqueWithoutOrderInput | OrderItemUpsertWithWhereUniqueWithoutOrderInput[] + createMany?: OrderItemCreateManyOrderInputEnvelope + set?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + disconnect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + delete?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + update?: OrderItemUpdateWithWhereUniqueWithoutOrderInput | OrderItemUpdateWithWhereUniqueWithoutOrderInput[] + updateMany?: OrderItemUpdateManyWithWhereWithoutOrderInput | OrderItemUpdateManyWithWhereWithoutOrderInput[] + deleteMany?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + } + + export type PaymentTransactionUpdateOneWithoutOrderNestedInput = { + create?: XOR + connectOrCreate?: PaymentTransactionCreateOrConnectWithoutOrderInput + upsert?: PaymentTransactionUpsertWithoutOrderInput + disconnect?: PaymentTransactionWhereInput | boolean + delete?: PaymentTransactionWhereInput | boolean + connect?: PaymentTransactionWhereUniqueInput + update?: XOR, PaymentTransactionUncheckedUpdateWithoutOrderInput> + } + + export type OrderItemUncheckedUpdateManyWithoutOrderNestedInput = { + create?: XOR | OrderItemCreateWithoutOrderInput[] | OrderItemUncheckedCreateWithoutOrderInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutOrderInput | OrderItemCreateOrConnectWithoutOrderInput[] + upsert?: OrderItemUpsertWithWhereUniqueWithoutOrderInput | OrderItemUpsertWithWhereUniqueWithoutOrderInput[] + createMany?: OrderItemCreateManyOrderInputEnvelope + set?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + disconnect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + delete?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + update?: OrderItemUpdateWithWhereUniqueWithoutOrderInput | OrderItemUpdateWithWhereUniqueWithoutOrderInput[] + updateMany?: OrderItemUpdateManyWithWhereWithoutOrderInput | OrderItemUpdateManyWithWhereWithoutOrderInput[] + deleteMany?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + } + + export type PaymentTransactionUncheckedUpdateOneWithoutOrderNestedInput = { + create?: XOR + connectOrCreate?: PaymentTransactionCreateOrConnectWithoutOrderInput + upsert?: PaymentTransactionUpsertWithoutOrderInput + disconnect?: PaymentTransactionWhereInput | boolean + delete?: PaymentTransactionWhereInput | boolean + connect?: PaymentTransactionWhereUniqueInput + update?: XOR, PaymentTransactionUncheckedUpdateWithoutOrderInput> + } + + export type OrderCreateNestedOneWithoutShippingAddressInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutShippingAddressInput + connect?: OrderWhereUniqueInput + } + + export type OrderUncheckedCreateNestedOneWithoutShippingAddressInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutShippingAddressInput + connect?: OrderWhereUniqueInput + } + + export type OrderUpdateOneWithoutShippingAddressNestedInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutShippingAddressInput + upsert?: OrderUpsertWithoutShippingAddressInput + disconnect?: OrderWhereInput | boolean + delete?: OrderWhereInput | boolean + connect?: OrderWhereUniqueInput + update?: XOR, OrderUncheckedUpdateWithoutShippingAddressInput> + } + + export type OrderUncheckedUpdateOneWithoutShippingAddressNestedInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutShippingAddressInput + upsert?: OrderUpsertWithoutShippingAddressInput + disconnect?: OrderWhereInput | boolean + delete?: OrderWhereInput | boolean + connect?: OrderWhereUniqueInput + update?: XOR, OrderUncheckedUpdateWithoutShippingAddressInput> + } + + export type OrderCreateNestedOneWithoutItemsInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutItemsInput + connect?: OrderWhereUniqueInput + } + + export type ProductCreateNestedOneWithoutOrderItemsInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutOrderItemsInput + connect?: ProductWhereUniqueInput + } + + export type EnumProductSlugFieldUpdateOperationsInput = { + set?: $Enums.ProductSlug + } + + export type OrderUpdateOneRequiredWithoutItemsNestedInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutItemsInput + upsert?: OrderUpsertWithoutItemsInput + connect?: OrderWhereUniqueInput + update?: XOR, OrderUncheckedUpdateWithoutItemsInput> + } + + export type ProductUpdateOneWithoutOrderItemsNestedInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutOrderItemsInput + upsert?: ProductUpsertWithoutOrderItemsInput + disconnect?: ProductWhereInput | boolean + delete?: ProductWhereInput | boolean + connect?: ProductWhereUniqueInput + update?: XOR, ProductUncheckedUpdateWithoutOrderItemsInput> + } + + export type OrderCreateNestedOneWithoutPaymentTransactionInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutPaymentTransactionInput + connect?: OrderWhereUniqueInput + } + + export type EnumPaymentTransactionStatusFieldUpdateOperationsInput = { + set?: $Enums.PaymentTransactionStatus + } + + export type OrderUpdateOneRequiredWithoutPaymentTransactionNestedInput = { + create?: XOR + connectOrCreate?: OrderCreateOrConnectWithoutPaymentTransactionInput + upsert?: OrderUpsertWithoutPaymentTransactionInput + connect?: OrderWhereUniqueInput + update?: XOR, OrderUncheckedUpdateWithoutPaymentTransactionInput> + } + + export type ProductSizeStockCreateNestedManyWithoutProductInput = { + create?: XOR | ProductSizeStockCreateWithoutProductInput[] | ProductSizeStockUncheckedCreateWithoutProductInput[] + connectOrCreate?: ProductSizeStockCreateOrConnectWithoutProductInput | ProductSizeStockCreateOrConnectWithoutProductInput[] + createMany?: ProductSizeStockCreateManyProductInputEnvelope + connect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + } + + export type CartItemCreateNestedManyWithoutProductInput = { + create?: XOR | CartItemCreateWithoutProductInput[] | CartItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutProductInput | CartItemCreateOrConnectWithoutProductInput[] + createMany?: CartItemCreateManyProductInputEnvelope + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + } + + export type OrderItemCreateNestedManyWithoutProductInput = { + create?: XOR | OrderItemCreateWithoutProductInput[] | OrderItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutProductInput | OrderItemCreateOrConnectWithoutProductInput[] + createMany?: OrderItemCreateManyProductInputEnvelope + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + } + + export type ReviewCreateNestedManyWithoutProductInput = { + create?: XOR | ReviewCreateWithoutProductInput[] | ReviewUncheckedCreateWithoutProductInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutProductInput | ReviewCreateOrConnectWithoutProductInput[] + createMany?: ReviewCreateManyProductInputEnvelope + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + } + + export type ProductSizeStockUncheckedCreateNestedManyWithoutProductInput = { + create?: XOR | ProductSizeStockCreateWithoutProductInput[] | ProductSizeStockUncheckedCreateWithoutProductInput[] + connectOrCreate?: ProductSizeStockCreateOrConnectWithoutProductInput | ProductSizeStockCreateOrConnectWithoutProductInput[] + createMany?: ProductSizeStockCreateManyProductInputEnvelope + connect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + } + + export type CartItemUncheckedCreateNestedManyWithoutProductInput = { + create?: XOR | CartItemCreateWithoutProductInput[] | CartItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutProductInput | CartItemCreateOrConnectWithoutProductInput[] + createMany?: CartItemCreateManyProductInputEnvelope + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + } + + export type OrderItemUncheckedCreateNestedManyWithoutProductInput = { + create?: XOR | OrderItemCreateWithoutProductInput[] | OrderItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutProductInput | OrderItemCreateOrConnectWithoutProductInput[] + createMany?: OrderItemCreateManyProductInputEnvelope + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + } + + export type ReviewUncheckedCreateNestedManyWithoutProductInput = { + create?: XOR | ReviewCreateWithoutProductInput[] | ReviewUncheckedCreateWithoutProductInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutProductInput | ReviewCreateOrConnectWithoutProductInput[] + createMany?: ReviewCreateManyProductInputEnvelope + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + } + + export type ProductSizeStockUpdateManyWithoutProductNestedInput = { + create?: XOR | ProductSizeStockCreateWithoutProductInput[] | ProductSizeStockUncheckedCreateWithoutProductInput[] + connectOrCreate?: ProductSizeStockCreateOrConnectWithoutProductInput | ProductSizeStockCreateOrConnectWithoutProductInput[] + upsert?: ProductSizeStockUpsertWithWhereUniqueWithoutProductInput | ProductSizeStockUpsertWithWhereUniqueWithoutProductInput[] + createMany?: ProductSizeStockCreateManyProductInputEnvelope + set?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + disconnect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + delete?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + connect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + update?: ProductSizeStockUpdateWithWhereUniqueWithoutProductInput | ProductSizeStockUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: ProductSizeStockUpdateManyWithWhereWithoutProductInput | ProductSizeStockUpdateManyWithWhereWithoutProductInput[] + deleteMany?: ProductSizeStockScalarWhereInput | ProductSizeStockScalarWhereInput[] + } + + export type CartItemUpdateManyWithoutProductNestedInput = { + create?: XOR | CartItemCreateWithoutProductInput[] | CartItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutProductInput | CartItemCreateOrConnectWithoutProductInput[] + upsert?: CartItemUpsertWithWhereUniqueWithoutProductInput | CartItemUpsertWithWhereUniqueWithoutProductInput[] + createMany?: CartItemCreateManyProductInputEnvelope + set?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + disconnect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + delete?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + update?: CartItemUpdateWithWhereUniqueWithoutProductInput | CartItemUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: CartItemUpdateManyWithWhereWithoutProductInput | CartItemUpdateManyWithWhereWithoutProductInput[] + deleteMany?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + } + + export type OrderItemUpdateManyWithoutProductNestedInput = { + create?: XOR | OrderItemCreateWithoutProductInput[] | OrderItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutProductInput | OrderItemCreateOrConnectWithoutProductInput[] + upsert?: OrderItemUpsertWithWhereUniqueWithoutProductInput | OrderItemUpsertWithWhereUniqueWithoutProductInput[] + createMany?: OrderItemCreateManyProductInputEnvelope + set?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + disconnect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + delete?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + update?: OrderItemUpdateWithWhereUniqueWithoutProductInput | OrderItemUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: OrderItemUpdateManyWithWhereWithoutProductInput | OrderItemUpdateManyWithWhereWithoutProductInput[] + deleteMany?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + } + + export type ReviewUpdateManyWithoutProductNestedInput = { + create?: XOR | ReviewCreateWithoutProductInput[] | ReviewUncheckedCreateWithoutProductInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutProductInput | ReviewCreateOrConnectWithoutProductInput[] + upsert?: ReviewUpsertWithWhereUniqueWithoutProductInput | ReviewUpsertWithWhereUniqueWithoutProductInput[] + createMany?: ReviewCreateManyProductInputEnvelope + set?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + disconnect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + delete?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + update?: ReviewUpdateWithWhereUniqueWithoutProductInput | ReviewUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: ReviewUpdateManyWithWhereWithoutProductInput | ReviewUpdateManyWithWhereWithoutProductInput[] + deleteMany?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + } + + export type ProductSizeStockUncheckedUpdateManyWithoutProductNestedInput = { + create?: XOR | ProductSizeStockCreateWithoutProductInput[] | ProductSizeStockUncheckedCreateWithoutProductInput[] + connectOrCreate?: ProductSizeStockCreateOrConnectWithoutProductInput | ProductSizeStockCreateOrConnectWithoutProductInput[] + upsert?: ProductSizeStockUpsertWithWhereUniqueWithoutProductInput | ProductSizeStockUpsertWithWhereUniqueWithoutProductInput[] + createMany?: ProductSizeStockCreateManyProductInputEnvelope + set?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + disconnect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + delete?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + connect?: ProductSizeStockWhereUniqueInput | ProductSizeStockWhereUniqueInput[] + update?: ProductSizeStockUpdateWithWhereUniqueWithoutProductInput | ProductSizeStockUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: ProductSizeStockUpdateManyWithWhereWithoutProductInput | ProductSizeStockUpdateManyWithWhereWithoutProductInput[] + deleteMany?: ProductSizeStockScalarWhereInput | ProductSizeStockScalarWhereInput[] + } + + export type CartItemUncheckedUpdateManyWithoutProductNestedInput = { + create?: XOR | CartItemCreateWithoutProductInput[] | CartItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: CartItemCreateOrConnectWithoutProductInput | CartItemCreateOrConnectWithoutProductInput[] + upsert?: CartItemUpsertWithWhereUniqueWithoutProductInput | CartItemUpsertWithWhereUniqueWithoutProductInput[] + createMany?: CartItemCreateManyProductInputEnvelope + set?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + disconnect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + delete?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + connect?: CartItemWhereUniqueInput | CartItemWhereUniqueInput[] + update?: CartItemUpdateWithWhereUniqueWithoutProductInput | CartItemUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: CartItemUpdateManyWithWhereWithoutProductInput | CartItemUpdateManyWithWhereWithoutProductInput[] + deleteMany?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + } + + export type OrderItemUncheckedUpdateManyWithoutProductNestedInput = { + create?: XOR | OrderItemCreateWithoutProductInput[] | OrderItemUncheckedCreateWithoutProductInput[] + connectOrCreate?: OrderItemCreateOrConnectWithoutProductInput | OrderItemCreateOrConnectWithoutProductInput[] + upsert?: OrderItemUpsertWithWhereUniqueWithoutProductInput | OrderItemUpsertWithWhereUniqueWithoutProductInput[] + createMany?: OrderItemCreateManyProductInputEnvelope + set?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + disconnect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + delete?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + connect?: OrderItemWhereUniqueInput | OrderItemWhereUniqueInput[] + update?: OrderItemUpdateWithWhereUniqueWithoutProductInput | OrderItemUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: OrderItemUpdateManyWithWhereWithoutProductInput | OrderItemUpdateManyWithWhereWithoutProductInput[] + deleteMany?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + } + + export type ReviewUncheckedUpdateManyWithoutProductNestedInput = { + create?: XOR | ReviewCreateWithoutProductInput[] | ReviewUncheckedCreateWithoutProductInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutProductInput | ReviewCreateOrConnectWithoutProductInput[] + upsert?: ReviewUpsertWithWhereUniqueWithoutProductInput | ReviewUpsertWithWhereUniqueWithoutProductInput[] + createMany?: ReviewCreateManyProductInputEnvelope + set?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + disconnect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + delete?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + update?: ReviewUpdateWithWhereUniqueWithoutProductInput | ReviewUpdateWithWhereUniqueWithoutProductInput[] + updateMany?: ReviewUpdateManyWithWhereWithoutProductInput | ReviewUpdateManyWithWhereWithoutProductInput[] + deleteMany?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + } + + export type ProductCreateNestedOneWithoutSizeStocksInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutSizeStocksInput + connect?: ProductWhereUniqueInput + } + + export type EnumProductSizeFieldUpdateOperationsInput = { + set?: $Enums.ProductSize + } + + export type ProductUpdateOneRequiredWithoutSizeStocksNestedInput = { + create?: XOR + connectOrCreate?: ProductCreateOrConnectWithoutSizeStocksInput + upsert?: ProductUpsertWithoutSizeStocksInput + connect?: ProductWhereUniqueInput + update?: XOR, ProductUncheckedUpdateWithoutSizeStocksInput> + } + + export type AddressCreateNestedManyWithoutUserInput = { + create?: XOR | AddressCreateWithoutUserInput[] | AddressUncheckedCreateWithoutUserInput[] + connectOrCreate?: AddressCreateOrConnectWithoutUserInput | AddressCreateOrConnectWithoutUserInput[] + createMany?: AddressCreateManyUserInputEnvelope + connect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + } + + export type OrderCreateNestedManyWithoutUserInput = { + create?: XOR | OrderCreateWithoutUserInput[] | OrderUncheckedCreateWithoutUserInput[] + connectOrCreate?: OrderCreateOrConnectWithoutUserInput | OrderCreateOrConnectWithoutUserInput[] + createMany?: OrderCreateManyUserInputEnvelope + connect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + } + + export type ReviewCreateNestedManyWithoutUserInput = { + create?: XOR | ReviewCreateWithoutUserInput[] | ReviewUncheckedCreateWithoutUserInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutUserInput | ReviewCreateOrConnectWithoutUserInput[] + createMany?: ReviewCreateManyUserInputEnvelope + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + } + + export type CartCreateNestedOneWithoutUserInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutUserInput + connect?: CartWhereUniqueInput + } + + export type ExternalAccountCreateNestedManyWithoutUserInput = { + create?: XOR | ExternalAccountCreateWithoutUserInput[] | ExternalAccountUncheckedCreateWithoutUserInput[] + connectOrCreate?: ExternalAccountCreateOrConnectWithoutUserInput | ExternalAccountCreateOrConnectWithoutUserInput[] + createMany?: ExternalAccountCreateManyUserInputEnvelope + connect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + } + + export type UserMFAMethodCreateNestedManyWithoutUserInput = { + create?: XOR | UserMFAMethodCreateWithoutUserInput[] | UserMFAMethodUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserMFAMethodCreateOrConnectWithoutUserInput | UserMFAMethodCreateOrConnectWithoutUserInput[] + createMany?: UserMFAMethodCreateManyUserInputEnvelope + connect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + } + + export type MFABackupCodeCreateNestedManyWithoutUserInput = { + create?: XOR | MFABackupCodeCreateWithoutUserInput[] | MFABackupCodeUncheckedCreateWithoutUserInput[] + connectOrCreate?: MFABackupCodeCreateOrConnectWithoutUserInput | MFABackupCodeCreateOrConnectWithoutUserInput[] + createMany?: MFABackupCodeCreateManyUserInputEnvelope + connect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + } + + export type DeviceCreateNestedManyWithoutUserInput = { + create?: XOR | DeviceCreateWithoutUserInput[] | DeviceUncheckedCreateWithoutUserInput[] + connectOrCreate?: DeviceCreateOrConnectWithoutUserInput | DeviceCreateOrConnectWithoutUserInput[] + createMany?: DeviceCreateManyUserInputEnvelope + connect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + } + + export type SessionCreateNestedManyWithoutUserInput = { + create?: XOR | SessionCreateWithoutUserInput[] | SessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: SessionCreateOrConnectWithoutUserInput | SessionCreateOrConnectWithoutUserInput[] + createMany?: SessionCreateManyUserInputEnvelope + connect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + } + + export type BlogPostCreateNestedManyWithoutAuthorInput = { + create?: XOR | BlogPostCreateWithoutAuthorInput[] | BlogPostUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutAuthorInput | BlogPostCreateOrConnectWithoutAuthorInput[] + createMany?: BlogPostCreateManyAuthorInputEnvelope + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + } + + export type BlogCommentCreateNestedManyWithoutAuthorInput = { + create?: XOR | BlogCommentCreateWithoutAuthorInput[] | BlogCommentUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutAuthorInput | BlogCommentCreateOrConnectWithoutAuthorInput[] + createMany?: BlogCommentCreateManyAuthorInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type AddressUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | AddressCreateWithoutUserInput[] | AddressUncheckedCreateWithoutUserInput[] + connectOrCreate?: AddressCreateOrConnectWithoutUserInput | AddressCreateOrConnectWithoutUserInput[] + createMany?: AddressCreateManyUserInputEnvelope + connect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + } + + export type OrderUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | OrderCreateWithoutUserInput[] | OrderUncheckedCreateWithoutUserInput[] + connectOrCreate?: OrderCreateOrConnectWithoutUserInput | OrderCreateOrConnectWithoutUserInput[] + createMany?: OrderCreateManyUserInputEnvelope + connect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + } + + export type ReviewUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | ReviewCreateWithoutUserInput[] | ReviewUncheckedCreateWithoutUserInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutUserInput | ReviewCreateOrConnectWithoutUserInput[] + createMany?: ReviewCreateManyUserInputEnvelope + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + } + + export type CartUncheckedCreateNestedOneWithoutUserInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutUserInput + connect?: CartWhereUniqueInput + } + + export type ExternalAccountUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | ExternalAccountCreateWithoutUserInput[] | ExternalAccountUncheckedCreateWithoutUserInput[] + connectOrCreate?: ExternalAccountCreateOrConnectWithoutUserInput | ExternalAccountCreateOrConnectWithoutUserInput[] + createMany?: ExternalAccountCreateManyUserInputEnvelope + connect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + } + + export type UserMFAMethodUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | UserMFAMethodCreateWithoutUserInput[] | UserMFAMethodUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserMFAMethodCreateOrConnectWithoutUserInput | UserMFAMethodCreateOrConnectWithoutUserInput[] + createMany?: UserMFAMethodCreateManyUserInputEnvelope + connect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + } + + export type MFABackupCodeUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | MFABackupCodeCreateWithoutUserInput[] | MFABackupCodeUncheckedCreateWithoutUserInput[] + connectOrCreate?: MFABackupCodeCreateOrConnectWithoutUserInput | MFABackupCodeCreateOrConnectWithoutUserInput[] + createMany?: MFABackupCodeCreateManyUserInputEnvelope + connect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + } + + export type DeviceUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | DeviceCreateWithoutUserInput[] | DeviceUncheckedCreateWithoutUserInput[] + connectOrCreate?: DeviceCreateOrConnectWithoutUserInput | DeviceCreateOrConnectWithoutUserInput[] + createMany?: DeviceCreateManyUserInputEnvelope + connect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + } + + export type SessionUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | SessionCreateWithoutUserInput[] | SessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: SessionCreateOrConnectWithoutUserInput | SessionCreateOrConnectWithoutUserInput[] + createMany?: SessionCreateManyUserInputEnvelope + connect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + } + + export type BlogPostUncheckedCreateNestedManyWithoutAuthorInput = { + create?: XOR | BlogPostCreateWithoutAuthorInput[] | BlogPostUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutAuthorInput | BlogPostCreateOrConnectWithoutAuthorInput[] + createMany?: BlogPostCreateManyAuthorInputEnvelope + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + } + + export type BlogCommentUncheckedCreateNestedManyWithoutAuthorInput = { + create?: XOR | BlogCommentCreateWithoutAuthorInput[] | BlogCommentUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutAuthorInput | BlogCommentCreateOrConnectWithoutAuthorInput[] + createMany?: BlogCommentCreateManyAuthorInputEnvelope + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + } + + export type EnumUserRoleFieldUpdateOperationsInput = { + set?: $Enums.UserRole + } + + export type AddressUpdateManyWithoutUserNestedInput = { + create?: XOR | AddressCreateWithoutUserInput[] | AddressUncheckedCreateWithoutUserInput[] + connectOrCreate?: AddressCreateOrConnectWithoutUserInput | AddressCreateOrConnectWithoutUserInput[] + upsert?: AddressUpsertWithWhereUniqueWithoutUserInput | AddressUpsertWithWhereUniqueWithoutUserInput[] + createMany?: AddressCreateManyUserInputEnvelope + set?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + disconnect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + delete?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + connect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + update?: AddressUpdateWithWhereUniqueWithoutUserInput | AddressUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: AddressUpdateManyWithWhereWithoutUserInput | AddressUpdateManyWithWhereWithoutUserInput[] + deleteMany?: AddressScalarWhereInput | AddressScalarWhereInput[] + } + + export type OrderUpdateManyWithoutUserNestedInput = { + create?: XOR | OrderCreateWithoutUserInput[] | OrderUncheckedCreateWithoutUserInput[] + connectOrCreate?: OrderCreateOrConnectWithoutUserInput | OrderCreateOrConnectWithoutUserInput[] + upsert?: OrderUpsertWithWhereUniqueWithoutUserInput | OrderUpsertWithWhereUniqueWithoutUserInput[] + createMany?: OrderCreateManyUserInputEnvelope + set?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + disconnect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + delete?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + connect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + update?: OrderUpdateWithWhereUniqueWithoutUserInput | OrderUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: OrderUpdateManyWithWhereWithoutUserInput | OrderUpdateManyWithWhereWithoutUserInput[] + deleteMany?: OrderScalarWhereInput | OrderScalarWhereInput[] + } + + export type ReviewUpdateManyWithoutUserNestedInput = { + create?: XOR | ReviewCreateWithoutUserInput[] | ReviewUncheckedCreateWithoutUserInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutUserInput | ReviewCreateOrConnectWithoutUserInput[] + upsert?: ReviewUpsertWithWhereUniqueWithoutUserInput | ReviewUpsertWithWhereUniqueWithoutUserInput[] + createMany?: ReviewCreateManyUserInputEnvelope + set?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + disconnect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + delete?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + update?: ReviewUpdateWithWhereUniqueWithoutUserInput | ReviewUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: ReviewUpdateManyWithWhereWithoutUserInput | ReviewUpdateManyWithWhereWithoutUserInput[] + deleteMany?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + } + + export type CartUpdateOneWithoutUserNestedInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutUserInput + upsert?: CartUpsertWithoutUserInput + disconnect?: CartWhereInput | boolean + delete?: CartWhereInput | boolean + connect?: CartWhereUniqueInput + update?: XOR, CartUncheckedUpdateWithoutUserInput> + } + + export type ExternalAccountUpdateManyWithoutUserNestedInput = { + create?: XOR | ExternalAccountCreateWithoutUserInput[] | ExternalAccountUncheckedCreateWithoutUserInput[] + connectOrCreate?: ExternalAccountCreateOrConnectWithoutUserInput | ExternalAccountCreateOrConnectWithoutUserInput[] + upsert?: ExternalAccountUpsertWithWhereUniqueWithoutUserInput | ExternalAccountUpsertWithWhereUniqueWithoutUserInput[] + createMany?: ExternalAccountCreateManyUserInputEnvelope + set?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + disconnect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + delete?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + connect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + update?: ExternalAccountUpdateWithWhereUniqueWithoutUserInput | ExternalAccountUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: ExternalAccountUpdateManyWithWhereWithoutUserInput | ExternalAccountUpdateManyWithWhereWithoutUserInput[] + deleteMany?: ExternalAccountScalarWhereInput | ExternalAccountScalarWhereInput[] + } + + export type UserMFAMethodUpdateManyWithoutUserNestedInput = { + create?: XOR | UserMFAMethodCreateWithoutUserInput[] | UserMFAMethodUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserMFAMethodCreateOrConnectWithoutUserInput | UserMFAMethodCreateOrConnectWithoutUserInput[] + upsert?: UserMFAMethodUpsertWithWhereUniqueWithoutUserInput | UserMFAMethodUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserMFAMethodCreateManyUserInputEnvelope + set?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + disconnect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + delete?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + connect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + update?: UserMFAMethodUpdateWithWhereUniqueWithoutUserInput | UserMFAMethodUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserMFAMethodUpdateManyWithWhereWithoutUserInput | UserMFAMethodUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserMFAMethodScalarWhereInput | UserMFAMethodScalarWhereInput[] + } + + export type MFABackupCodeUpdateManyWithoutUserNestedInput = { + create?: XOR | MFABackupCodeCreateWithoutUserInput[] | MFABackupCodeUncheckedCreateWithoutUserInput[] + connectOrCreate?: MFABackupCodeCreateOrConnectWithoutUserInput | MFABackupCodeCreateOrConnectWithoutUserInput[] + upsert?: MFABackupCodeUpsertWithWhereUniqueWithoutUserInput | MFABackupCodeUpsertWithWhereUniqueWithoutUserInput[] + createMany?: MFABackupCodeCreateManyUserInputEnvelope + set?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + disconnect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + delete?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + connect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + update?: MFABackupCodeUpdateWithWhereUniqueWithoutUserInput | MFABackupCodeUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: MFABackupCodeUpdateManyWithWhereWithoutUserInput | MFABackupCodeUpdateManyWithWhereWithoutUserInput[] + deleteMany?: MFABackupCodeScalarWhereInput | MFABackupCodeScalarWhereInput[] + } + + export type DeviceUpdateManyWithoutUserNestedInput = { + create?: XOR | DeviceCreateWithoutUserInput[] | DeviceUncheckedCreateWithoutUserInput[] + connectOrCreate?: DeviceCreateOrConnectWithoutUserInput | DeviceCreateOrConnectWithoutUserInput[] + upsert?: DeviceUpsertWithWhereUniqueWithoutUserInput | DeviceUpsertWithWhereUniqueWithoutUserInput[] + createMany?: DeviceCreateManyUserInputEnvelope + set?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + disconnect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + delete?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + connect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + update?: DeviceUpdateWithWhereUniqueWithoutUserInput | DeviceUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: DeviceUpdateManyWithWhereWithoutUserInput | DeviceUpdateManyWithWhereWithoutUserInput[] + deleteMany?: DeviceScalarWhereInput | DeviceScalarWhereInput[] + } + + export type SessionUpdateManyWithoutUserNestedInput = { + create?: XOR | SessionCreateWithoutUserInput[] | SessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: SessionCreateOrConnectWithoutUserInput | SessionCreateOrConnectWithoutUserInput[] + upsert?: SessionUpsertWithWhereUniqueWithoutUserInput | SessionUpsertWithWhereUniqueWithoutUserInput[] + createMany?: SessionCreateManyUserInputEnvelope + set?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + disconnect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + delete?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + connect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + update?: SessionUpdateWithWhereUniqueWithoutUserInput | SessionUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: SessionUpdateManyWithWhereWithoutUserInput | SessionUpdateManyWithWhereWithoutUserInput[] + deleteMany?: SessionScalarWhereInput | SessionScalarWhereInput[] + } + + export type BlogPostUpdateManyWithoutAuthorNestedInput = { + create?: XOR | BlogPostCreateWithoutAuthorInput[] | BlogPostUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutAuthorInput | BlogPostCreateOrConnectWithoutAuthorInput[] + upsert?: BlogPostUpsertWithWhereUniqueWithoutAuthorInput | BlogPostUpsertWithWhereUniqueWithoutAuthorInput[] + createMany?: BlogPostCreateManyAuthorInputEnvelope + set?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + disconnect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + delete?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + update?: BlogPostUpdateWithWhereUniqueWithoutAuthorInput | BlogPostUpdateWithWhereUniqueWithoutAuthorInput[] + updateMany?: BlogPostUpdateManyWithWhereWithoutAuthorInput | BlogPostUpdateManyWithWhereWithoutAuthorInput[] + deleteMany?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + } + + export type BlogCommentUpdateManyWithoutAuthorNestedInput = { + create?: XOR | BlogCommentCreateWithoutAuthorInput[] | BlogCommentUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutAuthorInput | BlogCommentCreateOrConnectWithoutAuthorInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutAuthorInput | BlogCommentUpsertWithWhereUniqueWithoutAuthorInput[] + createMany?: BlogCommentCreateManyAuthorInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutAuthorInput | BlogCommentUpdateWithWhereUniqueWithoutAuthorInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutAuthorInput | BlogCommentUpdateManyWithWhereWithoutAuthorInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type AddressUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | AddressCreateWithoutUserInput[] | AddressUncheckedCreateWithoutUserInput[] + connectOrCreate?: AddressCreateOrConnectWithoutUserInput | AddressCreateOrConnectWithoutUserInput[] + upsert?: AddressUpsertWithWhereUniqueWithoutUserInput | AddressUpsertWithWhereUniqueWithoutUserInput[] + createMany?: AddressCreateManyUserInputEnvelope + set?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + disconnect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + delete?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + connect?: AddressWhereUniqueInput | AddressWhereUniqueInput[] + update?: AddressUpdateWithWhereUniqueWithoutUserInput | AddressUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: AddressUpdateManyWithWhereWithoutUserInput | AddressUpdateManyWithWhereWithoutUserInput[] + deleteMany?: AddressScalarWhereInput | AddressScalarWhereInput[] + } + + export type OrderUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | OrderCreateWithoutUserInput[] | OrderUncheckedCreateWithoutUserInput[] + connectOrCreate?: OrderCreateOrConnectWithoutUserInput | OrderCreateOrConnectWithoutUserInput[] + upsert?: OrderUpsertWithWhereUniqueWithoutUserInput | OrderUpsertWithWhereUniqueWithoutUserInput[] + createMany?: OrderCreateManyUserInputEnvelope + set?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + disconnect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + delete?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + connect?: OrderWhereUniqueInput | OrderWhereUniqueInput[] + update?: OrderUpdateWithWhereUniqueWithoutUserInput | OrderUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: OrderUpdateManyWithWhereWithoutUserInput | OrderUpdateManyWithWhereWithoutUserInput[] + deleteMany?: OrderScalarWhereInput | OrderScalarWhereInput[] + } + + export type ReviewUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | ReviewCreateWithoutUserInput[] | ReviewUncheckedCreateWithoutUserInput[] + connectOrCreate?: ReviewCreateOrConnectWithoutUserInput | ReviewCreateOrConnectWithoutUserInput[] + upsert?: ReviewUpsertWithWhereUniqueWithoutUserInput | ReviewUpsertWithWhereUniqueWithoutUserInput[] + createMany?: ReviewCreateManyUserInputEnvelope + set?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + disconnect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + delete?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + connect?: ReviewWhereUniqueInput | ReviewWhereUniqueInput[] + update?: ReviewUpdateWithWhereUniqueWithoutUserInput | ReviewUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: ReviewUpdateManyWithWhereWithoutUserInput | ReviewUpdateManyWithWhereWithoutUserInput[] + deleteMany?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + } + + export type CartUncheckedUpdateOneWithoutUserNestedInput = { + create?: XOR + connectOrCreate?: CartCreateOrConnectWithoutUserInput + upsert?: CartUpsertWithoutUserInput + disconnect?: CartWhereInput | boolean + delete?: CartWhereInput | boolean + connect?: CartWhereUniqueInput + update?: XOR, CartUncheckedUpdateWithoutUserInput> + } + + export type ExternalAccountUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | ExternalAccountCreateWithoutUserInput[] | ExternalAccountUncheckedCreateWithoutUserInput[] + connectOrCreate?: ExternalAccountCreateOrConnectWithoutUserInput | ExternalAccountCreateOrConnectWithoutUserInput[] + upsert?: ExternalAccountUpsertWithWhereUniqueWithoutUserInput | ExternalAccountUpsertWithWhereUniqueWithoutUserInput[] + createMany?: ExternalAccountCreateManyUserInputEnvelope + set?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + disconnect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + delete?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + connect?: ExternalAccountWhereUniqueInput | ExternalAccountWhereUniqueInput[] + update?: ExternalAccountUpdateWithWhereUniqueWithoutUserInput | ExternalAccountUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: ExternalAccountUpdateManyWithWhereWithoutUserInput | ExternalAccountUpdateManyWithWhereWithoutUserInput[] + deleteMany?: ExternalAccountScalarWhereInput | ExternalAccountScalarWhereInput[] + } + + export type UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | UserMFAMethodCreateWithoutUserInput[] | UserMFAMethodUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserMFAMethodCreateOrConnectWithoutUserInput | UserMFAMethodCreateOrConnectWithoutUserInput[] + upsert?: UserMFAMethodUpsertWithWhereUniqueWithoutUserInput | UserMFAMethodUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserMFAMethodCreateManyUserInputEnvelope + set?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + disconnect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + delete?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + connect?: UserMFAMethodWhereUniqueInput | UserMFAMethodWhereUniqueInput[] + update?: UserMFAMethodUpdateWithWhereUniqueWithoutUserInput | UserMFAMethodUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserMFAMethodUpdateManyWithWhereWithoutUserInput | UserMFAMethodUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserMFAMethodScalarWhereInput | UserMFAMethodScalarWhereInput[] + } + + export type MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | MFABackupCodeCreateWithoutUserInput[] | MFABackupCodeUncheckedCreateWithoutUserInput[] + connectOrCreate?: MFABackupCodeCreateOrConnectWithoutUserInput | MFABackupCodeCreateOrConnectWithoutUserInput[] + upsert?: MFABackupCodeUpsertWithWhereUniqueWithoutUserInput | MFABackupCodeUpsertWithWhereUniqueWithoutUserInput[] + createMany?: MFABackupCodeCreateManyUserInputEnvelope + set?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + disconnect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + delete?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + connect?: MFABackupCodeWhereUniqueInput | MFABackupCodeWhereUniqueInput[] + update?: MFABackupCodeUpdateWithWhereUniqueWithoutUserInput | MFABackupCodeUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: MFABackupCodeUpdateManyWithWhereWithoutUserInput | MFABackupCodeUpdateManyWithWhereWithoutUserInput[] + deleteMany?: MFABackupCodeScalarWhereInput | MFABackupCodeScalarWhereInput[] + } + + export type DeviceUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | DeviceCreateWithoutUserInput[] | DeviceUncheckedCreateWithoutUserInput[] + connectOrCreate?: DeviceCreateOrConnectWithoutUserInput | DeviceCreateOrConnectWithoutUserInput[] + upsert?: DeviceUpsertWithWhereUniqueWithoutUserInput | DeviceUpsertWithWhereUniqueWithoutUserInput[] + createMany?: DeviceCreateManyUserInputEnvelope + set?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + disconnect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + delete?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + connect?: DeviceWhereUniqueInput | DeviceWhereUniqueInput[] + update?: DeviceUpdateWithWhereUniqueWithoutUserInput | DeviceUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: DeviceUpdateManyWithWhereWithoutUserInput | DeviceUpdateManyWithWhereWithoutUserInput[] + deleteMany?: DeviceScalarWhereInput | DeviceScalarWhereInput[] + } + + export type SessionUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | SessionCreateWithoutUserInput[] | SessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: SessionCreateOrConnectWithoutUserInput | SessionCreateOrConnectWithoutUserInput[] + upsert?: SessionUpsertWithWhereUniqueWithoutUserInput | SessionUpsertWithWhereUniqueWithoutUserInput[] + createMany?: SessionCreateManyUserInputEnvelope + set?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + disconnect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + delete?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + connect?: SessionWhereUniqueInput | SessionWhereUniqueInput[] + update?: SessionUpdateWithWhereUniqueWithoutUserInput | SessionUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: SessionUpdateManyWithWhereWithoutUserInput | SessionUpdateManyWithWhereWithoutUserInput[] + deleteMany?: SessionScalarWhereInput | SessionScalarWhereInput[] + } + + export type BlogPostUncheckedUpdateManyWithoutAuthorNestedInput = { + create?: XOR | BlogPostCreateWithoutAuthorInput[] | BlogPostUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogPostCreateOrConnectWithoutAuthorInput | BlogPostCreateOrConnectWithoutAuthorInput[] + upsert?: BlogPostUpsertWithWhereUniqueWithoutAuthorInput | BlogPostUpsertWithWhereUniqueWithoutAuthorInput[] + createMany?: BlogPostCreateManyAuthorInputEnvelope + set?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + disconnect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + delete?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + connect?: BlogPostWhereUniqueInput | BlogPostWhereUniqueInput[] + update?: BlogPostUpdateWithWhereUniqueWithoutAuthorInput | BlogPostUpdateWithWhereUniqueWithoutAuthorInput[] + updateMany?: BlogPostUpdateManyWithWhereWithoutAuthorInput | BlogPostUpdateManyWithWhereWithoutAuthorInput[] + deleteMany?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + } + + export type BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput = { + create?: XOR | BlogCommentCreateWithoutAuthorInput[] | BlogCommentUncheckedCreateWithoutAuthorInput[] + connectOrCreate?: BlogCommentCreateOrConnectWithoutAuthorInput | BlogCommentCreateOrConnectWithoutAuthorInput[] + upsert?: BlogCommentUpsertWithWhereUniqueWithoutAuthorInput | BlogCommentUpsertWithWhereUniqueWithoutAuthorInput[] + createMany?: BlogCommentCreateManyAuthorInputEnvelope + set?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + disconnect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + delete?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + connect?: BlogCommentWhereUniqueInput | BlogCommentWhereUniqueInput[] + update?: BlogCommentUpdateWithWhereUniqueWithoutAuthorInput | BlogCommentUpdateWithWhereUniqueWithoutAuthorInput[] + updateMany?: BlogCommentUpdateManyWithWhereWithoutAuthorInput | BlogCommentUpdateManyWithWhereWithoutAuthorInput[] + deleteMany?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + } + + export type UserCreateNestedOneWithoutAddressesInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutAddressesInput + connect?: UserWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutAddressesNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutAddressesInput + upsert?: UserUpsertWithoutAddressesInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutAddressesInput> + } + + 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> + search?: string + not?: NestedStringFilter<$PrismaModel> | string + } + + export type NestedEnumOAuthProviderFilter<$PrismaModel = never> = { + equals?: $Enums.OAuthProvider | EnumOAuthProviderFieldRefInput<$PrismaModel> + in?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + not?: NestedEnumOAuthProviderFilter<$PrismaModel> | $Enums.OAuthProvider + } + + 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> + search?: string + not?: NestedStringNullableFilter<$PrismaModel> | string | null + } + + export type NestedDateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null + in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + lt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null + } + + export type NestedDateTimeFilter<$PrismaModel = never> = { + equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> + in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> + notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> + lt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + not?: NestedDateTimeFilter<$PrismaModel> | Date | string + } + + export type NestedStringWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | StringFieldRefInput<$PrismaModel> + in?: string[] | ListStringFieldRefInput<$PrismaModel> + notIn?: string[] | ListStringFieldRefInput<$PrismaModel> + lt?: string | StringFieldRefInput<$PrismaModel> + lte?: string | StringFieldRefInput<$PrismaModel> + gt?: string | StringFieldRefInput<$PrismaModel> + gte?: string | StringFieldRefInput<$PrismaModel> + contains?: string | StringFieldRefInput<$PrismaModel> + startsWith?: string | StringFieldRefInput<$PrismaModel> + endsWith?: string | StringFieldRefInput<$PrismaModel> + search?: string + 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 NestedEnumOAuthProviderWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.OAuthProvider | EnumOAuthProviderFieldRefInput<$PrismaModel> + in?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + notIn?: $Enums.OAuthProvider[] | ListEnumOAuthProviderFieldRefInput<$PrismaModel> + not?: NestedEnumOAuthProviderWithAggregatesFilter<$PrismaModel> | $Enums.OAuthProvider + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumOAuthProviderFilter<$PrismaModel> + _max?: NestedEnumOAuthProviderFilter<$PrismaModel> + } + + export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: string | StringFieldRefInput<$PrismaModel> | null + in?: string[] | ListStringFieldRefInput<$PrismaModel> | null + notIn?: string[] | ListStringFieldRefInput<$PrismaModel> | null + lt?: string | StringFieldRefInput<$PrismaModel> + lte?: string | StringFieldRefInput<$PrismaModel> + gt?: string | StringFieldRefInput<$PrismaModel> + gte?: string | StringFieldRefInput<$PrismaModel> + contains?: string | StringFieldRefInput<$PrismaModel> + startsWith?: string | StringFieldRefInput<$PrismaModel> + endsWith?: string | StringFieldRefInput<$PrismaModel> + search?: string + not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedStringNullableFilter<$PrismaModel> + _max?: NestedStringNullableFilter<$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 NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null + in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + lt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + not?: NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedDateTimeNullableFilter<$PrismaModel> + _max?: NestedDateTimeNullableFilter<$PrismaModel> + } + + export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { + equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> + in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> + notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> + lt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + not?: NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedDateTimeFilter<$PrismaModel> + _max?: NestedDateTimeFilter<$PrismaModel> + } + + export type NestedEnumMFAMethodFilter<$PrismaModel = never> = { + equals?: $Enums.MFAMethod | EnumMFAMethodFieldRefInput<$PrismaModel> + in?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + notIn?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + not?: NestedEnumMFAMethodFilter<$PrismaModel> | $Enums.MFAMethod + } + + export type NestedBoolFilter<$PrismaModel = never> = { + equals?: boolean | BooleanFieldRefInput<$PrismaModel> + not?: NestedBoolFilter<$PrismaModel> | boolean + } + + export type NestedEnumMFAMethodWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.MFAMethod | EnumMFAMethodFieldRefInput<$PrismaModel> + in?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + notIn?: $Enums.MFAMethod[] | ListEnumMFAMethodFieldRefInput<$PrismaModel> + not?: NestedEnumMFAMethodWithAggregatesFilter<$PrismaModel> | $Enums.MFAMethod + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumMFAMethodFilter<$PrismaModel> + _max?: NestedEnumMFAMethodFilter<$PrismaModel> + } + + export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = { + equals?: boolean | BooleanFieldRefInput<$PrismaModel> + not?: NestedBoolWithAggregatesFilter<$PrismaModel> | boolean + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedBoolFilter<$PrismaModel> + _max?: NestedBoolFilter<$PrismaModel> + } + + export type NestedEnumDeviceTypeFilter<$PrismaModel = never> = { + equals?: $Enums.DeviceType | EnumDeviceTypeFieldRefInput<$PrismaModel> + in?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDeviceTypeFilter<$PrismaModel> | $Enums.DeviceType + } + + export type NestedEnumDeviceTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.DeviceType | EnumDeviceTypeFieldRefInput<$PrismaModel> + in?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DeviceType[] | ListEnumDeviceTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDeviceTypeWithAggregatesFilter<$PrismaModel> | $Enums.DeviceType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumDeviceTypeFilter<$PrismaModel> + _max?: NestedEnumDeviceTypeFilter<$PrismaModel> + } + + export type NestedEnumSessionStatusFilter<$PrismaModel = never> = { + equals?: $Enums.SessionStatus | EnumSessionStatusFieldRefInput<$PrismaModel> + in?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumSessionStatusFilter<$PrismaModel> | $Enums.SessionStatus + } + + export type NestedEnumSessionStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.SessionStatus | EnumSessionStatusFieldRefInput<$PrismaModel> + in?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.SessionStatus[] | ListEnumSessionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumSessionStatusWithAggregatesFilter<$PrismaModel> | $Enums.SessionStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumSessionStatusFilter<$PrismaModel> + _max?: NestedEnumSessionStatusFilter<$PrismaModel> + } + + export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedIntNullableFilter<$PrismaModel> + _max?: NestedIntNullableFilter<$PrismaModel> + } + + export type NestedFloatNullableFilter<$PrismaModel = never> = { + equals?: number | FloatFieldRefInput<$PrismaModel> | null + in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + lt?: number | FloatFieldRefInput<$PrismaModel> + lte?: number | FloatFieldRefInput<$PrismaModel> + gt?: number | FloatFieldRefInput<$PrismaModel> + gte?: number | FloatFieldRefInput<$PrismaModel> + not?: NestedFloatNullableFilter<$PrismaModel> | number | null + } + + export type 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 NestedEnumEventTypeFilter<$PrismaModel = never> = { + equals?: $Enums.EventType | EnumEventTypeFieldRefInput<$PrismaModel> + in?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + not?: NestedEnumEventTypeFilter<$PrismaModel> | $Enums.EventType + } + + export type NestedEnumEventTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.EventType | EnumEventTypeFieldRefInput<$PrismaModel> + in?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.EventType[] | ListEnumEventTypeFieldRefInput<$PrismaModel> + not?: NestedEnumEventTypeWithAggregatesFilter<$PrismaModel> | $Enums.EventType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumEventTypeFilter<$PrismaModel> + _max?: NestedEnumEventTypeFilter<$PrismaModel> + } + + export type NestedEnumDiscountTypeFilter<$PrismaModel = never> = { + equals?: $Enums.DiscountType | EnumDiscountTypeFieldRefInput<$PrismaModel> + in?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDiscountTypeFilter<$PrismaModel> | $Enums.DiscountType + } + + export type NestedDecimalFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string + } + + export type NestedDecimalNullableFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalNullableFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null + } + + export type NestedEnumDiscountTypeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.DiscountType | EnumDiscountTypeFieldRefInput<$PrismaModel> + in?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + notIn?: $Enums.DiscountType[] | ListEnumDiscountTypeFieldRefInput<$PrismaModel> + not?: NestedEnumDiscountTypeWithAggregatesFilter<$PrismaModel> | $Enums.DiscountType + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumDiscountTypeFilter<$PrismaModel> + _max?: NestedEnumDiscountTypeFilter<$PrismaModel> + } + + export type NestedDecimalWithAggregatesFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string + _count?: NestedIntFilter<$PrismaModel> + _avg?: NestedDecimalFilter<$PrismaModel> + _sum?: NestedDecimalFilter<$PrismaModel> + _min?: NestedDecimalFilter<$PrismaModel> + _max?: NestedDecimalFilter<$PrismaModel> + } + + export type NestedDecimalNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null + in?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | ListDecimalFieldRefInput<$PrismaModel> | null + lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> + not?: NestedDecimalNullableWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedDecimalNullableFilter<$PrismaModel> + _sum?: NestedDecimalNullableFilter<$PrismaModel> + _min?: NestedDecimalNullableFilter<$PrismaModel> + _max?: NestedDecimalNullableFilter<$PrismaModel> + } + + export type NestedEnumProductSizeNullableFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> | null + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + not?: NestedEnumProductSizeNullableFilter<$PrismaModel> | $Enums.ProductSize | null + } + + export type NestedEnumProductSizeNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> | null + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> | null + not?: NestedEnumProductSizeNullableWithAggregatesFilter<$PrismaModel> | $Enums.ProductSize | null + _count?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedEnumProductSizeNullableFilter<$PrismaModel> + _max?: NestedEnumProductSizeNullableFilter<$PrismaModel> + } + + export type NestedEnumOrderStatusFilter<$PrismaModel = never> = { + equals?: $Enums.OrderStatus | EnumOrderStatusFieldRefInput<$PrismaModel> + in?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + not?: NestedEnumOrderStatusFilter<$PrismaModel> | $Enums.OrderStatus + } + + export type NestedEnumPaymentStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentStatusFilter<$PrismaModel> | $Enums.PaymentStatus + } + + export type NestedEnumOrderStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.OrderStatus | EnumOrderStatusFieldRefInput<$PrismaModel> + in?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.OrderStatus[] | ListEnumOrderStatusFieldRefInput<$PrismaModel> + not?: NestedEnumOrderStatusWithAggregatesFilter<$PrismaModel> | $Enums.OrderStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumOrderStatusFilter<$PrismaModel> + _max?: NestedEnumOrderStatusFilter<$PrismaModel> + } + + export type NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentStatus | EnumPaymentStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentStatus[] | ListEnumPaymentStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumPaymentStatusFilter<$PrismaModel> + _max?: NestedEnumPaymentStatusFilter<$PrismaModel> + } + + export type NestedEnumProductSlugFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSlug | EnumProductSlugFieldRefInput<$PrismaModel> + in?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + not?: NestedEnumProductSlugFilter<$PrismaModel> | $Enums.ProductSlug + } + + export type NestedEnumProductSlugWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSlug | EnumProductSlugFieldRefInput<$PrismaModel> + in?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSlug[] | ListEnumProductSlugFieldRefInput<$PrismaModel> + not?: NestedEnumProductSlugWithAggregatesFilter<$PrismaModel> | $Enums.ProductSlug + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumProductSlugFilter<$PrismaModel> + _max?: NestedEnumProductSlugFilter<$PrismaModel> + } + + export type NestedEnumPaymentTransactionStatusFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentTransactionStatus | EnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> | $Enums.PaymentTransactionStatus + } + + export type NestedEnumPaymentTransactionStatusWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.PaymentTransactionStatus | EnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + in?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + notIn?: $Enums.PaymentTransactionStatus[] | ListEnumPaymentTransactionStatusFieldRefInput<$PrismaModel> + not?: NestedEnumPaymentTransactionStatusWithAggregatesFilter<$PrismaModel> | $Enums.PaymentTransactionStatus + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> + _max?: NestedEnumPaymentTransactionStatusFilter<$PrismaModel> + } + export type NestedJsonNullableFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, Exclude>, 'path'>>, + Required> + > + | OptionalFlat>, 'path'>> + + export type NestedJsonNullableFilterBase<$PrismaModel = never> = { + equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + path?: string[] + mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel> + string_contains?: string | StringFieldRefInput<$PrismaModel> + string_starts_with?: string | StringFieldRefInput<$PrismaModel> + string_ends_with?: string | StringFieldRefInput<$PrismaModel> + array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null + lt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + lte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gt?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + gte?: InputJsonValue | JsonFieldRefInput<$PrismaModel> + not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter + } + + export type NestedEnumProductSizeFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + not?: NestedEnumProductSizeFilter<$PrismaModel> | $Enums.ProductSize + } + + export type NestedEnumProductSizeWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.ProductSize | EnumProductSizeFieldRefInput<$PrismaModel> + in?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + notIn?: $Enums.ProductSize[] | ListEnumProductSizeFieldRefInput<$PrismaModel> + not?: NestedEnumProductSizeWithAggregatesFilter<$PrismaModel> | $Enums.ProductSize + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumProductSizeFilter<$PrismaModel> + _max?: NestedEnumProductSizeFilter<$PrismaModel> + } + + export type NestedEnumUserRoleFilter<$PrismaModel = never> = { + equals?: $Enums.UserRole | EnumUserRoleFieldRefInput<$PrismaModel> + in?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + notIn?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + not?: NestedEnumUserRoleFilter<$PrismaModel> | $Enums.UserRole + } + + export type NestedEnumUserRoleWithAggregatesFilter<$PrismaModel = never> = { + equals?: $Enums.UserRole | EnumUserRoleFieldRefInput<$PrismaModel> + in?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + notIn?: $Enums.UserRole[] | ListEnumUserRoleFieldRefInput<$PrismaModel> + not?: NestedEnumUserRoleWithAggregatesFilter<$PrismaModel> | $Enums.UserRole + _count?: NestedIntFilter<$PrismaModel> + _min?: NestedEnumUserRoleFilter<$PrismaModel> + _max?: NestedEnumUserRoleFilter<$PrismaModel> + } + + export type UserCreateWithoutExternalAccountsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutExternalAccountsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutExternalAccountsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutExternalAccountsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutExternalAccountsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutExternalAccountsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutExternalAccountsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type UserCreateWithoutMfaMethodsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutMfaMethodsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutMfaMethodsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutMfaMethodsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutMfaMethodsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutMfaMethodsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutMfaMethodsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type UserCreateWithoutMfaBackupCodesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutMfaBackupCodesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutMfaBackupCodesInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutMfaBackupCodesInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutMfaBackupCodesInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutMfaBackupCodesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutMfaBackupCodesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type UserCreateWithoutDevicesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutDevicesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutDevicesInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type SessionCreateWithoutDeviceInput = { + id?: string + token: string + refreshToken?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutSessionsInput + } + + export type SessionUncheckedCreateWithoutDeviceInput = { + id?: string + token: string + refreshToken?: string | null + userId: string + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type SessionCreateOrConnectWithoutDeviceInput = { + where: SessionWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutDevicesInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutDevicesInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutDevicesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutDevicesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type SessionUpsertWithoutDeviceInput = { + update: XOR + create: XOR + where?: SessionWhereInput + } + + export type SessionUpdateToOneWithWhereWithoutDeviceInput = { + where?: SessionWhereInput + data: XOR + } + + export type SessionUpdateWithoutDeviceInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutSessionsNestedInput + } + + export type SessionUncheckedUpdateWithoutDeviceInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserCreateWithoutSessionsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutSessionsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutSessionsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type DeviceCreateWithoutSessionInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + user: UserCreateNestedOneWithoutDevicesInput + } + + export type DeviceUncheckedCreateWithoutSessionInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + userId: string + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + } + + export type DeviceCreateOrConnectWithoutSessionInput = { + where: DeviceWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutSessionsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutSessionsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutSessionsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutSessionsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type DeviceUpsertWithoutSessionInput = { + update: XOR + create: XOR + where?: DeviceWhereInput + } + + export type DeviceUpdateToOneWithWhereWithoutSessionInput = { + where?: DeviceWhereInput + data: XOR + } + + export type DeviceUpdateWithoutSessionInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutDevicesNestedInput + } + + export type DeviceUncheckedUpdateWithoutSessionInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserCreateWithoutBlogPostsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutBlogPostsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutBlogPostsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type BlogTagCreateWithoutPostsInput = { + id?: string + name: string + slug: string + } + + export type BlogTagUncheckedCreateWithoutPostsInput = { + id?: string + name: string + slug: string + } + + export type BlogTagCreateOrConnectWithoutPostsInput = { + where: BlogTagWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateWithoutPostInput = { + id?: string + content: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + author: UserCreateNestedOneWithoutBlogCommentsInput + parent?: BlogCommentCreateNestedOneWithoutRepliesInput + replies?: BlogCommentCreateNestedManyWithoutParentInput + } + + export type BlogCommentUncheckedCreateWithoutPostInput = { + id?: string + content: string + authorId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + replies?: BlogCommentUncheckedCreateNestedManyWithoutParentInput + } + + export type BlogCommentCreateOrConnectWithoutPostInput = { + where: BlogCommentWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateManyPostInputEnvelope = { + data: BlogCommentCreateManyPostInput | BlogCommentCreateManyPostInput[] + skipDuplicates?: boolean + } + + export type UserUpsertWithoutBlogPostsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutBlogPostsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutBlogPostsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutBlogPostsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type BlogTagUpsertWithWhereUniqueWithoutPostsInput = { + where: BlogTagWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogTagUpdateWithWhereUniqueWithoutPostsInput = { + where: BlogTagWhereUniqueInput + data: XOR + } + + export type BlogTagUpdateManyWithWhereWithoutPostsInput = { + where: BlogTagScalarWhereInput + data: XOR + } + + export type BlogTagScalarWhereInput = { + AND?: BlogTagScalarWhereInput | BlogTagScalarWhereInput[] + OR?: BlogTagScalarWhereInput[] + NOT?: BlogTagScalarWhereInput | BlogTagScalarWhereInput[] + id?: StringFilter<"BlogTag"> | string + name?: StringFilter<"BlogTag"> | string + slug?: StringFilter<"BlogTag"> | string + } + + export type BlogCommentUpsertWithWhereUniqueWithoutPostInput = { + where: BlogCommentWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogCommentUpdateWithWhereUniqueWithoutPostInput = { + where: BlogCommentWhereUniqueInput + data: XOR + } + + export type BlogCommentUpdateManyWithWhereWithoutPostInput = { + where: BlogCommentScalarWhereInput + data: XOR + } + + export type BlogCommentScalarWhereInput = { + AND?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + OR?: BlogCommentScalarWhereInput[] + NOT?: BlogCommentScalarWhereInput | BlogCommentScalarWhereInput[] + id?: StringFilter<"BlogComment"> | string + content?: StringFilter<"BlogComment"> | string + postId?: StringFilter<"BlogComment"> | string + authorId?: StringFilter<"BlogComment"> | string + parentId?: StringNullableFilter<"BlogComment"> | string | null + isApproved?: BoolFilter<"BlogComment"> | boolean + createdAt?: DateTimeFilter<"BlogComment"> | Date | string + updatedAt?: DateTimeFilter<"BlogComment"> | Date | string + } + + export type BlogPostCreateWithoutTagsInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + author: UserCreateNestedOneWithoutBlogPostsInput + comments?: BlogCommentCreateNestedManyWithoutPostInput + } + + export type BlogPostUncheckedCreateWithoutTagsInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + authorId: string + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + comments?: BlogCommentUncheckedCreateNestedManyWithoutPostInput + } + + export type BlogPostCreateOrConnectWithoutTagsInput = { + where: BlogPostWhereUniqueInput + create: XOR + } + + export type BlogPostUpsertWithWhereUniqueWithoutTagsInput = { + where: BlogPostWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogPostUpdateWithWhereUniqueWithoutTagsInput = { + where: BlogPostWhereUniqueInput + data: XOR + } + + export type BlogPostUpdateManyWithWhereWithoutTagsInput = { + where: BlogPostScalarWhereInput + data: XOR + } + + export type BlogPostScalarWhereInput = { + AND?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + OR?: BlogPostScalarWhereInput[] + NOT?: BlogPostScalarWhereInput | BlogPostScalarWhereInput[] + id?: StringFilter<"BlogPost"> | string + slug?: StringFilter<"BlogPost"> | string + title?: StringFilter<"BlogPost"> | string + contentKey?: StringFilter<"BlogPost"> | string + contentSize?: IntNullableFilter<"BlogPost"> | number | null + excerpt?: StringNullableFilter<"BlogPost"> | string | null + coverImage?: StringNullableFilter<"BlogPost"> | string | null + authorId?: StringFilter<"BlogPost"> | string + isPublished?: BoolFilter<"BlogPost"> | boolean + publishedAt?: DateTimeNullableFilter<"BlogPost"> | Date | string | null + viewCount?: IntFilter<"BlogPost"> | number + metaTitle?: StringNullableFilter<"BlogPost"> | string | null + metaDescription?: StringNullableFilter<"BlogPost"> | string | null + createdAt?: DateTimeFilter<"BlogPost"> | Date | string + updatedAt?: DateTimeFilter<"BlogPost"> | Date | string + } + + export type BlogPostCreateWithoutCommentsInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + author: UserCreateNestedOneWithoutBlogPostsInput + tags?: BlogTagCreateNestedManyWithoutPostsInput + } + + export type BlogPostUncheckedCreateWithoutCommentsInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + authorId: string + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + tags?: BlogTagUncheckedCreateNestedManyWithoutPostsInput + } + + export type BlogPostCreateOrConnectWithoutCommentsInput = { + where: BlogPostWhereUniqueInput + create: XOR + } + + export type UserCreateWithoutBlogCommentsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutBlogCommentsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutBlogCommentsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateWithoutRepliesInput = { + id?: string + content: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + post: BlogPostCreateNestedOneWithoutCommentsInput + author: UserCreateNestedOneWithoutBlogCommentsInput + parent?: BlogCommentCreateNestedOneWithoutRepliesInput + } + + export type BlogCommentUncheckedCreateWithoutRepliesInput = { + id?: string + content: string + postId: string + authorId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogCommentCreateOrConnectWithoutRepliesInput = { + where: BlogCommentWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateWithoutParentInput = { + id?: string + content: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + post: BlogPostCreateNestedOneWithoutCommentsInput + author: UserCreateNestedOneWithoutBlogCommentsInput + replies?: BlogCommentCreateNestedManyWithoutParentInput + } + + export type BlogCommentUncheckedCreateWithoutParentInput = { + id?: string + content: string + postId: string + authorId: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + replies?: BlogCommentUncheckedCreateNestedManyWithoutParentInput + } + + export type BlogCommentCreateOrConnectWithoutParentInput = { + where: BlogCommentWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateManyParentInputEnvelope = { + data: BlogCommentCreateManyParentInput | BlogCommentCreateManyParentInput[] + skipDuplicates?: boolean + } + + export type BlogPostUpsertWithoutCommentsInput = { + update: XOR + create: XOR + where?: BlogPostWhereInput + } + + export type BlogPostUpdateToOneWithWhereWithoutCommentsInput = { + where?: BlogPostWhereInput + data: XOR + } + + export type BlogPostUpdateWithoutCommentsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + author?: UserUpdateOneRequiredWithoutBlogPostsNestedInput + tags?: BlogTagUpdateManyWithoutPostsNestedInput + } + + export type BlogPostUncheckedUpdateWithoutCommentsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + authorId?: StringFieldUpdateOperationsInput | string + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + tags?: BlogTagUncheckedUpdateManyWithoutPostsNestedInput + } + + export type UserUpsertWithoutBlogCommentsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutBlogCommentsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutBlogCommentsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutBlogCommentsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type BlogCommentUpsertWithoutRepliesInput = { + update: XOR + create: XOR + where?: BlogCommentWhereInput + } + + export type BlogCommentUpdateToOneWithWhereWithoutRepliesInput = { + where?: BlogCommentWhereInput + data: XOR + } + + export type BlogCommentUpdateWithoutRepliesInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + post?: BlogPostUpdateOneRequiredWithoutCommentsNestedInput + author?: UserUpdateOneRequiredWithoutBlogCommentsNestedInput + parent?: BlogCommentUpdateOneWithoutRepliesNestedInput + } + + export type BlogCommentUncheckedUpdateWithoutRepliesInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogCommentUpsertWithWhereUniqueWithoutParentInput = { + where: BlogCommentWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogCommentUpdateWithWhereUniqueWithoutParentInput = { + where: BlogCommentWhereUniqueInput + data: XOR + } + + export type BlogCommentUpdateManyWithWhereWithoutParentInput = { + where: BlogCommentScalarWhereInput + data: XOR + } + + export type UserCreateWithoutReviewsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutReviewsInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutReviewsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type ProductCreateWithoutReviewsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockCreateNestedManyWithoutProductInput + cartItems?: CartItemCreateNestedManyWithoutProductInput + orderItems?: OrderItemCreateNestedManyWithoutProductInput + } + + export type ProductUncheckedCreateWithoutReviewsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockUncheckedCreateNestedManyWithoutProductInput + cartItems?: CartItemUncheckedCreateNestedManyWithoutProductInput + orderItems?: OrderItemUncheckedCreateNestedManyWithoutProductInput + } + + export type ProductCreateOrConnectWithoutReviewsInput = { + where: ProductWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutReviewsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutReviewsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutReviewsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutReviewsInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type ProductUpsertWithoutReviewsInput = { + update: XOR + create: XOR + where?: ProductWhereInput + } + + export type ProductUpdateToOneWithWhereWithoutReviewsInput = { + where?: ProductWhereInput + data: XOR + } + + export type ProductUpdateWithoutReviewsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUpdateManyWithoutProductNestedInput + cartItems?: CartItemUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUpdateManyWithoutProductNestedInput + } + + export type ProductUncheckedUpdateWithoutReviewsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUncheckedUpdateManyWithoutProductNestedInput + cartItems?: CartItemUncheckedUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUncheckedUpdateManyWithoutProductNestedInput + } + + export type UserCreateWithoutCartInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutCartInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutCartInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type CartItemCreateWithoutCartInput = { + id?: string + size?: $Enums.ProductSize | null + quantity?: number + product: ProductCreateNestedOneWithoutCartItemsInput + } + + export type CartItemUncheckedCreateWithoutCartInput = { + id?: string + productId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type CartItemCreateOrConnectWithoutCartInput = { + where: CartItemWhereUniqueInput + create: XOR + } + + export type CartItemCreateManyCartInputEnvelope = { + data: CartItemCreateManyCartInput | CartItemCreateManyCartInput[] + skipDuplicates?: boolean + } + + export type UserUpsertWithoutCartInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutCartInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutCartInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutCartInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type CartItemUpsertWithWhereUniqueWithoutCartInput = { + where: CartItemWhereUniqueInput + update: XOR + create: XOR + } + + export type CartItemUpdateWithWhereUniqueWithoutCartInput = { + where: CartItemWhereUniqueInput + data: XOR + } + + export type CartItemUpdateManyWithWhereWithoutCartInput = { + where: CartItemScalarWhereInput + data: XOR + } + + export type CartItemScalarWhereInput = { + AND?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + OR?: CartItemScalarWhereInput[] + NOT?: CartItemScalarWhereInput | CartItemScalarWhereInput[] + id?: StringFilter<"CartItem"> | string + cartId?: StringFilter<"CartItem"> | string + productId?: StringFilter<"CartItem"> | string + size?: EnumProductSizeNullableFilter<"CartItem"> | $Enums.ProductSize | null + quantity?: IntFilter<"CartItem"> | number + } + + export type CartCreateWithoutItemsInput = { + id?: string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutCartInput + } + + export type CartUncheckedCreateWithoutItemsInput = { + id?: string + userId: string + updatedAt?: Date | string + } + + export type CartCreateOrConnectWithoutItemsInput = { + where: CartWhereUniqueInput + create: XOR + } + + export type ProductCreateWithoutCartItemsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockCreateNestedManyWithoutProductInput + orderItems?: OrderItemCreateNestedManyWithoutProductInput + reviews?: ReviewCreateNestedManyWithoutProductInput + } + + export type ProductUncheckedCreateWithoutCartItemsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockUncheckedCreateNestedManyWithoutProductInput + orderItems?: OrderItemUncheckedCreateNestedManyWithoutProductInput + reviews?: ReviewUncheckedCreateNestedManyWithoutProductInput + } + + export type ProductCreateOrConnectWithoutCartItemsInput = { + where: ProductWhereUniqueInput + create: XOR + } + + export type CartUpsertWithoutItemsInput = { + update: XOR + create: XOR + where?: CartWhereInput + } + + export type CartUpdateToOneWithWhereWithoutItemsInput = { + where?: CartWhereInput + data: XOR + } + + export type CartUpdateWithoutItemsInput = { + id?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutCartNestedInput + } + + export type CartUncheckedUpdateWithoutItemsInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ProductUpsertWithoutCartItemsInput = { + update: XOR + create: XOR + where?: ProductWhereInput + } + + export type ProductUpdateToOneWithWhereWithoutCartItemsInput = { + where?: ProductWhereInput + data: XOR + } + + export type ProductUpdateWithoutCartItemsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUpdateManyWithoutProductNestedInput + reviews?: ReviewUpdateManyWithoutProductNestedInput + } + + export type ProductUncheckedUpdateWithoutCartItemsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUncheckedUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUncheckedUpdateManyWithoutProductNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutProductNestedInput + } + + export type UserCreateWithoutOrdersInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutOrdersInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + addresses?: AddressUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutOrdersInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type ShippingAddressCreateWithoutOrderInput = { + id?: string + fullName: string + phone: string + addressLine1: string + addressLine2?: string | null + city: string + district: string + ward: string + postalCode: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ShippingAddressUncheckedCreateWithoutOrderInput = { + id?: string + fullName: string + phone: string + addressLine1: string + addressLine2?: string | null + city: string + district: string + ward: string + postalCode: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ShippingAddressCreateOrConnectWithoutOrderInput = { + where: ShippingAddressWhereUniqueInput + create: XOR + } + + export type OrderItemCreateWithoutOrderInput = { + id?: string + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + product?: ProductCreateNestedOneWithoutOrderItemsInput + } + + export type OrderItemUncheckedCreateWithoutOrderInput = { + id?: string + productId?: string | null + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type OrderItemCreateOrConnectWithoutOrderInput = { + where: OrderItemWhereUniqueInput + create: XOR + } + + export type OrderItemCreateManyOrderInputEnvelope = { + data: OrderItemCreateManyOrderInput | OrderItemCreateManyOrderInput[] + skipDuplicates?: boolean + } + + export type PaymentTransactionCreateWithoutOrderInput = { + id?: string + transactionCode: string + amount: Decimal | DecimalJsLike | number | string + status?: $Enums.PaymentTransactionStatus + paymentUrl?: string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: Date | string + updatedAt?: Date | string + } + + export type PaymentTransactionUncheckedCreateWithoutOrderInput = { + id?: string + transactionCode: string + amount: Decimal | DecimalJsLike | number | string + status?: $Enums.PaymentTransactionStatus + paymentUrl?: string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: Date | string + updatedAt?: Date | string + } + + export type PaymentTransactionCreateOrConnectWithoutOrderInput = { + where: PaymentTransactionWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutOrdersInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutOrdersInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutOrdersInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutOrdersInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + addresses?: AddressUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type ShippingAddressUpsertWithoutOrderInput = { + update: XOR + create: XOR + where?: ShippingAddressWhereInput + } + + export type ShippingAddressUpdateToOneWithWhereWithoutOrderInput = { + where?: ShippingAddressWhereInput + data: XOR + } + + export type ShippingAddressUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ShippingAddressUncheckedUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + fullName?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + addressLine1?: StringFieldUpdateOperationsInput | string + addressLine2?: NullableStringFieldUpdateOperationsInput | string | null + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + postalCode?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type OrderItemUpsertWithWhereUniqueWithoutOrderInput = { + where: OrderItemWhereUniqueInput + update: XOR + create: XOR + } + + export type OrderItemUpdateWithWhereUniqueWithoutOrderInput = { + where: OrderItemWhereUniqueInput + data: XOR + } + + export type OrderItemUpdateManyWithWhereWithoutOrderInput = { + where: OrderItemScalarWhereInput + data: XOR + } + + export type OrderItemScalarWhereInput = { + AND?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + OR?: OrderItemScalarWhereInput[] + NOT?: OrderItemScalarWhereInput | OrderItemScalarWhereInput[] + id?: StringFilter<"OrderItem"> | string + orderId?: StringFilter<"OrderItem"> | string + productId?: StringNullableFilter<"OrderItem"> | string | null + productSlug?: EnumProductSlugFilter<"OrderItem"> | $Enums.ProductSlug + productName?: StringFilter<"OrderItem"> | string + size?: EnumProductSizeNullableFilter<"OrderItem"> | $Enums.ProductSize | null + price?: DecimalFilter<"OrderItem"> | Decimal | DecimalJsLike | number | string + quantity?: IntFilter<"OrderItem"> | number + } + + export type PaymentTransactionUpsertWithoutOrderInput = { + update: XOR + create: XOR + where?: PaymentTransactionWhereInput + } + + export type PaymentTransactionUpdateToOneWithWhereWithoutOrderInput = { + where?: PaymentTransactionWhereInput + data: XOR + } + + export type PaymentTransactionUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type PaymentTransactionUncheckedUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + transactionCode?: StringFieldUpdateOperationsInput | string + amount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + status?: EnumPaymentTransactionStatusFieldUpdateOperationsInput | $Enums.PaymentTransactionStatus + paymentUrl?: NullableStringFieldUpdateOperationsInput | string | null + payosData?: NullableJsonNullValueInput | InputJsonValue + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type OrderCreateWithoutShippingAddressInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutOrdersInput + items?: OrderItemCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionCreateNestedOneWithoutOrderInput + } + + export type OrderUncheckedCreateWithoutShippingAddressInput = { + id?: string + code: string + userId: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + items?: OrderItemUncheckedCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionUncheckedCreateNestedOneWithoutOrderInput + } + + export type OrderCreateOrConnectWithoutShippingAddressInput = { + where: OrderWhereUniqueInput + create: XOR + } + + export type OrderUpsertWithoutShippingAddressInput = { + update: XOR + create: XOR + where?: OrderWhereInput + } + + export type OrderUpdateToOneWithWhereWithoutShippingAddressInput = { + where?: OrderWhereInput + data: XOR + } + + export type OrderUpdateWithoutShippingAddressInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutOrdersNestedInput + items?: OrderItemUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUpdateOneWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateWithoutShippingAddressInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: OrderItemUncheckedUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUncheckedUpdateOneWithoutOrderNestedInput + } + + export type OrderCreateWithoutItemsInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutOrdersInput + shippingAddress: ShippingAddressCreateNestedOneWithoutOrderInput + paymentTransaction?: PaymentTransactionCreateNestedOneWithoutOrderInput + } + + export type OrderUncheckedCreateWithoutItemsInput = { + id?: string + code: string + userId: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + paymentTransaction?: PaymentTransactionUncheckedCreateNestedOneWithoutOrderInput + } + + export type OrderCreateOrConnectWithoutItemsInput = { + where: OrderWhereUniqueInput + create: XOR + } + + export type ProductCreateWithoutOrderItemsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockCreateNestedManyWithoutProductInput + cartItems?: CartItemCreateNestedManyWithoutProductInput + reviews?: ReviewCreateNestedManyWithoutProductInput + } + + export type ProductUncheckedCreateWithoutOrderItemsInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sizeStocks?: ProductSizeStockUncheckedCreateNestedManyWithoutProductInput + cartItems?: CartItemUncheckedCreateNestedManyWithoutProductInput + reviews?: ReviewUncheckedCreateNestedManyWithoutProductInput + } + + export type ProductCreateOrConnectWithoutOrderItemsInput = { + where: ProductWhereUniqueInput + create: XOR + } + + export type OrderUpsertWithoutItemsInput = { + update: XOR + create: XOR + where?: OrderWhereInput + } + + export type OrderUpdateToOneWithWhereWithoutItemsInput = { + where?: OrderWhereInput + data: XOR + } + + export type OrderUpdateWithoutItemsInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutOrdersNestedInput + shippingAddress?: ShippingAddressUpdateOneRequiredWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUpdateOneWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateWithoutItemsInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + paymentTransaction?: PaymentTransactionUncheckedUpdateOneWithoutOrderNestedInput + } + + export type ProductUpsertWithoutOrderItemsInput = { + update: XOR + create: XOR + where?: ProductWhereInput + } + + export type ProductUpdateToOneWithWhereWithoutOrderItemsInput = { + where?: ProductWhereInput + data: XOR + } + + export type ProductUpdateWithoutOrderItemsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUpdateManyWithoutProductNestedInput + cartItems?: CartItemUpdateManyWithoutProductNestedInput + reviews?: ReviewUpdateManyWithoutProductNestedInput + } + + export type ProductUncheckedUpdateWithoutOrderItemsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sizeStocks?: ProductSizeStockUncheckedUpdateManyWithoutProductNestedInput + cartItems?: CartItemUncheckedUpdateManyWithoutProductNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutProductNestedInput + } + + export type OrderCreateWithoutPaymentTransactionInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutOrdersInput + shippingAddress: ShippingAddressCreateNestedOneWithoutOrderInput + items?: OrderItemCreateNestedManyWithoutOrderInput + } + + export type OrderUncheckedCreateWithoutPaymentTransactionInput = { + id?: string + code: string + userId: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + items?: OrderItemUncheckedCreateNestedManyWithoutOrderInput + } + + export type OrderCreateOrConnectWithoutPaymentTransactionInput = { + where: OrderWhereUniqueInput + create: XOR + } + + export type OrderUpsertWithoutPaymentTransactionInput = { + update: XOR + create: XOR + where?: OrderWhereInput + } + + export type OrderUpdateToOneWithWhereWithoutPaymentTransactionInput = { + where?: OrderWhereInput + data: XOR + } + + export type OrderUpdateWithoutPaymentTransactionInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutOrdersNestedInput + shippingAddress?: ShippingAddressUpdateOneRequiredWithoutOrderNestedInput + items?: OrderItemUpdateManyWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateWithoutPaymentTransactionInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: OrderItemUncheckedUpdateManyWithoutOrderNestedInput + } + + export type ProductSizeStockCreateWithoutProductInput = { + id?: string + size: $Enums.ProductSize + stock?: number + } + + export type ProductSizeStockUncheckedCreateWithoutProductInput = { + id?: string + size: $Enums.ProductSize + stock?: number + } + + export type ProductSizeStockCreateOrConnectWithoutProductInput = { + where: ProductSizeStockWhereUniqueInput + create: XOR + } + + export type ProductSizeStockCreateManyProductInputEnvelope = { + data: ProductSizeStockCreateManyProductInput | ProductSizeStockCreateManyProductInput[] + skipDuplicates?: boolean + } + + export type CartItemCreateWithoutProductInput = { + id?: string + size?: $Enums.ProductSize | null + quantity?: number + cart: CartCreateNestedOneWithoutItemsInput + } + + export type CartItemUncheckedCreateWithoutProductInput = { + id?: string + cartId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type CartItemCreateOrConnectWithoutProductInput = { + where: CartItemWhereUniqueInput + create: XOR + } + + export type CartItemCreateManyProductInputEnvelope = { + data: CartItemCreateManyProductInput | CartItemCreateManyProductInput[] + skipDuplicates?: boolean + } + + export type OrderItemCreateWithoutProductInput = { + id?: string + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + order: OrderCreateNestedOneWithoutItemsInput + } + + export type OrderItemUncheckedCreateWithoutProductInput = { + id?: string + orderId: string + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type OrderItemCreateOrConnectWithoutProductInput = { + where: OrderItemWhereUniqueInput + create: XOR + } + + export type OrderItemCreateManyProductInputEnvelope = { + data: OrderItemCreateManyProductInput | OrderItemCreateManyProductInput[] + skipDuplicates?: boolean + } + + export type ReviewCreateWithoutProductInput = { + id?: string + rating?: number + comment?: string | null + createdAt?: Date | string + updatedAt?: Date | string + user: UserCreateNestedOneWithoutReviewsInput + } + + export type ReviewUncheckedCreateWithoutProductInput = { + id?: string + rating?: number + comment?: string | null + userId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ReviewCreateOrConnectWithoutProductInput = { + where: ReviewWhereUniqueInput + create: XOR + } + + export type ReviewCreateManyProductInputEnvelope = { + data: ReviewCreateManyProductInput | ReviewCreateManyProductInput[] + skipDuplicates?: boolean + } + + export type ProductSizeStockUpsertWithWhereUniqueWithoutProductInput = { + where: ProductSizeStockWhereUniqueInput + update: XOR + create: XOR + } + + export type ProductSizeStockUpdateWithWhereUniqueWithoutProductInput = { + where: ProductSizeStockWhereUniqueInput + data: XOR + } + + export type ProductSizeStockUpdateManyWithWhereWithoutProductInput = { + where: ProductSizeStockScalarWhereInput + data: XOR + } + + export type ProductSizeStockScalarWhereInput = { + AND?: ProductSizeStockScalarWhereInput | ProductSizeStockScalarWhereInput[] + OR?: ProductSizeStockScalarWhereInput[] + NOT?: ProductSizeStockScalarWhereInput | ProductSizeStockScalarWhereInput[] + id?: StringFilter<"ProductSizeStock"> | string + size?: EnumProductSizeFilter<"ProductSizeStock"> | $Enums.ProductSize + stock?: IntFilter<"ProductSizeStock"> | number + productId?: StringFilter<"ProductSizeStock"> | string + } + + export type CartItemUpsertWithWhereUniqueWithoutProductInput = { + where: CartItemWhereUniqueInput + update: XOR + create: XOR + } + + export type CartItemUpdateWithWhereUniqueWithoutProductInput = { + where: CartItemWhereUniqueInput + data: XOR + } + + export type CartItemUpdateManyWithWhereWithoutProductInput = { + where: CartItemScalarWhereInput + data: XOR + } + + export type OrderItemUpsertWithWhereUniqueWithoutProductInput = { + where: OrderItemWhereUniqueInput + update: XOR + create: XOR + } + + export type OrderItemUpdateWithWhereUniqueWithoutProductInput = { + where: OrderItemWhereUniqueInput + data: XOR + } + + export type OrderItemUpdateManyWithWhereWithoutProductInput = { + where: OrderItemScalarWhereInput + data: XOR + } + + export type ReviewUpsertWithWhereUniqueWithoutProductInput = { + where: ReviewWhereUniqueInput + update: XOR + create: XOR + } + + export type ReviewUpdateWithWhereUniqueWithoutProductInput = { + where: ReviewWhereUniqueInput + data: XOR + } + + export type ReviewUpdateManyWithWhereWithoutProductInput = { + where: ReviewScalarWhereInput + data: XOR + } + + export type ReviewScalarWhereInput = { + AND?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + OR?: ReviewScalarWhereInput[] + NOT?: ReviewScalarWhereInput | ReviewScalarWhereInput[] + id?: StringFilter<"Review"> | string + rating?: IntFilter<"Review"> | number + comment?: StringNullableFilter<"Review"> | string | null + userId?: StringFilter<"Review"> | string + productId?: StringFilter<"Review"> | string + createdAt?: DateTimeFilter<"Review"> | Date | string + updatedAt?: DateTimeFilter<"Review"> | Date | string + } + + export type ProductCreateWithoutSizeStocksInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + cartItems?: CartItemCreateNestedManyWithoutProductInput + orderItems?: OrderItemCreateNestedManyWithoutProductInput + reviews?: ReviewCreateNestedManyWithoutProductInput + } + + export type ProductUncheckedCreateWithoutSizeStocksInput = { + id?: string + slug: $Enums.ProductSlug + name: string + description: string + priceCurrent: Decimal | DecimalJsLike | number | string + priceOriginal?: Decimal | DecimalJsLike | number | string | null + priceDiscount?: Decimal | DecimalJsLike | number | string | null + stock?: number + hasSizes?: boolean + badge?: string | null + ratingValue?: Decimal | DecimalJsLike | number | string + ratingCount?: number + isPublished?: boolean + createdAt?: Date | string + updatedAt?: Date | string + cartItems?: CartItemUncheckedCreateNestedManyWithoutProductInput + orderItems?: OrderItemUncheckedCreateNestedManyWithoutProductInput + reviews?: ReviewUncheckedCreateNestedManyWithoutProductInput + } + + export type ProductCreateOrConnectWithoutSizeStocksInput = { + where: ProductWhereUniqueInput + create: XOR + } + + export type ProductUpsertWithoutSizeStocksInput = { + update: XOR + create: XOR + where?: ProductWhereInput + } + + export type ProductUpdateToOneWithWhereWithoutSizeStocksInput = { + where?: ProductWhereInput + data: XOR + } + + export type ProductUpdateWithoutSizeStocksInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + cartItems?: CartItemUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUpdateManyWithoutProductNestedInput + reviews?: ReviewUpdateManyWithoutProductNestedInput + } + + export type ProductUncheckedUpdateWithoutSizeStocksInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + name?: StringFieldUpdateOperationsInput | string + description?: StringFieldUpdateOperationsInput | string + priceCurrent?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + priceOriginal?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + priceDiscount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null + stock?: IntFieldUpdateOperationsInput | number + hasSizes?: BoolFieldUpdateOperationsInput | boolean + badge?: NullableStringFieldUpdateOperationsInput | string | null + ratingValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + ratingCount?: IntFieldUpdateOperationsInput | number + isPublished?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + cartItems?: CartItemUncheckedUpdateManyWithoutProductNestedInput + orderItems?: OrderItemUncheckedUpdateManyWithoutProductNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutProductNestedInput + } + + export type AddressCreateWithoutUserInput = { + id?: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + } + + export type AddressUncheckedCreateWithoutUserInput = { + id?: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + } + + export type AddressCreateOrConnectWithoutUserInput = { + where: AddressWhereUniqueInput + create: XOR + } + + export type AddressCreateManyUserInputEnvelope = { + data: AddressCreateManyUserInput | AddressCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type OrderCreateWithoutUserInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + createdAt?: Date | string + updatedAt?: Date | string + shippingAddress: ShippingAddressCreateNestedOneWithoutOrderInput + items?: OrderItemCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionCreateNestedOneWithoutOrderInput + } + + export type OrderUncheckedCreateWithoutUserInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + items?: OrderItemUncheckedCreateNestedManyWithoutOrderInput + paymentTransaction?: PaymentTransactionUncheckedCreateNestedOneWithoutOrderInput + } + + export type OrderCreateOrConnectWithoutUserInput = { + where: OrderWhereUniqueInput + create: XOR + } + + export type OrderCreateManyUserInputEnvelope = { + data: OrderCreateManyUserInput | OrderCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type ReviewCreateWithoutUserInput = { + id?: string + rating?: number + comment?: string | null + createdAt?: Date | string + updatedAt?: Date | string + product: ProductCreateNestedOneWithoutReviewsInput + } + + export type ReviewUncheckedCreateWithoutUserInput = { + id?: string + rating?: number + comment?: string | null + productId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ReviewCreateOrConnectWithoutUserInput = { + where: ReviewWhereUniqueInput + create: XOR + } + + export type ReviewCreateManyUserInputEnvelope = { + data: ReviewCreateManyUserInput | ReviewCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type CartCreateWithoutUserInput = { + id?: string + updatedAt?: Date | string + items?: CartItemCreateNestedManyWithoutCartInput + } + + export type CartUncheckedCreateWithoutUserInput = { + id?: string + updatedAt?: Date | string + items?: CartItemUncheckedCreateNestedManyWithoutCartInput + } + + export type CartCreateOrConnectWithoutUserInput = { + where: CartWhereUniqueInput + create: XOR + } + + export type ExternalAccountCreateWithoutUserInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ExternalAccountUncheckedCreateWithoutUserInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ExternalAccountCreateOrConnectWithoutUserInput = { + where: ExternalAccountWhereUniqueInput + create: XOR + } + + export type ExternalAccountCreateManyUserInputEnvelope = { + data: ExternalAccountCreateManyUserInput | ExternalAccountCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type UserMFAMethodCreateWithoutUserInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + } + + export type UserMFAMethodUncheckedCreateWithoutUserInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + } + + export type UserMFAMethodCreateOrConnectWithoutUserInput = { + where: UserMFAMethodWhereUniqueInput + create: XOR + } + + export type UserMFAMethodCreateManyUserInputEnvelope = { + data: UserMFAMethodCreateManyUserInput | UserMFAMethodCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type MFABackupCodeCreateWithoutUserInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + createdAt?: Date | string + } + + export type MFABackupCodeUncheckedCreateWithoutUserInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + createdAt?: Date | string + } + + export type MFABackupCodeCreateOrConnectWithoutUserInput = { + where: MFABackupCodeWhereUniqueInput + create: XOR + } + + export type MFABackupCodeCreateManyUserInputEnvelope = { + data: MFABackupCodeCreateManyUserInput | MFABackupCodeCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type DeviceCreateWithoutUserInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + session?: SessionCreateNestedOneWithoutDeviceInput + } + + export type DeviceUncheckedCreateWithoutUserInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + session?: SessionUncheckedCreateNestedOneWithoutDeviceInput + } + + export type DeviceCreateOrConnectWithoutUserInput = { + where: DeviceWhereUniqueInput + create: XOR + } + + export type DeviceCreateManyUserInputEnvelope = { + data: DeviceCreateManyUserInput | DeviceCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type SessionCreateWithoutUserInput = { + id?: string + token: string + refreshToken?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + device?: DeviceCreateNestedOneWithoutSessionInput + } + + export type SessionUncheckedCreateWithoutUserInput = { + id?: string + token: string + refreshToken?: string | null + deviceId?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type SessionCreateOrConnectWithoutUserInput = { + where: SessionWhereUniqueInput + create: XOR + } + + export type SessionCreateManyUserInputEnvelope = { + data: SessionCreateManyUserInput | SessionCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type BlogPostCreateWithoutAuthorInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + tags?: BlogTagCreateNestedManyWithoutPostsInput + comments?: BlogCommentCreateNestedManyWithoutPostInput + } + + export type BlogPostUncheckedCreateWithoutAuthorInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + tags?: BlogTagUncheckedCreateNestedManyWithoutPostsInput + comments?: BlogCommentUncheckedCreateNestedManyWithoutPostInput + } + + export type BlogPostCreateOrConnectWithoutAuthorInput = { + where: BlogPostWhereUniqueInput + create: XOR + } + + export type BlogPostCreateManyAuthorInputEnvelope = { + data: BlogPostCreateManyAuthorInput | BlogPostCreateManyAuthorInput[] + skipDuplicates?: boolean + } + + export type BlogCommentCreateWithoutAuthorInput = { + id?: string + content: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + post: BlogPostCreateNestedOneWithoutCommentsInput + parent?: BlogCommentCreateNestedOneWithoutRepliesInput + replies?: BlogCommentCreateNestedManyWithoutParentInput + } + + export type BlogCommentUncheckedCreateWithoutAuthorInput = { + id?: string + content: string + postId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + replies?: BlogCommentUncheckedCreateNestedManyWithoutParentInput + } + + export type BlogCommentCreateOrConnectWithoutAuthorInput = { + where: BlogCommentWhereUniqueInput + create: XOR + } + + export type BlogCommentCreateManyAuthorInputEnvelope = { + data: BlogCommentCreateManyAuthorInput | BlogCommentCreateManyAuthorInput[] + skipDuplicates?: boolean + } + + export type AddressUpsertWithWhereUniqueWithoutUserInput = { + where: AddressWhereUniqueInput + update: XOR + create: XOR + } + + export type AddressUpdateWithWhereUniqueWithoutUserInput = { + where: AddressWhereUniqueInput + data: XOR + } + + export type AddressUpdateManyWithWhereWithoutUserInput = { + where: AddressScalarWhereInput + data: XOR + } + + export type AddressScalarWhereInput = { + AND?: AddressScalarWhereInput | AddressScalarWhereInput[] + OR?: AddressScalarWhereInput[] + NOT?: AddressScalarWhereInput | AddressScalarWhereInput[] + id?: StringFilter<"Address"> | string + userId?: StringFilter<"Address"> | string + recipient?: StringFilter<"Address"> | string + phone?: StringFilter<"Address"> | string + street?: StringFilter<"Address"> | string + city?: StringFilter<"Address"> | string + district?: StringFilter<"Address"> | string + ward?: StringFilter<"Address"> | string + isDefault?: BoolFilter<"Address"> | boolean + } + + export type OrderUpsertWithWhereUniqueWithoutUserInput = { + where: OrderWhereUniqueInput + update: XOR + create: XOR + } + + export type OrderUpdateWithWhereUniqueWithoutUserInput = { + where: OrderWhereUniqueInput + data: XOR + } + + export type OrderUpdateManyWithWhereWithoutUserInput = { + where: OrderScalarWhereInput + data: XOR + } + + export type OrderScalarWhereInput = { + AND?: OrderScalarWhereInput | OrderScalarWhereInput[] + OR?: OrderScalarWhereInput[] + NOT?: OrderScalarWhereInput | OrderScalarWhereInput[] + id?: StringFilter<"Order"> | string + code?: StringFilter<"Order"> | string + userId?: StringFilter<"Order"> | string + status?: EnumOrderStatusFilter<"Order"> | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFilter<"Order"> | $Enums.PaymentStatus + totalAmount?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFilter<"Order"> | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFilter<"Order"> | string + createdAt?: DateTimeFilter<"Order"> | Date | string + updatedAt?: DateTimeFilter<"Order"> | Date | string + } + + export type ReviewUpsertWithWhereUniqueWithoutUserInput = { + where: ReviewWhereUniqueInput + update: XOR + create: XOR + } + + export type ReviewUpdateWithWhereUniqueWithoutUserInput = { + where: ReviewWhereUniqueInput + data: XOR + } + + export type ReviewUpdateManyWithWhereWithoutUserInput = { + where: ReviewScalarWhereInput + data: XOR + } + + export type CartUpsertWithoutUserInput = { + update: XOR + create: XOR + where?: CartWhereInput + } + + export type CartUpdateToOneWithWhereWithoutUserInput = { + where?: CartWhereInput + data: XOR + } + + export type CartUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: CartItemUpdateManyWithoutCartNestedInput + } + + export type CartUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: CartItemUncheckedUpdateManyWithoutCartNestedInput + } + + export type ExternalAccountUpsertWithWhereUniqueWithoutUserInput = { + where: ExternalAccountWhereUniqueInput + update: XOR + create: XOR + } + + export type ExternalAccountUpdateWithWhereUniqueWithoutUserInput = { + where: ExternalAccountWhereUniqueInput + data: XOR + } + + export type ExternalAccountUpdateManyWithWhereWithoutUserInput = { + where: ExternalAccountScalarWhereInput + data: XOR + } + + export type ExternalAccountScalarWhereInput = { + AND?: ExternalAccountScalarWhereInput | ExternalAccountScalarWhereInput[] + OR?: ExternalAccountScalarWhereInput[] + NOT?: ExternalAccountScalarWhereInput | ExternalAccountScalarWhereInput[] + id?: StringFilter<"ExternalAccount"> | string + provider?: EnumOAuthProviderFilter<"ExternalAccount"> | $Enums.OAuthProvider + providerId?: StringFilter<"ExternalAccount"> | string + providerEmail?: StringNullableFilter<"ExternalAccount"> | string | null + accessToken?: StringNullableFilter<"ExternalAccount"> | string | null + refreshToken?: StringNullableFilter<"ExternalAccount"> | string | null + expiresAt?: DateTimeNullableFilter<"ExternalAccount"> | Date | string | null + userId?: StringFilter<"ExternalAccount"> | string + createdAt?: DateTimeFilter<"ExternalAccount"> | Date | string + updatedAt?: DateTimeFilter<"ExternalAccount"> | Date | string + } + + export type UserMFAMethodUpsertWithWhereUniqueWithoutUserInput = { + where: UserMFAMethodWhereUniqueInput + update: XOR + create: XOR + } + + export type UserMFAMethodUpdateWithWhereUniqueWithoutUserInput = { + where: UserMFAMethodWhereUniqueInput + data: XOR + } + + export type UserMFAMethodUpdateManyWithWhereWithoutUserInput = { + where: UserMFAMethodScalarWhereInput + data: XOR + } + + export type UserMFAMethodScalarWhereInput = { + AND?: UserMFAMethodScalarWhereInput | UserMFAMethodScalarWhereInput[] + OR?: UserMFAMethodScalarWhereInput[] + NOT?: UserMFAMethodScalarWhereInput | UserMFAMethodScalarWhereInput[] + id?: StringFilter<"UserMFAMethod"> | string + methodType?: EnumMFAMethodFilter<"UserMFAMethod"> | $Enums.MFAMethod + secret?: StringNullableFilter<"UserMFAMethod"> | string | null + phone?: StringNullableFilter<"UserMFAMethod"> | string | null + isActive?: BoolFilter<"UserMFAMethod"> | boolean + isVerified?: BoolFilter<"UserMFAMethod"> | boolean + userId?: StringFilter<"UserMFAMethod"> | string + createdAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + updatedAt?: DateTimeFilter<"UserMFAMethod"> | Date | string + lastUsedAt?: DateTimeNullableFilter<"UserMFAMethod"> | Date | string | null + } + + export type MFABackupCodeUpsertWithWhereUniqueWithoutUserInput = { + where: MFABackupCodeWhereUniqueInput + update: XOR + create: XOR + } + + export type MFABackupCodeUpdateWithWhereUniqueWithoutUserInput = { + where: MFABackupCodeWhereUniqueInput + data: XOR + } + + export type MFABackupCodeUpdateManyWithWhereWithoutUserInput = { + where: MFABackupCodeScalarWhereInput + data: XOR + } + + export type MFABackupCodeScalarWhereInput = { + AND?: MFABackupCodeScalarWhereInput | MFABackupCodeScalarWhereInput[] + OR?: MFABackupCodeScalarWhereInput[] + NOT?: MFABackupCodeScalarWhereInput | MFABackupCodeScalarWhereInput[] + id?: StringFilter<"MFABackupCode"> | string + code?: StringFilter<"MFABackupCode"> | string + isUsed?: BoolFilter<"MFABackupCode"> | boolean + usedAt?: DateTimeNullableFilter<"MFABackupCode"> | Date | string | null + userId?: StringFilter<"MFABackupCode"> | string + createdAt?: DateTimeFilter<"MFABackupCode"> | Date | string + } + + export type DeviceUpsertWithWhereUniqueWithoutUserInput = { + where: DeviceWhereUniqueInput + update: XOR + create: XOR + } + + export type DeviceUpdateWithWhereUniqueWithoutUserInput = { + where: DeviceWhereUniqueInput + data: XOR + } + + export type DeviceUpdateManyWithWhereWithoutUserInput = { + where: DeviceScalarWhereInput + data: XOR + } + + export type DeviceScalarWhereInput = { + AND?: DeviceScalarWhereInput | DeviceScalarWhereInput[] + OR?: DeviceScalarWhereInput[] + NOT?: DeviceScalarWhereInput | DeviceScalarWhereInput[] + id?: StringFilter<"Device"> | string + name?: StringNullableFilter<"Device"> | string | null + type?: EnumDeviceTypeFilter<"Device"> | $Enums.DeviceType + userAgent?: StringNullableFilter<"Device"> | string | null + ipAddress?: StringNullableFilter<"Device"> | string | null + fingerprint?: StringNullableFilter<"Device"> | string | null + userId?: StringFilter<"Device"> | string + isTrusted?: BoolFilter<"Device"> | boolean + lastSeenAt?: DateTimeFilter<"Device"> | Date | string + createdAt?: DateTimeFilter<"Device"> | Date | string + } + + export type SessionUpsertWithWhereUniqueWithoutUserInput = { + where: SessionWhereUniqueInput + update: XOR + create: XOR + } + + export type SessionUpdateWithWhereUniqueWithoutUserInput = { + where: SessionWhereUniqueInput + data: XOR + } + + export type SessionUpdateManyWithWhereWithoutUserInput = { + where: SessionScalarWhereInput + data: XOR + } + + export type SessionScalarWhereInput = { + AND?: SessionScalarWhereInput | SessionScalarWhereInput[] + OR?: SessionScalarWhereInput[] + NOT?: SessionScalarWhereInput | SessionScalarWhereInput[] + id?: StringFilter<"Session"> | string + token?: StringFilter<"Session"> | string + refreshToken?: StringNullableFilter<"Session"> | string | null + userId?: StringFilter<"Session"> | string + deviceId?: StringNullableFilter<"Session"> | string | null + ipAddress?: StringNullableFilter<"Session"> | string | null + userAgent?: StringNullableFilter<"Session"> | string | null + status?: EnumSessionStatusFilter<"Session"> | $Enums.SessionStatus + expiresAt?: DateTimeFilter<"Session"> | Date | string + revokedAt?: DateTimeNullableFilter<"Session"> | Date | string | null + createdAt?: DateTimeFilter<"Session"> | Date | string + updatedAt?: DateTimeFilter<"Session"> | Date | string + } + + export type BlogPostUpsertWithWhereUniqueWithoutAuthorInput = { + where: BlogPostWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogPostUpdateWithWhereUniqueWithoutAuthorInput = { + where: BlogPostWhereUniqueInput + data: XOR + } + + export type BlogPostUpdateManyWithWhereWithoutAuthorInput = { + where: BlogPostScalarWhereInput + data: XOR + } + + export type BlogCommentUpsertWithWhereUniqueWithoutAuthorInput = { + where: BlogCommentWhereUniqueInput + update: XOR + create: XOR + } + + export type BlogCommentUpdateWithWhereUniqueWithoutAuthorInput = { + where: BlogCommentWhereUniqueInput + data: XOR + } + + export type BlogCommentUpdateManyWithWhereWithoutAuthorInput = { + where: BlogCommentScalarWhereInput + data: XOR + } + + export type UserCreateWithoutAddressesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + orders?: OrderCreateNestedManyWithoutUserInput + reviews?: ReviewCreateNestedManyWithoutUserInput + cart?: CartCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeCreateNestedManyWithoutUserInput + devices?: DeviceCreateNestedManyWithoutUserInput + sessions?: SessionCreateNestedManyWithoutUserInput + blogPosts?: BlogPostCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentCreateNestedManyWithoutAuthorInput + } + + export type UserUncheckedCreateWithoutAddressesInput = { + id?: string + email: string + password?: string | null + fullName?: string | null + phone?: string | null + avatar?: string | null + role?: $Enums.UserRole + mfaEnabled?: boolean + mfaSecret?: string | null + emailVerified?: boolean + phoneVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + orders?: OrderUncheckedCreateNestedManyWithoutUserInput + reviews?: ReviewUncheckedCreateNestedManyWithoutUserInput + cart?: CartUncheckedCreateNestedOneWithoutUserInput + externalAccounts?: ExternalAccountUncheckedCreateNestedManyWithoutUserInput + mfaMethods?: UserMFAMethodUncheckedCreateNestedManyWithoutUserInput + mfaBackupCodes?: MFABackupCodeUncheckedCreateNestedManyWithoutUserInput + devices?: DeviceUncheckedCreateNestedManyWithoutUserInput + sessions?: SessionUncheckedCreateNestedManyWithoutUserInput + blogPosts?: BlogPostUncheckedCreateNestedManyWithoutAuthorInput + blogComments?: BlogCommentUncheckedCreateNestedManyWithoutAuthorInput + } + + export type UserCreateOrConnectWithoutAddressesInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutAddressesInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutAddressesInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutAddressesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + orders?: OrderUpdateManyWithoutUserNestedInput + reviews?: ReviewUpdateManyWithoutUserNestedInput + cart?: CartUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUpdateManyWithoutUserNestedInput + devices?: DeviceUpdateManyWithoutUserNestedInput + sessions?: SessionUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUpdateManyWithoutAuthorNestedInput + } + + export type UserUncheckedUpdateWithoutAddressesInput = { + id?: StringFieldUpdateOperationsInput | string + email?: StringFieldUpdateOperationsInput | string + password?: NullableStringFieldUpdateOperationsInput | string | null + fullName?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + avatar?: NullableStringFieldUpdateOperationsInput | string | null + role?: EnumUserRoleFieldUpdateOperationsInput | $Enums.UserRole + mfaEnabled?: BoolFieldUpdateOperationsInput | boolean + mfaSecret?: NullableStringFieldUpdateOperationsInput | string | null + emailVerified?: BoolFieldUpdateOperationsInput | boolean + phoneVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + orders?: OrderUncheckedUpdateManyWithoutUserNestedInput + reviews?: ReviewUncheckedUpdateManyWithoutUserNestedInput + cart?: CartUncheckedUpdateOneWithoutUserNestedInput + externalAccounts?: ExternalAccountUncheckedUpdateManyWithoutUserNestedInput + mfaMethods?: UserMFAMethodUncheckedUpdateManyWithoutUserNestedInput + mfaBackupCodes?: MFABackupCodeUncheckedUpdateManyWithoutUserNestedInput + devices?: DeviceUncheckedUpdateManyWithoutUserNestedInput + sessions?: SessionUncheckedUpdateManyWithoutUserNestedInput + blogPosts?: BlogPostUncheckedUpdateManyWithoutAuthorNestedInput + blogComments?: BlogCommentUncheckedUpdateManyWithoutAuthorNestedInput + } + + export type BlogCommentCreateManyPostInput = { + id?: string + content: string + authorId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogTagUpdateWithoutPostsInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + } + + export type BlogTagUncheckedUpdateWithoutPostsInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + } + + export type BlogTagUncheckedUpdateManyWithoutPostsInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + } + + export type BlogCommentUpdateWithoutPostInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + author?: UserUpdateOneRequiredWithoutBlogCommentsNestedInput + parent?: BlogCommentUpdateOneWithoutRepliesNestedInput + replies?: BlogCommentUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateWithoutPostInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + replies?: BlogCommentUncheckedUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateManyWithoutPostInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogPostUpdateWithoutTagsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + author?: UserUpdateOneRequiredWithoutBlogPostsNestedInput + comments?: BlogCommentUpdateManyWithoutPostNestedInput + } + + export type BlogPostUncheckedUpdateWithoutTagsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + authorId?: StringFieldUpdateOperationsInput | string + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + comments?: BlogCommentUncheckedUpdateManyWithoutPostNestedInput + } + + export type BlogPostUncheckedUpdateManyWithoutTagsInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + authorId?: StringFieldUpdateOperationsInput | string + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogCommentCreateManyParentInput = { + id?: string + content: string + postId: string + authorId: string + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogCommentUpdateWithoutParentInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + post?: BlogPostUpdateOneRequiredWithoutCommentsNestedInput + author?: UserUpdateOneRequiredWithoutBlogCommentsNestedInput + replies?: BlogCommentUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateWithoutParentInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + replies?: BlogCommentUncheckedUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateManyWithoutParentInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + authorId?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type CartItemCreateManyCartInput = { + id?: string + productId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type CartItemUpdateWithoutCartInput = { + id?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + product?: ProductUpdateOneRequiredWithoutCartItemsNestedInput + } + + export type CartItemUncheckedUpdateWithoutCartInput = { + id?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type CartItemUncheckedUpdateManyWithoutCartInput = { + id?: StringFieldUpdateOperationsInput | string + productId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemCreateManyOrderInput = { + id?: string + productId?: string | null + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type OrderItemUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + product?: ProductUpdateOneWithoutOrderItemsNestedInput + } + + export type OrderItemUncheckedUpdateWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + productId?: NullableStringFieldUpdateOperationsInput | string | null + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemUncheckedUpdateManyWithoutOrderInput = { + id?: StringFieldUpdateOperationsInput | string + productId?: NullableStringFieldUpdateOperationsInput | string | null + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type ProductSizeStockCreateManyProductInput = { + id?: string + size: $Enums.ProductSize + stock?: number + } + + export type CartItemCreateManyProductInput = { + id?: string + cartId: string + size?: $Enums.ProductSize | null + quantity?: number + } + + export type OrderItemCreateManyProductInput = { + id?: string + orderId: string + productSlug: $Enums.ProductSlug + productName: string + size?: $Enums.ProductSize | null + price: Decimal | DecimalJsLike | number | string + quantity: number + } + + export type ReviewCreateManyProductInput = { + id?: string + rating?: number + comment?: string | null + userId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ProductSizeStockUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + } + + export type ProductSizeStockUncheckedUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + } + + export type ProductSizeStockUncheckedUpdateManyWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + size?: EnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize + stock?: IntFieldUpdateOperationsInput | number + } + + export type CartItemUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + cart?: CartUpdateOneRequiredWithoutItemsNestedInput + } + + export type CartItemUncheckedUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + cartId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type CartItemUncheckedUpdateManyWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + cartId?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + order?: OrderUpdateOneRequiredWithoutItemsNestedInput + } + + export type OrderItemUncheckedUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type OrderItemUncheckedUpdateManyWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + orderId?: StringFieldUpdateOperationsInput | string + productSlug?: EnumProductSlugFieldUpdateOperationsInput | $Enums.ProductSlug + productName?: StringFieldUpdateOperationsInput | string + size?: NullableEnumProductSizeFieldUpdateOperationsInput | $Enums.ProductSize | null + price?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + quantity?: IntFieldUpdateOperationsInput | number + } + + export type ReviewUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutReviewsNestedInput + } + + export type ReviewUncheckedUpdateWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ReviewUncheckedUpdateManyWithoutProductInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type AddressCreateManyUserInput = { + id?: string + recipient: string + phone: string + street: string + city: string + district: string + ward: string + isDefault?: boolean + } + + export type OrderCreateManyUserInput = { + id?: string + code: string + status?: $Enums.OrderStatus + paymentStatus?: $Enums.PaymentStatus + totalAmount: Decimal | DecimalJsLike | number | string + shippingFee?: Decimal | DecimalJsLike | number | string + discountValue?: Decimal | DecimalJsLike | number | string + shippingAddressId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ReviewCreateManyUserInput = { + id?: string + rating?: number + comment?: string | null + productId: string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type ExternalAccountCreateManyUserInput = { + id?: string + provider: $Enums.OAuthProvider + providerId: string + providerEmail?: string | null + accessToken?: string | null + refreshToken?: string | null + expiresAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type UserMFAMethodCreateManyUserInput = { + id?: string + methodType: $Enums.MFAMethod + secret?: string | null + phone?: string | null + isActive?: boolean + isVerified?: boolean + createdAt?: Date | string + updatedAt?: Date | string + lastUsedAt?: Date | string | null + } + + export type MFABackupCodeCreateManyUserInput = { + id?: string + code: string + isUsed?: boolean + usedAt?: Date | string | null + createdAt?: Date | string + } + + export type DeviceCreateManyUserInput = { + id?: string + name?: string | null + type?: $Enums.DeviceType + userAgent?: string | null + ipAddress?: string | null + fingerprint?: string | null + isTrusted?: boolean + lastSeenAt?: Date | string + createdAt?: Date | string + } + + export type SessionCreateManyUserInput = { + id?: string + token: string + refreshToken?: string | null + deviceId?: string | null + ipAddress?: string | null + userAgent?: string | null + status?: $Enums.SessionStatus + expiresAt: Date | string + revokedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogPostCreateManyAuthorInput = { + id?: string + slug: string + title: string + contentKey: string + contentSize?: number | null + excerpt?: string | null + coverImage?: string | null + isPublished?: boolean + publishedAt?: Date | string | null + viewCount?: number + metaTitle?: string | null + metaDescription?: string | null + createdAt?: Date | string + updatedAt?: Date | string + } + + export type BlogCommentCreateManyAuthorInput = { + id?: string + content: string + postId: string + parentId?: string | null + isApproved?: boolean + createdAt?: Date | string + updatedAt?: Date | string + } + + export type AddressUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + } + + export type AddressUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + } + + export type AddressUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + recipient?: StringFieldUpdateOperationsInput | string + phone?: StringFieldUpdateOperationsInput | string + street?: StringFieldUpdateOperationsInput | string + city?: StringFieldUpdateOperationsInput | string + district?: StringFieldUpdateOperationsInput | string + ward?: StringFieldUpdateOperationsInput | string + isDefault?: BoolFieldUpdateOperationsInput | boolean + } + + export type OrderUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + shippingAddress?: ShippingAddressUpdateOneRequiredWithoutOrderNestedInput + items?: OrderItemUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUpdateOneWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + items?: OrderItemUncheckedUpdateManyWithoutOrderNestedInput + paymentTransaction?: PaymentTransactionUncheckedUpdateOneWithoutOrderNestedInput + } + + export type OrderUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + status?: EnumOrderStatusFieldUpdateOperationsInput | $Enums.OrderStatus + paymentStatus?: EnumPaymentStatusFieldUpdateOperationsInput | $Enums.PaymentStatus + totalAmount?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingFee?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + discountValue?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string + shippingAddressId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ReviewUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + product?: ProductUpdateOneRequiredWithoutReviewsNestedInput + } + + export type ReviewUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + productId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ReviewUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + rating?: IntFieldUpdateOperationsInput | number + comment?: NullableStringFieldUpdateOperationsInput | string | null + productId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ExternalAccountUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ExternalAccountUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type ExternalAccountUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + provider?: EnumOAuthProviderFieldUpdateOperationsInput | $Enums.OAuthProvider + providerId?: StringFieldUpdateOperationsInput | string + providerEmail?: NullableStringFieldUpdateOperationsInput | string | null + accessToken?: NullableStringFieldUpdateOperationsInput | string | null + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserMFAMethodUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type UserMFAMethodUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type UserMFAMethodUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + methodType?: EnumMFAMethodFieldUpdateOperationsInput | $Enums.MFAMethod + secret?: NullableStringFieldUpdateOperationsInput | string | null + phone?: NullableStringFieldUpdateOperationsInput | string | null + isActive?: BoolFieldUpdateOperationsInput | boolean + isVerified?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + lastUsedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + } + + export type MFABackupCodeUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type MFABackupCodeUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type MFABackupCodeUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + code?: StringFieldUpdateOperationsInput | string + isUsed?: BoolFieldUpdateOperationsInput | boolean + usedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type DeviceUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + session?: SessionUpdateOneWithoutDeviceNestedInput + } + + export type DeviceUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + session?: SessionUncheckedUpdateOneWithoutDeviceNestedInput + } + + export type DeviceUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + name?: NullableStringFieldUpdateOperationsInput | string | null + type?: EnumDeviceTypeFieldUpdateOperationsInput | $Enums.DeviceType + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + fingerprint?: NullableStringFieldUpdateOperationsInput | string | null + isTrusted?: BoolFieldUpdateOperationsInput | boolean + lastSeenAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SessionUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + device?: DeviceUpdateOneWithoutSessionNestedInput + } + + export type SessionUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + deviceId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type SessionUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + token?: StringFieldUpdateOperationsInput | string + refreshToken?: NullableStringFieldUpdateOperationsInput | string | null + deviceId?: NullableStringFieldUpdateOperationsInput | string | null + ipAddress?: NullableStringFieldUpdateOperationsInput | string | null + userAgent?: NullableStringFieldUpdateOperationsInput | string | null + status?: EnumSessionStatusFieldUpdateOperationsInput | $Enums.SessionStatus + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + revokedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogPostUpdateWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + tags?: BlogTagUpdateManyWithoutPostsNestedInput + comments?: BlogCommentUpdateManyWithoutPostNestedInput + } + + export type BlogPostUncheckedUpdateWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + tags?: BlogTagUncheckedUpdateManyWithoutPostsNestedInput + comments?: BlogCommentUncheckedUpdateManyWithoutPostNestedInput + } + + export type BlogPostUncheckedUpdateManyWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + slug?: StringFieldUpdateOperationsInput | string + title?: StringFieldUpdateOperationsInput | string + contentKey?: StringFieldUpdateOperationsInput | string + contentSize?: NullableIntFieldUpdateOperationsInput | number | null + excerpt?: NullableStringFieldUpdateOperationsInput | string | null + coverImage?: NullableStringFieldUpdateOperationsInput | string | null + isPublished?: BoolFieldUpdateOperationsInput | boolean + publishedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + viewCount?: IntFieldUpdateOperationsInput | number + metaTitle?: NullableStringFieldUpdateOperationsInput | string | null + metaDescription?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type BlogCommentUpdateWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + post?: BlogPostUpdateOneRequiredWithoutCommentsNestedInput + parent?: BlogCommentUpdateOneWithoutRepliesNestedInput + replies?: BlogCommentUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + replies?: BlogCommentUncheckedUpdateManyWithoutParentNestedInput + } + + export type BlogCommentUncheckedUpdateManyWithoutAuthorInput = { + id?: StringFieldUpdateOperationsInput | string + content?: StringFieldUpdateOperationsInput | string + postId?: StringFieldUpdateOperationsInput | string + parentId?: NullableStringFieldUpdateOperationsInput | string | null + isApproved?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + + + /** + * Batch Payload for updateMany & deleteMany & createMany + */ + + export type BatchPayload = { + count: number + } + + /** + * DMMF + */ + export const dmmf: runtime.BaseDMMF +} \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/index.js b/apps/api-effect/src/generated/prisma/index.js new file mode 100644 index 00000000..1238d83f --- /dev/null +++ b/apps/api-effect/src/generated/prisma/index.js @@ -0,0 +1,713 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file + +Object.defineProperty(exports, "__esModule", { value: true }); + +const { + PrismaClientKnownRequestError, + PrismaClientUnknownRequestError, + PrismaClientRustPanicError, + PrismaClientInitializationError, + PrismaClientValidationError, + getPrismaClient, + sqltag, + empty, + join, + raw, + skip, + Decimal, + Debug, + DbNull, + JsonNull, + AnyNull, + NullTypes, + makeStrictEnum, + Extensions, + warnOnce, + defineDmmfProperty, + Public, + getRuntime, + createParam, +} = require('./runtime/client.js') + + +const Prisma = {} + +exports.Prisma = Prisma +exports.$Enums = {} + +/** + * Prisma Client JS version: 7.8.0 + * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a + */ +Prisma.prismaVersion = { + client: "7.8.0", + engine: "3c6e192761c0362d496ed980de936e2f3cebcd3a" +} + +Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError; +Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError +Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError +Prisma.PrismaClientInitializationError = PrismaClientInitializationError +Prisma.PrismaClientValidationError = PrismaClientValidationError +Prisma.Decimal = Decimal + +/** + * Re-export of sql-template-tag + */ +Prisma.sql = sqltag +Prisma.empty = empty +Prisma.join = join +Prisma.raw = raw +Prisma.validator = Public.validator + +/** +* Extensions +*/ +Prisma.getExtensionContext = Extensions.getExtensionContext +Prisma.defineExtension = Extensions.defineExtension + +/** + * Shorthand utilities for JSON filtering + */ +Prisma.DbNull = DbNull +Prisma.JsonNull = JsonNull +Prisma.AnyNull = AnyNull + +Prisma.NullTypes = NullTypes + + + + + const path = require('path') + +/** + * Enums + */ +exports.Prisma.TransactionIsolationLevel = makeStrictEnum({ + ReadUncommitted: 'ReadUncommitted', + ReadCommitted: 'ReadCommitted', + RepeatableRead: 'RepeatableRead', + Serializable: 'Serializable' +}); + +exports.Prisma.ExternalAccountScalarFieldEnum = { + id: 'id', + provider: 'provider', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + expiresAt: 'expiresAt', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.UserMFAMethodScalarFieldEnum = { + id: 'id', + methodType: 'methodType', + secret: 'secret', + phone: 'phone', + isActive: 'isActive', + isVerified: 'isVerified', + userId: 'userId', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + lastUsedAt: 'lastUsedAt' +}; + +exports.Prisma.MFABackupCodeScalarFieldEnum = { + id: 'id', + code: 'code', + isUsed: 'isUsed', + usedAt: 'usedAt', + userId: 'userId', + createdAt: 'createdAt' +}; + +exports.Prisma.DeviceScalarFieldEnum = { + id: 'id', + name: 'name', + type: 'type', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId', + isTrusted: 'isTrusted', + lastSeenAt: 'lastSeenAt', + createdAt: 'createdAt' +}; + +exports.Prisma.SessionScalarFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + status: 'status', + expiresAt: 'expiresAt', + revokedAt: 'revokedAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogPostScalarFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + contentSize: 'contentSize', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + isPublished: 'isPublished', + publishedAt: 'publishedAt', + viewCount: 'viewCount', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.BlogTagScalarFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentScalarFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId', + isApproved: 'isApproved', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.EventScalarFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + startDate: 'startDate', + endDate: 'endDate', + location: 'location', + type: 'type', + organizer: 'organizer', + attendees: 'attendees', + surveyLink: 'surveyLink', + createdBy: 'createdBy', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.VoucherScalarFieldEnum = { + id: 'id', + code: 'code', + type: 'type', + value: 'value', + minSpend: 'minSpend', + maxDiscount: 'maxDiscount', + usageLimit: 'usageLimit', + usedCount: 'usedCount', + startDate: 'startDate', + endDate: 'endDate', + isActive: 'isActive' +}; + +exports.Prisma.ReviewScalarFieldEnum = { + id: 'id', + rating: 'rating', + comment: 'comment', + userId: 'userId', + productId: 'productId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartScalarFieldEnum = { + id: 'id', + userId: 'userId', + updatedAt: 'updatedAt' +}; + +exports.Prisma.CartItemScalarFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId', + size: 'size', + quantity: 'quantity' +}; + +exports.Prisma.OrderScalarFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + status: 'status', + paymentStatus: 'paymentStatus', + totalAmount: 'totalAmount', + shippingFee: 'shippingFee', + discountValue: 'discountValue', + shippingAddressId: 'shippingAddressId', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ShippingAddressScalarFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.OrderItemScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productSlug: 'productSlug', + productName: 'productName', + size: 'size', + price: 'price', + quantity: 'quantity' +}; + +exports.Prisma.PaymentTransactionScalarFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + amount: 'amount', + status: 'status', + paymentUrl: 'paymentUrl', + payosData: 'payosData', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductScalarFieldEnum = { + id: 'id', + slug: 'slug', + name: 'name', + description: 'description', + priceCurrent: 'priceCurrent', + priceOriginal: 'priceOriginal', + priceDiscount: 'priceDiscount', + stock: 'stock', + hasSizes: 'hasSizes', + badge: 'badge', + ratingValue: 'ratingValue', + ratingCount: 'ratingCount', + isPublished: 'isPublished', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.ProductSizeStockScalarFieldEnum = { + id: 'id', + size: 'size', + stock: 'stock', + productId: 'productId' +}; + +exports.Prisma.SecurityLogScalarFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method', + metadata: 'metadata', + timestamp: 'timestamp' +}; + +exports.Prisma.UserScalarFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + role: 'role', + mfaEnabled: 'mfaEnabled', + mfaSecret: 'mfaSecret', + emailVerified: 'emailVerified', + phoneVerified: 'phoneVerified', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + +exports.Prisma.AddressScalarFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward', + isDefault: 'isDefault' +}; + +exports.Prisma.SortOrder = { + asc: 'asc', + desc: 'desc' +}; + +exports.Prisma.NullableJsonNullValueInput = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull +}; + +exports.Prisma.QueryMode = { + default: 'default', + insensitive: 'insensitive' +}; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; + +exports.Prisma.ExternalAccountOrderByRelevanceFieldEnum = { + id: 'id', + providerId: 'providerId', + providerEmail: 'providerEmail', + accessToken: 'accessToken', + refreshToken: 'refreshToken', + userId: 'userId' +}; + +exports.Prisma.UserMFAMethodOrderByRelevanceFieldEnum = { + id: 'id', + secret: 'secret', + phone: 'phone', + userId: 'userId' +}; + +exports.Prisma.MFABackupCodeOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId' +}; + +exports.Prisma.DeviceOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + userAgent: 'userAgent', + ipAddress: 'ipAddress', + fingerprint: 'fingerprint', + userId: 'userId' +}; + +exports.Prisma.SessionOrderByRelevanceFieldEnum = { + id: 'id', + token: 'token', + refreshToken: 'refreshToken', + userId: 'userId', + deviceId: 'deviceId', + ipAddress: 'ipAddress', + userAgent: 'userAgent' +}; + +exports.Prisma.BlogPostOrderByRelevanceFieldEnum = { + id: 'id', + slug: 'slug', + title: 'title', + contentKey: 'contentKey', + excerpt: 'excerpt', + coverImage: 'coverImage', + authorId: 'authorId', + metaTitle: 'metaTitle', + metaDescription: 'metaDescription' +}; + +exports.Prisma.BlogTagOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + slug: 'slug' +}; + +exports.Prisma.BlogCommentOrderByRelevanceFieldEnum = { + id: 'id', + content: 'content', + postId: 'postId', + authorId: 'authorId', + parentId: 'parentId' +}; + +exports.Prisma.EventOrderByRelevanceFieldEnum = { + id: 'id', + title: 'title', + description: 'description', + location: 'location', + organizer: 'organizer', + surveyLink: 'surveyLink', + createdBy: 'createdBy' +}; + +exports.Prisma.VoucherOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code' +}; + +exports.Prisma.ReviewOrderByRelevanceFieldEnum = { + id: 'id', + comment: 'comment', + userId: 'userId', + productId: 'productId' +}; + +exports.Prisma.CartOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId' +}; + +exports.Prisma.CartItemOrderByRelevanceFieldEnum = { + id: 'id', + cartId: 'cartId', + productId: 'productId' +}; + +exports.Prisma.OrderOrderByRelevanceFieldEnum = { + id: 'id', + code: 'code', + userId: 'userId', + shippingAddressId: 'shippingAddressId' +}; + +exports.Prisma.ShippingAddressOrderByRelevanceFieldEnum = { + id: 'id', + fullName: 'fullName', + phone: 'phone', + addressLine1: 'addressLine1', + addressLine2: 'addressLine2', + city: 'city', + district: 'district', + ward: 'ward', + postalCode: 'postalCode' +}; + +exports.Prisma.OrderItemOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + productId: 'productId', + productName: 'productName' +}; + +exports.Prisma.JsonNullValueFilter = { + DbNull: Prisma.DbNull, + JsonNull: Prisma.JsonNull, + AnyNull: Prisma.AnyNull +}; + +exports.Prisma.PaymentTransactionOrderByRelevanceFieldEnum = { + id: 'id', + orderId: 'orderId', + transactionCode: 'transactionCode', + paymentUrl: 'paymentUrl' +}; + +exports.Prisma.ProductOrderByRelevanceFieldEnum = { + id: 'id', + name: 'name', + description: 'description', + badge: 'badge' +}; + +exports.Prisma.ProductSizeStockOrderByRelevanceFieldEnum = { + id: 'id', + productId: 'productId' +}; + +exports.Prisma.SecurityLogOrderByRelevanceFieldEnum = { + id: 'id', + type: 'type', + severity: 'severity', + message: 'message', + userId: 'userId', + ipAddress: 'ipAddress', + userAgent: 'userAgent', + path: 'path', + method: 'method' +}; + +exports.Prisma.UserOrderByRelevanceFieldEnum = { + id: 'id', + email: 'email', + password: 'password', + fullName: 'fullName', + phone: 'phone', + avatar: 'avatar', + mfaSecret: 'mfaSecret' +}; + +exports.Prisma.AddressOrderByRelevanceFieldEnum = { + id: 'id', + userId: 'userId', + recipient: 'recipient', + phone: 'phone', + street: 'street', + city: 'city', + district: 'district', + ward: 'ward' +}; +exports.UserRole = exports.$Enums.UserRole = { + ADMIN: 'ADMIN', + CUSTOMER: 'CUSTOMER' +}; + +exports.OrderStatus = exports.$Enums.OrderStatus = { + PENDING: 'PENDING', + CONFIRMED: 'CONFIRMED', + PROCESSING: 'PROCESSING', + SHIPPING: 'SHIPPING', + DELIVERED: 'DELIVERED', + CANCELLED: 'CANCELLED', + RETURNED: 'RETURNED' +}; + +exports.PaymentStatus = exports.$Enums.PaymentStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + FAILED: 'FAILED', + REFUNDED: 'REFUNDED' +}; + +exports.DiscountType = exports.$Enums.DiscountType = { + PERCENTAGE: 'PERCENTAGE', + FIXED_AMOUNT: 'FIXED_AMOUNT' +}; + +exports.OAuthProvider = exports.$Enums.OAuthProvider = { + GOOGLE: 'GOOGLE', + FACEBOOK: 'FACEBOOK', + GITHUB: 'GITHUB', + APPLE: 'APPLE' +}; + +exports.MFAMethod = exports.$Enums.MFAMethod = { + TOTP: 'TOTP', + SMS: 'SMS', + EMAIL: 'EMAIL', + BACKUP_CODE: 'BACKUP_CODE' +}; + +exports.DeviceType = exports.$Enums.DeviceType = { + DESKTOP: 'DESKTOP', + MOBILE: 'MOBILE', + TABLET: 'TABLET', + UNKNOWN: 'UNKNOWN' +}; + +exports.SessionStatus = exports.$Enums.SessionStatus = { + ACTIVE: 'ACTIVE', + EXPIRED: 'EXPIRED', + REVOKED: 'REVOKED' +}; + +exports.ProductSlug = exports.$Enums.ProductSlug = { + AO_THUN: 'AO_THUN', + PAD_CHUOT: 'PAD_CHUOT', + DAY_DEO: 'DAY_DEO', + MOC_KHOA: 'MOC_KHOA' +}; + +exports.ProductSize = exports.$Enums.ProductSize = { + S: 'S', + M: 'M', + L: 'L', + XL: 'XL' +}; + +exports.EventType = exports.$Enums.EventType = { + MEETING: 'MEETING', + WORKSHOP: 'WORKSHOP', + SOCIAL: 'SOCIAL', + COMPETITION: 'COMPETITION', + SURVEY: 'SURVEY', + OTHER: 'OTHER' +}; + +exports.PaymentTransactionStatus = exports.$Enums.PaymentTransactionStatus = { + PENDING: 'PENDING', + PAID: 'PAID', + CANCELLED: 'CANCELLED', + EXPIRED: 'EXPIRED', + FAILED: 'FAILED' +}; + +exports.Prisma.ModelName = { + ExternalAccount: 'ExternalAccount', + UserMFAMethod: 'UserMFAMethod', + MFABackupCode: 'MFABackupCode', + Device: 'Device', + Session: 'Session', + BlogPost: 'BlogPost', + BlogTag: 'BlogTag', + BlogComment: 'BlogComment', + Event: 'Event', + Voucher: 'Voucher', + Review: 'Review', + Cart: 'Cart', + CartItem: 'CartItem', + Order: 'Order', + ShippingAddress: 'ShippingAddress', + OrderItem: 'OrderItem', + PaymentTransaction: 'PaymentTransaction', + Product: 'Product', + ProductSizeStock: 'ProductSizeStock', + SecurityLog: 'SecurityLog', + User: 'User', + Address: 'Address' +}; +/** + * Create the Client + */ +const config = { + "previewFeatures": [ + "fullTextSearchPostgres", + "postgresqlExtensions", + "views" + ], + "clientVersion": "7.8.0", + "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", + "activeProvider": "postgresql", + "inlineSchema": "// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// OAUTH & AUTHENTICATION\n// =========================================\n\n// Store OAuth login information (Google, Facebook, etc.)\nmodel ExternalAccount {\n id String @id @default(cuid())\n provider OAuthProvider\n providerId String @db.VarChar(255) // ID from provider (e.g.: Google user ID)\n providerEmail String? @db.VarChar(255) // Email from provider\n accessToken String? @db.Text // Encrypted access token\n refreshToken String? @db.Text // Encrypted refresh token\n expiresAt DateTime? // Token expiration\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Unique constraint: a provider can only be linked once with a user\n @@unique([provider, providerId])\n @@unique([provider, userId])\n @@index([userId])\n @@index([provider, providerId])\n @@map(\"external_accounts\")\n}\n\n// Manage user MFA methods\nmodel UserMFAMethod {\n id String @id @default(cuid())\n methodType MFAMethod // TOTP, SMS, EMAIL, BACKUP_CODE\n secret String? @db.Text // Encrypted secret (for TOTP)\n phone String? @db.VarChar(15) // For SMS\n isActive Boolean @default(true)\n isVerified Boolean @default(false) // Whether verified\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastUsedAt DateTime? // Last time used\n\n @@index([userId])\n @@map(\"mfa_methods\")\n}\n\n// Backup codes for MFA (single use)\nmodel MFABackupCode {\n id String @id @default(cuid())\n code String @db.VarChar(20) // Hashed backup code\n isUsed Boolean @default(false)\n usedAt DateTime?\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@map(\"mfa_backup_codes\")\n}\n\n// Log login devices\nmodel Device {\n id String @id @default(cuid())\n name String? @db.VarChar(255) // Device name (e.g.: \"iPhone 14 Pro\")\n type DeviceType @default(UNKNOWN)\n userAgent String? @db.Text // User agent string\n ipAddress String? @db.VarChar(45) // IPv4 or IPv6\n fingerprint String? @db.VarChar(255) // Device fingerprint\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n isTrusted Boolean @default(false) // User has trusted this device\n lastSeenAt DateTime @default(now())\n createdAt DateTime @default(now())\n\n // Relations\n session Session? // Current session of this device (one-to-one)\n\n @@index([userId])\n @@index([fingerprint])\n @@map(\"devices\")\n}\n\n// Manage login sessions\nmodel Session {\n id String @id @default(cuid())\n token String @unique @db.Text // Session token (JWT or random string)\n refreshToken String? @unique @db.Text // Refresh token\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n deviceId String? @unique // Link to Device (unique: one device has only one session)\n device Device? @relation(fields: [deviceId], references: [id], onDelete: SetNull)\n\n ipAddress String? @db.VarChar(45)\n userAgent String? @db.Text\n\n status SessionStatus @default(ACTIVE)\n expiresAt DateTime // Expiration time\n revokedAt DateTime? // Revocation time\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@index([token])\n @@index([status])\n @@index([expiresAt])\n @@map(\"sessions\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n//\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client-js\"\n output = \"../../src/generated/prisma\"\n binaryTargets = [\"native\", \"linux-musl-openssl-3.0.x\"]\n previewFeatures = [\"postgresqlExtensions\", \"views\", \"fullTextSearchPostgres\"]\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// BLOG MANAGEMENT (Hybrid Storage: PostgreSQL + R2)\n// =========================================\n\nmodel BlogPost {\n id String @id @default(cuid())\n slug String @unique\n title String @db.VarChar(255)\n\n // Content stored in R2\n contentKey String // R2 object key for the markdown file (e.g., \"blog/posts/{id}/content.md\")\n contentSize Int? // File size in bytes (for monitoring)\n\n // Searchable excerpt (stored in DB for full-text search)\n excerpt String? @db.VarChar(500)\n\n // Cover image (also in R2)\n coverImage String? // R2 object key to cover image\n\n authorId String\n author User @relation(fields: [authorId], references: [id])\n\n // Metadata\n isPublished Boolean @default(false)\n publishedAt DateTime?\n viewCount Int @default(0)\n\n // SEO\n metaTitle String? @db.VarChar(255)\n metaDescription String? @db.VarChar(500)\n\n // Relations\n tags BlogTag[]\n comments BlogComment[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([slug])\n @@index([isPublished, publishedAt])\n @@index([authorId])\n @@index([title]) // Index for title search\n @@index([excerpt]) // Index for excerpt search\n @@map(\"blog_posts\")\n}\n\nmodel BlogTag {\n id String @id @default(cuid())\n name String @unique @db.VarChar(50)\n slug String @unique @db.VarChar(50)\n\n posts BlogPost[]\n\n @@map(\"blog_tags\")\n}\n\nmodel BlogComment {\n id String @id @default(cuid())\n content String @db.Text\n postId String\n post BlogPost @relation(fields: [postId], references: [id], onDelete: Cascade)\n authorId String\n author User @relation(fields: [authorId], references: [id])\n\n parentId String? // For nested comments\n parent BlogComment? @relation(\"CommentReplies\", fields: [parentId], references: [id])\n replies BlogComment[] @relation(\"CommentReplies\")\n\n isApproved Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([postId])\n @@index([authorId])\n @@map(\"blog_comments\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// ENUMS (Define fixed value sets)\n// =========================================\n\nenum UserRole {\n ADMIN // Shop owner\n CUSTOMER // Customer\n}\n\nenum OrderStatus {\n PENDING // Awaiting payment\n CONFIRMED // Confirmed\n PROCESSING // Packaging\n SHIPPING // Shipping\n DELIVERED // Delivered successfully\n CANCELLED // Cancelled\n RETURNED // Returned\n}\n\nenum PaymentStatus {\n PENDING\n PAID\n FAILED\n REFUNDED\n}\n\nenum DiscountType {\n PERCENTAGE // Discount by percentage\n FIXED_AMOUNT // Fixed amount discount\n}\n\nenum OAuthProvider {\n GOOGLE\n FACEBOOK\n GITHUB\n APPLE\n}\n\nenum MFAMethod {\n TOTP // Time-based One-Time Password (Google Authenticator, Authy)\n SMS // SMS OTP\n EMAIL // Email OTP\n BACKUP_CODE // Backup codes\n}\n\nenum DeviceType {\n DESKTOP\n MOBILE\n TABLET\n UNKNOWN\n}\n\nenum SessionStatus {\n ACTIVE\n EXPIRED\n REVOKED\n}\n\n// =========================================\n// PRODUCT ENUMS\n// =========================================\n\nenum ProductSlug {\n AO_THUN // T-shirt WebDev Studios\n PAD_CHUOT // Mouse pad WebDev Studios\n DAY_DEO // Lanyard WebDev Studios\n MOC_KHOA // Keychain WebDev Studios\n}\n\n/**\n * Product size (only t-shirt has sizes)\n */\nenum ProductSize {\n S\n M\n L\n XL\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// EVENTS (Club event calendar)\n// =========================================\n\nenum EventType {\n MEETING // Meeting\n WORKSHOP // Workshop\n SOCIAL // Social event\n COMPETITION // Competition\n SURVEY // Survey\n OTHER // Other\n}\n\nmodel Event {\n id String @id @default(cuid())\n title String @db.VarChar(255)\n description String? @db.Text\n startDate DateTime @db.Timestamptz(6)\n endDate DateTime @db.Timestamptz(6)\n location String? @db.VarChar(255)\n type EventType\n organizer String? @db.VarChar(100)\n attendees Int? // Number of attendees (optional)\n surveyLink String? @db.Text // Google Form link for SURVEY events\n\n // Audit fields\n createdBy String? // User ID of admin who created event\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([startDate])\n @@index([endDate])\n @@index([type])\n @@map(\"events\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// MARKETING & SOCIAL\n// =========================================\n\nmodel Voucher {\n id String @id @default(cuid())\n code String @unique @db.VarChar(20)\n type DiscountType\n value Decimal @db.Money // Discount value (amount or %)\n\n minSpend Decimal? @db.Money // Minimum order\n maxDiscount Decimal? @db.Money // Maximum discount (for % type)\n\n usageLimit Int @default(100) // Total usage count\n usedCount Int @default(0) // Used count\n\n startDate DateTime\n endDate DateTime\n isActive Boolean @default(true)\n\n @@map(\"vouchers\")\n}\n\nmodel Review {\n id String @id @default(cuid())\n rating Int @default(5) // 1-5 stars\n comment String? @db.Text\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n productId String\n product Product @relation(fields: [productId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([productId])\n @@index([userId])\n @@map(\"reviews\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// CART & ORDER SYSTEM\n// =========================================\n\nmodel Cart {\n id String @id @default(cuid())\n userId String @unique\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n items CartItem[]\n updatedAt DateTime @updatedAt\n\n @@map(\"carts\")\n}\n\nmodel CartItem {\n id String @id @default(cuid())\n cartId String\n cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade)\n\n productId String\n product Product @relation(fields: [productId], references: [id])\n\n size ProductSize? // Product size (only t-shirt has, nullable)\n quantity Int @default(1)\n\n @@unique([cartId, productId, size]) // A product + size can only appear once in a cart\n @@index([cartId])\n @@map(\"cart_items\")\n}\n\nmodel Order {\n id String @id @default(cuid())\n code String @unique // Short order code for customer (e.g.: #ORD-1234)\n\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n status OrderStatus @default(PENDING)\n paymentStatus PaymentStatus @default(PENDING)\n\n totalAmount Decimal @db.Money // Final total amount\n shippingFee Decimal @default(0) @db.Money\n discountValue Decimal @default(0) @db.Money\n\n // Shipping address snapshot (Store text data to prevent changes when user edits profile)\n shippingAddressId String @unique\n shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n items OrderItem[]\n paymentTransaction PaymentTransaction?\n\n @@map(\"orders\")\n}\n\n/**\n * Shipping address (Snapshot at order time)\n */\nmodel ShippingAddress {\n id String @id @default(cuid())\n fullName String @db.VarChar(255)\n phone String @db.VarChar(20)\n addressLine1 String @db.VarChar(255)\n addressLine2 String? @db.VarChar(255)\n city String @db.VarChar(100)\n district String @db.VarChar(100)\n ward String @db.VarChar(100)\n postalCode String @db.VarChar(20)\n\n order Order?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"shipping_addresses\")\n}\n\n// Store product state AT TIME OF PURCHASE (Snapshot)\nmodel OrderItem {\n id String @id @default(cuid())\n orderId String\n order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)\n\n productId String? // Can be null if product is deleted later\n product Product? @relation(fields: [productId], references: [id])\n\n // Snapshot data (stored to prevent changes when product is updated)\n productSlug ProductSlug // Store slug for easy lookup\n productName String @db.VarChar(255) // Store product name\n size ProductSize? // Product size (if available)\n price Decimal @db.Money // Store price at time of purchase\n quantity Int\n\n @@index([orderId])\n @@map(\"order_items\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// PAYMENT SYSTEM\n// =========================================\n\nmodel PaymentTransaction {\n id String @id @default(cuid())\n orderId String @unique\n order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)\n transactionCode String @unique // PayOS transaction code\n amount Decimal @db.Money\n status PaymentTransactionStatus @default(PENDING)\n paymentUrl String? // URL for redirect\n payosData Json? // Store raw data from PayOS\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"payment_transactions\")\n}\n\nenum PaymentTransactionStatus {\n PENDING\n PAID\n CANCELLED\n EXPIRED\n FAILED\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// PRODUCT MANAGEMENT (Simplified for 4 fixed products)\n// =========================================\n\nmodel Product {\n id String @id @default(cuid())\n slug ProductSlug @unique // Enum ensures only 4 products\n name String @db.VarChar(255)\n description String @db.Text\n\n // Product pricing\n priceCurrent Decimal @db.Money // Current price\n priceOriginal Decimal? @db.Money // Original price (if discounted)\n priceDiscount Decimal? @db.Money // Discount amount\n\n // Product information\n stock Int @default(0) // Total stock quantity\n hasSizes Boolean @default(false) // Whether size selection is supported (only t-shirt)\n badge String? @db.VarChar(50) // Display badge (Limited Edition, Official Merch)\n\n // Product ratings\n ratingValue Decimal @default(0) @db.Decimal(3, 2) // Rating score (0-5)\n ratingCount Int @default(0) // Number of ratings\n\n // Metadata\n isPublished Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n sizeStocks ProductSizeStock[] // Manage stock by size (only t-shirt)\n cartItems CartItem[]\n orderItems OrderItem[]\n reviews Review[]\n\n @@index([slug])\n @@map(\"products\")\n}\n\n/**\n * Manage stock by size (only for t-shirt)\n * If product doesn't have sizes, stock is stored directly in Product.stock\n */\nmodel ProductSizeStock {\n id String @id @default(cuid())\n size ProductSize // S, M, L, XL\n stock Int @default(0)\n\n productId String\n product Product @relation(fields: [productId], references: [id], onDelete: Cascade)\n\n @@unique([productId, size]) // Each size of a product has only 1 record\n @@index([productId])\n @@map(\"product_size_stocks\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\nmodel SecurityLog {\n id String @id @default(cuid())\n type String // SecurityEventType enum\n severity String // low, medium, high, critical\n message String @db.Text\n userId String?\n ipAddress String?\n userAgent String?\n path String?\n method String?\n metadata Json?\n timestamp DateTime @default(now())\n\n // Indexes for efficient querying\n @@index([type])\n @@index([severity])\n @@index([timestamp])\n @@index([userId])\n @@index([ipAddress])\n @@map(\"security_logs\")\n}\n\n// Copyright (c) 2026 Xiro The Dev \n//\n// Source Available License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to:\n// - View and study the Software for educational purposes\n// - Fork this repository on GitHub for personal reference\n// - Share links to this repository\n//\n// THE FOLLOWING ARE PROHIBITED:\n// - Using the Software in production or commercial applications\n// - Copying substantial portions of the Software into other projects\n// - Distributing modified versions of the Software\n// - Removing or altering copyright notices\n//\n// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n//\n// =========================================\n// USER & AUTHENTICATION\n// =========================================\n\nmodel User {\n id String @id @default(uuid())\n email String @unique @db.VarChar(255)\n password String? @db.Text // Nullable because OAuth users don't have password\n fullName String? @db.VarChar(100)\n phone String? @db.VarChar(15)\n avatar String? @db.Text\n role UserRole @default(CUSTOMER)\n\n // MFA fields\n mfaEnabled Boolean @default(false)\n mfaSecret String? @db.Text // TOTP secret (encrypted)\n\n emailVerified Boolean @default(false)\n phoneVerified Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relations\n addresses Address[]\n orders Order[]\n reviews Review[]\n cart Cart? // 1 User has only 1 active cart\n externalAccounts ExternalAccount[] // OAuth accounts\n mfaMethods UserMFAMethod[] // MFA methods\n mfaBackupCodes MFABackupCode[] // MFA backup codes\n devices Device[] // Logged devices\n sessions Session[] // Active sessions\n blogPosts BlogPost[] // Blog posts authored by user\n blogComments BlogComment[] // Blog comments by user\n\n @@map(\"users\")\n}\n\nmodel Address {\n id String @id @default(cuid())\n userId String\n recipient String @db.VarChar(100) // Recipient name\n phone String @db.VarChar(15)\n street String @db.Text\n city String @db.VarChar(50)\n district String @db.VarChar(50)\n ward String @db.VarChar(50)\n isDefault Boolean @default(false)\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@map(\"addresses\")\n}\n" +} + +config.runtimeDataModel = JSON.parse("{\"models\":{\"ExternalAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"provider\",\"kind\":\"enum\",\"type\":\"OAuthProvider\"},{\"name\":\"providerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerEmail\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"accessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ExternalAccountToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"external_accounts\"},\"UserMFAMethod\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"methodType\",\"kind\":\"enum\",\"type\":\"MFAMethod\"},{\"name\":\"secret\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserMFAMethod\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastUsedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mfa_methods\"},\"MFABackupCode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isUsed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MFABackupCodeToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mfa_backup_codes\"},\"Device\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DeviceType\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fingerprint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeviceToUser\"},{\"name\":\"isTrusted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"lastSeenAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"DeviceToSession\"}],\"dbName\":\"devices\"},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"},{\"name\":\"deviceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"device\",\"kind\":\"object\",\"type\":\"Device\",\"relationName\":\"DeviceToSession\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"SessionStatus\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"revokedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"sessions\"},\"BlogPost\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentSize\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"excerpt\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"coverImage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"authorId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"author\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BlogPostToUser\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"viewCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"metaTitle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metaDescription\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tags\",\"kind\":\"object\",\"type\":\"BlogTag\",\"relationName\":\"BlogPostToBlogTag\"},{\"name\":\"comments\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"BlogCommentToBlogPost\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"blog_posts\"},\"BlogTag\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posts\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogPostToBlogTag\"}],\"dbName\":\"blog_tags\"},\"BlogComment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"post\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogCommentToBlogPost\"},{\"name\":\"authorId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"author\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"BlogCommentToUser\"},{\"name\":\"parentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"parent\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"CommentReplies\"},{\"name\":\"replies\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"CommentReplies\"},{\"name\":\"isApproved\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"blog_comments\"},\"Event\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"location\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"EventType\"},{\"name\":\"organizer\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attendees\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"surveyLink\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"events\"},\"Voucher\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DiscountType\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"minSpend\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"maxDiscount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"usageLimit\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"usedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"}],\"dbName\":\"vouchers\"},\"Review\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"comment\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ReviewToUser\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"ProductToReview\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"reviews\"},\"Cart\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"CartToUser\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"CartItem\",\"relationName\":\"CartToCartItem\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"carts\"},\"CartItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cartId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cart\",\"kind\":\"object\",\"type\":\"Cart\",\"relationName\":\"CartToCartItem\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"CartItemToProduct\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":\"cart_items\"},\"Order\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"code\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrderToUser\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"OrderStatus\"},{\"name\":\"paymentStatus\",\"kind\":\"enum\",\"type\":\"PaymentStatus\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"shippingFee\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"discountValue\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"shippingAddressId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shippingAddress\",\"kind\":\"object\",\"type\":\"ShippingAddress\",\"relationName\":\"OrderToShippingAddress\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"OrderItem\",\"relationName\":\"OrderToOrderItem\"},{\"name\":\"paymentTransaction\",\"kind\":\"object\",\"type\":\"PaymentTransaction\",\"relationName\":\"OrderToPaymentTransaction\"}],\"dbName\":\"orders\"},\"ShippingAddress\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addressLine1\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"addressLine2\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ward\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"postalCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToShippingAddress\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"shipping_addresses\"},\"OrderItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToOrderItem\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"OrderItemToProduct\"},{\"name\":\"productSlug\",\"kind\":\"enum\",\"type\":\"ProductSlug\"},{\"name\":\"productName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"quantity\",\"kind\":\"scalar\",\"type\":\"Int\"}],\"dbName\":\"order_items\"},\"PaymentTransaction\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orderId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToPaymentTransaction\"},{\"name\":\"transactionCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"PaymentTransactionStatus\"},{\"name\":\"paymentUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"payosData\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"payment_transactions\"},\"Product\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"enum\",\"type\":\"ProductSlug\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"priceCurrent\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"priceOriginal\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"priceDiscount\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"stock\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"hasSizes\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"badge\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ratingValue\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"ratingCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sizeStocks\",\"kind\":\"object\",\"type\":\"ProductSizeStock\",\"relationName\":\"ProductToProductSizeStock\"},{\"name\":\"cartItems\",\"kind\":\"object\",\"type\":\"CartItem\",\"relationName\":\"CartItemToProduct\"},{\"name\":\"orderItems\",\"kind\":\"object\",\"type\":\"OrderItem\",\"relationName\":\"OrderItemToProduct\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"Review\",\"relationName\":\"ProductToReview\"}],\"dbName\":\"products\"},\"ProductSizeStock\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"enum\",\"type\":\"ProductSize\"},{\"name\":\"stock\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"productId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"product\",\"kind\":\"object\",\"type\":\"Product\",\"relationName\":\"ProductToProductSizeStock\"}],\"dbName\":\"product_size_stocks\"},\"SecurityLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"severity\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ipAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userAgent\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"method\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"timestamp\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"security_logs\"},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fullName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"UserRole\"},{\"name\":\"mfaEnabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"mfaSecret\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"emailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"phoneVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"addresses\",\"kind\":\"object\",\"type\":\"Address\",\"relationName\":\"AddressToUser\"},{\"name\":\"orders\",\"kind\":\"object\",\"type\":\"Order\",\"relationName\":\"OrderToUser\"},{\"name\":\"reviews\",\"kind\":\"object\",\"type\":\"Review\",\"relationName\":\"ReviewToUser\"},{\"name\":\"cart\",\"kind\":\"object\",\"type\":\"Cart\",\"relationName\":\"CartToUser\"},{\"name\":\"externalAccounts\",\"kind\":\"object\",\"type\":\"ExternalAccount\",\"relationName\":\"ExternalAccountToUser\"},{\"name\":\"mfaMethods\",\"kind\":\"object\",\"type\":\"UserMFAMethod\",\"relationName\":\"UserToUserMFAMethod\"},{\"name\":\"mfaBackupCodes\",\"kind\":\"object\",\"type\":\"MFABackupCode\",\"relationName\":\"MFABackupCodeToUser\"},{\"name\":\"devices\",\"kind\":\"object\",\"type\":\"Device\",\"relationName\":\"DeviceToUser\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"blogPosts\",\"kind\":\"object\",\"type\":\"BlogPost\",\"relationName\":\"BlogPostToUser\"},{\"name\":\"blogComments\",\"kind\":\"object\",\"type\":\"BlogComment\",\"relationName\":\"BlogCommentToUser\"}],\"dbName\":\"users\"},\"Address\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"recipient\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"street\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ward\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AddressToUser\"}],\"dbName\":\"addresses\"}},\"enums\":{},\"types\":{}}") +defineDmmfProperty(exports.Prisma, config.runtimeDataModel) +config.parameterizationSchema = { + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"addresses\",\"order\",\"shippingAddress\",\"product\",\"sizeStocks\",\"items\",\"_count\",\"cart\",\"cartItems\",\"orderItems\",\"reviews\",\"paymentTransaction\",\"orders\",\"externalAccounts\",\"mfaMethods\",\"mfaBackupCodes\",\"device\",\"session\",\"devices\",\"sessions\",\"author\",\"posts\",\"tags\",\"post\",\"parent\",\"replies\",\"comments\",\"blogPosts\",\"blogComments\",\"ExternalAccount.findUnique\",\"ExternalAccount.findUniqueOrThrow\",\"ExternalAccount.findFirst\",\"ExternalAccount.findFirstOrThrow\",\"ExternalAccount.findMany\",\"data\",\"ExternalAccount.createOne\",\"ExternalAccount.createMany\",\"ExternalAccount.createManyAndReturn\",\"ExternalAccount.updateOne\",\"ExternalAccount.updateMany\",\"ExternalAccount.updateManyAndReturn\",\"create\",\"update\",\"ExternalAccount.upsertOne\",\"ExternalAccount.deleteOne\",\"ExternalAccount.deleteMany\",\"having\",\"_min\",\"_max\",\"ExternalAccount.groupBy\",\"ExternalAccount.aggregate\",\"UserMFAMethod.findUnique\",\"UserMFAMethod.findUniqueOrThrow\",\"UserMFAMethod.findFirst\",\"UserMFAMethod.findFirstOrThrow\",\"UserMFAMethod.findMany\",\"UserMFAMethod.createOne\",\"UserMFAMethod.createMany\",\"UserMFAMethod.createManyAndReturn\",\"UserMFAMethod.updateOne\",\"UserMFAMethod.updateMany\",\"UserMFAMethod.updateManyAndReturn\",\"UserMFAMethod.upsertOne\",\"UserMFAMethod.deleteOne\",\"UserMFAMethod.deleteMany\",\"UserMFAMethod.groupBy\",\"UserMFAMethod.aggregate\",\"MFABackupCode.findUnique\",\"MFABackupCode.findUniqueOrThrow\",\"MFABackupCode.findFirst\",\"MFABackupCode.findFirstOrThrow\",\"MFABackupCode.findMany\",\"MFABackupCode.createOne\",\"MFABackupCode.createMany\",\"MFABackupCode.createManyAndReturn\",\"MFABackupCode.updateOne\",\"MFABackupCode.updateMany\",\"MFABackupCode.updateManyAndReturn\",\"MFABackupCode.upsertOne\",\"MFABackupCode.deleteOne\",\"MFABackupCode.deleteMany\",\"MFABackupCode.groupBy\",\"MFABackupCode.aggregate\",\"Device.findUnique\",\"Device.findUniqueOrThrow\",\"Device.findFirst\",\"Device.findFirstOrThrow\",\"Device.findMany\",\"Device.createOne\",\"Device.createMany\",\"Device.createManyAndReturn\",\"Device.updateOne\",\"Device.updateMany\",\"Device.updateManyAndReturn\",\"Device.upsertOne\",\"Device.deleteOne\",\"Device.deleteMany\",\"Device.groupBy\",\"Device.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"BlogPost.findUnique\",\"BlogPost.findUniqueOrThrow\",\"BlogPost.findFirst\",\"BlogPost.findFirstOrThrow\",\"BlogPost.findMany\",\"BlogPost.createOne\",\"BlogPost.createMany\",\"BlogPost.createManyAndReturn\",\"BlogPost.updateOne\",\"BlogPost.updateMany\",\"BlogPost.updateManyAndReturn\",\"BlogPost.upsertOne\",\"BlogPost.deleteOne\",\"BlogPost.deleteMany\",\"_avg\",\"_sum\",\"BlogPost.groupBy\",\"BlogPost.aggregate\",\"BlogTag.findUnique\",\"BlogTag.findUniqueOrThrow\",\"BlogTag.findFirst\",\"BlogTag.findFirstOrThrow\",\"BlogTag.findMany\",\"BlogTag.createOne\",\"BlogTag.createMany\",\"BlogTag.createManyAndReturn\",\"BlogTag.updateOne\",\"BlogTag.updateMany\",\"BlogTag.updateManyAndReturn\",\"BlogTag.upsertOne\",\"BlogTag.deleteOne\",\"BlogTag.deleteMany\",\"BlogTag.groupBy\",\"BlogTag.aggregate\",\"BlogComment.findUnique\",\"BlogComment.findUniqueOrThrow\",\"BlogComment.findFirst\",\"BlogComment.findFirstOrThrow\",\"BlogComment.findMany\",\"BlogComment.createOne\",\"BlogComment.createMany\",\"BlogComment.createManyAndReturn\",\"BlogComment.updateOne\",\"BlogComment.updateMany\",\"BlogComment.updateManyAndReturn\",\"BlogComment.upsertOne\",\"BlogComment.deleteOne\",\"BlogComment.deleteMany\",\"BlogComment.groupBy\",\"BlogComment.aggregate\",\"Event.findUnique\",\"Event.findUniqueOrThrow\",\"Event.findFirst\",\"Event.findFirstOrThrow\",\"Event.findMany\",\"Event.createOne\",\"Event.createMany\",\"Event.createManyAndReturn\",\"Event.updateOne\",\"Event.updateMany\",\"Event.updateManyAndReturn\",\"Event.upsertOne\",\"Event.deleteOne\",\"Event.deleteMany\",\"Event.groupBy\",\"Event.aggregate\",\"Voucher.findUnique\",\"Voucher.findUniqueOrThrow\",\"Voucher.findFirst\",\"Voucher.findFirstOrThrow\",\"Voucher.findMany\",\"Voucher.createOne\",\"Voucher.createMany\",\"Voucher.createManyAndReturn\",\"Voucher.updateOne\",\"Voucher.updateMany\",\"Voucher.updateManyAndReturn\",\"Voucher.upsertOne\",\"Voucher.deleteOne\",\"Voucher.deleteMany\",\"Voucher.groupBy\",\"Voucher.aggregate\",\"Review.findUnique\",\"Review.findUniqueOrThrow\",\"Review.findFirst\",\"Review.findFirstOrThrow\",\"Review.findMany\",\"Review.createOne\",\"Review.createMany\",\"Review.createManyAndReturn\",\"Review.updateOne\",\"Review.updateMany\",\"Review.updateManyAndReturn\",\"Review.upsertOne\",\"Review.deleteOne\",\"Review.deleteMany\",\"Review.groupBy\",\"Review.aggregate\",\"Cart.findUnique\",\"Cart.findUniqueOrThrow\",\"Cart.findFirst\",\"Cart.findFirstOrThrow\",\"Cart.findMany\",\"Cart.createOne\",\"Cart.createMany\",\"Cart.createManyAndReturn\",\"Cart.updateOne\",\"Cart.updateMany\",\"Cart.updateManyAndReturn\",\"Cart.upsertOne\",\"Cart.deleteOne\",\"Cart.deleteMany\",\"Cart.groupBy\",\"Cart.aggregate\",\"CartItem.findUnique\",\"CartItem.findUniqueOrThrow\",\"CartItem.findFirst\",\"CartItem.findFirstOrThrow\",\"CartItem.findMany\",\"CartItem.createOne\",\"CartItem.createMany\",\"CartItem.createManyAndReturn\",\"CartItem.updateOne\",\"CartItem.updateMany\",\"CartItem.updateManyAndReturn\",\"CartItem.upsertOne\",\"CartItem.deleteOne\",\"CartItem.deleteMany\",\"CartItem.groupBy\",\"CartItem.aggregate\",\"Order.findUnique\",\"Order.findUniqueOrThrow\",\"Order.findFirst\",\"Order.findFirstOrThrow\",\"Order.findMany\",\"Order.createOne\",\"Order.createMany\",\"Order.createManyAndReturn\",\"Order.updateOne\",\"Order.updateMany\",\"Order.updateManyAndReturn\",\"Order.upsertOne\",\"Order.deleteOne\",\"Order.deleteMany\",\"Order.groupBy\",\"Order.aggregate\",\"ShippingAddress.findUnique\",\"ShippingAddress.findUniqueOrThrow\",\"ShippingAddress.findFirst\",\"ShippingAddress.findFirstOrThrow\",\"ShippingAddress.findMany\",\"ShippingAddress.createOne\",\"ShippingAddress.createMany\",\"ShippingAddress.createManyAndReturn\",\"ShippingAddress.updateOne\",\"ShippingAddress.updateMany\",\"ShippingAddress.updateManyAndReturn\",\"ShippingAddress.upsertOne\",\"ShippingAddress.deleteOne\",\"ShippingAddress.deleteMany\",\"ShippingAddress.groupBy\",\"ShippingAddress.aggregate\",\"OrderItem.findUnique\",\"OrderItem.findUniqueOrThrow\",\"OrderItem.findFirst\",\"OrderItem.findFirstOrThrow\",\"OrderItem.findMany\",\"OrderItem.createOne\",\"OrderItem.createMany\",\"OrderItem.createManyAndReturn\",\"OrderItem.updateOne\",\"OrderItem.updateMany\",\"OrderItem.updateManyAndReturn\",\"OrderItem.upsertOne\",\"OrderItem.deleteOne\",\"OrderItem.deleteMany\",\"OrderItem.groupBy\",\"OrderItem.aggregate\",\"PaymentTransaction.findUnique\",\"PaymentTransaction.findUniqueOrThrow\",\"PaymentTransaction.findFirst\",\"PaymentTransaction.findFirstOrThrow\",\"PaymentTransaction.findMany\",\"PaymentTransaction.createOne\",\"PaymentTransaction.createMany\",\"PaymentTransaction.createManyAndReturn\",\"PaymentTransaction.updateOne\",\"PaymentTransaction.updateMany\",\"PaymentTransaction.updateManyAndReturn\",\"PaymentTransaction.upsertOne\",\"PaymentTransaction.deleteOne\",\"PaymentTransaction.deleteMany\",\"PaymentTransaction.groupBy\",\"PaymentTransaction.aggregate\",\"Product.findUnique\",\"Product.findUniqueOrThrow\",\"Product.findFirst\",\"Product.findFirstOrThrow\",\"Product.findMany\",\"Product.createOne\",\"Product.createMany\",\"Product.createManyAndReturn\",\"Product.updateOne\",\"Product.updateMany\",\"Product.updateManyAndReturn\",\"Product.upsertOne\",\"Product.deleteOne\",\"Product.deleteMany\",\"Product.groupBy\",\"Product.aggregate\",\"ProductSizeStock.findUnique\",\"ProductSizeStock.findUniqueOrThrow\",\"ProductSizeStock.findFirst\",\"ProductSizeStock.findFirstOrThrow\",\"ProductSizeStock.findMany\",\"ProductSizeStock.createOne\",\"ProductSizeStock.createMany\",\"ProductSizeStock.createManyAndReturn\",\"ProductSizeStock.updateOne\",\"ProductSizeStock.updateMany\",\"ProductSizeStock.updateManyAndReturn\",\"ProductSizeStock.upsertOne\",\"ProductSizeStock.deleteOne\",\"ProductSizeStock.deleteMany\",\"ProductSizeStock.groupBy\",\"ProductSizeStock.aggregate\",\"SecurityLog.findUnique\",\"SecurityLog.findUniqueOrThrow\",\"SecurityLog.findFirst\",\"SecurityLog.findFirstOrThrow\",\"SecurityLog.findMany\",\"SecurityLog.createOne\",\"SecurityLog.createMany\",\"SecurityLog.createManyAndReturn\",\"SecurityLog.updateOne\",\"SecurityLog.updateMany\",\"SecurityLog.updateManyAndReturn\",\"SecurityLog.upsertOne\",\"SecurityLog.deleteOne\",\"SecurityLog.deleteMany\",\"SecurityLog.groupBy\",\"SecurityLog.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"Address.findUnique\",\"Address.findUniqueOrThrow\",\"Address.findFirst\",\"Address.findFirstOrThrow\",\"Address.findMany\",\"Address.createOne\",\"Address.createMany\",\"Address.createManyAndReturn\",\"Address.updateOne\",\"Address.updateMany\",\"Address.updateManyAndReturn\",\"Address.upsertOne\",\"Address.deleteOne\",\"Address.deleteMany\",\"Address.groupBy\",\"Address.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"userId\",\"recipient\",\"phone\",\"street\",\"city\",\"district\",\"ward\",\"isDefault\",\"equals\",\"not\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"email\",\"password\",\"fullName\",\"avatar\",\"UserRole\",\"role\",\"mfaEnabled\",\"mfaSecret\",\"emailVerified\",\"phoneVerified\",\"createdAt\",\"updatedAt\",\"every\",\"some\",\"none\",\"type\",\"severity\",\"message\",\"ipAddress\",\"userAgent\",\"path\",\"method\",\"metadata\",\"timestamp\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"ProductSize\",\"size\",\"stock\",\"productId\",\"ProductSlug\",\"slug\",\"name\",\"description\",\"priceCurrent\",\"priceOriginal\",\"priceDiscount\",\"hasSizes\",\"badge\",\"ratingValue\",\"ratingCount\",\"isPublished\",\"orderId\",\"transactionCode\",\"amount\",\"PaymentTransactionStatus\",\"status\",\"paymentUrl\",\"payosData\",\"productSlug\",\"productName\",\"price\",\"quantity\",\"addressLine1\",\"addressLine2\",\"postalCode\",\"code\",\"OrderStatus\",\"PaymentStatus\",\"paymentStatus\",\"totalAmount\",\"shippingFee\",\"discountValue\",\"shippingAddressId\",\"cartId\",\"rating\",\"comment\",\"DiscountType\",\"value\",\"minSpend\",\"maxDiscount\",\"usageLimit\",\"usedCount\",\"startDate\",\"endDate\",\"isActive\",\"title\",\"location\",\"EventType\",\"organizer\",\"attendees\",\"surveyLink\",\"createdBy\",\"content\",\"postId\",\"authorId\",\"parentId\",\"isApproved\",\"contentKey\",\"contentSize\",\"excerpt\",\"coverImage\",\"publishedAt\",\"viewCount\",\"metaTitle\",\"metaDescription\",\"token\",\"refreshToken\",\"deviceId\",\"SessionStatus\",\"expiresAt\",\"revokedAt\",\"DeviceType\",\"fingerprint\",\"isTrusted\",\"lastSeenAt\",\"isUsed\",\"usedAt\",\"MFAMethod\",\"methodType\",\"secret\",\"isVerified\",\"lastUsedAt\",\"OAuthProvider\",\"provider\",\"providerId\",\"providerEmail\",\"accessToken\",\"cartId_productId_size\",\"productId_size\",\"provider_providerId\",\"provider_userId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"_relevance\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "6grMAeACEAMAALUFACCJAwAA7gUAMIoDAAArABCLAwAA7gUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGGBAEA8QQAIYkEQADjBQAhlwQAAO8FlwQimAQBAPAEACGZBAEA8QQAIZoEAQDxBAAhnQQAAIIGACCeBAAAgwYAIAEAAAABACANAwAAtQUAIIkDAACBBgAwigMAAAMAEIsDAACBBgAwjAMBAPAEACGNAwEA8AQAIY4DAQDwBAAhjwMBAPAEACGQAwEA8AQAIZEDAQDwBAAhkgMBAPAEACGTAwEA8AQAIZQDIADzBAAhAgMAAJIJACCqBAAA6gkAIA0DAAC1BQAgiQMAAIEGADCKAwAAAwAQiwMAAIEGADCMAwEAAAABjQMBAPAEACGOAwEA8AQAIY8DAQDwBAAhkAMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGUAyAA8wQAIQMAAAADACABAAAEADACAAAFACASAwAAtQUAIAYAAP8FACAJAACcBQAgDwAAgAYAIIkDAAD8BQAwigMAAAcAEIsDAAD8BQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhBQMAAJIJACAGAADnCQAgCQAA5ggAIA8AAOgJACCqBAAA6QkAIBIDAAC1BQAgBgAA_wUAIAkAAJwFACAPAACABgAgiQMAAPwFADCKAwAABwAQiwMAAPwFADCMAwEAAAABjQMBAPAEACGrA0AA9AQAIawDQAD0BAAh0wMAAP0F3wMi3QMBAAAAAeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQAAAAEDAAAABwAgAQAACAAwAgAACQAgAQAAAAcAIA0FAACjBQAgBwAA-wUAIIkDAAD6BQAwigMAAAwAEIsDAAD6BQAwjAMBAPAEACHAAwAA9AXAAyPCAwEA8QQAIc8DAQDwBAAh1gMAAPkFxAMi1wMBAPAEACHYAxAAlwUAIdkDAgCZBQAhBQUAAO8IACAHAADiCQAgwAMAAIsGACDCAwAAiwYAIKoEAADmCQAgDQUAAKMFACAHAAD7BQAgiQMAAPoFADCKAwAADAAQiwMAAPoFADCMAwEAAAABwAMAAPQFwAMjwgMBAPEEACHPAwEA8AQAIdYDAAD5BcQDItcDAQDwBAAh2AMQAJcFACHZAwIAmQUAIQMAAAAMACABAAANADACAAAOACAWCAAAmgUAIAwAAJsFACANAACcBQAgDgAA9wQAIIkDAACWBQAwigMAABAAEIsDAACWBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhwQMCAJkFACHEAwAA-QXEAyLFAwEA8AQAIcYDAQDwBAAhxwMQAJcFACHIAxAAmAUAIckDEACYBQAhygMgAPMEACHLAwEA8QQAIcwDEACXBQAhzQMCAJkFACHOAyAA8wQAIQEAAAAQACAIBwAA8QUAIIkDAAD3BQAwigMAABIAEIsDAAD3BQAwjAMBAPAEACHAAwAA-AXAAyLBAwIAmQUAIcIDAQDwBAAhAgcAAOIJACCqBAAA5QkAIAkHAADxBQAgiQMAAPcFADCKAwAAEgAQiwMAAPcFADCMAwEAAAABwAMAAPgFwAMiwQMCAJkFACHCAwEA8AQAIZwEAAD2BQAgAwAAABIAIAEAABMAMAIAABQAIAoHAADxBQAgCwAA9QUAIIkDAADzBQAwigMAABYAEIsDAADzBQAwjAMBAPAEACHAAwAA9AXAAyPCAwEA8AQAIdkDAgCZBQAh5QMBAPAEACEEBwAA4gkAIAsAAJQIACDAAwAAiwYAIKoEAADkCQAgCwcAAPEFACALAAD1BQAgiQMAAPMFADCKAwAAFgAQiwMAAPMFADCMAwEAAAABwAMAAPQFwAMjwgMBAPAEACHZAwIAmQUAIeUDAQDwBAAhmwQAAPIFACADAAAAFgAgAQAAFwAwAgAAGAAgAwAAABYAIAEAABcAMAIAABgAIAEAAAAWACADAAAADAAgAQAADQAwAgAADgAgDAMAALUFACAHAADxBQAgiQMAAPAFADCKAwAAHQAQiwMAAPAFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIcIDAQDwBAAh5gMCAJkFACHnAwEA8QQAIQQDAACSCQAgBwAA4gkAIOcDAACLBgAgqgQAAOMJACAMAwAAtQUAIAcAAPEFACCJAwAA8AUAMIoDAAAdABCLAwAA8AUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHCAwEA8AQAIeYDAgCZBQAh5wMBAPEEACEDAAAAHQAgAQAAHgAwAgAAHwAgAQAAABIAIAEAAAAWACABAAAADAAgAQAAAB0AIA0FAACjBQAgiQMAAKEFADCKAwAAJQAQiwMAAKEFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHPAwEA8AQAIdADAQDwBAAh0QMQAJcFACHTAwAAogXTAyLUAwEA8QQAIdUDAACEBQAgAQAAACUAIAEAAAAMACADAAAAHQAgAQAAHgAwAgAAHwAgCAMAALUFACAJAACbBQAgiQMAALQFADCKAwAAKQAQiwMAALQFADCMAwEA8AQAIY0DAQDwBAAhrANAAPQEACEBAAAAKQAgDgMAALUFACCJAwAA7gUAMIoDAAArABCLAwAA7gUAMIwDAQDwBAAhjQMBAPAEACGrA0AA9AQAIawDQAD0BAAhhgQBAPEEACGJBEAA4wUAIZcEAADvBZcEIpgEAQDwBAAhmQQBAPEEACGaBAEA8QQAIQYDAACSCQAghgQAAIsGACCJBAAAiwYAIJkEAACLBgAgmgQAAIsGACCqBAAA4QkAIAMAAAArACABAAAsADACAAABACAOAwAAtQUAIIkDAADsBQAwigMAAC4AEIsDAADsBQAwjAMBAPAEACGNAwEA8AQAIY8DAQDxBAAhqwNAAPQEACGsA0AA9AQAIfADIADzBAAhkgQAAO0FkgQikwQBAPEEACGUBCAA8wQAIZUEQADjBQAhBQMAAJIJACCPAwAAiwYAIJMEAACLBgAglQQAAIsGACCqBAAA4AkAIA4DAAC1BQAgiQMAAOwFADCKAwAALgAQiwMAAOwFADCMAwEAAAABjQMBAPAEACGPAwEA8QQAIasDQAD0BAAhrANAAPQEACHwAyAA8wQAIZIEAADtBZIEIpMEAQDxBAAhlAQgAPMEACGVBEAA4wUAIQMAAAAuACABAAAvADACAAAwACAKAwAAtQUAIIkDAADrBQAwigMAADIAEIsDAADrBQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAh3QMBAPAEACGPBCAA8wQAIZAEQADjBQAhAwMAAJIJACCQBAAAiwYAIKoEAADfCQAgCgMAALUFACCJAwAA6wUAMIoDAAAyABCLAwAA6wUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAh3QMBAPAEACGPBCAA8wQAIZAEQADjBQAhAwAAADIAIAEAADMAMAIAADQAIA8DAAC1BQAgFQAA6gUAIIkDAADoBQAwigMAADYAEIsDAADoBQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhsAMAAOkFjAQiswMBAPEEACG0AwEA8QQAIcUDAQDxBAAhjAQBAPEEACGNBCAA8wQAIY4EQAD0BAAhBwMAAJIJACAVAADdCQAgswMAAIsGACC0AwAAiwYAIMUDAACLBgAgjAQAAIsGACCqBAAA3gkAIA8DAAC1BQAgFQAA6gUAIIkDAADoBQAwigMAADYAEIsDAADoBQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGwAwAA6QWMBCKzAwEA8QQAIbQDAQDxBAAhxQMBAPEEACGMBAEA8QQAIY0EIADzBAAhjgRAAPQEACEDAAAANgAgAQAANwAwAgAAOAAgEQMAALUFACAUAADnBQAgiQMAAOUFADCKAwAAOgAQiwMAAOUFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIbMDAQDxBAAhtAMBAPEEACHTAwAA5gWJBCKFBAEA8AQAIYYEAQDxBAAhhwQBAPEEACGJBEAA9AQAIYoEQADjBQAhAQAAADoAIAEAAAA2ACAIAwAAkgkAIBQAANsJACCzAwAAiwYAILQDAACLBgAghgQAAIsGACCHBAAAiwYAIIoEAACLBgAgqgQAANwJACARAwAAtQUAIBQAAOcFACCJAwAA5QUAMIoDAAA6ABCLAwAA5QUAMIwDAQAAAAGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGzAwEA8QQAIbQDAQDxBAAh0wMAAOYFiQQihQQBAAAAAYYEAQAAAAGHBAEAAAABiQRAAPQEACGKBEAA4wUAIQMAAAA6ACABAAA9ADACAAA-ACAVGAAAtQUAIBoAAOQFACAeAAD_BAAgiQMAAOIFADCKAwAAQAAQiwMAAOIFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHEAwEA8AQAIc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACEKGAAAkgkAIBoAANkJACAeAACbCAAg_gMAAIsGACD_AwAAiwYAIIAEAACLBgAggQQAAIsGACCDBAAAiwYAIIQEAACLBgAgqgQAANoJACAVGAAAtQUAIBoAAOQFACAeAAD_BAAgiQMAAOIFADCKAwAAQAAQiwMAAOIFADCMAwEAAAABqwNAAPQEACGsA0AA9AQAIcQDAQAAAAHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhAwAAAEAAIAEAAEEAMAIAAEIAIAcZAAD-BAAgiQMAAOEFADCKAwAARAAQiwMAAOEFADCMAwEA8AQAIcQDAQDwBAAhxQMBAPAEACECGQAAmggAIKoEAADYCQAgBxkAAP4EACCJAwAA4QUAMIoDAABEABCLAwAA4QUAMIwDAQAAAAHEAwEAAAABxQMBAAAAAQMAAABEACABAABFADACAABGACADAAAAQAAgAQAAQQAwAgAAQgAgAQAAAEAAIA8YAAC1BQAgGwAA3wUAIBwAAOAFACAdAAD_BAAgiQMAAN4FADCKAwAASgAQiwMAAN4FADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACH4AwEA8AQAIfkDAQDwBAAh-gMBAPAEACH7AwEA8QQAIfwDIADzBAAhBhgAAJIJACAbAADVCQAgHAAA1gkAIB0AAJsIACD7AwAAiwYAIKoEAADXCQAgDxgAALUFACAbAADfBQAgHAAA4AUAIB0AAP8EACCJAwAA3gUAMIoDAABKABCLAwAA3gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQMAAABKACABAABLADACAABMACABAAAASgAgAwAAAEoAIAEAAEsAMAIAAEwAIAEAAABKACABAAAARAAgAQAAAEoAIAMAAABKACABAABLADACAABMACABAAAAAwAgAQAAAAcAIAEAAAAdACABAAAAKwAgAQAAAC4AIAEAAAAyACABAAAANgAgAQAAADoAIAEAAABAACABAAAASgAgAQAAAAEAIAMAAAArACABAAAsADACAAABACADAAAAKwAgAQAALAAwAgAAAQAgAwAAACsAIAEAACwAMAIAAAEAIAsDAADUCQAgjAMBAAAAAY0DAQAAAAGrA0AAAAABrANAAAAAAYYEAQAAAAGJBEAAAAABlwQAAACXBAKYBAEAAAABmQQBAAAAAZoEAQAAAAEBJgAAYgAgCowDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAGGBAEAAAABiQRAAAAAAZcEAAAAlwQCmAQBAAAAAZkEAQAAAAGaBAEAAAABASYAAGQAMAEmAABkADALAwAA0wkAIIwDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAhhgQBAI8GACGJBEAAxQYAIZcEAACpB5cEIpgEAQCHBgAhmQQBAI8GACGaBAEAjwYAIQIAAAABACAmAABnACAKjAMBAIcGACGNAwEAhwYAIasDQACRBgAhrANAAJEGACGGBAEAjwYAIYkEQADFBgAhlwQAAKkHlwQimAQBAIcGACGZBAEAjwYAIZoEAQCPBgAhAgAAACsAICYAAGkAIAIAAAArACAmAABpACADAAAAAQAgLQAAYgAgLgAAZwAgAQAAAAEAIAEAAAArACAHCgAA0AkAIDMAANIJACA0AADRCQAghgQAAIsGACCJBAAAiwYAIJkEAACLBgAgmgQAAIsGACANiQMAANoFADCKAwAAcAAQiwMAANoFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIYYEAQDlBAAhiQRAAMoFACGXBAAA2wWXBCKYBAEA3QQAIZkEAQDlBAAhmgQBAOUEACEDAAAAKwAgAQAAbwAwMgAAcAAgAwAAACsAIAEAACwAMAIAAAEAIAEAAAAwACABAAAAMAAgAwAAAC4AIAEAAC8AMAIAADAAIAMAAAAuACABAAAvADACAAAwACADA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-gMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABASYAANIBACAPjAMBAAAAAasDQAAAAAGsA0AAAAABxAMBAAAAAc4DIAAAAAHxAwEAAAAB-gMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABASYAANQBADABJgAA1AEAMBIYAAC1CQAgGgAAyAYAIB4AAMkGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACHEAwEAhwYAIc4DIACIBgAh8QMBAIcGACH6AwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACECAAAAQgAgJgAA1wEAIA-MAwEAhwYAIasDQACRBgAhrANAAJEGACHEAwEAhwYAIc4DIACIBgAh8QMBAIcGACH6AwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACECAAAAQAAgJgAA2QEAIAIAAABAACAmAADZAQAgAwAAAEIAIC0AANIBACAuAADXAQAgAQAAAEIAIAEAAABAACALCgAAuQkAIDMAALwJACA0AAC7CQAghQEAALoJACCGAQAAvQkAIP4DAACLBgAg_wMAAIsGACCABAAAiwYAIIEEAACLBgAggwQAAIsGACCEBAAAiwYAIBKJAwAAyQUAMIoDAADgAQAQiwMAAMkFADCMAwEA3QQAIasDQADnBAAhrANAAOcEACHEAwEA3QQAIc4DIADeBAAh8QMBAN0EACH6AwEA3QQAIf0DAQDdBAAh_gMCAL8FACH_AwEA5QQAIYAEAQDlBAAhgQRAAMoFACGCBAIAhwUAIYMEAQDlBAAhhAQBAOUEACEDAAAAQAAgAQAA3wEAMDIAAOABACADAAAAQAAgAQAAQQAwAgAAQgAgAQAAAEYAIAEAAABGACADAAAARAAgAQAARQAwAgAARgAgAwAAAEQAIAEAAEUAMAIAAEYAIAMAAABEACABAABFADACAABGACAEGQAAuAkAIIwDAQAAAAHEAwEAAAABxQMBAAAAAQEmAADoAQAgA4wDAQAAAAHEAwEAAAABxQMBAAAAAQEmAADqAQAwASYAAOoBADAEGQAArQkAIIwDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQIAAABGACAmAADtAQAgA4wDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQIAAABEACAmAADvAQAgAgAAAEQAICYAAO8BACADAAAARgAgLQAA6AEAIC4AAO0BACABAAAARgAgAQAAAEQAIAMKAACqCQAgMwAArAkAIDQAAKsJACAGiQMAAMgFADCKAwAA9gEAEIsDAADIBQAwjAMBAN0EACHEAwEA3QQAIcUDAQDdBAAhAwAAAEQAIAEAAPUBADAyAAD2AQAgAwAAAEQAIAEAAEUAMAIAAEYAIAEAAABMACABAAAATAAgAwAAAEoAIAEAAEsAMAIAAEwAIAMAAABKACABAABLADACAABMACADAAAASgAgAQAASwAwAgAATAAgDBgAALYGACAbAAC1BgAgHAAAuQYAIB0AALcGACCMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfoDAQAAAAH7AwEAAAAB_AMgAAAAAQEmAAD-AQAgCIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfsDAQAAAAH8AyAAAAABASYAAIACADABJgAAgAIAMAEAAABKACAMGAAAswYAIBsAAKgGACAcAACpBgAgHQAAqgYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACECAAAATAAgJgAAhAIAIAiMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-gMBAIcGACH7AwEAjwYAIfwDIACIBgAhAgAAAEoAICYAAIYCACACAAAASgAgJgAAhgIAIAEAAABKACADAAAATAAgLQAA_gEAIC4AAIQCACABAAAATAAgAQAAAEoAIAQKAACnCQAgMwAAqQkAIDQAAKgJACD7AwAAiwYAIAuJAwAAxwUAMIoDAACOAgAQiwMAAMcFADCMAwEA3QQAIasDQADnBAAhrANAAOcEACH4AwEA3QQAIfkDAQDdBAAh-gMBAN0EACH7AwEA5QQAIfwDIADeBAAhAwAAAEoAIAEAAI0CADAyAACOAgAgAwAAAEoAIAEAAEsAMAIAAEwAIBCJAwAAxAUAMIoDAACUAgAQiwMAAMQFADCMAwEAAAABqwNAAPQEACGsA0AA9AQAIbADAADFBfQDIsYDAQDxBAAh7gNAAPQEACHvA0AA9AQAIfEDAQDwBAAh8gMBAPEEACH0AwEA8QQAIfUDAgDGBQAh9gMBAPEEACH3AwEA8QQAIQEAAACRAgAgAQAAAJECACAQiQMAAMQFADCKAwAAlAIAEIsDAADEBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhsAMAAMUF9AMixgMBAPEEACHuA0AA9AQAIe8DQAD0BAAh8QMBAPAEACHyAwEA8QQAIfQDAQDxBAAh9QMCAMYFACH2AwEA8QQAIfcDAQDxBAAhB8YDAACLBgAg8gMAAIsGACD0AwAAiwYAIPUDAACLBgAg9gMAAIsGACD3AwAAiwYAIKoEAACmCQAgAwAAAJQCACABAACVAgAwAgAAkQIAIAMAAACUAgAgAQAAlQIAMAIAAJECACADAAAAlAIAIAEAAJUCADACAACRAgAgDYwDAQAAAAGrA0AAAAABrANAAAAAAbADAAAA9AMCxgMBAAAAAe4DQAAAAAHvA0AAAAAB8QMBAAAAAfIDAQAAAAH0AwEAAAAB9QMCAAAAAfYDAQAAAAH3AwEAAAABASYAAJkCACANjAMBAAAAAasDQAAAAAGsA0AAAAABsAMAAAD0AwLGAwEAAAAB7gNAAAAAAe8DQAAAAAHxAwEAAAAB8gMBAAAAAfQDAQAAAAH1AwIAAAAB9gMBAAAAAfcDAQAAAAEBJgAAmwIAMAEmAACbAgAwDYwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIbADAAClCfQDIsYDAQCPBgAh7gNAAJEGACHvA0AAkQYAIfEDAQCHBgAh8gMBAI8GACH0AwEAjwYAIfUDAgDEBgAh9gMBAI8GACH3AwEAjwYAIQIAAACRAgAgJgAAngIAIA2MAwEAhwYAIasDQACRBgAhrANAAJEGACGwAwAApQn0AyLGAwEAjwYAIe4DQACRBgAh7wNAAJEGACHxAwEAhwYAIfIDAQCPBgAh9AMBAI8GACH1AwIAxAYAIfYDAQCPBgAh9wMBAI8GACECAAAAlAIAICYAAKACACACAAAAlAIAICYAAKACACADAAAAkQIAIC0AAJkCACAuAACeAgAgAQAAAJECACABAAAAlAIAIAsKAACgCQAgMwAAowkAIDQAAKIJACCFAQAAoQkAIIYBAACkCQAgxgMAAIsGACDyAwAAiwYAIPQDAACLBgAg9QMAAIsGACD2AwAAiwYAIPcDAACLBgAgEIkDAAC9BQAwigMAAKcCABCLAwAAvQUAMIwDAQDdBAAhqwNAAOcEACGsA0AA5wQAIbADAAC-BfQDIsYDAQDlBAAh7gNAAOcEACHvA0AA5wQAIfEDAQDdBAAh8gMBAOUEACH0AwEA5QQAIfUDAgC_BQAh9gMBAOUEACH3AwEA5QQAIQMAAACUAgAgAQAApgIAMDIAAKcCACADAAAAlAIAIAEAAJUCADACAACRAgAgDokDAAC7BQAwigMAAK0CABCLAwAAuwUAMIwDAQAAAAGwAwAAvAXpAyLdAwEAAAAB6QMQAJcFACHqAxAAmAUAIesDEACYBQAh7AMCAJkFACHtAwIAmQUAIe4DQAD0BAAh7wNAAPQEACHwAyAA8wQAIQEAAACqAgAgAQAAAKoCACAOiQMAALsFADCKAwAArQIAEIsDAAC7BQAwjAMBAPAEACGwAwAAvAXpAyLdAwEA8AQAIekDEACXBQAh6gMQAJgFACHrAxAAmAUAIewDAgCZBQAh7QMCAJkFACHuA0AA9AQAIe8DQAD0BAAh8AMgAPMEACED6gMAAIsGACDrAwAAiwYAIKoEAACfCQAgAwAAAK0CACABAACuAgAwAgAAqgIAIAMAAACtAgAgAQAArgIAMAIAAKoCACADAAAArQIAIAEAAK4CADACAACqAgAgC4wDAQAAAAGwAwAAAOkDAt0DAQAAAAHpAxAAAAAB6gMQAAAAAesDEAAAAAHsAwIAAAAB7QMCAAAAAe4DQAAAAAHvA0AAAAAB8AMgAAAAAQEmAACyAgAgC4wDAQAAAAGwAwAAAOkDAt0DAQAAAAHpAxAAAAAB6gMQAAAAAesDEAAAAAHsAwIAAAAB7QMCAAAAAe4DQAAAAAHvA0AAAAAB8AMgAAAAAQEmAAC0AgAwASYAALQCADALjAMBAIcGACGwAwAAngnpAyLdAwEAhwYAIekDEADcBwAh6gMQAK4IACHrAxAArggAIewDAgDGBgAh7QMCAMYGACHuA0AAkQYAIe8DQACRBgAh8AMgAIgGACECAAAAqgIAICYAALcCACALjAMBAIcGACGwAwAAngnpAyLdAwEAhwYAIekDEADcBwAh6gMQAK4IACHrAxAArggAIewDAgDGBgAh7QMCAMYGACHuA0AAkQYAIe8DQACRBgAh8AMgAIgGACECAAAArQIAICYAALkCACACAAAArQIAICYAALkCACADAAAAqgIAIC0AALICACAuAAC3AgAgAQAAAKoCACABAAAArQIAIAcKAACZCQAgMwAAnAkAIDQAAJsJACCFAQAAmgkAIIYBAACdCQAg6gMAAIsGACDrAwAAiwYAIA6JAwAAtwUAMIoDAADAAgAQiwMAALcFADCMAwEA3QQAIbADAAC4BekDIt0DAQDdBAAh6QMQAI4FACHqAxAAjwUAIesDEACPBQAh7AMCAIcFACHtAwIAhwUAIe4DQADnBAAh7wNAAOcEACHwAyAA3gQAIQMAAACtAgAgAQAAvwIAMDIAAMACACADAAAArQIAIAEAAK4CADACAACqAgAgAQAAAB8AIAEAAAAfACADAAAAHQAgAQAAHgAwAgAAHwAgAwAAAB0AIAEAAB4AMAIAAB8AIAMAAAAdACABAAAeADACAAAfACAJAwAAvQgAIAcAAM8HACCMAwEAAAABjQMBAAAAAasDQAAAAAGsA0AAAAABwgMBAAAAAeYDAgAAAAHnAwEAAAABASYAAMgCACAHjAMBAAAAAY0DAQAAAAGrA0AAAAABrANAAAAAAcIDAQAAAAHmAwIAAAAB5wMBAAAAAQEmAADKAgAwASYAAMoCADAJAwAAuwgAIAcAAM0HACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIcIDAQCHBgAh5gMCAMYGACHnAwEAjwYAIQIAAAAfACAmAADNAgAgB4wDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAhwgMBAIcGACHmAwIAxgYAIecDAQCPBgAhAgAAAB0AICYAAM8CACACAAAAHQAgJgAAzwIAIAMAAAAfACAtAADIAgAgLgAAzQIAIAEAAAAfACABAAAAHQAgBgoAAJQJACAzAACXCQAgNAAAlgkAIIUBAACVCQAghgEAAJgJACDnAwAAiwYAIAqJAwAAtgUAMIoDAADWAgAQiwMAALYFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIcIDAQDdBAAh5gMCAIcFACHnAwEA5QQAIQMAAAAdACABAADVAgAwMgAA1gIAIAMAAAAdACABAAAeADACAAAfACAIAwAAtQUAIAkAAJsFACCJAwAAtAUAMIoDAAApABCLAwAAtAUAMIwDAQAAAAGNAwEAAAABrANAAPQEACEBAAAA2QIAIAEAAADZAgAgAwMAAJIJACAJAADlCAAgqgQAAJMJACADAAAAKQAgAQAA3AIAMAIAANkCACADAAAAKQAgAQAA3AIAMAIAANkCACADAAAAKQAgAQAA3AIAMAIAANkCACAFAwAAkQkAIAkAAMEHACCMAwEAAAABjQMBAAAAAawDQAAAAAEBJgAA4AIAIAOMAwEAAAABjQMBAAAAAawDQAAAAAEBJgAA4gIAMAEmAADiAgAwBQMAAJAJACAJAACxBwAgjAMBAIcGACGNAwEAhwYAIawDQACRBgAhAgAAANkCACAmAADlAgAgA4wDAQCHBgAhjQMBAIcGACGsA0AAkQYAIQIAAAApACAmAADnAgAgAgAAACkAICYAAOcCACADAAAA2QIAIC0AAOACACAuAADlAgAgAQAAANkCACABAAAAKQAgAwoAAI0JACAzAACPCQAgNAAAjgkAIAaJAwAAswUAMIoDAADuAgAQiwMAALMFADCMAwEA3QQAIY0DAQDdBAAhrANAAOcEACEDAAAAKQAgAQAA7QIAMDIAAO4CACADAAAAKQAgAQAA3AIAMAIAANkCACABAAAAGAAgAQAAABgAIAMAAAAWACABAAAXADACAAAYACADAAAAFgAgAQAAFwAwAgAAGAAgAwAAABYAIAEAABcAMAIAABgAIAcHAADABwAgCwAA0wgAIIwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAAB5QMBAAAAAQEmAAD2AgAgBYwDAQAAAAHAAwAAAMADA8IDAQAAAAHZAwIAAAAB5QMBAAAAAQEmAAD4AgAwASYAAPgCADAHBwAAvgcAIAsAANEIACCMAwEAhwYAIcADAAC8B8ADI8IDAQCHBgAh2QMCAMYGACHlAwEAhwYAIQIAAAAYACAmAAD7AgAgBYwDAQCHBgAhwAMAALwHwAMjwgMBAIcGACHZAwIAxgYAIeUDAQCHBgAhAgAAABYAICYAAP0CACACAAAAFgAgJgAA_QIAIAMAAAAYACAtAAD2AgAgLgAA-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-gQAIBMAAPsEACAWAAD8BAAgFwAA_QQAIB8AAP4EACAgAAD_BAAgiQMAAO8EADCKAwAAsAQAEIsDAADvBAAwjAMBAAAAAY8DAQDxBAAhoQMBAAAAAaIDAQDxBAAhowMBAPEEACGkAwEA8QQAIaYDAADyBKYDIqcDIADzBAAhqAMBAPEEACGpAyAA8wQAIaoDIADzBAAhqwNAAPQEACGsA0AA9AQAIQEAAACtBAAgAQAAAK0EACAbBAAA9QQAIAsAAPgEACAOAAD3BAAgEAAA9gQAIBEAAPkEACASAAD6BAAgEwAA-wQAIBYAAPwEACAXAAD9BAAgHwAA_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-wQAIBYAAPwEACAXAAD9BAAgHwAA_gQAICAAAP8EACCJAwAA7wQAMIoDAACwBAAQiwMAAO8EADCMAwEA8AQAIY8DAQDxBAAhoQMBAPAEACGiAwEA8QQAIaMDAQDxBAAhpAMBAPEEACGmAwAA8gSmAyKnAyAA8wQAIagDAQDxBAAhqQMgAPMEACGqAyAA8wQAIasDQAD0BAAhrANAAPQEACEMlQMBAAAAAZYDAQDjBAAhlwMBAAAABJgDAQAAAASZAwEAAAABmgMBAAAAAZsDAQAAAAGcAwEAAAABnQMBAAAAAZ4DAQAAAAGfAwEAAAABoAMBAAAAAQyVAwEAAAABlgMBAO4EACGXAwEAAAAFmAMBAAAABZkDAQAAAAGaAwEAAAABmwMBAAAAAZwDAQAAAAGdAwEAAAABngMBAAAAAZ8DAQAAAAGgAwEAAAABBJUDAAAApgMClgMAAOsEpgMilwMAAACmAwiYAwAAAKYDCAKVAyAAAAABlgMgAOEEACEIlQNAAAAAAZYDQADpBAAhlwNAAAAABJgDQAAAAASZA0AAAAABmgNAAAAAAZsDQAAAAAGcA0AAAAABA60DAAADACCuAwAAAwAgrwMAAAMAIAOtAwAABwAgrgMAAAcAIK8DAAAHACADrQMAAB0AIK4DAAAdACCvAwAAHQAgCgMAALUFACAJAACbBQAgiQMAALQFADCKAwAAKQAQiwMAALQFADCMAwEA8AQAIY0DAQDwBAAhrANAAPQEACGfBAAAKQAgoAQAACkAIAOtAwAAKwAgrgMAACsAIK8DAAArACADrQMAAC4AIK4DAAAuACCvAwAALgAgA60DAAAyACCuAwAAMgAgrwMAADIAIAOtAwAANgAgrgMAADYAIK8DAAA2ACADrQMAADoAIK4DAAA6ACCvAwAAOgAgA60DAABAACCuAwAAQAAgrwMAAEAAIAOtAwAASgAgrgMAAEoAIK8DAABKACAOiQMAAIAFADCKAwAAqgQAEIsDAACABQAwjAMBAN0EACGNAwEA5QQAIbADAQDdBAAhsQMBAN0EACGyAwEA3QQAIbMDAQDlBAAhtAMBAOUEACG1AwEA5QQAIbYDAQDlBAAhtwMAAIEFACC4A0AA5wQAIQ8KAADtBAAgMwAAggUAIDQAAIIFACCVA4AAAAABlgOAAAAAAZkDgAAAAAGaA4AAAAABmwOAAAAAAZwDgAAAAAG5AwEAAAABugMBAAAAAbsDAQAAAAG8A4AAAAABvQOAAAAAAb4DgAAAAAEMlQOAAAAAAZYDgAAAAAGZA4AAAAABmgOAAAAAAZsDgAAAAAGcA4AAAAABuQMBAAAAAboDAQAAAAG7AwEAAAABvAOAAAAAAb0DgAAAAAG-A4AAAAABDokDAACDBQAwigMAAJcEABCLAwAAgwUAMIwDAQDwBAAhjQMBAPEEACGwAwEA8AQAIbEDAQDwBAAhsgMBAPAEACGzAwEA8QQAIbQDAQDxBAAhtQMBAPEEACG2AwEA8QQAIbcDAACEBQAguANAAPQEACEMlQOAAAAAAZYDgAAAAAGZA4AAAAABmgOAAAAAAZsDgAAAAAGcA4AAAAABuQMBAAAAAboDAQAAAAG7AwEAAAABvAOAAAAAAb0DgAAAAAG-A4AAAAABB4kDAACFBQAwigMAAJEEABCLAwAAhQUAMIwDAQDdBAAhwAMAAIYFwAMiwQMCAIcFACHCAwEA3QQAIQcKAADgBAAgMwAAiwUAIDQAAIsFACCVAwAAAMADApYDAACKBcADIpcDAAAAwAMImAMAAADAAwgNCgAA4AQAIDMAAOAEACA0AADgBAAghQEAAIkFACCGAQAA4AQAIJUDAgAAAAGWAwIAiAUAIZcDAgAAAASYAwIAAAAEmQMCAAAAAZoDAgAAAAGbAwIAAAABnAMCAAAAAQ0KAADgBAAgMwAA4AQAIDQAAOAEACCFAQAAiQUAIIYBAADgBAAglQMCAAAAAZYDAgCIBQAhlwMCAAAABJgDAgAAAASZAwIAAAABmgMCAAAAAZsDAgAAAAGcAwIAAAABCJUDCAAAAAGWAwgAiQUAIZcDCAAAAASYAwgAAAAEmQMIAAAAAZoDCAAAAAGbAwgAAAABnAMIAAAAAQcKAADgBAAgMwAAiwUAIDQAAIsFACCVAwAAAMADApYDAACKBcADIpcDAAAAwAMImAMAAADAAwgElQMAAADAAwKWAwAAiwXAAyKXAwAAAMADCJgDAAAAwAMIEokDAACMBQAwigMAAPsDABCLAwAAjAUAMIwDAQDdBAAhqwNAAOcEACGsA0AA5wQAIcEDAgCHBQAhxAMAAI0FxAMixQMBAN0EACHGAwEA3QQAIccDEACOBQAhyAMQAI8FACHJAxAAjwUAIcoDIADeBAAhywMBAOUEACHMAxAAjgUAIc0DAgCHBQAhzgMgAN4EACEHCgAA4AQAIDMAAJUFACA0AACVBQAglQMAAADEAwKWAwAAlAXEAyKXAwAAAMQDCJgDAAAAxAMIDQoAAOAEACAzAACTBQAgNAAAkwUAIIUBAACTBQAghgEAAJMFACCVAxAAAAABlgMQAJIFACGXAxAAAAAEmAMQAAAABJkDEAAAAAGaAxAAAAABmwMQAAAAAZwDEAAAAAENCgAA7QQAIDMAAJEFACA0AACRBQAghQEAAJEFACCGAQAAkQUAIJUDEAAAAAGWAxAAkAUAIZcDEAAAAAWYAxAAAAAFmQMQAAAAAZoDEAAAAAGbAxAAAAABnAMQAAAAAQ0KAADtBAAgMwAAkQUAIDQAAJEFACCFAQAAkQUAIIYBAACRBQAglQMQAAAAAZYDEACQBQAhlwMQAAAABZgDEAAAAAWZAxAAAAABmgMQAAAAAZsDEAAAAAGcAxAAAAABCJUDEAAAAAGWAxAAkQUAIZcDEAAAAAWYAxAAAAAFmQMQAAAAAZoDEAAAAAGbAxAAAAABnAMQAAAAAQ0KAADgBAAgMwAAkwUAIDQAAJMFACCFAQAAkwUAIIYBAACTBQAglQMQAAAAAZYDEACSBQAhlwMQAAAABJgDEAAAAASZAxAAAAABmgMQAAAAAZsDEAAAAAGcAxAAAAABCJUDEAAAAAGWAxAAkwUAIZcDEAAAAASYAxAAAAAEmQMQAAAAAZoDEAAAAAGbAxAAAAABnAMQAAAAAQcKAADgBAAgMwAAlQUAIDQAAJUFACCVAwAAAMQDApYDAACUBcQDIpcDAAAAxAMImAMAAADEAwgElQMAAADEAwKWAwAAlQXEAyKXAwAAAMQDCJgDAAAAxAMIFggAAJoFACAMAACbBQAgDQAAnAUAIA4AAPcEACCJAwAAlgUAMIoDAAAQABCLAwAAlgUAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIcEDAgCZBQAhxAMAAPkFxAMixQMBAPAEACHGAwEA8AQAIccDEACXBQAhyAMQAJgFACHJAxAAmAUAIcoDIADzBAAhywMBAPEEACHMAxAAlwUAIc0DAgCZBQAhzgMgAPMEACEIlQMQAAAAAZYDEACTBQAhlwMQAAAABJgDEAAAAASZAxAAAAABmgMQAAAAAZsDEAAAAAGcAxAAAAABCJUDEAAAAAGWAxAAkQUAIZcDEAAAAAWYAxAAAAAFmQMQAAAAAZoDEAAAAAGbAxAAAAABnAMQAAAAAQiVAwIAAAABlgMCAOAEACGXAwIAAAAEmAMCAAAABJkDAgAAAAGaAwIAAAABmwMCAAAAAZwDAgAAAAEDrQMAABIAIK4DAAASACCvAwAAEgAgA60DAAAWACCuAwAAFgAgrwMAABYAIAOtAwAADAAgrgMAAAwAIK8DAAAMACAMiQMAAJ0FADCKAwAA4wMAEIsDAACdBQAwjAMBAN0EACGrA0AA5wQAIawDQADnBAAhzwMBAN0EACHQAwEA3QQAIdEDEACOBQAh0wMAAJ4F0wMi1AMBAOUEACHVAwAAgQUAIAcKAADgBAAgMwAAoAUAIDQAAKAFACCVAwAAANMDApYDAACfBdMDIpcDAAAA0wMImAMAAADTAwgHCgAA4AQAIDMAAKAFACA0AACgBQAglQMAAADTAwKWAwAAnwXTAyKXAwAAANMDCJgDAAAA0wMIBJUDAAAA0wMClgMAAKAF0wMilwMAAADTAwiYAwAAANMDCA0FAACjBQAgiQMAAKEFADCKAwAAJQAQiwMAAKEFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHPAwEA8AQAIdADAQDwBAAh0QMQAJcFACHTAwAAogXTAyLUAwEA8QQAIdUDAACEBQAgBJUDAAAA0wMClgMAAKAF0wMilwMAAADTAwiYAwAAANMDCBQDAAC1BQAgBgAA_wUAIAkAAJwFACAPAACABgAgiQMAAPwFADCKAwAABwAQiwMAAPwFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIdMDAAD9Bd8DIt0DAQDwBAAh4AMAAP4F4AMi4QMQAJcFACHiAxAAlwUAIeMDEACXBQAh5AMBAPAEACGfBAAABwAgoAQAAAcAIAuJAwAApAUAMIoDAADLAwAQiwMAAKQFADCMAwEA3QQAIcADAAClBcADI8IDAQDlBAAhzwMBAN0EACHWAwAAjQXEAyLXAwEA3QQAIdgDEACOBQAh2QMCAIcFACEHCgAA7QQAIDMAAKcFACA0AACnBQAglQMAAADAAwOWAwAApgXAAyOXAwAAAMADCZgDAAAAwAMJBwoAAO0EACAzAACnBQAgNAAApwUAIJUDAAAAwAMDlgMAAKYFwAMjlwMAAADAAwmYAwAAAMADCQSVAwAAAMADA5YDAACnBcADI5cDAAAAwAMJmAMAAADAAwkOiQMAAKgFADCKAwAAswMAEIsDAACoBQAwjAMBAN0EACGPAwEA3QQAIZEDAQDdBAAhkgMBAN0EACGTAwEA3QQAIaMDAQDdBAAhqwNAAOcEACGsA0AA5wQAIdoDAQDdBAAh2wMBAOUEACHcAwEA3QQAIQ8FAACqBQAgiQMAAKkFADCKAwAAoAMAEIsDAACpBQAwjAMBAPAEACGPAwEA8AQAIZEDAQDwBAAhkgMBAPAEACGTAwEA8AQAIaMDAQDwBAAhqwNAAPQEACGsA0AA9AQAIdoDAQDwBAAh2wMBAPEEACHcAwEA8AQAIRQDAAC1BQAgBgAA_wUAIAkAAJwFACAPAACABgAgiQMAAPwFADCKAwAABwAQiwMAAPwFADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIdMDAAD9Bd8DIt0DAQDwBAAh4AMAAP4F4AMi4QMQAJcFACHiAxAAlwUAIeMDEACXBQAh5AMBAPAEACGfBAAABwAgoAQAAAcAIA6JAwAAqwUAMIoDAACaAwAQiwMAAKsFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGsA0AA5wQAIdMDAACsBd8DIt0DAQDdBAAh4AMAAK0F4AMi4QMQAI4FACHiAxAAjgUAIeMDEACOBQAh5AMBAN0EACEHCgAA4AQAIDMAALEFACA0AACxBQAglQMAAADfAwKWAwAAsAXfAyKXAwAAAN8DCJgDAAAA3wMIBwoAAOAEACAzAACvBQAgNAAArwUAIJUDAAAA4AMClgMAAK4F4AMilwMAAADgAwiYAwAAAOADCAcKAADgBAAgMwAArwUAIDQAAK8FACCVAwAAAOADApYDAACuBeADIpcDAAAA4AMImAMAAADgAwgElQMAAADgAwKWAwAArwXgAyKXAwAAAOADCJgDAAAA4AMIBwoAAOAEACAzAACxBQAgNAAAsQUAIJUDAAAA3wMClgMAALAF3wMilwMAAADfAwiYAwAAAN8DCASVAwAAAN8DApYDAACxBd8DIpcDAAAA3wMImAMAAADfAwgIiQMAALIFADCKAwAAhAMAEIsDAACyBQAwjAMBAN0EACHAAwAApQXAAyPCAwEA3QQAIdkDAgCHBQAh5QMBAN0EACEGiQMAALMFADCKAwAA7gIAEIsDAACzBQAwjAMBAN0EACGNAwEA3QQAIawDQADnBAAhCAMAALUFACAJAACbBQAgiQMAALQFADCKAwAAKQAQiwMAALQFADCMAwEA8AQAIY0DAQDwBAAhrANAAPQEACEdBAAA9QQAIAsAAPgEACAOAAD3BAAgEAAA9gQAIBEAAPkEACASAAD6BAAgEwAA-wQAIBYAAPwEACAXAAD9BAAgHwAA_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_gMCAL8FACH_AwEA5QQAIYAEAQDlBAAhgQRAAMoFACGCBAIAhwUAIYMEAQDlBAAhhAQBAOUEACELCgAA7QQAIDMAAMwFACA0AADMBQAglQNAAAAAAZYDQADLBQAhlwNAAAAABZgDQAAAAAWZA0AAAAABmgNAAAAAAZsDQAAAAAGcA0AAAAABCwoAAO0EACAzAADMBQAgNAAAzAUAIJUDQAAAAAGWA0AAywUAIZcDQAAAAAWYA0AAAAAFmQNAAAAAAZoDQAAAAAGbA0AAAAABnANAAAAAAQiVA0AAAAABlgNAAMwFACGXA0AAAAAFmANAAAAABZkDQAAAAAGaA0AAAAABmwNAAAAAAZwDQAAAAAEPiQMAAM0FADCKAwAAygEAEIsDAADNBQAwjAMBAN0EACGNAwEA3QQAIasDQADnBAAhrANAAOcEACGzAwEA5QQAIbQDAQDlBAAh0wMAAM4FiQQihQQBAN0EACGGBAEA5QQAIYcEAQDlBAAhiQRAAOcEACGKBEAAygUAIQcKAADgBAAgMwAA0AUAIDQAANAFACCVAwAAAIkEApYDAADPBYkEIpcDAAAAiQQImAMAAACJBAgHCgAA4AQAIDMAANAFACA0AADQBQAglQMAAACJBAKWAwAAzwWJBCKXAwAAAIkECJgDAAAAiQQIBJUDAAAAiQQClgMAANAFiQQilwMAAACJBAiYAwAAAIkECA2JAwAA0QUAMIoDAACyAQAQiwMAANEFADCMAwEA3QQAIY0DAQDdBAAhqwNAAOcEACGwAwAA0gWMBCKzAwEA5QQAIbQDAQDlBAAhxQMBAOUEACGMBAEA5QQAIY0EIADeBAAhjgRAAOcEACEHCgAA4AQAIDMAANQFACA0AADUBQAglQMAAACMBAKWAwAA0wWMBCKXAwAAAIwECJgDAAAAjAQIBwoAAOAEACAzAADUBQAgNAAA1AUAIJUDAAAAjAQClgMAANMFjAQilwMAAACMBAiYAwAAAIwECASVAwAAAIwEApYDAADUBYwEIpcDAAAAjAQImAMAAACMBAgJiQMAANUFADCKAwAAnAEAEIsDAADVBQAwjAMBAN0EACGNAwEA3QQAIasDQADnBAAh3QMBAN0EACGPBCAA3gQAIZAEQADKBQAhDYkDAADWBQAwigMAAIYBABCLAwAA1gUAMIwDAQDdBAAhjQMBAN0EACGPAwEA5QQAIasDQADnBAAhrANAAOcEACHwAyAA3gQAIZIEAADXBZIEIpMEAQDlBAAhlAQgAN4EACGVBEAAygUAIQcKAADgBAAgMwAA2QUAIDQAANkFACCVAwAAAJIEApYDAADYBZIEIpcDAAAAkgQImAMAAACSBAgHCgAA4AQAIDMAANkFACA0AADZBQAglQMAAACSBAKWAwAA2AWSBCKXAwAAAJIECJgDAAAAkgQIBJUDAAAAkgQClgMAANkFkgQilwMAAACSBAiYAwAAAJIECA2JAwAA2gUAMIoDAABwABCLAwAA2gUAMIwDAQDdBAAhjQMBAN0EACGrA0AA5wQAIawDQADnBAAhhgQBAOUEACGJBEAAygUAIZcEAADbBZcEIpgEAQDdBAAhmQQBAOUEACGaBAEA5QQAIQcKAADgBAAgMwAA3QUAIDQAAN0FACCVAwAAAJcEApYDAADcBZcEIpcDAAAAlwQImAMAAACXBAgHCgAA4AQAIDMAAN0FACA0AADdBQAglQMAAACXBAKWAwAA3AWXBCKXAwAAAJcECJgDAAAAlwQIBJUDAAAAlwQClgMAAN0FlwQilwMAAACXBAiYAwAAAJcECA8YAAC1BQAgGwAA3wUAIBwAAOAFACAdAAD_BAAgiQMAAN4FADCKAwAASgAQiwMAAN4FADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACH4AwEA8AQAIfkDAQDwBAAh-gMBAPAEACH7AwEA8QQAIfwDIADzBAAhFxgAALUFACAaAADkBQAgHgAA_wQAIIkDAADiBQAwigMAAEAAEIsDAADiBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhxAMBAPAEACHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhnwQAAEAAIKAEAABAACARGAAAtQUAIBsAAN8FACAcAADgBQAgHQAA_wQAIIkDAADeBQAwigMAAEoAEIsDAADeBQAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIZ8EAABKACCgBAAASgAgBxkAAP4EACCJAwAA4QUAMIoDAABEABCLAwAA4QUAMIwDAQDwBAAhxAMBAPAEACHFAwEA8AQAIRUYAAC1BQAgGgAA5AUAIB4AAP8EACCJAwAA4gUAMIoDAABAABCLAwAA4gUAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIcQDAQDwBAAhzgMgAPMEACHxAwEA8AQAIfoDAQDwBAAh_QMBAPAEACH-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-gUAMIoDAAAMABCLAwAA-gUAMIwDAQDwBAAhwAMAAPQFwAMjwgMBAPEEACHPAwEA8AQAIdYDAAD5BcQDItcDAQDwBAAh2AMQAJcFACHZAwIAmQUAIRgIAACaBQAgDAAAmwUAIA0AAJwFACAOAAD3BAAgiQMAAJYFADCKAwAAEAAQiwMAAJYFADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHBAwIAmQUAIcQDAAD5BcQDIsUDAQDwBAAhxgMBAPAEACHHAxAAlwUAIcgDEACYBQAhyQMQAJgFACHKAyAA8wQAIcsDAQDxBAAhzAMQAJcFACHNAwIAmQUAIc4DIADzBAAhnwQAABAAIKAEAAAQACASAwAAtQUAIAYAAP8FACAJAACcBQAgDwAAgAYAIIkDAAD8BQAwigMAAAcAEIsDAAD8BQAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhBJUDAAAA3wMClgMAALEF3wMilwMAAADfAwiYAwAAAN8DCASVAwAAAOADApYDAACvBeADIpcDAAAA4AMImAMAAADgAwgRBQAAqgUAIIkDAACpBQAwigMAAKADABCLAwAAqQUAMIwDAQDwBAAhjwMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGjAwEA8AQAIasDQAD0BAAhrANAAPQEACHaAwEA8AQAIdsDAQDxBAAh3AMBAPAEACGfBAAAoAMAIKAEAACgAwAgDwUAAKMFACCJAwAAoQUAMIoDAAAlABCLAwAAoQUAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIc8DAQDwBAAh0AMBAPAEACHRAxAAlwUAIdMDAACiBdMDItQDAQDxBAAh1QMAAIQFACCfBAAAJQAgoAQAACUAIA0DAAC1BQAgiQMAAIEGADCKAwAAAwAQiwMAAIEGADCMAwEA8AQAIY0DAQDwBAAhjgMBAPAEACGPAwEA8AQAIZADAQDwBAAhkQMBAPAEACGSAwEA8AQAIZMDAQDwBAAhlAMgAPMEACEClwQAAACXBAKYBAEAAAABAo0DAQAAAAGXBAAAAJcEAgAAAAGkBAEAAAABAaQEIAAAAAEFLQAA5goAIC4AAOkKACChBAAA5woAIKIEAADoCgAgpwQAAK0EACADLQAA5goAIKEEAADnCgAgpwQAAK0EACAAAAAAAaQEAQAAAAEBpAQAAACmAwIBpARAAAAAAQstAAD6BwAwLgAA_wcAMKEEAAD7BwAwogQAAPwHADCjBAAA_QcAIKQEAAD-BwAwpQQAAP4HADCmBAAA_gcAMKcEAAD-BwAwqAQAAIAIADCpBAAAgQgAMAstAADQBwAwLgAA1QcAMKEEAADRBwAwogQAANIHADCjBAAA0wcAIKQEAADUBwAwpQQAANQHADCmBAAA1AcAMKcEAADUBwAwqAQAANYHADCpBAAA1wcAMAstAADCBwAwLgAAxwcAMKEEAADDBwAwogQAAMQHADCjBAAAxQcAIKQEAADGBwAwpQQAAMYHADCmBAAAxgcAMKcEAADGBwAwqAQAAMgHADCpBAAAyQcAMActAACsBwAgLgAArwcAIKEEAACtBwAgogQAAK4HACClBAAAKQAgpgQAACkAIKcEAADZAgAgCy0AAJ8HADAuAACkBwAwoQQAAKAHADCiBAAAoQcAMKMEAACiBwAgpAQAAKMHADClBAAAowcAMKYEAACjBwAwpwQAAKMHADCoBAAApQcAMKkEAACmBwAwCy0AAJIHADAuAACXBwAwoQQAAJMHADCiBAAAlAcAMKMEAACVBwAgpAQAAJYHADClBAAAlgcAMKYEAACWBwAwpwQAAJYHADCoBAAAmAcAMKkEAACZBwAwCy0AAIYHADAuAACLBwAwoQQAAIcHADCiBAAAiAcAMKMEAACJBwAgpAQAAIoHADClBAAAigcAMKYEAACKBwAwpwQAAIoHADCoBAAAjAcAMKkEAACNBwAwCy0AAPAGADAuAAD1BgAwoQQAAPEGADCiBAAA8gYAMKMEAADzBgAgpAQAAPQGADClBAAA9AYAMKYEAAD0BgAwpwQAAPQGADCoBAAA9gYAMKkEAAD3BgAwCy0AAOEGADAuAADmBgAwoQQAAOIGADCiBAAA4wYAMKMEAADkBgAgpAQAAOUGADClBAAA5QYAMKYEAADlBgAwpwQAAOUGADCoBAAA5wYAMKkEAADoBgAwCy0AALoGADAuAAC_BgAwoQQAALsGADCiBAAAvAYAMKMEAAC9BgAgpAQAAL4GADClBAAAvgYAMKYEAAC-BgAwpwQAAL4GADCoBAAAwAYAMKkEAADBBgAwCy0AAJ0GADAuAACiBgAwoQQAAJ4GADCiBAAAnwYAMKMEAACgBgAgpAQAAKEGADClBAAAoQYAMKYEAAChBgAwpwQAAKEGADCoBAAAowYAMKkEAACkBgAwChsAALUGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAAuAYAIAMAAABMACAtAAC4BgAgLgAApwYAIAEmAADlCgAwDxgAALUFACAbAADfBQAgHAAA4AUAIB0AAP8EACCJAwAA3gUAMIoDAABKABCLAwAA3gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQIAAABMACAmAACnBgAgAgAAAKUGACAmAACmBgAgC4kDAACkBgAwigMAAKUGABCLAwAApAYAMIwDAQDwBAAhqwNAAPQEACGsA0AA9AQAIfgDAQDwBAAh-QMBAPAEACH6AwEA8AQAIfsDAQDxBAAh_AMgAPMEACELiQMAAKQGADCKAwAApQYAEIsDAACkBgAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAh-AMBAPAEACH5AwEA8AQAIfoDAQDwBAAh-wMBAPEEACH8AyAA8wQAIQeMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQobAACoBgAgHAAAqQYAIB0AAKoGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQUtAADZCgAgLgAA4woAIKEEAADaCgAgogQAAOIKACCnBAAAQgAgBy0AANUKACAuAADgCgAgoQQAANYKACCiBAAA3woAIKUEAABKACCmBAAASgAgpwQAAEwAIAstAACrBgAwLgAArwYAMKEEAACsBgAwogQAAK0GADCjBAAArgYAIKQEAAChBgAwpQQAAKEGADCmBAAAoQYAMKcEAAChBgAwqAQAALAGADCpBAAApAYAMAoYAAC2BgAgGwAAtQYAIB0AALcGACCMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfoDAQAAAAH8AyAAAAABAgAAAEwAIC0AALQGACADAAAATAAgLQAAtAYAIC4AALIGACABJgAA3goAMAIAAABMACAmAACyBgAgAgAAAKUGACAmAACxBgAgB4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfwDIACIBgAhChgAALMGACAbAACoBgAgHQAAqgYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIfgDAQCHBgAh-QMBAIcGACH6AwEAhwYAIfwDIACIBgAhBS0AANcKACAuAADcCgAgoQQAANgKACCiBAAA2woAIKcEAACtBAAgChgAALYGACAbAAC1BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-gMBAAAAAfwDIAAAAAEDLQAA2QoAIKEEAADaCgAgpwQAAEIAIAMtAADXCgAgoQQAANgKACCnBAAArQQAIAQtAACrBgAwoQQAAKwGADCjBAAArgYAIKcEAAChBgAwChsAALUGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH5AwEAAAAB-wMBAAAAAfwDIAAAAAEDLQAA1QoAIKEEAADWCgAgpwQAAEwAIBAaAADfBgAgHgAA4AYAIIwDAQAAAAGrA0AAAAABrANAAAAAAcQDAQAAAAHOAyAAAAAB8QMBAAAAAf0DAQAAAAH-AwIAAAAB_wMBAAAAAYAEAQAAAAGBBEAAAAABggQCAAAAAYMEAQAAAAGEBAEAAAABAgAAAEIAIC0AAN4GACADAAAAQgAgLQAA3gYAIC4AAMcGACABJgAA1AoAMBUYAAC1BQAgGgAA5AUAIB4AAP8EACCJAwAA4gUAMIoDAABAABCLAwAA4gUAMIwDAQAAAAGrA0AA9AQAIawDQAD0BAAhxAMBAAAAAc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACECAAAAQgAgJgAAxwYAIAIAAADCBgAgJgAAwwYAIBKJAwAAwQYAMIoDAADCBgAQiwMAAMEGADCMAwEA8AQAIasDQAD0BAAhrANAAPQEACHEAwEA8AQAIc4DIADzBAAh8QMBAPAEACH6AwEA8AQAIf0DAQDwBAAh_gMCAMYFACH_AwEA8QQAIYAEAQDxBAAhgQRAAOMFACGCBAIAmQUAIYMEAQDxBAAhhAQBAPEEACESiQMAAMEGADCKAwAAwgYAEIsDAADBBgAwjAMBAPAEACGrA0AA9AQAIawDQAD0BAAhxAMBAPAEACHOAyAA8wQAIfEDAQDwBAAh-gMBAPAEACH9AwEA8AQAIf4DAgDGBQAh_wMBAPEEACGABAEA8QQAIYEEQADjBQAhggQCAJkFACGDBAEA8QQAIYQEAQDxBAAhDowDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACEFpAQCAAAAAasEAgAAAAGsBAIAAAABrQQCAAAAAa4EAgAAAAEBpARAAAAAAQWkBAIAAAABqwQCAAAAAawEAgAAAAGtBAIAAAABrgQCAAAAARAaAADIBgAgHgAAyQYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIf0DAQCHBgAh_gMCAMQGACH_AwEAjwYAIYAEAQCPBgAhgQRAAMUGACGCBAIAxgYAIYMEAQCPBgAhhAQBAI8GACEKLQAA0wYAMC4AANcGADChBAAA1AYAMKIEAADVBgAwpAQAANYGADClBAAA1gYAMKYEAADWBgAwpwQAANYGADCoBAAA2AYAMKkEAADZBgAwCy0AAMoGADAuAADOBgAwoQQAAMsGADCiBAAAzAYAMKMEAADNBgAgpAQAAKEGADClBAAAoQYAMKYEAAChBgAwpwQAAKEGADCoBAAAzwYAMKkEAACkBgAwChgAALYGACAcAAC5BgAgHQAAtwYAIIwDAQAAAAGrA0AAAAABrANAAAAAAfgDAQAAAAH6AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAA0gYAIAMAAABMACAtAADSBgAgLgAA0QYAIAEmAADTCgAwAgAAAEwAICYAANEGACACAAAApQYAICYAANAGACAHjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACEKGAAAswYAIBwAAKkGACAdAACqBgAgjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH6AwEAhwYAIfsDAQCPBgAh_AMgAIgGACEKGAAAtgYAIBwAALkGACAdAAC3BgAgjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfoDAQAAAAH7AwEAAAAB_AMgAAAAAQOMAwEAAAABxAMBAAAAAcUDAQAAAAECAAAARgAgLQAA3QYAIAMAAABGACAtAADdBgAgLgAA3AYAIAcZAAD-BAAgiQMAAOEFADCKAwAARAAQiwMAAOEFADCMAwEAAAABxAMBAAAAAcUDAQAAAAECAAAARgAgJgAA3AYAIAIAAADaBgAgJgAA2wYAIAaJAwAA2QYAMIoDAADaBgAQiwMAANkGADCMAwEA8AQAIcQDAQDwBAAhxQMBAPAEACEGiQMAANkGADCKAwAA2gYAEIsDAADZBgAwjAMBAPAEACHEAwEA8AQAIcUDAQDwBAAhA4wDAQCHBgAhxAMBAIcGACHFAwEAhwYAIQOMAwEAhwYAIcQDAQCHBgAhxQMBAIcGACEDjAMBAAAAAcQDAQAAAAHFAwEAAAABEBoAAN8GACAeAADgBgAgjAMBAAAAAasDQAAAAAGsA0AAAAABxAMBAAAAAc4DIAAAAAHxAwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAEDLQAA0wYAMKEEAADUBgAwpwQAANYGADAELQAAygYAMKEEAADLBgAwowQAAM0GACCnBAAAoQYAMAwUAADvBgAgjAMBAAAAAasDQAAAAAGsA0AAAAABswMBAAAAAbQDAQAAAAHTAwAAAIkEAoUEAQAAAAGGBAEAAAABhwQBAAAAAYkEQAAAAAGKBEAAAAABAgAAAD4AIC0AAO4GACADAAAAPgAgLQAA7gYAIC4AAOwGACABJgAA0goAMBEDAAC1BQAgFAAA5wUAIIkDAADlBQAwigMAADoAEIsDAADlBQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIbMDAQDxBAAhtAMBAPEEACHTAwAA5gWJBCKFBAEAAAABhgQBAAAAAYcEAQAAAAGJBEAA9AQAIYoEQADjBQAhAgAAAD4AICYAAOwGACACAAAA6QYAICYAAOoGACAPiQMAAOgGADCKAwAA6QYAEIsDAADoBgAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACGzAwEA8QQAIbQDAQDxBAAh0wMAAOYFiQQihQQBAPAEACGGBAEA8QQAIYcEAQDxBAAhiQRAAPQEACGKBEAA4wUAIQ-JAwAA6AYAMIoDAADpBgAQiwMAAOgGADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGsA0AA9AQAIbMDAQDxBAAhtAMBAPEEACHTAwAA5gWJBCKFBAEA8AQAIYYEAQDxBAAhhwQBAPEEACGJBEAA9AQAIYoEQADjBQAhC4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIbMDAQCPBgAhtAMBAI8GACHTAwAA6waJBCKFBAEAhwYAIYYEAQCPBgAhhwQBAI8GACGJBEAAkQYAIYoEQADFBgAhAaQEAAAAiQQCDBQAAO0GACCMAwEAhwYAIasDQACRBgAhrANAAJEGACGzAwEAjwYAIbQDAQCPBgAh0wMAAOsGiQQihQQBAIcGACGGBAEAjwYAIYcEAQCPBgAhiQRAAJEGACGKBEAAxQYAIQctAADNCgAgLgAA0AoAIKEEAADOCgAgogQAAM8KACClBAAANgAgpgQAADYAIKcEAAA4ACAMFAAA7wYAIIwDAQAAAAGrA0AAAAABrANAAAAAAbMDAQAAAAG0AwEAAAAB0wMAAACJBAKFBAEAAAABhgQBAAAAAYcEAQAAAAGJBEAAAAABigRAAAAAAQMtAADNCgAgoQQAAM4KACCnBAAAOAAgChUAAIUHACCMAwEAAAABqwNAAAAAAbADAAAAjAQCswMBAAAAAbQDAQAAAAHFAwEAAAABjAQBAAAAAY0EIAAAAAGOBEAAAAABAgAAADgAIC0AAIQHACADAAAAOAAgLQAAhAcAIC4AAPsGACABJgAAzAoAMA8DAAC1BQAgFQAA6gUAIIkDAADoBQAwigMAADYAEIsDAADoBQAwjAMBAAAAAY0DAQDwBAAhqwNAAPQEACGwAwAA6QWMBCKzAwEA8QQAIbQDAQDxBAAhxQMBAPEEACGMBAEA8QQAIY0EIADzBAAhjgRAAPQEACECAAAAOAAgJgAA-wYAIAIAAAD4BgAgJgAA-QYAIA2JAwAA9wYAMIoDAAD4BgAQiwMAAPcGADCMAwEA8AQAIY0DAQDwBAAhqwNAAPQEACGwAwAA6QWMBCKzAwEA8QQAIbQDAQDxBAAhxQMBAPEEACGMBAEA8QQAIY0EIADzBAAhjgRAAPQEACENiQMAAPcGADCKAwAA-AYAEIsDAAD3BgAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhsAMAAOkFjAQiswMBAPEEACG0AwEA8QQAIcUDAQDxBAAhjAQBAPEEACGNBCAA8wQAIY4EQAD0BAAhCYwDAQCHBgAhqwNAAJEGACGwAwAA-gaMBCKzAwEAjwYAIbQDAQCPBgAhxQMBAI8GACGMBAEAjwYAIY0EIACIBgAhjgRAAJEGACEBpAQAAACMBAIKFQAA_AYAIIwDAQCHBgAhqwNAAJEGACGwAwAA-gaMBCKzAwEAjwYAIbQDAQCPBgAhxQMBAI8GACGMBAEAjwYAIY0EIACIBgAhjgRAAJEGACEHLQAA_QYAIC4AAIAHACChBAAA_gYAIKIEAAD_BgAgpQQAADoAIKYEAAA6ACCnBAAAPgAgDAMAAIMHACCMAwEAAAABjQMBAAAAAasDQAAAAAGsA0AAAAABswMBAAAAAbQDAQAAAAHTAwAAAIkEAoUEAQAAAAGGBAEAAAABiQRAAAAAAYoEQAAAAAECAAAAPgAgLQAA_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_gXgAyLhAxAAlwUAIeIDEACXBQAh4wMQAJcFACHkAwEAAAABAgAAAAkAICYAAN0HACACAAAA2AcAICYAANkHACAOiQMAANcHADCKAwAA2AcAEIsDAADXBwAwjAMBAPAEACGNAwEA8AQAIasDQAD0BAAhrANAAPQEACHTAwAA_QXfAyLdAwEA8AQAIeADAAD-BeADIuEDEACXBQAh4gMQAJcFACHjAxAAlwUAIeQDAQDwBAAhDokDAADXBwAwigMAANgHABCLAwAA1wcAMIwDAQDwBAAhjQMBAPAEACGrA0AA9AQAIawDQAD0BAAh0wMAAP0F3wMi3QMBAPAEACHgAwAA_gXgAyLhAxAAlwUAIeIDEACXBQAh4wMQAJcFACHkAwEA8AQAIQqMAwEAhwYAIasDQACRBgAhrANAAJEGACHTAwAA2gffAyLdAwEAhwYAIeADAADbB-ADIuEDEADcBwAh4gMQANwHACHjAxAA3AcAIeQDAQCHBgAhAaQEAAAA3wMCAaQEAAAA4AMCBaQEEAAAAAGrBBAAAAABrAQQAAAAAa0EEAAAAAGuBBAAAAABDQYAAN4HACAJAADfBwAgDwAA4AcAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIdMDAADaB98DIt0DAQCHBgAh4AMAANsH4AMi4QMQANwHACHiAxAA3AcAIeMDEADcBwAh5AMBAIcGACEFLQAArAoAIC4AALUKACChBAAArQoAIKIEAAC0CgAgpwQAAJ0DACALLQAA5wcAMC4AAOwHADChBAAA6AcAMKIEAADpBwAwowQAAOoHACCkBAAA6wcAMKUEAADrBwAwpgQAAOsHADCnBAAA6wcAMKgEAADtBwAwqQQAAO4HADAHLQAA4QcAIC4AAOQHACChBAAA4gcAIKIEAADjBwAgpQQAACUAIKYEAAAlACCnBAAAzgMAIAiMAwEAAAABqwNAAAAAAawDQAAAAAHQAwEAAAAB0QMQAAAAAdMDAAAA0wMC1AMBAAAAAdUDgAAAAAECAAAAzgMAIC0AAOEHACADAAAAJQAgLQAA4QcAIC4AAOUHACAKAAAAJQAgJgAA5QcAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIdADAQCHBgAh0QMQANwHACHTAwAA5gfTAyLUAwEAjwYAIdUDgAAAAAEIjAMBAIcGACGrA0AAkQYAIawDQACRBgAh0AMBAIcGACHRAxAA3AcAIdMDAADmB9MDItQDAQCPBgAh1QOAAAAAAQGkBAAAANMDAggHAAD1BwAgjAMBAAAAAcADAAAAwAMDwgMBAAAAAdYDAAAAxAMC1wMBAAAAAdgDEAAAAAHZAwIAAAABAgAAAA4AIC0AAPQHACADAAAADgAgLQAA9AcAIC4AAPIHACABJgAAswoAMA0FAACjBQAgBwAA-wUAIIkDAAD6BQAwigMAAAwAEIsDAAD6BQAwjAMBAAAAAcADAAD0BcADI8IDAQDxBAAhzwMBAPAEACHWAwAA-QXEAyLXAwEA8AQAIdgDEACXBQAh2QMCAJkFACECAAAADgAgJgAA8gcAIAIAAADvBwAgJgAA8AcAIAuJAwAA7gcAMIoDAADvBwAQiwMAAO4HADCMAwEA8AQAIcADAAD0BcADI8IDAQDxBAAhzwMBAPAEACHWAwAA-QXEAyLXAwEA8AQAIdgDEACXBQAh2QMCAJkFACELiQMAAO4HADCKAwAA7wcAEIsDAADuBwAwjAMBAPAEACHAAwAA9AXAAyPCAwEA8QQAIc8DAQDwBAAh1gMAAPkFxAMi1wMBAPAEACHYAxAAlwUAIdkDAgCZBQAhB4wDAQCHBgAhwAMAALwHwAMjwgMBAI8GACHWAwAA8QfEAyLXAwEAhwYAIdgDEADcBwAh2QMCAMYGACEBpAQAAADEAwIIBwAA8wcAIIwDAQCHBgAhwAMAALwHwAMjwgMBAI8GACHWAwAA8QfEAyLXAwEAhwYAIdgDEADcBwAh2QMCAMYGACEHLQAArgoAIC4AALEKACChBAAArwoAIKIEAACwCgAgpQQAABAAIKYEAAAQACCnBAAA5gMAIAgHAAD1BwAgjAMBAAAAAcADAAAAwAMDwgMBAAAAAdYDAAAAxAMC1wMBAAAAAdgDEAAAAAHZAwIAAAABAy0AAK4KACChBAAArwoAIKcEAADmAwAgDQYAAPcHACAJAAD4BwAgDwAA-QcAIIwDAQAAAAGrA0AAAAABrANAAAAAAdMDAAAA3wMC3QMBAAAAAeADAAAA4AMC4QMQAAAAAeIDEAAAAAHjAxAAAAAB5AMBAAAAAQMtAACsCgAgoQQAAK0KACCnBAAAnQMAIAQtAADnBwAwoQQAAOgHADCjBAAA6gcAIKcEAADrBwAwAy0AAOEHACChBAAA4gcAIKcEAADOAwAgCIwDAQAAAAGOAwEAAAABjwMBAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAyAAAAABAgAAAAUAIC0AAIUIACADAAAABQAgLQAAhQgAIC4AAIQIACABJgAAqwoAMA0DAAC1BQAgiQMAAIEGADCKAwAAAwAQiwMAAIEGADCMAwEAAAABjQMBAPAEACGOAwEA8AQAIY8DAQDwBAAhkAMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGUAyAA8wQAIQIAAAAFACAmAACECAAgAgAAAIIIACAmAACDCAAgDIkDAACBCAAwigMAAIIIABCLAwAAgQgAMIwDAQDwBAAhjQMBAPAEACGOAwEA8AQAIY8DAQDwBAAhkAMBAPAEACGRAwEA8AQAIZIDAQDwBAAhkwMBAPAEACGUAyAA8wQAIQyJAwAAgQgAMIoDAACCCAAQiwMAAIEIADCMAwEA8AQAIY0DAQDwBAAhjgMBAPAEACGPAwEA8AQAIZADAQDwBAAhkQMBAPAEACGSAwEA8AQAIZMDAQDwBAAhlAMgAPMEACEIjAMBAIcGACGOAwEAhwYAIY8DAQCHBgAhkAMBAIcGACGRAwEAhwYAIZIDAQCHBgAhkwMBAIcGACGUAyAAiAYAIQiMAwEAhwYAIY4DAQCHBgAhjwMBAIcGACGQAwEAhwYAIZEDAQCHBgAhkgMBAIcGACGTAwEAhwYAIZQDIACIBgAhCIwDAQAAAAGOAwEAAAABjwMBAAAAAZADAQAAAAGRAwEAAAABkgMBAAAAAZMDAQAAAAGUAyAAAAABBC0AAPoHADChBAAA-wcAMKMEAAD9BwAgpwQAAP4HADAELQAA0AcAMKEEAADRBwAwowQAANMHACCnBAAA1AcAMAQtAADCBwAwoQQAAMMHADCjBAAAxQcAIKcEAADGBwAwAy0AAKwHACChBAAArQcAIKcEAADZAgAgBC0AAJ8HADChBAAAoAcAMKMEAACiBwAgpwQAAKMHADAELQAAkgcAMKEEAACTBwAwowQAAJUHACCnBAAAlgcAMAQtAACGBwAwoQQAAIcHADCjBAAAiQcAIKcEAACKBwAwBC0AAPAGADChBAAA8QYAMKMEAADzBgAgpwQAAPQGADAELQAA4QYAMKEEAADiBgAwowQAAOQGACCnBAAA5QYAMAQtAAC6BgAwoQQAALsGADCjBAAAvQYAIKcEAAC-BgAwBC0AAJ0GADChBAAAngYAMKMEAACgBgAgpwQAAKEGADAAAAADAwAAkgkAIAkAAOUIACCqBAAAkwkAIAAAAAAAAAABoAMBAAAAAQAAAAGgAwEAAAABAAAAAAABpAQAAADAAwIFLQAApgoAIC4AAKkKACChBAAApwoAIKIEAACoCgAgpwQAAOYDACADLQAApgoAIKEEAACnCgAgpwQAAOYDACAAAAAAAAWkBBAAAAABqwQQAAAAAawEEAAAAAGtBBAAAAABrgQQAAAAAQstAADUCAAwLgAA2QgAMKEEAADVCAAwogQAANYIADCjBAAA1wgAIKQEAADYCAAwpQQAANgIADCmBAAA2AgAMKcEAADYCAAwqAQAANoIADCpBAAA2wgAMAstAADJCAAwLgAAzQgAMKEEAADKCAAwogQAAMsIADCjBAAAzAgAIKQEAAC2BwAwpQQAALYHADCmBAAAtgcAMKcEAAC2BwAwqAQAAM4IADCpBAAAuQcAMAstAAC-CAAwLgAAwggAMKEEAAC_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-ggAIC4AAP0IACChBAAA-wgAIKIEAAD8CAAgpQQAAAcAIKYEAAAHACCnBAAACQAgDQMAAIAJACAJAAD4BwAgDwAA-QcAIIwDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAHTAwAAAN8DAt0DAQAAAAHgAwAAAOADAuEDEAAAAAHiAxAAAAAB4wMQAAAAAQIAAAAJACAtAAD6CAAgAwAAAAcAIC0AAPoIACAuAAD-CAAgDwAAAAcAIAMAAP8IACAJAADfBwAgDwAA4AcAICYAAP4IACCMAwEAhwYAIY0DAQCHBgAhqwNAAJEGACGsA0AAkQYAIdMDAADaB98DIt0DAQCHBgAh4AMAANsH4AMi4QMQANwHACHiAxAA3AcAIeMDEADcBwAhDQMAAP8IACAJAADfBwAgDwAA4AcAIIwDAQCHBgAhjQMBAIcGACGrA0AAkQYAIawDQACRBgAh0wMAANoH3wMi3QMBAIcGACHgAwAA2wfgAyLhAxAA3AcAIeIDEADcBwAh4wMQANwHACEFLQAAiQoAIC4AAIwKACChBAAAigoAIKIEAACLCgAgpwQAAK0EACADLQAAiQoAIKEEAACKCgAgpwQAAK0EACADLQAA-ggAIKEEAAD7CAAgpwQAAAkAIAGgAwEAAAABAAAAAAAAAAAAAAAAAAUtAACECgAgLgAAhwoAIKEEAACFCgAgogQAAIYKACCnBAAArQQAIAMtAACECgAgoQQAAIUKACCnBAAArQQAIBEEAACRCAAgCwAAlAgAIA4AAJMIACAQAACSCAAgEQAAlQgAIBIAAJYIACATAACXCAAgFgAAmAgAIBcAAJkIACAfAACaCAAgIAAAmwgAII8DAACLBgAgogMAAIsGACCjAwAAiwYAIKQDAACLBgAgqAMAAIsGACCqBAAAnAgAIAGgAwEAAAABAAAAAAAAAAAAAAGkBAAAAOkDAgGgAwEAAAABAAAAAAABpAQAAAD0AwIBoAMBAAAAAQAAAAAAAAotAACuCQAwLgAAsQkAMKEEAACvCQAwogQAALAJADCkBAAAvgYAMKUEAAC-BgAwpgQAAL4GADCnBAAAvgYAMKgEAACyCQAwqQQAAMEGADARGAAAtwkAIB4AAOAGACCMAwEAAAABqwNAAAAAAawDQAAAAAHEAwEAAAABzgMgAAAAAfEDAQAAAAH6AwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAECAAAAQgAgLQAAtgkAIAMAAABCACAtAAC2CQAgLgAAtAkAIAIAAABCACAmAAC0CQAgAgAAAMIGACAmAACzCQAgD4wDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIREYAAC1CQAgHgAAyQYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIQUtAAD_CQAgLgAAggoAIKEEAACACgAgogQAAIEKACCnBAAArQQAIBEYAAC3CQAgHgAA4AYAIIwDAQAAAAGrA0AAAAABrANAAAAAAcQDAQAAAAHOAyAAAAAB8QMBAAAAAfoDAQAAAAH9AwEAAAAB_gMCAAAAAf8DAQAAAAGABAEAAAABgQRAAAAAAYIEAgAAAAGDBAEAAAABhAQBAAAAAQMtAAD_CQAgoQQAAIAKACCnBAAArQQAIAMtAACuCQAwoQQAAK8JADCnBAAAvgYAMAAAAAAAAAAAAAAABS0AAPoJACAuAAD9CQAgoQQAAPsJACCiBAAA_AkAIKcEAACtBAAgAy0AAPoJACChBAAA-wkAIKcEAACtBAAgAAAABS0AAPUJACAuAAD4CQAgoQQAAPYJACCiBAAA9wkAIKcEAACtBAAgAy0AAPUJACChBAAA9gkAIKcEAACtBAAgAAAABS0AAPAJACAuAADzCQAgoQQAAPEJACCiBAAA8gkAIKcEAACtBAAgAy0AAPAJACChBAAA8QkAIKcEAACtBAAgAAAABS0AAOsJACAuAADuCQAgoQQAAOwJACCiBAAA7QkAIKcEAACtBAAgAy0AAOsJACChBAAA7AkAIKcEAACtBAAgChgAAJIJACAaAADZCQAgHgAAmwgAIP4DAACLBgAg_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-gkAIAMAAACwBAAgLQAA-gkAIC4AAP4JACAZAAAAsAQAIAQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAXAACaBgAgHwAAmwYAICAAAJwGACAmAAD-CQAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAXAACaBgAgHwAAmwYAICAAAJwGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEXBAAAhggAIAsAAIkIACAOAACICAAgEAAAhwgAIBEAAIoIACASAACLCAAgEwAAjAgAIBYAAI0IACAXAACOCAAgIAAAkAgAIIwDAQAAAAGPAwEAAAABoQMBAAAAAaIDAQAAAAGjAwEAAAABpAMBAAAAAaYDAAAApgMCpwMgAAAAAagDAQAAAAGpAyAAAAABqgMgAAAAAasDQAAAAAGsA0AAAAABAgAAAK0EACAtAAD_CQAgAwAAALAEACAtAAD_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_wgAIAYAAN4HACAJAADfBwAgjAMBAIcGACGNAwEAhwYAIasDQACRBgAhrANAAJEGACHTAwAA2gffAyLdAwEAhwYAIeADAADbB-ADIuEDEADcBwAh4gMQANwHACHjAxAA3AcAIeQDAQCHBgAhA4wDAQAAAAHAAwAAAMADAsEDAgAAAAEEAwAAkQkAIIwDAQAAAAGNAwEAAAABrANAAAAAAQIAAADZAgAgLQAAlAoAIAMAAAApACAtAACUCgAgLgAAmAoAIAYAAAApACADAACQCQAgJgAAmAoAIIwDAQCHBgAhjQMBAIcGACGsA0AAkQYAIQQDAACQCQAgjAMBAIcGACGNAwEAhwYAIawDQACRBgAhBIwDAQAAAAHAAwAAAMADA9kDAgAAAAHlAwEAAAABDgMAAIAJACAGAAD3BwAgDwAA-QcAIIwDAQAAAAGNAwEAAAABqwNAAAAAAawDQAAAAAHTAwAAAN8DAt0DAQAAAAHgAwAAAOADAuEDEAAAAAHiAxAAAAAB4wMQAAAAAeQDAQAAAAECAAAACQAgLQAAmgoAIAMAAAAHACAtAACaCgAgLgAAngoAIBAAAAAHACADAAD_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_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAELGAAAtgYAIBsAALUGACAcAAC5BgAgjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB-wMBAAAAAfwDIAAAAAECAAAATAAgLQAA1QoAIBcEAACGCAAgCwAAiQgAIA4AAIgIACAQAACHCAAgEQAAiggAIBIAAIsIACATAACMCAAgFgAAjQgAIBcAAI4IACAfAACPCAAgjAMBAAAAAY8DAQAAAAGhAwEAAAABogMBAAAAAaMDAQAAAAGkAwEAAAABpgMAAACmAwKnAyAAAAABqAMBAAAAAakDIAAAAAGqAyAAAAABqwNAAAAAAawDQAAAAAECAAAArQQAIC0AANcKACARGAAAtwkAIBoAAN8GACCMAwEAAAABqwNAAAAAAawDQAAAAAHEAwEAAAABzgMgAAAAAfEDAQAAAAH6AwEAAAAB_QMBAAAAAf4DAgAAAAH_AwEAAAABgAQBAAAAAYEEQAAAAAGCBAIAAAABgwQBAAAAAYQEAQAAAAECAAAAQgAgLQAA2QoAIAMAAACwBAAgLQAA1woAIC4AAN0KACAZAAAAsAQAIAQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAWAACZBgAgFwAAmgYAIB8AAJsGACAmAADdCgAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwQAAJIGACALAACVBgAgDgAAlAYAIBAAAJMGACARAACWBgAgEgAAlwYAIBMAAJgGACAWAACZBgAgFwAAmgYAIB8AAJsGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEHjAMBAAAAAasDQAAAAAGsA0AAAAAB-AMBAAAAAfkDAQAAAAH6AwEAAAAB_AMgAAAAAQMAAABKACAtAADVCgAgLgAA4QoAIA0AAABKACAYAACzBgAgGwAAqAYAIBwAAKkGACAmAADhCgAgjAMBAIcGACGrA0AAkQYAIawDQACRBgAh-AMBAIcGACH5AwEAhwYAIfoDAQCHBgAh-wMBAI8GACH8AyAAiAYAIQsYAACzBgAgGwAAqAYAIBwAAKkGACCMAwEAhwYAIasDQACRBgAhrANAAJEGACH4AwEAhwYAIfkDAQCHBgAh-gMBAIcGACH7AwEAjwYAIfwDIACIBgAhAwAAAEAAIC0AANkKACAuAADkCgAgEwAAAEAAIBgAALUJACAaAADIBgAgJgAA5AoAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIREYAAC1CQAgGgAAyAYAIIwDAQCHBgAhqwNAAJEGACGsA0AAkQYAIcQDAQCHBgAhzgMgAIgGACHxAwEAhwYAIfoDAQCHBgAh_QMBAIcGACH-AwIAxAYAIf8DAQCPBgAhgAQBAI8GACGBBEAAxQYAIYIEAgDGBgAhgwQBAI8GACGEBAEAjwYAIQeMAwEAAAABqwNAAAAAAawDQAAAAAH4AwEAAAAB-QMBAAAAAfsDAQAAAAH8AyAAAAABFwsAAIkIACAOAACICAAgEAAAhwgAIBEAAIoIACASAACLCAAgEwAAjAgAIBYAAI0IACAXAACOCAAgHwAAjwgAICAAAJAIACCMAwEAAAABjwMBAAAAAaEDAQAAAAGiAwEAAAABowMBAAAAAaQDAQAAAAGmAwAAAKYDAqcDIAAAAAGoAwEAAAABqQMgAAAAAaoDIAAAAAGrA0AAAAABrANAAAAAAQIAAACtBAAgLQAA5goAIAMAAACwBAAgLQAA5goAIC4AAOoKACAZAAAAsAQAIAsAAJUGACAOAACUBgAgEAAAkwYAIBEAAJYGACASAACXBgAgEwAAmAYAIBYAAJkGACAXAACaBgAgHwAAmwYAICAAAJwGACAmAADqCgAgjAMBAIcGACGPAwEAjwYAIaEDAQCHBgAhogMBAI8GACGjAwEAjwYAIaQDAQCPBgAhpgMAAJAGpgMipwMgAIgGACGoAwEAjwYAIakDIACIBgAhqgMgAIgGACGrA0AAkQYAIawDQACRBgAhFwsAAJUGACAOAACUBgAgEAAAkwYAIBEAAJYGACASAACXBgAgEwAAmAYAIBYAAJkGACAXAACaBgAgHwAAmwYAICAAAJwGACCMAwEAhwYAIY8DAQCPBgAhoQMBAIcGACGiAwEAjwYAIaMDAQCPBgAhpAMBAI8GACGmAwAAkAamAyKnAyAAiAYAIagDAQCPBgAhqQMgAIgGACGqAyAAiAYAIasDQACRBgAhrANAAJEGACEBAwACDAQGAwoAGgsqCg4oDBAKBBEtARIxEBM1ERY5Ehc_Ex9DFCBTFwEDAAIFAwACBgAFCQ8GCgAPDyYOAQULBAIFAAQHEQcFCBUICgANDBkJDRwGDiAMAQcABwIHAAcLAAoDAwACCRoJCgALAQkbAAIDAAIHAAcECCEADCIADSMADiQAAQUABAEJJwABAwACAQMAAgIDAAIVOxMCAwACFDwSBAoAGRgAAhpHFR5NFwIKABYZSBQBGUkABQoAGBgAAhsAFBxOFx1PFwEdUAACGlEAHlIACgRUAA5WABBVABFXABJYABNZABZaABdbAB9cACBdAAABAwACAQMAAgMKAB8zACA0ACEAAAADCgAfMwAgNAAhAQMAAgEDAAIDCgAmMwAnNAAoAAAAAwoAJjMAJzQAKAEDAAIBAwACAwoALTMALjQALwAAAAMKAC0zAC40AC8BAwACAQMAAgMKADQzADU0ADYAAAADCgA0MwA1NAA2AgMAAhS_ARICAwACFMUBEgMKADszADw0AD0AAAADCgA7MwA8NAA9ARgAAgEYAAIFCgBCMwBFNABGhQEAQ4YBAEQAAAAAAAUKAEIzAEU0AEaFAQBDhgEARAAAAwoASzMATDQATQAAAAMKAEszAEw0AE0DGAACGwAUHIMCFwMYAAIbABQciQIXAwoAUjMAUzQAVAAAAAMKAFIzAFM0AFQAAAAFCgBaMwBdNABehQEAW4YBAFwAAAAAAAUKAFozAF00AF6FAQBbhgEAXAAAAAUKAGQzAGc0AGiFAQBlhgEAZgAAAAAABQoAZDMAZzQAaIUBAGWGAQBmAgMAAgcABwIDAAIHAAcFCgBtMwBwNABxhQEAboYBAG8AAAAAAAUKAG0zAHA0AHGFAQBuhgEAbwEDAAIBAwACAwoAdjMAdzQAeAAAAAMKAHYzAHc0AHgCBwAHCwAKAgcABwsACgUKAH0zAIABNACBAYUBAH6GAQB_AAAAAAAFCgB9MwCAATQAgQGFAQB-hgEAfwIDAAIGAAUCAwACBgAFBQoAhgEzAIkBNACKAYUBAIcBhgEAiAEAAAAAAAUKAIYBMwCJATQAigGFAQCHAYYBAIgBAAADCgCPATMAkAE0AJEBAAAAAwoAjwEzAJABNACRAQIFAAQHwAMHAgUABAfGAwcFCgCWATMAmQE0AJoBhQEAlwGGAQCYAQAAAAAABQoAlgEzAJkBNACaAYUBAJcBhgEAmAEBBQAEAQUABAUKAJ8BMwCiATQAowGFAQCgAYYBAKEBAAAAAAAFCgCfATMAogE0AKMBhQEAoAGGAQChAQAABQoAqAEzAKsBNACsAYUBAKkBhgEAqgEAAAAAAAUKAKgBMwCrATQArAGFAQCpAYYBAKoBAQcABwEHAAcFCgCxATMAtAE0ALUBhQEAsgGGAQCzAQAAAAAABQoAsQEzALQBNAC1AYUBALIBhgEAswEAAAADCgC7ATMAvAE0AL0BAAAAAwoAuwEzALwBNAC9AQAAAwoAwgEzAMMBNADEAQAAAAMKAMIBMwDDATQAxAEBAwACAQMAAgMKAMkBMwDKATQAywEAAAADCgDJATMAygE0AMsBIQIBIl4BI18BJGABJWEBJ2MBKGUbKWYcKmgBK2obLGsdL2wBMG0BMW4bNXEeNnIiN3MQOHQQOXUQOnYQO3cQPHkQPXsbPnwjP34QQIABG0GBASRCggEQQ4MBEESEARtFhwElRogBKUeJARFIigERSYsBEUqMARFLjQERTI8BEU2RARtOkgEqT5QBEVCWARtRlwErUpgBEVOZARFUmgEbVZ0BLFaeATBXnwESWKABElmhARJaogESW6MBElylARJdpwEbXqgBMV-qARJgrAEbYa0BMmKuARJjrwESZLABG2WzATNmtAE3Z7UBE2i2ARNptwETargBE2u5ARNsuwETbb0BG26-AThvwQETcMMBG3HEATlyxgETc8cBE3TIARt1ywE6dswBPnfNARR4zgEUec8BFHrQARR70QEUfNMBFH3VARt-1gE_f9gBFIAB2gEbgQHbAUCCAdwBFIMB3QEUhAHeARuHAeEBQYgB4gFHiQHjARWKAeQBFYsB5QEVjAHmARWNAecBFY4B6QEVjwHrARuQAewBSJEB7gEVkgHwARuTAfEBSZQB8gEVlQHzARWWAfQBG5cB9wFKmAH4AU6ZAfkBF5oB-gEXmwH7ARecAfwBF50B_QEXngH_ARefAYECG6ABggJPoQGFAheiAYcCG6MBiAJQpAGKAhelAYsCF6YBjAIbpwGPAlGoAZACVakBkgJWqgGTAlarAZYCVqwBlwJWrQGYAlauAZoCVq8BnAIbsAGdAlexAZ8CVrIBoQIbswGiAli0AaMCVrUBpAJWtgGlAhu3AagCWbgBqQJfuQGrAmC6AawCYLsBrwJgvAGwAmC9AbECYL4BswJgvwG1AhvAAbYCYcEBuAJgwgG6AhvDAbsCYsQBvAJgxQG9AmDGAb4CG8cBwQJjyAHCAmnJAcMCDMoBxAIMywHFAgzMAcYCDM0BxwIMzgHJAgzPAcsCG9ABzAJq0QHOAgzSAdACG9MB0QJr1AHSAgzVAdMCDNYB1AIb1wHXAmzYAdgCctkB2gIK2gHbAgrbAd0CCtwB3gIK3QHfAgreAeECCt8B4wIb4AHkAnPhAeYCCuIB6AIb4wHpAnTkAeoCCuUB6wIK5gHsAhvnAe8CdegB8AJ56QHxAgnqAfICCesB8wIJ7AH0AgntAfUCCe4B9wIJ7wH5AhvwAfoCevEB_AIJ8gH-AhvzAf8Ce_QBgAMJ9QGBAwn2AYIDG_cBhQN8-AGGA4IB-QGHAwT6AYgDBPsBiQME_AGKAwT9AYsDBP4BjQME_wGPAxuAApADgwGBApIDBIIClAMbgwKVA4QBhAKWAwSFApcDBIYCmAMbhwKbA4UBiAKcA4sBiQKeAwWKAp8DBYsCogMFjAKjAwWNAqQDBY4CpgMFjwKoAxuQAqkDjAGRAqsDBZICrQMbkwKuA40BlAKvAwWVArADBZYCsQMblwK0A44BmAK1A5IBmQK2AwaaArcDBpsCuAMGnAK5AwadAroDBp4CvAMGnwK-AxugAr8DkwGhAsIDBqICxAMbowLFA5QBpALHAwalAsgDBqYCyQMbpwLMA5UBqALNA5sBqQLPAw6qAtADDqsC0gMOrALTAw6tAtQDDq4C1gMOrwLYAxuwAtkDnAGxAtsDDrIC3QMbswLeA50BtALfAw61AuADDrYC4QMbtwLkA54BuALlA6QBuQLnAwe6AugDB7sC6gMHvALrAwe9AuwDB74C7gMHvwLwAxvAAvEDpQHBAvMDB8IC9QMbwwL2A6YBxAL3AwfFAvgDB8YC-QMbxwL8A6cByAL9A60ByQL-AwjKAv8DCMsCgAQIzAKBBAjNAoIECM4ChAQIzwKGBBvQAocErgHRAokECNICiwQb0wKMBK8B1AKNBAjVAo4ECNYCjwQb1wKSBLAB2AKTBLYB2QKVBLcB2gKWBLcB2wKZBLcB3AKaBLcB3QKbBLcB3gKdBLcB3wKfBBvgAqAEuAHhAqIEtwHiAqQEG-MCpQS5AeQCpgS3AeUCpwS3AeYCqAQb5wKrBLoB6AKsBL4B6QKuBALqAq8EAusCsgQC7AKzBALtArQEAu4CtgQC7wK4BBvwArkEvwHxArsEAvICvQQb8wK-BMAB9AK_BAL1AsAEAvYCwQQb9wLEBMEB-ALFBMUB-QLGBAP6AscEA_sCyAQD_ALJBAP9AsoEA_4CzAQD_wLOBBuAA88ExgGBA9EEA4ID0wQbgwPUBMcBhAPVBAOFA9YEA4YD1wQbhwPaBMgBiAPbBMwB" +} +config.compilerWasm = { + getRuntime: async () => require('./query_compiler_fast_bg.js'), + getQueryCompilerWasmModule: async () => { + const { Buffer } = require('node:buffer') + const { wasm } = require('./query_compiler_fast_bg.wasm-base64.js') + const queryCompilerWasmFileBytes = Buffer.from(wasm, 'base64') + + return new WebAssembly.Module(queryCompilerWasmFileBytes) + }, + importName: './query_compiler_fast_bg.js', + } + +const PrismaClient = getPrismaClient(config) +exports.PrismaClient = PrismaClient +Object.assign(exports, Prisma) diff --git a/apps/api-effect/src/generated/prisma/package.json b/apps/api-effect/src/generated/prisma/package.json new file mode 100644 index 00000000..21c1e63b --- /dev/null +++ b/apps/api-effect/src/generated/prisma/package.json @@ -0,0 +1,144 @@ +{ + "name": "prisma-client-4f3d12d44ebb0ec7111671539d90db76b934f5edfe8873893c4dee37785d35ea", + "main": "index.js", + "types": "index.d.ts", + "browser": "default.js", + "exports": { + "./client": { + "require": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "import": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "default": "./index.js" + }, + "./package.json": "./package.json", + ".": { + "require": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "import": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "default": "./index.js" + }, + "./extension": { + "types": "./extension.d.ts", + "require": "./extension.js", + "import": "./extension.js", + "default": "./extension.js" + }, + "./index-browser": { + "types": "./index.d.ts", + "require": "./index-browser.js", + "import": "./index-browser.js", + "default": "./index-browser.js" + }, + "./index": { + "types": "./index.d.ts", + "require": "./index.js", + "import": "./index.js", + "default": "./index.js" + }, + "./edge": { + "types": "./edge.d.ts", + "require": "./edge.js", + "import": "./edge.js", + "default": "./edge.js" + }, + "./runtime/client": { + "types": "./runtime/client.d.ts", + "node": { + "require": "./runtime/client.js", + "default": "./runtime/client.js" + }, + "require": "./runtime/client.js", + "import": "./runtime/client.mjs", + "default": "./runtime/client.mjs" + }, + "./runtime/wasm-compiler-edge": { + "types": "./runtime/wasm-compiler-edge.d.ts", + "require": "./runtime/wasm-compiler-edge.js", + "import": "./runtime/wasm-compiler-edge.mjs", + "default": "./runtime/wasm-compiler-edge.mjs" + }, + "./runtime/index-browser": { + "types": "./runtime/index-browser.d.ts", + "require": "./runtime/index-browser.js", + "import": "./runtime/index-browser.mjs", + "default": "./runtime/index-browser.mjs" + }, + "./generator-build": { + "require": "./generator-build/index.js", + "import": "./generator-build/index.js", + "default": "./generator-build/index.js" + }, + "./sql": { + "require": { + "types": "./sql.d.ts", + "node": "./sql.js", + "default": "./sql.js" + }, + "import": { + "types": "./sql.d.ts", + "node": "./sql.mjs", + "default": "./sql.mjs" + }, + "default": "./sql.js" + }, + "./*": "./*" + }, + "version": "7.8.0", + "sideEffects": false, + "dependencies": { + "@prisma/client-runtime-utils": "7.8.0" + }, + "imports": { + "#wasm-compiler-loader": { + "edge-light": "./wasm-edge-light-loader.mjs", + "workerd": "./wasm-worker-loader.mjs", + "worker": "./wasm-worker-loader.mjs", + "default": "./wasm-worker-loader.mjs" + }, + "#main-entry-point": { + "require": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "import": { + "node": "./index.js", + "edge-light": "./edge.js", + "workerd": "./edge.js", + "worker": "./edge.js", + "browser": "./index-browser.js", + "default": "./index.js" + }, + "default": "./index.js" + } + } +} \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/query_compiler_fast_bg.js b/apps/api-effect/src/generated/prisma/query_compiler_fast_bg.js new file mode 100644 index 00000000..37aca085 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/query_compiler_fast_bg.js @@ -0,0 +1,2 @@ +"use strict";var h=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var D=(e,t)=>{for(var n in t)h(e,n,{get:t[n],enumerable:!0})},O=(e,t,n,_)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!j.call(e,r)&&r!==n&&h(e,r,{get:()=>t[r],enumerable:!(_=T(t,r))||_.enumerable});return e};var B=e=>O(h({},"__esModule",{value:!0}),e);var xe={};D(xe,{QueryCompiler:()=>F,__wbg_Error_e83987f665cf5504:()=>q,__wbg_Number_bb48ca12f395cd08:()=>C,__wbg_String_8f0eb39a4a4c2f66:()=>k,__wbg___wbindgen_boolean_get_6d5a1ee65bab5f68:()=>W,__wbg___wbindgen_debug_string_df47ffb5e35e6763:()=>V,__wbg___wbindgen_in_bb933bd9e1b3bc0f:()=>z,__wbg___wbindgen_is_object_c818261d21f283a4:()=>L,__wbg___wbindgen_is_string_fbb76cb2940daafd:()=>P,__wbg___wbindgen_is_undefined_2d472862bd29a478:()=>Q,__wbg___wbindgen_jsval_loose_eq_b664b38a2f582147:()=>Y,__wbg___wbindgen_number_get_a20bf9b85341449d:()=>G,__wbg___wbindgen_string_get_e4f06c90489ad01b:()=>J,__wbg___wbindgen_throw_b855445ff6a94295:()=>X,__wbg_entries_e171b586f8f6bdbf:()=>H,__wbg_getTime_14776bfb48a1bff9:()=>K,__wbg_get_7bed016f185add81:()=>Z,__wbg_get_with_ref_key_1dc361bd10053bfe:()=>v,__wbg_instanceof_ArrayBuffer_70beb1189ca63b38:()=>ee,__wbg_instanceof_Uint8Array_20c8e73002f7af98:()=>te,__wbg_isSafeInteger_d216eda7911dde36:()=>ne,__wbg_length_69bca3cb64fc8748:()=>re,__wbg_length_cdd215e10d9dd507:()=>_e,__wbg_new_0_f9740686d739025c:()=>oe,__wbg_new_1acc0b6eea89d040:()=>ce,__wbg_new_5a79be3ab53b8aa5:()=>ie,__wbg_new_68651c719dcda04e:()=>se,__wbg_new_e17d9f43105b08be:()=>ue,__wbg_prototypesetcall_2a6620b6922694b2:()=>fe,__wbg_set_3f1d0b984ed272ed:()=>be,__wbg_set_907fb406c34a251d:()=>de,__wbg_set_c213c871859d6500:()=>ae,__wbg_set_message_82ae475bb413aa5c:()=>ge,__wbg_set_wasm:()=>N,__wbindgen_cast_2241b6af4c4b2941:()=>le,__wbindgen_cast_4625c577ab2ec9ee:()=>we,__wbindgen_cast_9ae0607507abb057:()=>pe,__wbindgen_cast_d6cd19b81560fd6e:()=>ye,__wbindgen_init_externref_table:()=>me});module.exports=B(xe);var A=()=>{};A.prototype=A;let o;function N(e){o=e}let p=null;function a(){return(p===null||p.byteLength===0)&&(p=new Uint8Array(o.memory.buffer)),p}let y=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});y.decode();const U=2146435072;let S=0;function R(e,t){return S+=t,S>=U&&(y=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),y.decode(),S=t),y.decode(a().subarray(e,e+t))}function m(e,t){return e=e>>>0,R(e,t)}let f=0;const g=new TextEncoder;"encodeInto"in g||(g.encodeInto=function(e,t){const n=g.encode(e);return t.set(n),{read:e.length,written:n.length}});function l(e,t,n){if(n===void 0){const i=g.encode(e),d=t(i.length,1)>>>0;return a().subarray(d,d+i.length).set(i),f=i.length,d}let _=e.length,r=t(_,1)>>>0;const s=a();let c=0;for(;c<_;c++){const i=e.charCodeAt(c);if(i>127)break;s[r+c]=i}if(c!==_){c!==0&&(e=e.slice(c)),r=n(r,_,_=c+e.length*3,1)>>>0;const i=a().subarray(r+c,r+_),d=g.encodeInto(e,i);c+=d.written,r=n(r,_,c,1)>>>0}return f=c,r}let b=null;function u(){return(b===null||b.buffer.detached===!0||b.buffer.detached===void 0&&b.buffer!==o.memory.buffer)&&(b=new DataView(o.memory.buffer)),b}function x(e){return e==null}function I(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const r=e.description;return r==null?"Symbol":`Symbol(${r})`}if(t=="function"){const r=e.name;return typeof r=="string"&&r.length>0?`Function(${r})`:"Function"}if(Array.isArray(e)){const r=e.length;let s="[";r>0&&(s+=I(e[0]));for(let c=1;c1)_=n[1];else return toString.call(e);if(_=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:_}function $(e,t){return e=e>>>0,a().subarray(e/1,e/1+t)}function w(e){const t=o.__wbindgen_externrefs.get(e);return o.__externref_table_dealloc(e),t}const E=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>o.__wbg_querycompiler_free(e>>>0,1));class F{__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,E.unregister(this),t}free(){const t=this.__destroy_into_raw();o.__wbg_querycompiler_free(t,0)}compileBatch(t){const n=l(t,o.__wbindgen_malloc,o.__wbindgen_realloc),_=f,r=o.querycompiler_compileBatch(this.__wbg_ptr,n,_);if(r[2])throw w(r[1]);return w(r[0])}constructor(t){const n=o.querycompiler_new(t);if(n[2])throw w(n[1]);return this.__wbg_ptr=n[0]>>>0,E.register(this,this.__wbg_ptr,this),this}compile(t){const n=l(t,o.__wbindgen_malloc,o.__wbindgen_realloc),_=f,r=o.querycompiler_compile(this.__wbg_ptr,n,_);if(r[2])throw w(r[1]);return w(r[0])}}Symbol.dispose&&(F.prototype[Symbol.dispose]=F.prototype.free);function q(e,t){return Error(m(e,t))}function C(e){return Number(e)}function k(e,t){const n=String(t),_=l(n,o.__wbindgen_malloc,o.__wbindgen_realloc),r=f;u().setInt32(e+4*1,r,!0),u().setInt32(e+4*0,_,!0)}function W(e){const t=e,n=typeof t=="boolean"?t:void 0;return x(n)?16777215:n?1:0}function V(e,t){const n=I(t),_=l(n,o.__wbindgen_malloc,o.__wbindgen_realloc),r=f;u().setInt32(e+4*1,r,!0),u().setInt32(e+4*0,_,!0)}function z(e,t){return e in t}function L(e){const t=e;return typeof t=="object"&&t!==null}function P(e){return typeof e=="string"}function Q(e){return e===void 0}function Y(e,t){return e==t}function G(e,t){const n=t,_=typeof n=="number"?n:void 0;u().setFloat64(e+8*1,x(_)?0:_,!0),u().setInt32(e+4*0,!x(_),!0)}function J(e,t){const n=t,_=typeof n=="string"?n:void 0;var r=x(_)?0:l(_,o.__wbindgen_malloc,o.__wbindgen_realloc),s=f;u().setInt32(e+4*1,s,!0),u().setInt32(e+4*0,r,!0)}function X(e,t){throw new Error(m(e,t))}function H(e){return Object.entries(e)}function K(e){return e.getTime()}function Z(e,t){return e[t>>>0]}function v(e,t){return e[t]}function ee(e){let t;try{t=e instanceof ArrayBuffer}catch{t=!1}return t}function te(e){let t;try{t=e instanceof Uint8Array}catch{t=!1}return t}function ne(e){return Number.isSafeInteger(e)}function re(e){return e.length}function _e(e){return e.length}function oe(){return new Date}function ce(){return new Object}function ie(e){return new Uint8Array(e)}function se(){return new Map}function ue(){return new Array}function fe(e,t,n){Uint8Array.prototype.set.call($(e,t),n)}function be(e,t,n){e[t]=n}function de(e,t,n){return e.set(t,n)}function ae(e,t,n){e[t>>>0]=n}function ge(e,t){global.PRISMA_WASM_PANIC_REGISTRY.set_message(m(e,t))}function le(e,t){return m(e,t)}function we(e){return BigInt.asUintN(64,e)}function pe(e){return e}function ye(e){return e}function me(){const e=o.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}0&&(module.exports={QueryCompiler,__wbg_Error_e83987f665cf5504,__wbg_Number_bb48ca12f395cd08,__wbg_String_8f0eb39a4a4c2f66,__wbg___wbindgen_boolean_get_6d5a1ee65bab5f68,__wbg___wbindgen_debug_string_df47ffb5e35e6763,__wbg___wbindgen_in_bb933bd9e1b3bc0f,__wbg___wbindgen_is_object_c818261d21f283a4,__wbg___wbindgen_is_string_fbb76cb2940daafd,__wbg___wbindgen_is_undefined_2d472862bd29a478,__wbg___wbindgen_jsval_loose_eq_b664b38a2f582147,__wbg___wbindgen_number_get_a20bf9b85341449d,__wbg___wbindgen_string_get_e4f06c90489ad01b,__wbg___wbindgen_throw_b855445ff6a94295,__wbg_entries_e171b586f8f6bdbf,__wbg_getTime_14776bfb48a1bff9,__wbg_get_7bed016f185add81,__wbg_get_with_ref_key_1dc361bd10053bfe,__wbg_instanceof_ArrayBuffer_70beb1189ca63b38,__wbg_instanceof_Uint8Array_20c8e73002f7af98,__wbg_isSafeInteger_d216eda7911dde36,__wbg_length_69bca3cb64fc8748,__wbg_length_cdd215e10d9dd507,__wbg_new_0_f9740686d739025c,__wbg_new_1acc0b6eea89d040,__wbg_new_5a79be3ab53b8aa5,__wbg_new_68651c719dcda04e,__wbg_new_e17d9f43105b08be,__wbg_prototypesetcall_2a6620b6922694b2,__wbg_set_3f1d0b984ed272ed,__wbg_set_907fb406c34a251d,__wbg_set_c213c871859d6500,__wbg_set_message_82ae475bb413aa5c,__wbg_set_wasm,__wbindgen_cast_2241b6af4c4b2941,__wbindgen_cast_4625c577ab2ec9ee,__wbindgen_cast_9ae0607507abb057,__wbindgen_cast_d6cd19b81560fd6e,__wbindgen_init_externref_table}); diff --git a/apps/api-effect/src/generated/prisma/query_compiler_fast_bg.wasm b/apps/api-effect/src/generated/prisma/query_compiler_fast_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..e1e5f3ea02d25e14065951c03ef6547bc50bd1b4 GIT binary patch literal 3437252 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 z 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%0AA>l{L|(E%xM$6urM>)8Qb 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

-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 z zX`W7YbcUy+?C)d(o8!}C`qW=&@j~}EAcQpvWl#q}1C3I04{jb5*udk;{FZ(9&|b6n z?Js`pvMt4mx6c+Yk`?9UXlrpWy0epJFO!(D*iRMKDD!07osZnpYj_X8^tHCrTjS6W zYi&;)T6-A(S#K@Wd8Dkf9K+#I6=3v19rUWu?_o>A>y4^p3X}?vkREm1t5Q0zwzWp` zAA5sC#PDPRC$N6}Hrnnyo5B0tx zU{mq$-_X(U4B9}zJEk0QX>sWHpNwXN4j?V)_;1K>2He;Xl7a#E zpZ?aTB7u9R_-+NmE6q>JlpdKLnjO;6y5DK-E#AK6dM!r| z3YP8Ek~C{$GrSk9xSs5$F~3WUtMVTqq=|mQ{US08;RYI=>At9 z{LOb?YPZBUOuzi6|KpFI_g`s#`sF7-vgbASBg)6=mw)MhJ)7DcZl%*NfBXxtvl|6O zy!^=jtl15bsnd_|`1e*8$NJTGH>@n+|KevND`Nqk{@bP%MIB%9r(l|!!MCi!u+H?7 zz1IH16-pS}05^$#Jgio1hA}ZZdqnF{SJIGFsUL80&?HEUuc9_UDi%=J&3Lu|GD+Xj zVfKP{DKEKb9?0I>fFI6eA8u)7%hQ`nIgIZy8_X2z^7@PB#K5nbVKc>tkJ!#NMhVYs zLei5mn>S^~&CzOpm=Ia++puq~!K}h!(o&5`ch6$?uj!JcDC=#r*#E5RD_A&Z-Cb3V zi0m?%TzDnFX%*?aJEl!gL^J(KtUul;f?(OG_C%>I_<{yq1FXsHFiZ4TqBq)FGI%rn zfu;gb2ts?ix~6x<3-wEU*XyF)yKdCZ+raA4g_mL8i1l@uo%n?63t z*x)?+`OJEx#dnX6aAvyx%8DfOv-NT_(aQsiLkbA^LOn;>j?y%eo~r(v!>C)GG3+l0 zV=}gAmp@7{lDjppcZj!Y-E8)%x_A5?iogfm#N?hf4Hzn~Sl!0%4jhFX}e z;Ft;76n96dH%tUGpDXdEc({K|O36E*4Sk$eKkf`sH8XOE$BVrI?VRF`^b~Js8;C2g z>7=A~W=rH@IRz^lt@grjv{`~Xr)3OIlkN}7WdzzLnn)B<-WjDUc{hs~_1}9Z^Fc2u zc>`7YC;rliE`v;9s+NL`5m{eAnIwj?dH`Tm;X2h3xb+p5KQ35G@S5=T$&4o}hXL?t z&;XjnUIMo?f5B4E92IL!eaF)9O&qa?+Obrr&&wRJN%{(mzgcI+PlNsC`HFXRR_1g9dchyki8!2igduyPEA_IuI1>15?ET3)$*8TR}$balczhmn^Lb+H1fB z*T6iB3OoA@mT#Fe1C68DD%*!n!$gpKu=Iaz{07wfh$Eat#$hB%P0vSIJ;N7J4c>4j zLaABOx$!d>jH2S_xa^hrWgA9qmL@hIbMD1u8xo8fGsC(}>_Bk&anyaWTgv z?(sz0H_c9LZceAENVz7r@5-aBcTgJ9rR5_X2$bOnPjJfG2mYvC89sMA#5gth{+Sp>f@Y^KT*_yuT- zVAwu!48w?EAG3KwQ3}?VE>2NZ2As;J+fZv0VqD#oLX}Rd?ZD&+C+;cT%PCSS-8DrZ zqP{5t&1lhP9x+p@FadmK1q03+HX|S+J>?BEnR6UP3ADcHrBqIw3cQt$Ar!nW9_=JI z!rbYJO(sOicEbOotlCtCYmzvr7|=*fYcb5}Mm`n!uZ^PO@ohKDImY~C2C-owbo5OE z?ogYPHZ)hnwh+ZRyttI1VrK9FzXqX z)o%+6vdL$*Uz>d6JU2uk$}rVzWifaRs-iFn(QX@}mPyUUd923EmPsA8Y!#3eqLv9! z%9dtoF8Qqq1NjJuk~krP1TDq$ngYr(YOKZ>ZWx|UlE-IT)2n+11G7x-d$?Dy_{mdD zJiwVo1{KiZ7N0N$Twdct2|XSAj2{Qs*AL7(mh5v8PT%JPWbU+Tpif0bF|lVPDtezl z824741i>+e$XOmtX4IcgA^z)w02x!*#fXvO@R zSgF=NCIV$^Cw8Ng;%E3+fHSZnE!)SC;v4Spg|XB?E?S4?P`8e-%)ob4M`G*9PeVN| z@o?l3!|^efUMMTUGNQu3Z}DT!>6FU$wAE$@$K$#Tt?Q7Z zC!!MK&dNFgAT9jm}OLQE`=QCBr+E+aEJBMsvfhz>Pv=$&X z4RC%ZX@O&v@j%coENU|8^~U&z8lxpwtd5cO>C|H+1fe@dA`)wTW0Y>|oQ#o*79XQh zIW9HER^J#uqcK|YTn#urbnL{}^F2=U|L~kO90U#)u@gBpwwk+8g8U~1yFG+%|Lz|zGBKN{gHW)}FrPG{rNMrLn%?piGuS6H zvgdzaAbR z|Jq^x~A^!v^2_f~=$cI8e{%^C}G%HO%1O%d2j{M(d zr?u1=+4(LxM$AJMlL*GKRGQd_Vol#-FXu3}sXc}tXQ zM>{pLX<1o|FWK9c`933^s_r*{9-BkK(7>uotJ6R&lh<9LB}F(nll;^xmir9*u2MCj z&Sh)PPj5pZ$bJED#dJy#h%5n@x}olkIfQ#jLKAF*y@{~ZR7Okf zQ`vyxiD(GO<#$TG6S8IyKXkorsh_rWB4Vncm}4br1?8+nn1iw}P-@A?%t|ZecV;Ed zNF4Xlg#6R&*;+ZRQ6lY!om;Kal+=iXaOzB8yg}gy+GNpwIDR=pr_26`RB*bCqw2xI zM8~10^LQ4iI7#$MDCSpVD7S~>SEsjoi9nCryhM`5&0dNWFSDtnfqePi;J7VHLQM}= zvlq>``;cOTJQvtxf+IPtPbP=sP7BB@*PWZB1sQ<{Du*g6Ro}hcV>Qm%H2Wtx2pL%!A3~b~{Os!W(VsdxL+@goml3bx$4XvjBTZ{RS!G&mLO9hl?#X4-I(->yjhV@?dq}qc zk!k2qD2!R^HWV>(Y)#RmsASnOtpqZp@!=T=8ut=N%e@39C%puE*MTahkHf;Qxrn8Q zWKy&VPovV}IDNL6ia=gwT6*AqUWkX?K2QpMpcMK*DfEF-=mVwD2TGw231_8&!>d3$ z-AFjl!>Xkx(*20_G|Ik6v=yId_8OL#ncXQ;DACz+b|)YtxVQS906`dCxDzlE9iwS) z3LuHjFSI)WCBZRNe5Ko?x!8ZCOTtqCjHm@?nqYVl#y818n~<4^SArrL%P><&2Xn9U z(xj%SJ;UEP_YywH<6g=%z3o?gl`%c*+emBxov(tSu)Zs_0==MS0GL{n9Kt;nW}~8l zGdPf2MFnT9_TmwW6J9(k*CZt3ex92xIOV_zz+Ppq5;N(8>86VZfZSZgBkCWwD=$XWQPM0=bgO@n>PBxWBD znrgCmEuyLJ>ZTj6n~t;nV9(15>fV!P8A=tc*+(WGQ#m9Ed;1^TL8zZ^NbsD z*e%gWfZM4WSx8x?>*-R~SA`ur3NI*{4b||&B`HhGe|3)OzDgEV5C^i*D^<$UeU&U0 zt)ibS7OSF4oQqb`Pn>$CpRy!*_sw)o@zb8^k{x@LWo?~6S$d~RS+sb{7J5iuq=iM0 zt~$@SkskRj(#Rs@yI3O&Da({)UCMevly#wt3}#X^%3>*9lCltW`zTBIRm!S@I8c^e zsZy5itCY2975$X8SQS;uTC|FO%F-+Sl!gAQpR!OJojzqr$JC=N^oxt|EWJ~uELuEe z3q8tOq=iK&OLd-cBR$Gmq>)7^Yq3TaQkJPGyOi|{e*|S+u#mD)$}dS-a+9v|EZtWr z%Rt;O7wDBLW$FIC9Isj6YNXY0(JGMq(5jS6nO^B93-((5WPuEE`eY%2qem8|Zx4O$ zt^p>xRmp-DPuYSGORLNxErcO;TVN?uoqc3s!|In`l0Hf9H-s@n?ygeVKp39{WAbIJ zVodi{j8#V;c!6H&2e;i-RKtCj`#ePWOUtf`F|N5VR zgdL_^Q+7Huqavn=9b7;41`iASwSTNNNst-(!yJBf;)!2W?Gh|B-sve zszy&I5LMqOHD-Bnux>06hs*C5l1x98v=gH9?yjL;wQX%tR@uBh{KASKrW68Cv1|Mn zl0qOsSMMnV_A#%!j$Y9l*>*DTBRuRY{)^?tw)9_=TU-K!o05R}aF=+twik`xJ-=vag%T)HyFlj(#80V7)XzH9IfeKm)=H59^8gNSP zhZ5umHEF;rXLsE+0fF5uOcQW+>`op|sP2R@(+(=$MiwRvOHy5-IhQGh#oJ2X!!!Y` z3P~?XfGrC@e2D>G5fJ``rvmuEisa&LHKhVL&N|N_Z4!-I?MrmY2<7Fn664@AI&1(V z_M+(?f25l3u~s}xOy7y=9x)>Ak2^midn(0;xtkMdx!lEpM_g_v zfj5^e94E)+wl*FCljPMgHwy%(TE0ql#&nZP>}iy7g%=*QXnh@><<0>Q#5xO)WQ7>K z@?pMH?q3(=DwYW{J8ta^aDswaCWxz+Wg-}L2>3GIW48azvYJpLy8Y_ZLUAZ=(EUcj zl_TjhE?b_F{nq0E==-3q`joxXU!bJ_IE(e~cq zb@#S&LQt0Re^$YfvN^6H>%9Se`TyRbD^zt)Tu!pi>EzV}RY_GCKbn1%h(fPJS zbc}ADQ8Y;Rkq=}YnFrjlVl8p-UYeZEFZNPCn~!^G^=y8Tm&RxF3%#^*HYaf{+cgqM z=PSL`;$&wp(WD(mAa96#OwWt}t|Qn4yQbd|gNAPdo*h#Phmxg^m@y3f_z)a~&^ZKD zjs*uo5&P=?P=szDmIF~)HIXXa=6YS|b*tCaUiZr(HGPa#+HO{@Zsq1gw5^QeRoWgd zX=YjbX}>8Acq8iPkftQw{v(=$Bdef<8zC%GFWdli4*2>{0ISWx zM)qNOGXzGXomAaO^b%?(VUA7g(xWQBL|j%IHYyLERa7moQ#HqXdey`^meZR_>@Fsn z({ekpi9RJ)6f3RAJq6w;KQG#YAYkdD1xl8v?OLWgxeI@-#S_fx>$wotcO@4*Al7jq z`S@Bcd^E`gqMG0WmE~L@J9L+#Lq!xqnCKrwsTmhYS9Lz};wW2HqE19NSWs%6 zg=4RdIhQRIYq*a(*g}c;*QgWwe!PPLSV3hL+DV10Utxt4d~X#}*JRr|yVg!QBa~4@ zk$sq~hH|aYa?!)0g|lJxG&Cv!8g3kfKk;Ij4oUl*PDAOC(3WXH`q?BzM8Pm1bG54u zhzB+7u$5}HzZ6x3>H>tULbOz6g~1t4iv@s*K>)fl%5+%lfU7L&(h880Q}dsRFV>Ie zQ2R%8nQULiM-=cH5{fVLXi?T=A(iD?*n|~Om#Se26Oj-}g!_yL#1Bmn{V)W6#o@&| zP-4B@#2TpR$q8dZO(-DIbsrO|?2}^sY%5g1CP;E}7C5&ApC!)AxM_wWocn-M;XD=2 zwZmgL3QIGbgDao9$Xcgq$batz$%XDPdPHiNiKrBT7G7O5FZ;a$eeb?gP5<~R4jmXx zV)KoJg#MbO6OXXk9MJmGpRTrIELA2RVfEQDQK?E9%*W-l@BNMa5DR@-eW*M zF0#gIT!TJuV5s7q%q2Wh;SzQZl$J1^dCh`k4uetNxF*`dYw+vaxL6L;NSWz3b4OP+ zVa;no0b0lXBZS856+xs-nRf&0?~?0Fd6#tAstg(CqF3zrMJVL6%NJ6JI(!?<#P^WM zxe&7sz0=ULmqwJPGbwhz^U0`q@IJ3VIZcYF@7XYGZI|xow5Kl-zcVuhR94jQ>Wt|$ zv)D!aT5)f?L4KXKWn>*gU@7X#HllMmv2cS`$Un-}tNdeCUrq{pb6?5#2{C12g}IXJ3u(+aZBCDeTm^bTW#HFaPmp|D++# zP@5r}Q}NAb<2&zA6uDU}^uphN{e8dG^cU!J@$HD;qrx&crItk~bURNq4w~2KPVA<2 z{RgI--8tzXEy0-mU4>WqFiNQN6Lft=Bz6RQA$VRB#>_ACU|;*=IPa3N*k=*9E&4)C zi``>g$*{^l)kJCvSY@2lpr3}PK<%%!*mXZMXE6Jn6F9R~%|zM;vx8xHtuWZZCe^h()BvaEAN%G4q5^sw_EXz+%Y_g5t$dx!rdCD)yZ=M2Qh= zgqb8cazV#`O&xD6)p0gR-L907qxJ!&nhB)_PO);O&_cmrCr|=Dp93xejY_g2tCz9$ zQLV0{xXr=VmB0kHF2k0wb)42<>w>-+OZ(AwBEIkqVz;o!kiPv*hE!jANF`=+A6;QWXt_Blxp_BTGC6Ow!m;_NtZ=3_L98{W zSvm9p$nFA1LPW)TB-*#!&1S5nwIW|8S>nO7Thvg62V(f>3NgSg)NE~qKg{aT71m!n z0anOCZv!Mi5V>50dzL6xM>wSd9QU72+Ig-IhEB}Mc_kV)A$ zn>)T3L~#sV8_sOlCO}N&^GwEi z7C|Jp)btpl)ImD{2DW5}!XV~uU{LIk)^J9QHY`@e^`0$^MT}-T-gpuaC)(_Oj5?+0 zVm%fE4S_DjJA7xS4U!HlFw|)j^2)aFzPyaYUK%0EbpMQCe|V2S#ZlUPzB zCbWyz1|Okmg5LmJ&K=(%=Sdu*W`ijZS3>|Z+s9#9Bqiy=QF((<0HF_Jzc07}D)|(= zAoy8Ai1c_UvdcS0v3MRWs2~6=vgcYvij*Koy6YQ44&%9tfh4o)8Hwh6vGaWaUwS_|TAk=L6Y#kbON!*`+; z>vm|a?0xT+I&RZEA?<&0Z@qZOa2q(PHFgD6)N$^ep9K^qS}) z(N(f0`XbMMGn9#ti8y8{kp%gKu28q=PQL9TI$e$8<`d?PH6cK8=uRSH-@zmd;Xcx_ zsB7XMlq~DE?Fr4q#&i&5SNiKt5NZ=meeuLGp@+m!Vm<@Rsh?r1OgKxe0x>|J3+giNXoac1I1%%UFKsXEM`~%;1x_M=D{@l>b2E(1v%|?nP-E1G<=g8x0C9I~$m%Gs#+CZi#;w4aP}p8tMPP6BgUNIlFIah;^VexS*` zJ5Z0!DdxI!oy1oR%fm6@lPCwDeJh4dgs@`R3b1hbJ%Q_>hqdLGTy)jt*VN5gem66@ zP#}uy+(xmap4;hYO`(FPK|L(_w+98K2@*;q&zDX;)ZXPgYN_NqHJyD1_2^m2cdQ)v z4l~a9j?FOm4)?})>O*)L?Ftc+?6%xQ6J^J_Z3r) zmJx)EK0aBXo04sbp&=gG3Jcw-BjpMkI^0`f%MNRWt#%l7urIJIomyabeRuH%)`X+( z0&Bt%OL}#IjYKSH)S{euF7EH7sZ~`IKSE~F>s+s=5BgC7&$Z&Phg=~MMtzZiyH+NH zE(9NsELm&P6^N=OqIgWsY!oA8BP?2PTGeTx2uP)p#lj&$uRbk}?LluSBYawdEKay?n!CQ%JGagL;S+ag=$89z4` zc@VilzNXiTPG+#=QWKVaYsoftyzq7ptX5T+{@IM&g(i;nr3$dUKbNhPU(zW7ThZaF zF-(D|Lol_|NfTT~b9OpmC56T-(3(D8&1WALku)GA6ZC@RroSXra1*p@7vQ+PV zP-c78g(x@!ze_?{GN~sMJ$O0!MK=Mf)k;|Lr~3|SKZ@v=`+5=H7vLH}mB9 z&mH37tvuYr9B5pfY^Jul%&u1@I7*;RV;}P$h!%t-Z-yw8P>tWO)IU?REN4952oSlv zxuCV|19}J15*h$&rG3aUA8K-Ik6mUyjM)tn+w6Pn*!S27w%QGsvz9o>S-xV{qF1Xo zaOh&JkcMZCCEWw^eWne~VvpI)C}n(lMO5Q}u8yTWHH)E`++gt$1s;Boe{xRmDl;l; zc~*8+6#2@o%3Ws47C#{i0bB-Is7wY~0V)GdBooW<*naLtd)9nU!2vdRv5_7r$4$?(~4;>vIayFkOdW}Fpv7I4oC}vob z;8%zRqaZf>U4l=Q4;cKJskJLPTi@1_tO!$yJ1L^Hv19nZB!%z)`FjYJXifgwp zk$JpYTow&Zy9qQo+tf@i#@-F0K9nv;&bfGm=T z5=0WXtaI)xf3GGPvLn+@G1;21HmjJa+27h!YcYKp-~a=(W0qsI+pu1cF@QX3*<(Qn zlSOgiauEsnUn3Ey`~V!2oYzF~CrXKAhy4)co zua$EE8s)4Bd}S%3llklvL`R%%AJLJSQ$$BakMJAtQ<1lSlyr8?wl1GmODpVr?PdHcZKUndE%p`o-)Squiu; zY+^9zR%w&_xt2_1lj!uPlO~EGRt=Fy!3$!cuQ*IqkkCQ@{>dTm@G2u z+EIbPAnQalOJOCnS{ZN5JgRbeIg>ESHC`+%8reWw1$TwQ&x^*7;k0JoHD~QPt_)*psB`mv>69#;u}}N z!C5dVvV5-UFe~2(SfUNHWLD7UauT6g7A=KF)$|zdK?0r|l$Z7_D;`x1=?!AxI36LL z#=5kAItK?or6!cTv#8y`C0fIBIXu1o{(N|P?xl45^yK|JRGfRUxqW)vp3cp^ux$JE z!2LV)!@#@*J04ITSDE+pe3CMsQ(8a2W5V0*3|LRq) z0XVxN)dq%l5sQVB6DG$rZ``=5qbwF8D2ZUYM679$P&St^`>@dsplWUsqFK(8qH%+q9nO-LjITCtzzxJYYB8khFG@Q)s-;*p%MMFtLMcu;uT1!n z_&^u^iZE&7gv13eq0-BnK1F2CZ_efe98E@*iKYqvY?#$L=p!EvL+2i~s12Qq8+k$o z5cNqNv!TPg>DjnCg~yy&D-G)+ixoiD#8d|wvq*#sS_N|cc?&y*#@%ivQz~Q~o8aAG>A6} zfAoS@k)Z&j*q8=V>+p}9Cm>xbnu=7l9PDSg+KE_o6!%HDpa{EL!g%kiM}DoU^f*<-4WBgy_s! zv17|!F^o&=Qe2ZI3?<+VsG8u{?B&I=fz=Hn*t{XIHVmw6XvCjbJFcfPxt18W;u72m zYzZolNrFX>JBuFgvS<-TxoNw5>=O2K4dVRWHhO>^cRT(#fg_L)wa_Q}i8GdAxeG1bX+U*Z zd1{irb4(sAmZobOH-Wx8KE!!6bduXO5VUQuC_Ym%w(ekg%7T5;eu6M{av%)2?6a6l z=&wpnK~z>!PznVVC~u)5&}LPr^L7A%h7NCW5zl<3Bhj3C4kXym_gtl+D#>~J)#N-d zVsajuEuZh@fkxq6qf?4E^+-5_Q^De0Y_@aTcq`#K+YIJN>TL!v12xU7|Ki|b0}F3+!scE(74yutzTA{d<$ z&(rrnE|K0tJLh|~)=c)xI0N#Ctbn9^L;<8NCab6jj~OCeIGOioI2Cc(0 ztQTul0c(`}B@|v`lJl)fc&dBG8Qu%X7~pi5B5v1=@6bdTp>Z3=#;m*>P7|*oZih^o zRALy~5zA2`F331Yop~bnyy82N)-J6}s$?FD!HuKmdnX2>f!||Y@I!vWnaba>fg$f) z1zg40^m(4zM8mc?7pvAhRdZOgzs;f}>$X?-9zoY3dE($YwOdepd6zoW%EZg-Z!%;; z{Q;Q*>w6?_DO@Se9vqT>>Nfo&cjQDrqO!HnhQ%QWb(f=Nz&6PD#KA>Ey1Q%jq?Bn)~$@>i)>cp0dBVp`S!dn6L{ zUv$)!QILM&GhXJjE`n&7-Hyc$s{o4FU4lNAXj~U|if;|SiG@+GEAhQ(q})ByvMLW` z5a1^NEkQ4>ntl8UFCn66u#n07Eh z1<*N8ozmz9st&6(6WR|G;-cfUBvR&n_|epc5ea2_9_2A7VQOMF2`?+dy*L9iuU`?x z#ebB)VY9f5gY6MvaLu_ZAHIVJn{N!SaGvhge3<8V@S+%V>n{C%yZv4(mfwY6=J9B& zYD>GXau6r(MyyeDvEF0BqsaM_6j|SNGgrHD6+JW#q#>Qi6mIF8uMiGL*T&gl<^l#G zhv_;^_!uE7l^(VHajpM2>GRQmu5Wf#=u0_1p)aN#6GUEZlws6eu5h}97|&ta9ZK`LVQ6yL~*FqKd}UH33Gd;sNJkDtHzaVfkv>8iBY4@+?VUM z9gfYc-N?KhndO_Uus3os>x8pdaR7PV64ydaZzmzihOkyEW7&pW!MqJkm?2fHcGL}P zWv#b@I=jCW&g81Lq8UUB;zMcy!=FuI7V%p&3a$DNFrPJYE&VL%CVDc-L3D1-#l^%- z_8TrPOhWF(q{{}0ExvpqkfAZ)uyM}SWrget9S&kTI$+GbCv7xX#91B8=xcldKTLBW zv~3ZBiu2^En9>Mh3ZsxCB7H?#kws6^%Fi6e@T?ht2+wp}Xx1NP2p>3 zL!>g*kZb%LtmcF5k_G~W1k8XK!R&LW97!-<(6}7nM&Gn5`z1S`OtRGOpU0W-K61|% zdp?AUa1Q58YuTy*6 zNtERkC_%+flbg%VO54>=+S?k6BcJ1_zXgFx>PF;>VoC~o;ZkdlS@id!A>|X*kn*J1 z#mTxShLq#`wI}UNXs1MRS32Ce+ylvds@Ya9PfQY%1h@eJf@Qp#y7A@MBdI(Dn^G+n@T zefWvAfzq2@$|Ew(5)){tBHE+rQ~>B$p4;w6wUM9MqqBCW%rpd}U1?_-P79225Oa}K zJCn(tlxTQEA1Bih&-EG9Hj@coFkbtDFaSk9;dy7cq_cJb!A6=C{DDLY2SJ` zl@kXso?lkX-Mf{}!XEDET-IK$nd z@fZSaoUba~@y8WoVE`Zp0K+{1Ci$^{LPP$=(OP z_&d)>_g$UhEv07!8GY;hPe1#6NA>Kuo?Slu<)iQW*5{x5;$zS0*)f0i51;z<_Afm0 zKYs69dUhlRNQ3!B+52e-bX^kx19fs91jY80+~PF)eR$9uTd{wi0|vLR>-6K z9{PPb&1dhtuQRDf$K%eA>Ut!;r}NtB{GInOqKSNR`T~35N2f>LnZNcvUb)uemROZT_RvW4!m8dpbYLr&K&?6~ERid978#OZjW4hSyYyUi419*59?Ct(JVE z{8?QnzrNhQ&VTg24qv}UU#mB?OAk79vRDWP}-(4$IF2tTbxh_(18(;i{( zMRO}U7%>!c7}D;OkK~6!;;NdYQXMsp{U-t`F@xQ9-*j`nmmOj|k6wQ1yWjc8Z~pb; zFGoA>5py?odS;)bVq|y%>&){SVx74Toq5xeeTTIGphnXNI6ns%D|+T&|22ETjg|rnLGJTNyESetomp7be}-^UJ&GHFz(zV`0sN zt33MEHtaQd5u)m4SH?egQnP3UzAPj*86T~U6c@j}!{)Va`dxB#q~vrAA?4)PfFulbIhBkA!udV@H(W!PazEF3lS4j(okh zjgnSz3s|k39iaCV$f{L;h@OO1pQ8+BQMUQKv1!~86$toDg=*%KiM-xMq&3%w3GfZB zR|v`Ep0U0xz!$<#@9Uoch|HwkgZtVOSh({ENB#;zuALCu2J<}A#lK3yW+vGLE(=h&m+3YI5#FPzX`?d z#aodVFV>ic_Vt+Kz3tbC$>^mw8`Fhjh=lx)UN+1Ct+ftn_?e&GF~4)q!8t%LHoLt- z4cqxS`bi_HE<uLS{q);Qy!j-u*h1XwN7i&o1jBvQfbOK)gG;!9nC^8H$h?Yw`Svz z2?CO%=-W!<>{7~!JpoRvyd%W2N=VRYCu|2*-$7(b9AEg7L6n~?W9pT;NESUFc^PQM zHY2pgY|6~6up(q&p`+?lx`*zlh*Y&pMWncg)0`tP)yJ|Wk{_6yXIq(Pnr29a#U1_# zekIz_mD9qo(AG|k2GimQo+#mW!~@S%6sAAO24Rp%Y!RKB-776~QS3V{`~w%8QJs}i zc(Z`Hg!Vhc|KA4{JdmoBiixYVkk$ckWM+vu(S}kw0up z5{_d_9+KgKyJJab#ns8~aCao>a4yk<;qIBFbHUZJ71^7Ilg@=#Cp*I3p`>%s)tqW( zKOIau(9&Igb0Fzld^NZv|I*c#sfqg6aYx0IT&OYULRHGfL>+<@Uk`BMyNLMYkD%|@ z;$p|&(E!^C5XEJ4XAn}4+7SXqoZ}?}y$!H;wG2oUYA$AGztsd*w*5qQD~Ria94gt6 zc$0Wq=C(dzBjOg@p)xH}oiDZ!Z!63XY0(^71>RYd9q)DLtz|mSLHfZ|kyTFAi6S4> zy{$Ja5{4m^7{wC-aVY;4r_NY*q;2!QolB9tK*S3P`*Pl=E@wy$2NU2|!2)+j3Wq8DJbw8?nWI=3WPybg zj1c-lV$gV#H_FxH*;nMUfsLr20`NUzujzO%1JJ>*&Np&XJ-f=SWCH;2lEj(sn#i`M zVo0|6t~uFHskkluKv3$)0!keXJzhYm_)%zV4g|{&71=0TB@9x*AQcP*!zv6=$xB>> z{zO_}R+Zr+$T|{8kck|ZdP7+_7eZ-aa+UFliU=wyoo{lmiVVt7O zE|U^Ho!+Khduom_BDa#kx|Q1c61u^cjC3bsI>JIOOz&b$$E=LO6WV_+JfG+J^C~lK zpV1X+{+zDxK~#n8QKc&MwhwB9>JVgxTeUzCsNrd0Yu*5w5j!HUGcv=V1vRYsnj8qU z(vC`@F_=z?`|~Qh0PU`U0tr{{l?GHPbOa*Ctjib@R4NBemsWMN(r;*oo7H|J4M2+R z!(LOEN6MMDc9Yx9m3}j6H`n?N(H*?@gvr^;2SAXN)^bNE>nvO2F}BXu^XxT(;1Of+ zIIRc-#{lhmFCL*NZot!LC~DQ9c$lJC1x0Z!V;~$DNKq>YPY+PkDne1}M&Xr-59V6} z#7I6k%f0?5k75dB1f^HPLtypHpuk-uT%0CHkvhD8Hi@HXYe65a%a*@Hg0;dBy~Cm# ztiff!k@6zeMAx&6TT1K{x_N$b-j}e)=f$$Gb`)R?y*c-Dc?TD0{LVD7f zMdyBzBoN_R6f?EmG`b#*34|LKi~K#QhYBH4?1$1WdE%+bF5c8Gi=LYi%M4$CEihfgbo zaH1}VA*%gmDfMK9oFe?k{k&Z4XG9Qf}9zgOJT`epOYxZe(HECBNd`tN`hsc&()*>10c(!2eEK zTeJe*nDL7Zsq{k92+O$KW)m#+&a$e|!ivk{z^TP9tM+6T<;Q}0^{Y|uSiVdg1{OuH z4#c7b!IOU#N%fc9A{5p%2(%A1AJk(tALM}=@+!|C#R{tH{#tto9zy9zt+S%cN(C&B zR$%#DfF%sPCRo6|Yl00ZueE_a^nk1mc^N=P101;e;?3mYl^!`kirL5I5yO@pElPAV zlrdBcyq(il4Kxk#(gMM9`V&rusJqE<>g^#j@3CU2`OsWyE31|VBFCh2>Fb2i#UmJD zOS*WJZQL_(#I`t`(Z$0tc&&DJjP~mo_i#xZ!pTqj08tnFcUg>7WCM>}WJUaC_k?0j zvf@yjbR(MHC8ueyttI5eJs4h?x|(GVj6uR?s3Z5b+ydAVNRxvn%Okq7Z+P}UXE{u=FGkHJXz zr9vYDR8q2AlD%tyuR~g*gCGGPCfPTvnr_$hA_KDiskIrf5R?TE5dxr!cjFK{TdaH= zoCjXxqEU5Lns|f+V;e=SsB9QdIxAJ_9xC^K@2Y7QT9k&#(nN;QDduM1^2UlP!#8tN zzuMd+9^Up7)W+~eRO=I|v&Y9Q{}~VVW2Mm#*lf@37%#B;q?tve zM3^+aGwqw~4}#Zng6wAVCdRoYWp8Vfea;x+Wb$I-JcYfjG0NwO3Rh*vwZG*0T;dG% zSmF%!XyQEPNWw%D;~a6WseP8{P%ia7wrKmokt#z(fd|?Svy1bi)dNQ)!ENA(+DrzH zIO0$*m=kOgjgOdGu6z)|a!1sS_L!s^cmxFGtfE!y@vvMxmhF)Oc3WjwE^@Qf5-7>V z>~Z16H$H^r4tZFv_)YP%auZO{1u}+MMREiXLe{KXzN#ILS=A2P{E|=@mbzgc9@6B4 ze;51Sc~DColi8L!O}@prurY1E=`nGbx~*t1d0Ww7`i2k|0Yeb%(hvr>ww2AfcgfAe zg6+#ZkiLUH(3?_U!Rl(@Ebh|~+be7*4zET`j4)ApU?i(>@$`Qy<15)v_U^o7@s)J> zq^p1}2{$AB_{_7ky34dk7U)(a#1gTtqodHcXwr#i8v4m2Y3LWn+bV+@?vdIm!vBy^ zh9LO?mMLZPZ2*Af0Ap0i(+1J4`ieK0y_?l^P`Sl*T=|9Cr3|9mVuympM6n6%nH8Hb zXzom0*!AhKa(rf5T;SL2)|9B6JT;zR3)c$UyvWdk znnu4Gm6P?unVc$GubgVYRD^?s0RdGYT>_cGS;nl;D=|KYwxC~uIA5PW#6!36Dl5CS z5aK2;oge-81NR8b$Re6x0ry2xFvUOysZjgyZ}TzCxPX6ne^25$1F~!`m~p4TKfBpp zGflQNC!>D-8mQk-wleOpegW<01I#}-&$8_uP4%1snT<@GkCIHe=8!K%rLB}<7bJfW zn>ev?EWqS0g)3c#lED|pCK-+4W~;HgSXq{X0=4!k6LQ54CVLDA#ZD~mok90Q!sSU! zj(hA-YFdnlFwSH6;q>B$rM(l@ft(lMLaR-Kpz^E%fqPZ|jO7|yPb;pO_6bqStw zvX7B=5P`{>H&V0RB0>zz2G0esWd2ZtzQNoiWvS57Z^g{pSPY z#URXJ7l*LSv_M#%^G5Q}{ux797P9Jk$TSWRPK;3D{H%_XN$zW{&HM?;*S#sJz0RUj zQufno-H6}RT_t_w8y!3(xr1q!GwoCYt<2XR_vw8>I%WDp)N3=H(t9YXQ66ZYrdgRi zW>V}*t*1KFDR2D;DrE7TL5j0!fG(SzA|qr*ZVkHicXYWl92bVQ(;Hfe!i`Zsi1a2?7S8{|~2 zp$uD=>miAO^39rMG6$qhLO7nQll4P z{G`bdR0im(#sbhvnHU9wv^%Ib_3D^LY-3}Iu>Ilkb`#_Mey~4y`q=N$fl9KAM4byn z3l~*sVPte!Hnx1l1s7bP5Q-t8kvTY%eO5{8@NZmyO|-tXQm*>Yi~aJ6me)oSc1M|M z6R2Jxg*6Cei)Z?RRxZ#u;r$7d3fu{2gT)*g6}*`6pA-p!AArkO=712(SjH!baF&?m zdng~YZEV=jtfX5!U@B?5!|K)D5!rJL{wrJT40{8C9#J@zauX*xe=4jSiGQS0(f2~Gh%eENfFkt0!&!AHUlp68KG`KboB-hdcU)kxP2R zC22-E7g+r^vgehR*X9EEn=~cMxgc|k%>@r!6%QcFubd0U!Qj~h*=X?;%X2P@j~?Rq zKBhxC7e>ALaxRSeTp(R2bAc)q^R8KHi-<~@I~c=KSf|B86YZ$^fv7*YJ^lq*;Iu9E zCMV_)zLVyesattlxdvS57;rTdhJG4hWU?jF-4WlKv@|C9^vB^|)#4p{Y2M-`&b`Z9 zKBkr*Ax|Pe+1oKBkxor2UU^DOGolg<6;+9>0=&kaNSv(!XQO)pAU!e{Bw{svC`dLK zuNal`pVAyUTN79u&NY6;2II?Qxv=21#)~XNJ-);0GURF)gn2De$l6+@SWvV`4N0NT zVNl}m`8jF;Nl)xoO2fGU46wYvRUaay0BM`#}I)6WM6T2F=BUl%tfzacTrxQ zi|&#wr`z2NU&Zbc77SXRmr^VweE0*W$-+KfUey+U(2Q!bkk zcgtKigKc4iUG1pZ1aPN8OffzoSt!k9tw85L2_*!7^tD#-gxx)3hD0 z)(V_&+*ni%jdYhqv1h66%UfNxD|dFuSOK#o`-M-+lN`nczd$nWGA@&H^?(%HgShKp zYcScRrrwEX>$f8mQ3Ht0srCw=6C)zWrdSX5c(EStObgJrF2TtMr4?{Do^K%B`J|>p z4lZMln=pF?aM}H4S_1dCI)2K9$x?M%79$D#fmxb(kC2A1Rv@|{-luKpW%ntCZxGUK zLACZv;2>Mt-tl(2kMzlY@-|A0{Z=l(Ym+#6cg`#?JO3)km@Cf7oDov&B;7%|#Z5#w z2?Ya6ND$;XCxZvHB;@5X@b{o^4-T?~>4(Q4M9q&r_=f~mDT}C|S0V}p{#YVUI_byd z&Skrw;(%`o#^lEPSgg=qEY5Lm7KNJJ%9%ju^RdE2QYq9>s)sEU`^B(z(&@zn5?Y1q zGrH7dVn6%23Pqt}V?v^E<8rI*62pk)EZiu!4If_C9c|$0;RSI2s^_aP*CYiz54tr+&hK$zXn4Prv&|iG;FCy%d^c<;& z?V#9jNGPWFP?}gSXv9RAUb(eL(CKXx9bZ663I!HmLWbEBgD$ZUN^6phVmu)UbJcdM zF3RVSj>EZh7tvwcSiuQiH&Xw5&q6H8KBTzHF}`E$V{TkDld z=xUmlk4ufKE@zaI)&;}G&zL0>8Cit6;AgUD{On17UNKy3KgrMRd3T)T=ds~nMP0mY zww(8$@r2frSry@TJ633sCFg z3-3Oy7nKmP{3`GaQ)+!@jOQz@Hq=h89N_Y1@X2K(YcjNDG}~^WsX5Gn2m@$p%7lVK zZ%3MUWE2!IX`Cccxn97k#^j8v`IGumhfYL$ux7c`*}e1;Ja&Bqff^D9U^HDhBr@Gr zPana<SlMY)tz01!+|up+mL1jKFjeIFM-n<%=1WgwB!Nt?Zm_5G$Rt4I*u*bK+K^ zb9LXO1gkd)!JkkI=c)H-}6gDN0ZXGP?_%HXAw$ z6iK`Gsz7n}+XK z{n5F&4M@JHhsN<-KeW)0$)DM_wSg|si4fr`#;;RhbQK*T=4i4iSNq$CI(mP^=9RMqEms7Vc z*`cfB3`;R!x>A$@#mO0PAp4C0No4$Q@(*dLO6F(x6D|(rOG!h>m=Ii#ztB;%^w!Y| zf9aEk=qQrcWUnC;|JHd!Yfs*gaoJM*Tcn{r@ei>}TuNGQ)}!A=c#-%rKrkE0U-5{Ww|maXLi<|nxT*qjUGpvX({L`bbqboV@; z{K%o&kiWdZ%;*$C94o>4N6*f`=I1aKpZBjh?_a}8e%`xC4sy~ae-C`C-~r+T=lyHW z*uO>`>%4!>4~2h?c_f~h=aPTI&gvxoO6PrP5JAt{m*(;Bt1r#jNjdZ9r5y3h^IpW~ zr5uHvotJVd5ct9LA{NIwFXfz3`i}o1)wF{B~kCoa(rp?-kKBKaM6P$}N zE^_xOnStW^q|~V+07HJ@PLZEmSMpl)e3hq(sNcgE}~z@|B{U6*g&`_*uaf| zrfJMnRi@J|%rHQ{3A_aeU&L4+p_b#Ks7Kzp9e)j7x9~=dV!mPh^`+ zv%|RB>VOt&Z<51}_=HGn1apU1EDI4 ziyfrA&MZJsX37r6Ne!ZYqcqp3nz3w@gV=<_2!nVtVH=?;`G2b_5~onr5>L%5c&A{B zvxLDGO`bvZdAuYItay?9gEsfpzXWrUD&;DBPiiSRmj21{sZhf+z$Y;uReWCQ@Li`k z4F&oi{Xd74e^2SU4JZrHYsfn(dM&Eg#Q5vOq)9wWHh zUu?UPOhGZE@=J^K7I#&}a{@xbnrg2NDRsxd+u^-B6{6r2)`4R1CfzDX1?~c-m}mAf zW(jJ>Jngrnf*ID-H=Y{&+R94mszh9u;4{n(S414ZqfT%rgjybAk`n@B0~F6SO3?s0 zfucIVfrSIa>Mm1nZ-4^~kX}{>*eD0+aA1HqtZ0A(VSqzEKxO~Ny(A3KUdI2~2B468y-|=iGrHFtZ@V4&#a*=E10uLaloB<{3Za~Vi`Qe zPZQ^`mgPVYS-e2z1-{T)CMGXtulXjLk|cE!IDPL6FC+)<%m7W*1@oRS-1QLU17n5ALc;g?9@P zBNE;!U1Cg3XpH+o*3hsu_!raccR6v_$q;-JEYD~W7&L>qlG*yJalx?lkQ?LGC9mN0 zqI*@zF)`3fcma-loLOqCD`m}CTUn7Ee0}@WNN?KWoGIHedDFPgBa19R0&mib9rUH! zXH}+bKGtVz?nRn-hLPy`4y>?8uwSYSQVA=8(5zdNJSVpbZ_!2Gw{9iFzRpeYX7om| z$!FJfBh3w!1f=$%G69v!&IHsk!aCFezeBy4g2u?0fXqT8^EFuu122+06yUpxIaMnj zCPIoF5AIm!+)O;)$1u-1PuE`){h5XoXZx~iqCYo09bhy%;<{EGAgRUg89#l89n=8Z zQ8VZM{zQ`EL~n}GzSJR8X9i2 zMr=7GkvB+DzhidS&QqY0!^ggdllaO#+Q9au*HtThJt_6`yn|d&bAFfr+ zsnOj&s`R=ze|?;XnsvJzUKbiy&EH~KY+c)zH{7KYu4T~cj?oY~$Uz-nxr9onR^ZSA%u{Z9KZn6H2xrSo7>C62J1=>3S7tel=qgS8E6mM zTes_-As3bhrxkse4+)s$mRn}o`N$fQ5BZ45s-E9JOsL7=zTCsZ(C*G;HDQ+9tv5iA`6j zjJrwnhK~Mi&4M1Hy9uEsPMl?DUwvAk1CCLA7Q5ur#cDt0N-7ChB_Wvl8hqPCK7Oyh z;?m;T+3>BaQZDs}Iftu@&kVbt^hrO_mRu2neujPQgF+?3K?#e&01FbnKs5t+j|@68 zIf4u+W*@jTA9nEPs2UWiT)a}c7DKAA$vj@o1&@(&`8%Czs(%Fo z3BJV?q8~TU;<|YjvwKMWC-|}N?XZ87gG#7tPRZ&Wqg(L%^AaF;$h}R!gIW7M$&Ol2INwuwCg>9- z`sB+?x54L7R>PGRC|=F&X$Co_xBvfSay&SL9kfzDV7~IYBN}S zw(5)?fY<{>(>%W8}rTZQ(;)@nOJ}>|MbCLi4QGZ%=3Zol^dRp z(?idSLCW>4XbbuhjD=*LXPv;)QUfYx8KK)WH%bsHGjun7r+y@zL-)t;aelIpr0|@j z5Y@~FpxW7*xd26!DXz^+>HC*LG<2(rXA*hl?fb@?4}R}Gsce2B!wt8wZ1i?m*DbynL^ZsCRyywl7l;r6yPUK&Kl&b za~I-(FM=S^O&1C~J!5F1;p>AY1}W-LLe@k};Uo$(qw=#!7ix}TmDL=@Zy%Q@h#zg& zlIcRN52u@~^B>OJH5apMVx~MZyC#NEH>$pBcFm{H>$QF$^;&~HyXIhf-~_woK*g?! zA;|5TI`g133zl|G%wcC?*Bm%2yQaC5ENR!Y|-D3*)(^GympH&6(8mLv79+{N9)|SrA@5bLPrq&<|QXjFZ7h-Pyzx$q--`;?AHv zX>mft4WQ#zSNF%_ot8WLz%b+-VB$T_5{cX$l$;S~mH|R1ny-r@{B9B*XO?(JXVfER{DG52&WqA)Y<>AV)5bgxaZzIfMd}-)ZIz_hMl@R-Ki;jgA&>_B?Yw* zliTDDGMT(p_It-ipZlAFIvDn&3gZAP1QXy!$4Pi%%4|jmCP<4b@igM{FmW3L*%K-f z7*h@rwSW!rv*xfcL6R8@REf3j#Xt-&Gv#wNuN9ysk27-C$mx|wTKgm-!1RlwFIo5n zM)#wZ!aQLx+Rt1$!vnnt42V~_E{BZd;%TOQJG@D|z-XGo6Y&6;Cfs0>-x$nk$E>HMaZDbLPN=v8cyF*GZRO#EqHDPjma^90ob)#*{LS3o#EC|)aH3o}SmdX&SV1#{DKz7%AvAM$BAUVP zLNqsrm7=ahb9Eq)YWBGD+uetJg$gzq)4Tp|7R+Hj$f8$t9)CiQ*8=Xz0Y}ayO;gMLU5_0AuQ&V3a)RiN} zn0_F_dSmy*^5CC;O|(Z>9bc&{-_3>lySN1dTm14?hQ^Ns-NXh8^F3;0$JqtS*OFHW z+e$!}&rx#;;+IMJ@@TZmXKFb|MG_LnLSFNTc@H<|)%`XoifaIvtMmJ3Ce8O|rn+`z zMf<;&d1(_8?pLCT?ugZMp2EJ2=5@NRjt}Ib1mo`m4-8LNeymJEtB_@D0=h z=MnWZd(?AMo`6QQL^I$Lni;ckftpSG;t>Yk$jU(rCPsrNK-M5>n0{2Jmhskp4ZhcS zkN>fr2cD*=i?ifu){XMe?d}*_&dH!aC)9@d@yV;U*MH6rZ3KAn;!Q_I8V1Wacozjn!HaL5w(7-qjf9?TV+hq%5L{ zRRv=@1c4R*_HB~M@}&5;Tdtqw$YdA|BCPn#!3Gi;aRxfE8^I9vmKL9F%(Ur9@s;`v z2e+ohL%hqg<7SbLq?b3(Bd^CDH7Wjr z8xsrQkj1CV8wnU35_(9sJ?eZyh8XS-iUm0>)Up>zk{fE3-#$2%VQZ2DLwQ96RsEQI z`&gd|v>X9!Xng@O+pujT5Pp~bqjtIPdYAUV;q#Ub?c;!HF9H|Bx0dG@1&B*Frzx5c z!XYO>LSTSb0S1n}d=Rat=%I({!LIMFq~usGth z$?R3^>s8T!(zmYx6jy^r=JuNCNWEM9TZ&AKqIONh=~_m0AeG)RmrA;*XNBt8*-&5+ z<1H-8gcXfG6^|T*>O>yUR3CY8Z{$%AD!U>~5lH$dAY2G}i+fbc1jzA^>w~R%=q2HV(06!wq(#G&8 zeVPm9M<^3DYR?~{d_0tQQ$7~T4^lotStOY4Gx!{?OR~RNfSpV}SMLml;8r`)xdC@k zRBKaFt(@o_6JeU|R^K&n@=6 z@b}x3tBhP>r+rZ5-k>OMrnz*C)B~SpfmZJiu?Ml4$Aa2ygIbmoq7{lG|An}9P1E36 z@6`3w?$3TAm1YM8eQ?P?yqiGxe_hOdfcHPbX>Y|&N<28&ebDE-PpjWoQiKC}lpHJ( z;(I!*E#iv@xM89>3?Z047;{24RhJ9csA5lL+8o?Z?8?%A)8U`My(B=+kt)$Ht z>pj|ho^nZ>&rvRE^Z#e>{e$efj{DAg@B95@25)|V0y&U*-}7uTC=D!ZnGsMTV$Wrf zA{mkf*Q-?V4^;(Kt17c*SSoJA~79^RqOGtCix$oTbqq|R^KHYu# zTqJz~CTr4O!UJY_f#tdENlq)H?Xb5TVzxsb6nLHFc7MCfkzS-jVf`3XGCxEdE;HC^ zAYY6!Z5v0IBZE*_j)0CWW?p%XzoI!LRDE+m;iG?~B&kOx<6X;m-h?P4Weq5$W|l3SJ^ z|M1ac$4{&*ANh&i#8B?PL+zQ{t?N4SL&sTHhkpJ@m&*e=AEc9R>{fIbXyTUi(R|`3 zdXu{4qn%Iu&(9R4hl~5sgSLuk9rR~GY!w|p@~^4ZP3aZ7y@ZpUBz*DfGfq32u2>Ob zoH5EkZ4hOEH~`K#G0B<}NVuW{$&HYGmS<8j_ zPqC4(y1BH*Mu5dI)U(A7OzIL>DGts{-COB=w45zSGqIriXV_p=xl60|X za4(Bl-!Q`D+_6dP);}Anq>JI9YK`EquDT<>@tK z#4qF3G^=sfD|BL4S$x#A9KwS2LF>BSUsWH*SM>p7JADwRiB%&L#w5%wCe0E^uyfi* zBuqQs)LCI&J<}Bm`-A|Xb~&H|#47@ZQ^6$;fjSu=r(r^vF}R~k86pFO5`#O}<*_jK zYHkx~ane_#%K&#=?k$#uD$Ya`Fa@DB1haTh^i}eTvq)b~yOZob>qfKO7?x@VqskAd zIo0BHtX`v68Lrf12?^Nr7ln&g%YrKK0TOB|qcr4!id-fj%IJ8qh_n5`q8P$BG&~Mn zlkK(L$&W|9*XdKZW`$9B<`jOt}{a6(1C{- zhYLHY$9YpW@^(th1nO)C@`mm-NH&KKX!or{j|_P+Z(25Q06XM(hip-aQtyX3^0>Q~ zE)_R@h-f8D9(K4wcjw=Vq;Fa^n<;#+!Ztw6YX^JN+OdiiSg*pQL!%kcPfhpr`|&~V z#|Pd@KlVFAkNwC59tNdOKfrRU$seEt%*7Pwhki9i8~SlIH*^2ebh<@aw-avjEl>z# zzz6iWRf?3N$nmJ}qaEaS6X3-(i6nzOujjF}XZv@Oxto0Fr4%B|edDTbXL6h+OWFm* zesK>;|GfQ#uVxmQPCHqBsN2<%u9Ov}0kzlrzh^Zt7nb@(795thj=<8F=PR`BV+qhCBckUn z%=Gs6k{D3XF-toMEmKU<0ANO9J#c;amrn#h(D`Z2gkl->p~mI*eKh@mgG`A~lN?52 zq&ky=nypCU9iPm{N^w|nobz7<(0)=M_QdP{k!C$yb~NR-i_`CLeZVS z$AEHI@N)fHhFZrT%;{59^!WZjDiFJVJ4H@ zQ97_&m|;Pqc43Y*>k{8<+KLNA+l^+F{vlqN%ZEn-M0&=U?2DnT3%0D* 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

#i%e29Phvr(}{y zlkb~My2onw%6_HW?;^N1!`Crlp&}~eVXZH1Ayhd%id1mycBSOAE)gdTMWV|^acUVu zV{3kvybJ|oIAb?RWIB112t^?!B0e*OU*#q}Qj8IbZt+KtQZ;CeT#Vp%hZ&8)b7*^~ z&!j#T-P@lOAx9ZDd8Ut$PNOwhG8=>3+#AKq)H;R+9j{{cSVeTLM(acMW75(wdLR{b zKK2R&rXEazaN<@Ffw9}UwhnE_3|Mfqv0MJosAmD2QFAT}YJf=@%1>N)xDag?LQN!N zsYFc}pLwVQb(ZH6+nR$#C5*xQ8P+i7fkio}KDfV!JuT7e@mL$nGmCY=tn?>Hw#k;+ zB;~Ud3v7-1CD_dVw9THLw^4#F?7${*STW7em4d*5DX1vn8Ns{NE7gv^aOE#d511(u zLiT>d&WMh^2Pqq?zK}}Xb^d}(r8Rp^3MFZ?*dVSv+HcAkO1gpOA|Ef%c0PD?>`pi` zbElgqLb+to63tIy9f4nRgI&|}z$oQih(9)k5`!rx>FveuV(fO;;XWd)g@QokmJkhf z67d$px{Ioz86w$BL}X%Q-HGtC?$A5f8($I^Jl&tow!?E z-T*x|{z;6w3dBMJ>Oq=-gv5(9js3R5Eyf#a8d}AWOpC7cHbmlxqCIFvsLTROOVJ=a zadqWVgilNiiin(SmVF}VN5yg3p7TLc&ZaEB>uyuc5c$@eqkyhx?6w zdl?#QMFlj*s!y>M255|u?C^?T81~f5<TDOJPEl2CYqkzhok$l@YqzSJ6I<_->V6TT~V%PjsVp3)%fZ5}r&jjmek_pkR z;%{ohjhcHRaoIfQG8d5pPw!LM9c8?c*kvx7*3nQeOz)1Sd4uQEdd>3U>G{m=XvUv& znTr(E$LhIicXXB4Lk!osC@-JqyQAEnbD4`~%lc<`N3&kfte(%6&*yeWbN-ymTtu9G zuYc$6Xs6e+Q_tti=kvQGJO0^aE>Z|D>;KieqpQ81t5yHr^7-D~(O!SfWiHxR*0XPS zw9o6`r|0|2=lgd@B7wkx%UpC#St9v6MP35!7~sp5{0ugJ$4)+HbjWXyj?u{ z2|j9Ne`Rc=QY~8m{o`C)X%|tMtEdo^aL^ zW6n@YDewF|lf{=yQ4hl&vGt%{K8K5O^TS(NI3&;uz1T>s+3Z5?eRvocg;^We!8CmQX|O|)4o*OxUxdgUF52QQaOHYDqZq5a_#D3#(>76M8VjL3*8DU{%tcLy= zMC-um&;H+k`UfBXg-_=1&{iPMr>zVd{?CSEri3hR4Tp<{gLwlxaEXLt0W9{bI*Mu^ z6w@0^hsF1Y6o8jA3YJ_7Ng$XHMG^7z4WP@rh(i z@(|epg2LZN4!1_!2oHMHz_aW6aJJfi(ZDMKx@MMs?4W@W;0Q-=$LueQp8L5%g>@_l)qD^Q6`3S)~ zjcNDO$bcId025_X-qy?;)Pvm{=5XK(>gy6JtR{bfL8~`}KPtXH=#AbSK#U(5*F;hq zKrAtcr6#^qH+zX`R}0Z6e!C8{ckDG{*^vTv1`h+16fL0w=@mdGCJHcG2VtgH1Z3R- z>9bmnUZG3`NYaHmAPvi^b(T=G&tdZ%YBFgM)W!@;pp9l8C<_#!w_D#pW^xiw2{5vf z8{ReYR^W!UaxfeIzo5?Z#fc|aH@|`zW|PI0ATi^2FeYOo}2v{>qmEMR_nwCc_d0i1~e44Ak za86f960=U>9M+R*_HwtV3v|#9mR@oGYoCii+_yxC4U126Ge-_YR`82ub_Zp;km%AR z$<|#q3&{i_8k%FWnc##6{U<(z$wBe_^NtZb#yZBPVjV-@Ug;QGpo7u~-H4aL)I`L& z%bZ2&X^I%FX8*-l4iTso`T6^QWP6_7ygmD~UQY*ghu1HZY`ktg(=NO=&R%>@KUNl4VDn6R!~1Fl5cRw__{v zG#jbSQ`tlR8fz`Z?}H!X&}(W32_5J6*J_PvrAD*xNxjB&P$Ov+Lyh&~9?VMa5jO0KGEVGv1V{*^ zNe{m$w6n#T6c1tuYC}d)Hlb`-_Qh2BK3HlV%w0tU1|hSbB#6G|LTl*>PS=z8mvNQ~ zXR`w`%S2m(G|VO&A(-LCBf5eSr*-|XjUN#@2Q(9*W3xg^5AL;S5PsSH1Nt2dIjMVa z_C&Zpt}7^WD;F^CU0kRb2ejg&R_{A0QSHrq#d8o+*j7PEsuX4CFu#vCxdSg%-%OsA zy$9!osX8SRrj@@SK$v>IWZj$+CeioEf~U0?hwP3s92Y5zD^Vg1X{PgRCPlBLG^ zis&h=UeG-V@szIUrCzS@Ngm`Im5(>}BoBx3Ny?9e@+r!Xh4Mp`pP;O6Jge)|f34=9 zrf9<;E!vZ1S;e6Jwc2yz416~ z5t<$(1`JG&A54B@fn5V0k`uB_su|8B4QLV9M;qpdVI&;ZyLia6lkv-^8-0V+xkkSx zXmUvAG$kofzsoHgjmi>hc!CnZoOgW@rIHjHzld~&1d)~3wPUcr>5NgNr_q@B(xW;$ zZXanoQLQ6=;Q&AymIhXu)CSGOC&T)J-&VCRW7aA4B?wypgH=0Gc@MUeC7_MmI`Lq- ztP?E^03C_Saqov+G>|u#DWJ;FsCl4uz`E0vuV`O**`RRi|kwZB;MCXEO z%97$OGF?fZMHD)rqB2~f2<1MXLKQ@&1{DKl+4Hh^>KRgyOq$j2LEBw~LMK!USoeMJ zq}@LDfTWzRu@pO5O#euCM7d)}P?_G>R~O#gnbTJnz)`S-*60~~T6S68*?jKS?o9v1 zo0Q7_)?-y&ERPeC+w;*_J`?n}8R&Jec;aTdI1ZXxh1}4@BFGoF`!`W1N{f%`cjlOD zuo7)HpWUCnb)b4GpPZ$?@F~WxirHc%Qmy0R>ODR*i*+GEki9zm1&gOLZCNbVoNQON z4A0gg8NvuU@%>J3U^Gbsvjc1z0mveJ5&BJo8;ZbehG+A?(O(*j&QG{(loZ{Xjvv`!E1C2r6 zu1@keT4De+e3B6qqn_USPtIUul4q-vJiBU=XUj<*&u4o|dbF0Fr(0~WIrnmid_h?N^_1}f(Ru_vukP-w2V z_~$E&KVPxiB!k}&K!NRfR;Iu1=tKz3l-3XG(G+$_Yu{I=ERglbj0Vn<{OUdFv9Rn|1H@Y z9{vp)^&wvIQ?||ng=^w&*_Jl6)mqN^0p_UneGn9`vA)WxDO(QfL8~D}uF?Jq3?pZz zj(b+@LjW&JWz{fI@2?o9C&I(<`DXFc5{_v3bsQ>ioWL_6hhzc#9w1jwV1Q*9rRw{o zY4-4eTle{M^-e34@Zd<~>#Wd{$hR<{RoQbBqCX<`>~rv7&m)07vrCHXnZ(Ja;L>Xk zQgE|pMozp%Z-tiRn=Pu&8!c&fI6rfMc5?_RE7ZxAs2Ro$hjxYdd@G3QU0Z0Ef<{S~6GO z4u@8lmZo%3VKEk?091d1fXztc&<*Z_d=xn}nS{lmz1uK{u9eeYa_9zfvBWRUuM|Ed zZ$;V?5;2EYutPTmu9-vES8!-%E7IY}p{unJB-fwi-aIFo@8L{Z;9kX~J!Fkj5h(%~goNwiQHR{zV}IQH(=IA0PsK0d5Ep z2m)Lr0xQwuUo07TUYuGvf>)9Oi)-!GguX%^ETEO-VZKKm1~_%wJOkX2Vj0E;kuXIG zXK-T-F^_@8l<(p4u!6nvaRP}O9blnr;x6_31F37PO!}N3tYp$_ejrc60G(l7ZLjL8 z2H$6ld>U)6EV#1MJrHR{X+4!}z6tbdksR|d>dv)Tvn6nOeI@uRy*WYFy#7b_KPcy*XkuB~9;J(XuXL-2eRC&2y^OVyp zg~Hr%nx&`1PLqkmOj$H&dz37D?P#c9(pDq_9%a3!hF7LQ83SUbKvr+{BmL@u z25h`1AZ7qSw9WjKC(XP%9rZfhPnpZAP*8B0Mk}O#MC_4gXH5MlT`QR* z;i@leEShz+~ z=D?Ie5-CckokIPUvS>VD{AmoG5uznvS#oqPgTO43bc*WbDRR#0Wlu7oqP>$u8*+gS z)wHSRhy>6?XHY|S5dYfG*?SM=ni@hE5C^cPldV$NS6g6C)PlZF+|9{4V}khiyB-c@ zlJvq$*PgoxrS+*cfn$H!#MLwrNKuHgz*cLT@nBRgQV z=d@Y&+`u7Csv*_S95*ysYH(&AoJnjeuBygK0&+NB73sdp(EJCJ1WaY6Gt`>7ehUx) zhsW;NX?%I|vHj`QoJ@hsMw-=7L<&2a@L0@E;LG09XL7FgOxdm}rdHiUt+8}T)4m-eY@rwu zYyhMLL+PI`^FLnDhuA&A-en|k`WlEo1U8ctjV)K=&OR2~$FVquLx$qLSWdtC zsifZz4BH=4mg2J35!wm9A+$*k*!s(2NCh@15+D@{7*uE6ie^aQWwc2|QGiaYTd@%g zihkhz)U7Rt^TnO<6~bRYwWF!#5?e*sP_y?e?mc5hA+<`zjA%?_q2j@w)9Fc+X4*3N za8oVoa&-(n>#PP{k`n`%E1}Z9^SI?0-2`Qgxgj`r8&-09MlKQK@r>+sCpflGibOxV zfPF)SqH8^`r08SNciPi5x;^$5w1<00uyrwK)Nb$+s%AXQde9EpK82T|$iWF!Z2bEH zY!oP1eX(z3BZz$)nu0=0Pe7=yVn|--Tegpx0FfWGr-M+FA7}8FFLA0|A1|Txw+F4g zY@QEVE6+(4ty|w_w3gUXMQb9?B3hTE=-g<1cNtdYn67o;wK?EA@LK+eRlG)!ROiH! zhEn-cuR1H07i|rGPwYwurI+Hw2T4%%Dqc`j!84+&XMUAjRewB-oO8~onjv4`PksLS zju}!c+Qavxf*ZCY%ml&1Cwk%VLg=cjipZ)dVyie*@pE!1OU#jvQ42J6B@7cKw(vVz|-8L4-$Q^Hemqt(KD{cn{8!gyVpI zOnC9wUwjgP*%j!4r*$hYAilUqN{gf17oqrwOFy8}8!5co?;Z++zm9@CTyVf|-KDp# zrSOCcf6#?(%C4d8u_x5Z8(sFrgu<&SyzOf$#IcB$N#JegqTQbvf{t_;ISR*f^ z)3~ZvrU_T@5M9;;0HOY5Yx#J2GQnCtyg7XNWVDVEMI-$kCW$t!{ zx$C3a1^<5lBdE(*jhyFPIsk0=vI+a^A;<~n5mGu1%rpA-`9ehB4%-aU1S>_~SkWS{ ztv5S~sJvI=-K)e1g~L_#1^)WZ zCJOn5<7;PJHBtMRnymGkjd#VyJjF#%86%{4)&BLy8zi)TpLhM!X_90~_^(!Pj0hyu z{V~#T-gO)9XW!TmWDVKVi z!VB>|7%*>c*`MNzz2z#uSf3zzNra&#L9S4Um=ZRJBU|Myfz&gygD{ydKmN1#{Na5+ z{cGPyZq4ie8wFoaZauCTNBb_j2YT)6zw@Dce)YC5-T$@nwZGMC97HR0=(au)uoNn0lhxR5PBxORCJC#4DjW>QFk&9)UM-hqwlWK z9rhB5I8-s$;dR&x&J0|(;oHC^4*})n`8u)kPrel&Ne>}~6SJ(^d7}6;0^9%P0Z}T<7)}rz<8|)HdmhIlMFedCsPyn6h!d- z@`la|@Bu4n;lQAlw5KidMHUkd6em{Sf#MDl+CUOy6qJ9&aab}@OoRxe_M=UR;J#&O z7qU)yF1YR3q$;qYymz*TGPz4N%&sT~@Q~nNQnYuhXo;@(@fqPT5<(3aOmQ>5(L;KM zW!^n=%pW@)`3r~Etko8mQ8Q)g2p!Q76}L#IK^;{pZsotcdN3SrOO%`0gT!E*`&JA_ z(U_|Sqjsxia zr$ADroZ`(7k}Kv7y2XQ<V|qU`MYuQ23a1VTD@?4o{l{S$pPlWj#Hm{QS)3(m z#Tl{A^{BGnHeGAnQoA`l5-hI`SzZVK6%BV0r(zblSXx%Hv__gWYD)GYCf;QnP4$O+ zP`1z^1PmKHjdIC_hcYTrfSd)0p{6kK;&1=vLw`Pkk*nMvstQPNDI2KnW;a>iA%8CylLo7NNiVprFKd408C4Zt8%LaNix`%q~90u)TH7RHB2HHCRGunt1g$mqKlkxJe9gbtYROQu?EmxR zYG6Kk+R>z3X|}8#Isw-v;{t7cdgUK$)svaG!LQq!cGIUY1a2a^ICt-3`1D28Y%88{G209qOJkWw0E zuMgp|{onJW2z3Mx+?tQx^uI2^u_-10PRpz^8^x|~`&6(Fl2?J~ zkq7>J`Z*zg1p!#RUTPw5UTQ`G7Ox9T3_Sa2KYGM~CdQ2m?SD)=i4dz&Aq+854313S zNe`zi;>&7D?|K+Tm{!235}jDjMkiz!(e#5!xE0u3XWLJQlnitxTizK{{LY(ls| zBw$3^{D}qK;69MHpEX042somH$@S~}13JmOR%1y~ujyph&BiuZ_`NpNEpc>1MLo;w zOT|tJ{#rg%o`qVmRfgOufh2`Wfkv<6EYM!1f{0dZzf$P#m(=Yb!u7vmchUO_@rY$v z{R&H2_)3rPv<%~6%hzN)Ts$6+UzMm_;;RcBVuAb-NA%BXyf~V5bb6y`L+|6*1Ak02 z+M0!a`%`-GO@E41sr?gtmrQ*@-%5|>5e`I!CEq53w=7d({!tf!D-WadSE3i*k?@p6 zM?_lJN1l{s`&XTxfo&XoC+dFb>$5c_Uy$0l#p~Y!z}<0ZXL0Ht_5_Q?!;i%{Yi+>zgS6h9@`E5Vq~le$bn>CDeU#bsLUG% zO#4^c6YY<*6q%wNq9jHwssS z5ZHIsKwP#=Sh{M2YU-*+Jq^`F3p`(wiA`<@+JQMgCQWHE^MvibrC@G-=9!#AxX)cY zEym?1L|IC5(vuDZ#&&Yyn6gy_gvF6SU6mlBnJgpSZNP=8xVPjIJJ@Y5kh4gqquSCX z4YYfUYZ20=cpw^$v?_mFU@w7K`X2x?&cX_UaRdUD_S{LbP$@eMS4xL9CxD=_8U&a% zN)QN6Oq^x202wx~@nd`baKDZT#nLb^p(EOjxf;XK0Q6BOpnW$r924Lu)voTKx!&-B5rge5A7us=FiVin}8{^_0u;Ms>~8D(EHhfwCkGOB4Zl zP&S@w)a&&WZ2&XKM~kF_0VCB=+~9%u{cRL)Y|nKXR_vK~Qst_t?xdpg4j+e3mCid< zpco=9d3B1~pNB`8%JIQDAFERPqo8D%HXN4Vuluu#3x$)8Ba{LRi5AUY*b3mzK< z55k$;p1Qj+y8`m z1ZlvUc8G4^SPi6sThLH*E1zbXFQ-5*OoV6RQA7ICab|*E+=70|qBi>}CPu@W^O1w( z#9}~zug*;hHDm46uUJ6iCa@|8OA7WF2yM!U1kr*FX05I1F4lnm-Q zR8o@;d?cSHNskntHJuYbUd(xiNSwwetV0*sKL zh1a$!x|w{f{WZV-Wg;Xz)9Go=eV`h z{uz|id@3q9r$hrXV|mLUG|7TRDD*=S)h58V(QR$>%3csyiX4L;-!6WP~iQfRh*@^y~y|0RxC!C8XZH227p0f~BMvrDt+n$dTY5-mT(kt?f2!`zAv^cL0;VU(HbMgG0e*T6IbYn5Qs(gmj%d=0q z@bw*JH9fryLh4+9y%AE*Jv7u~WJ*bbDzp#XhihhDVDAl^b1+3jy_o z1rbcSz7Js9-rEyaR!kV{m6CovM1Lkwq08wZ#)|RG_s6qMQn7c|ux@I^c6)b6y2$|nsi^?EU3j@z|hdc|M4<^*g0~O-5aqRM!!$L^1 zm%bJVKoOjF57CBjP-ISeLGCMU08$ArJH=bvMwiaX@)%ng1^QOzsU;C6x3e>}ldo)t zn2~BbB1E*Ik*bY6DypGQS85z0XScDkG(52kXq7I|5QefncXKJ81nu_)I=G1Hy4WV= zU5QG3A-J$%oN)3>l7Z6MKuz6i&a77|7sIL~qxD@$0y;uLwb;C(kQ{`PUH@#YroZ(_ ze;I}R@6Fz*Sl?&GoA+FtdewVT%xRnK5o*|H8zDYtp{4maLh918%GDQq&B9pa3gYQM zBBb%1c!fYl1a+|uVV}mq(wy@>+CL%3bY!Efxby9(!;}@F)Q{b(0_7l`PIPB6H2O;= zIB|Y$&kmRp)aUS|oY~+LpzR{tobiQuzuVm{52fOc^2Y_)zG44(?}>oB*nV;}yr*9~+JA=Zudg6Sa;+KDj)r}t{5!tzj!y|D zI(xTP{2o7cI6Zf^&stu@JL};b86<74_IG_LkbQDh{9`B3697?bgbg2o6PDV@!09v- z+L%b1z?=^n3%K|M+(-eB578{cL|UdLZEl zrTUo6YFao?@FDk{3v-{R`ecSzIN%d17LWear;_67cYH!qwr^RHC$nLtuKVMMs~^uu zgY`UGK2`m=tsQ>oR#I$cLr_N1AU;B>7jeI3H&DFmPfH|VvHwi@15_*CTmB$RAmG@{ z+k#uQ+RmEQzQ6pK6xupop@ZmfKG@`Kx{O#7RSPJ30rDb zrWdMPD;2n9YfUdyx2DW?-d>?+2@6%r!+9D#yMlc5%;xt|kX>Ywzeq$R?M3P}O10ku z`PXWG4B~ffxc#DKbC*8C?bV_5p;Yt}pIg0shVsk8?E~EI%V$rA80$>S<(s(i1G@`= z7MJq_u-V$^motRGuu)O)D<_i|mu)EExXdGlahYS^!KKZnnv1hqS|Bq+6JaA|i4|cf zo2FK0JbcySD%4$Nq8S~TIM;K1Ypej&2Wz*#TlNDiI6in^Ahy`Gh6c_P{S zN_n*s`J?RQ!Wle^T$r)#T;TgT7vu#Uz6L{;XAJ5Vg=#}yK^-jcFB%ndFofNkL{+`uK}WO zhz#Dn{s@;pp3F9r_DB0-+#MS5Z>T&c!sv2sKh?L^oN}lV0c?hmXPxQd7BPj%uwbSO zs|F^uWTq8YJc%qR>NOcy!{h`iR6f71yTNGZ3QhX+4I=k7Y;?#nX!rEi5$2T3jo=fP zLjh4ILQ5maElpA93AIH^8%~g*Edo#SiO|*r&$Y$#S--`+UPJd~Eizhr;iu6Q4Ps_O zg2x*hcJ8g9Mc1ftIdBtCGw!tbmF}(wI;1+TWNanD@&nh_Pfn17GC1_(!hOVXdUu#6<_zq4E5cxs@=jJd#v7t%=`UMNTgEU5>TrrnHDZ!&Xj z_0(MitPm7t4lQ_|MFBzw<&ZXm2ul)Vb+#A_IC!tumem`lEHQIz);ZepJf5X39ShfM zi(>-lz8G`~WJD9jAzNesvRzqu2VO+Sg;leb?1UcBH{M+8Y+{H2t}_RL9nCih=5_g8 zTe}+27$vDr1i0->Pmu8y6&}+67=->ncSg-Lahp!ibR*^SVjZK$j9MZ`vX02%h49eL zu*;(vQtxS-!4K&fJi}cb1+sameN3Rm2X3DF1z;u?GAbIcna!-tv~Ll`u@w$F5RR~| zQuC@|oVUa0%r)JT){-g+SyP_%S$;F{?v%(Lq+4VUb!gZm%&D05V}{_+Qodrb?oAFip$K!sdyuVQoPY9W1gDuOVe;60M+fT5I8vm53%ZrVJ*W$VJWm%aSFywiOJTWE-L!hs}VmzJOpDI?Lg zRrfhaH!Q?@wFm|Q*?IQvGZHDtFa4ph*7i`_wpDdJrM*)4;I8*oK6nL4Rs7fAC!+4< z(pD)dvDICx5^uOdC7=HBN+setjA3=FXWG41zff&8U+aTM`X8KlXQhSn*73ppw^crP z`8qy$*NMspFI($_%Ao(^j>-qy1i6n0a-AOJILT%>AS&bfMzvLOo#KyG$>v@qaJ_R@ z@?aI3^J{(ZSRb0ddb-l}&FlE!zg9okw2lw{=@%+3Y+UPu3LZZEbCnO~*8HG9h7bKj zzB2oa!%)cUQ+Sv(^U{jQG%dD=i?q3~!t?iVM>4501|C z*3EN&^6~!iR;tzF?}RRkJ#;}rO^cuYg8@9$?s@2ftn}p1KTzp92G{ZfSSg?8t0{;k zVvq_w)t{T+Jn@NsH!(()wS}140ZJAK$QP=hRuFmd>l(w>-ne8|D?X>P-Mun+`#CHA z+n=tC%evZOl&J!UJMXD{z`i0a-tjqF{oi}7N||#mXnx^OE7N4H$cE#wT9I=h5A+kFlK zsUZv(597IJ2^Sqh_)hZX`3QugS4g0fn^SXFk`%AjDX0qH3k7Leki~+mERctSKB<)j z-tbURFAGRl>o*!@0Vz;jFjBlaSl`uuwp}O8dH)Ut_N~ZKxw_(Fgu6yJ7iy zstE3tWOUGz@!pezg^uLBFS`b z=J0y5BaE($jc^)ey{k`Xg4hsF2mb-3caSuebenkdgrLWo&vM8&Q3{wsZuK%>wsXWH zs$rYrgyg$P+WckEj=AsRd*mH=f@Gn&XQRaNhpO3;JQ?t5(Pi4MBE}e#u?i{1;;`h+ zWu&0MNTC8F1qDV56&NWfFjA<%NI`*-LIp+&3XBvgFj7zukz&+7W{BZqgGezZq#&n? zkOB`cdS4<1PBH@P^FRs?hqLR>w-G7E29ZKuL&K0l2oR=Udr288JdaMk?URtuRq%wh z&TMJD;*E2;7CL#cP-xe*Y=R#Ir_r%^ASZ$o0=(eFo}mIKxoob06SZ;FS#R;^CtJR_ zc-TqDVBuO=BDLNUG13X0*e7W5Gh?7V_^mEqb@HkS#IV2mUoI9vJ5n(bWJu!$wQa-YXD zmy6hvh~&S^^#^?4$s~C9eSR0c;w3!9X0neWei4GNt==9A*;&1w%d10H5-uorW$ag? zhwe!GVO$pcXlV+&(=Eg>@ZvT47;~{W?2QBXR z4ffYyS0BJa4aYNBgnM_H0`s`rk?q@ETjY-2;~Tipy{ove5xtt#^ml*xaeygz4`mvI zeb5(yk-HtWMd_L#FnCIs&S<~iX#XaHnlf&NFa{n=*D#NYfrfWv7x)|9?UnA#WtX5& zLzP3%+9;^xQ9Sy~50ZG4OdIz@iDVZo4W$qBzy)8O%qDv0WW)E%bFwFd((LK# zDBPgykdeb+7UyI`ks^!0*YMkTPWJiz^9H9*!%fO#vf(#5CnG8cTJM-_ANAw&e=0j) zy=Ns25Y@T0)nl^JgEAn7!&S#*w=~pnOtv+wNoPWwYuGW_=yP>UHbS6Gx-+ayoNQ62 z;4sL-*4flt;xX9@Bk4AHZ{QS@smd=OlU*&iwSz#6It$-Dm{2(X0{BlBS26pwVyE=^ z5RFA$eMmMZ_6e!xix_-11)+eeb3v&B_Oh%e2x>u?u_&dWs@+S)bqBlf zZTr&0-9ZZnA4W^b&{MS)&>=}Pxs*j613ExREG3Gc$VbXkwRr=jiYPuJTsT!5|2gvj zTy*%da;i4+W{a)v4M&Y+C;(Lr>Lq(>_&u3a+%CrezdFsFVLL!(Ad| z)n(SvgW$MFHhPUbheQ~iuno$vr;TeT%cp$QHnUikhn1vqI=_P>wb5Sd zL$?4S&@!Z4yrtis%h}V=xw0OwVb{N?av4h9ZtOGlw7R5pIgh_kSYYHUy9cCE5)izVP}^`8{Ii4>aSC^W~$tPg^O-;SOLe_PY*?@9aH1{1Bj*3?9i z1slsA#FyZPrf?Tq8|prpuU_ai0d5}*QVwuk8&qw2#Mr=OHS&qqlE0OWTH6~GZ1-$- zESSMP?bA-gpbK>VO+dOIZlwxYP#rD5s+^L%G1(eB{=SeI83qT z5XZ~xs%o%9UGrrxL~wod{D>bD`p7K-lsEd|xo{bt5q9Tb6DS7( z9Bkz1?Ii!cQuDIrfoEic<*aAt4` zxphhUGOcx-Yv^V%f88>L{J!ItK9RJ4bPCAn5Gpb-jYz^|E2X1gp_w>l?0|T*_V0Ns zXU|`B;`FZM**9ORUMe^#Z^;4j>FHzpn{Vw-@9z#gX6&QIh>tUx)aUILpJUygtb9JR z;&YbclL z^4nt;=E%agnA zDVQAA=S{=Vf zsxQQbOWc?mjvG*lA-M4}N{8Tv1SEOy%p+U`>jO$0X$^`KC9Ns>SKm@2+5|PKUDrkP z>Ijk%dx1y##hz|7P%s>Hil=|Eq**A^MW<@7lX_8JWYApEEF3lxd|$G|Jz|0KOwvuJ ztc-Zie9yt+**E{Tk3bhKLpIgZ)K7Wq5bD^G!`H8V4WfjBRAVxT zptN&#LCkg-MHv4Ry?!IiDWWzgF(IRfv2Hr4b{U>>s5t*1gjoV9F}RbN;%sZh7gdjS z;i~na-Y;HMOdOlTP-Bq$7+W6qUnS2S$9?|?&x((ven(aUmCyz<*$?N6$f%i5>RT7fB5H5B?YPx z+LBN{!~U_Hwt)R3uSk*^J60JbSW)YPvLcV zWqF8WgK!g6A2Kr)Z(*f!MsrqRD4>Z^v@4Xi=zx^OKmmC55}uC~|3&G#fjxbk1c_Bc zKZ--$uRQpLka|0gD?C8S?5{l9_Qytoui{AYGnIOoE6Hcbo2cHUbC>d7HqfA%--`qj z8+CqR7D;F+{BjGk|U*p*q;j!`W#2;v|st9bltq>z*t^9&I{r_=V^ zri%AHLy@E~4j{hUCGROq-tV7Z{TaM~^-aE1e845go?$MVlsrW(_oztNvny$$K*pQc zwikYm1$R5mUKPHEr!&b5&RPlwyY+=46T}xv1Q8&E$6N96-_t?w)=JRF2dhC3P10mJ zF^GlXy}<3S-bw$_m+0`5d(-x@b|(!G7ifSGRpVAH(O6x<6Ee(roUF>kdV|CV3w$0@ z80Wo7lx2nKBo1afcgWPtBjy+GT8?B@ZC=CXi)9SYD6O|+r3WD{&ryNc>C_q9^?{$MMPP8J--`R@JB%>*-JI>bJ2fYulrY znf-$UMRt0>`lscIcv*|O29g8GK=Xvs-WVmtJG6kpwlWSSK3I*?T2b$n^|t)4~AT|n1uMpCVo&@~|`8@CFQ zif+c%Wli%;S32O_$1YU*M^Z!nY+c9Fsn15n9$_+x@PNYZrvEzH04bx_14i$@lj5gV zfiXT<4Mu1Sa)KAP6I8l~&}AV-ACMH#ix&lsp>KjC2vC7z1|01{VFmSSFj^!2j^OuEh;dappU3EcTPbTz+d5)IXZCM!$~O5Gi~zLU@u zlq8DgMv*|gxz|URS?=+|MCA0Ve*-&YyW2zKPNKQyngIF&YvtF8jeQ1#=ghF2K$UDeK=*7IY>QZj-6*@GOc2FN7Nqm79 z{qT8|W@N^+0uL<4Z3eX*7dGpPTCftB_NA6UG3XwIFb|k4Ksx@Hzm3UU*=*S4llEo* zn-MGsHWUDfzvN_Xsa|y9wH*3EP1{9A6yn2nTqM=c&JWKn2+#I}XM028C86-LQ22T- zbmRy1-9^bY{G!VRzw(O`O`rSYOTGA_eeKD8mKG2B7H=o1M~U$2%H;yldbItxO1_Br z$*B2JJZ_yM+H?ZU0O#Xn+S_LTmhNB62pRJa#@Es1^77d#z=AF)5^D++V|U!hz*nR^ zAz3r~nAmKk2b8N>Y9p$R3ZsbBd+jUfgX6FD8VTsprp_dPWEFooNBMo)4sI`)uR;8T(?2uTivU)KUtDSo?C z?Pr)Uyx=qZE07KD&O*ZRyRwiV{1j1AD!(&h>2SRxgYa{`J;TF}>xqn|!WFLylIibC zj%HmN_ZdA}>3GQ4XM-e1iy7{Ae!>b&I%L^j%$`Yc*WmheiXR8pN7D|>a54L0in|_K zqU+^%!jvhiCdE&t+E6SKMGI0rn;Nv1he)T>6{K=p)hZMh91 z-pC>2@qeTiZw}?UqD@l-ealzqmWsns-taRx7<~jRGYn(Iev-@tob~E_gX9M8-sq%2 zhB{ft?uTHAfFaC-OcdOkbyF7Q9Gj0PL(|c9H|;%jkUF zYLjiZb{F>JUwGo=sWV6MeptX7f2?Zs<#F-@^?iIKQnCY4Bhfg*54N{uI6g&(Q#Ll!I69YCfC{Qy`5Du^?1wT<7Q&8XA<7Mz3igIAA)^5=9AbeH9l24djFJwkTIP49 zMAXTX4(6OPH*`Qb+dca-!L1D;?8g{J^8I z20`r2{FyY{r+>T-hOtGBQwsrr&odF_)TYG;H0gKzgrF^Te4x>eMNB2*A8(65D`rsBaTgnknX`6OOWQ~Uz`EfE zY@i~NuwgN38y7Heo(s;Db6ns-WVMm!DQUyBd6&oIgzz6?EdGR14C>Y;WbdOXXwN>W zDF^)~KHb}v!C}vws0|4;+W*D#p;QU#r!yrWE*dJ%U6AIo0cyz@I5C9*SwzR7*nmb) z4H~w92F+ajx_5r*IJ!dwCcKRnlvR$E$XCUyuRKTb)wRpEy+B3u@3AL4c& z3p)6-X3Bi&Bu0?;S>N0$lA;(_9&`?RS6ooPVpm(v1_Uk`oE}8Tw$!53S-q&sKf)I z!tIC!PD;(Zc{a-ge4fUb@fR(t}UKDp0b>|2!=Z*S4GUfI&{uTSj7XCjN20;Rsx!?s}i#lVM6Rl znVFoPtQ#`QK3jzh9Wz;=2S6rN(>^zV&r%I8G#s6+A>mFDCu&XLO60Brw`u)p=*9)- z?uG&bs-poys_~H0bs`b`Wnf5U!fdZl=<>Q2 zm&j;!s@Z>QOzY2>{Sy64Sg;6cK-^3W1@fA3;brOX{?@D;`uk$JlkrEx^&Rw<=}@(^TV?W{*{piwWgfILFv*Viz8b8UZ2 zNwgZpqC8G&QV*ka4SH|?LI#39KZB#QYHM>QKs;2A=tp)Tdid!y+gJT34HD^EZ)U@% zzU@lpNUC4oS2!(A*6)V(4w*a}EHJ|s-uDcu5_JQ0vbw>A9j$&T{Zr19upyG{&+P}< z8|C5lZf@lkOX(?YwFBW6A71M5Ek3+#Pn0%hREdGI0JN?R?a)!F59M7Tu?2O#Hwr#; zBt-_)W*AqUgWZt@WLa$#*ivZ6my{cYaF~D$4^|>e1b~2NGr>neYirfPiTl~*9tA+ck9)aS_GNDG;#P(XZtvvw+HiY2 zx7UCx>OnrD5!ICe0BZ_CyVwGX)|(XFCv56XvNM$;nS)S*M5#pZi9lt#MS|#kB9J&X zK}(u=X$Y-9;CM#McoCaWsFQjwV3V-7D(I&S)W`(Nf}@f8Qm3}8#?Tm)hE_SqjhX_` zonh8Uw5IJjcPM$ahvx3Ou!rXE#;}Lx4qck}=S+^WZ|`J7j6ZpQ(V_-4Jme+fLjVAK z`4pF$03$RE3d9ef5?BT@y2gcvq0I|#ys88p7pTS;(8yoTW(SOu5;P`t9qlD`^}<^N zROM-+0aPL1W&flAnJ1`I_F97<92TfTc3RmX0p&Z&^(Pn~(wJv{3=%s z5CE0=UQ2ez0C9~}4Oo^hhdhA}2@2WZN`m;%@5L1=X8OtU2UAs`7^^H-ewB4WCcUx< zrHbIh5A0wkrI<7ck0)4m@)QM>O!|ylzD{VMYMj3DQCU?{E%}^*$SUIHoaYCen#<;H znJUAlWFbc-(0)5q0*yExg@Hf}|0_k!ja}Fj76{%S)$b!RYRMZBvSoh;WjBpx3niI@ zNK6bqKGA=CTMC=Hxc@lYrz)8a&UQ(Pi{X#_#4&HAxY+qL?9^Etz5OeX*3gTO6nnwc zO2c=!=2Rcyxi=kN#38+WWfFeOy$^arovD~;*QMOw_2Obey7VTbXcs0yR|C7jlCGqS ziiq4SE14c@e0n#;TksNFBRN6Vapge^)hhNLz@Rv;lyb$%ZRCkC#jL}yCVyD)3;6(u zGeY4-_n-~S#mU;6qyrr*KJ)e;IndFwleGh)8} z=6oKl{r7X!6G(<~9+uf3HKGK;FsD+^*`FCph|GGhjnR&WE*KX-+uwgJJ%CwNGy6AdU5?eDb+t$l1GlH zvg^=@a=9bLa!qj?>p2%621O7_hwa~vTHe7)Z%1vh^DJ)QG(+1JT+xvbOC z<*H6sm#aIk(B+!WcDjyb`EKR_KZ9DnJ@CL+NP%3-yHXxgyVSwj z;!kS%%j7FiBO_jIkqasGaxUb~+r|YA{5%(oF{e~F+S?nsAY+i84~RKEUros(Zr5+r z`)I$RNKVsdslm(}9W0t~g4C@A$B9ICEqkPhaTD5ex1MfRU`TWde=#oi%FhOg(UdkxPYao>FyCLh&6scAnb@;dZjYJ;0jEz6?5gZjb9sxPZ z{6l2mEB-cH!XKQUKfX`#=k-I^V`@&N7S2RWkPT};BqLxxD|&(9mXC1DnB&*M9PewS z`a2)kpUV#T)$9Og`pzs#PRWW7{X_GIWFExE!fpAbQVjFcpEmg7O|gRRCijUdmb)7v z*i`3QPWp^jEN5CMMqxj4>ny-VDZp=3=PcX=@X3F7Dr!oBJ zm`CUoyRbYebW&^qKqjd(;eX^3W0@-Su?+Y5ecMyo)nF>>4lrI+Abx zZiFPH7|56A3b|i*B0SVw-1b1(6)^2VDRnJwJ`BQ~5iTN3J_sT{Amk~&`teUB#Vd>3 zKfyP$;rEE3oT35|EXkw`;26`wN2-1RNkY?7$NfP*ZeBAiEMX=Vy%G}yJi)-M$qpj6 zOd*}cuNa2BN%)EtqqPCXp4|2(mWOr+_2SHDGx!=e&;4AZtOc;!mWj060Rpx{V|$A= z;+~{6sVa|>?jo$8R=+uXl>Cqd?1a+wV(**6InsNtBaP}*|4l7@RimY^WyW7ZK;O+>Pgw~ma2(2idmfMyRus|mq68bP_-y#L zAmX_!u#hnXl;G12fEl&}5LF-K+vCt?+0d`DAn$gLlPdR5W`LSU zzYI*@+MI!AWnyLMU^GyM0r5+62z*FU;7krJw-5;=Qw8j!z*f*$C8qlIRS6?Zl=z?K z9gHfK1$S6ArLo|SU{ryWJGRV;g00v4>cn722>};)pDO9ZTPC1#0j5z>LS?Y_H8J@nmW>Y?xU$rhUuQbBDs(e0XdsXb^$^oY=$ z)zHTWJ2@Phu$}cm6Y0WX%ATIl=-@J*X_JhdzNz`bnY;%EJUj#ebTXW9pcWeHJLY@o zFu(>uf{zj4tOkmQ9T<$#Vt{=e02+bF5uB=mRau@ckN6zi6BxJL6Zq9;xk_Oms3N!E za3ZMgk%;8G^CczuZc&i-9l{k!g!LX04f3MyZ1u+ZKq&%n+mX=)MpLE2Tgg)0GR@h_kq29_sqA6Jp63rGSAf zRwiTyGV&!hE?5~CdI&Cn-UU7$3D4phkgVVP5$@Jp5cTyS5bjXxL!d1J3{?9TN!XI5 zEpT&CL*{|Ef^ocN(Wsh?+Sv;|cp5@jlif^#ce8NT_7{z!PCPa13L2a09K--a4rE5 z>=(kZ76d?kRag`|h`^#s)Z>k_kYBnAy9)Y{;K(uH)DbgmSDYQ0;?v5dRxJt|l*d}> zCUL*>pBMAf^d>=c5e@-aE_EcBQz4*`B$udh#GHt3E#nC%98V~^Y(1M~mlPKselVAg zCv>gyg(RNP7{A@QPgt0E4<;>=2lGbG#-h&g45%4qshk$^_EX(#1KbvlZLW`9>zINi zI-8)Pq{qV;tRwtJ?2;-ETy>?p*`3Kpui#t*b*DR{4o&iuYw%OKR311!Vm)tOVXx?> z+V6S`?a@GE@Pl*{C^hISRk6(ieY1Tkf4$_h#0fZk{%%VOdE&F7-tef_Ytmn6cDJBD z>7acSb)&;d`jT&9$sp0tI47j!qnAU+#xGyiZv>8f;&RCN#On|{NcpmW1oB)6T$>J$ zo0p>v=5?PksRp&dLs+gOzPov4xPZW*&_be<{zl*HTt0j*NwWnZXTwiG1{9T9y1U5{ z8%f3K_xNu`r{7#K)Hc>HYbJLkk08Q}!U(Vg)aQb#vT5NV-Gl11{H3=Oh0IUV*#2;OjSoqy7C*dVQXb$mGf5BgoG5BdRHSXWh+q51Ipq{_uRlL_5{`23m^_4) zFA#}+maQSDesu8<*D4M;r?iGZi}}Q*T-80wN*7|svoc`TJF+|&cDS1lb{*~%xzh62 zPP4x#WwiOaSfJ3kDq!ZdsgZ^yMp~x&b{8cZyc*KqEfx4ZcRgv;qq|-%s}JD>+TNtp zYeg{|FI1*2a&zFH>2#8ObLbQy8)QT+eh4dodc%Z~x`6Tszg}a~K$i%Xci`#n`uD5!>!kypJl*Dzw zVq?WuKB~O7R{7vEB6vV!+pe>*MM(^E#tGkL%O`h@VA(KoA^I34O5~CeND?$CA%bS) z!fF7}s0eA#`uKBd;2)e$8~yVfs#qWH3ww$sPQ25NwBZJNf@h$1QvDoEMcSbo>NPgD z$3CUFX%j|hL95%CNs>u+*b)$X5q9-5g4a(S!~8p^Y$j!OIAXV6#E4zLDsu|^ zOPz!S6Gs$~6okweLz5MJ96Uu?Ym`ny^7%x&HB@{MYs%2_4739ek)65{Pdld$(CesG zF9UQnrtpMNz)>kVdZYejMIA%!#18tShF_dz)K)eQ9X0I^j#|R=i#=-U96oB4?V8J> zqsE|G8TF~ZWYm}>21ngE>!=+wHFVT6FAU5zYK#|s)YLhA)Y`$UHEMb2_UHQj8nyND z)w#Ary(We`Ty5y6X?Jkc(geNOb4{JYM-9DLbJPxG?qm4Sx%Rea%~3l#Z0M+IcW~4e z>R;q_O`XF>jnJ{?sM*_9=K7-=wGZT~&UJQH3`hScLNkP#(eB`=(I>s=b4{JYM~(Qn z=BR@xEBgJgMvST=&^lA^`aXdKCN(&0!)cI^OJ|X`-|A!wG&eBVSWAR&IqpHat)1;z zDLC*#H}cjQ*~o{Fa%C^$n17i79B+Ig1t)umG>wpRPgGl*oj%*4@84nvRbgZ?l{(MX z-L)qLQNR=SXPOeEiZCTGrVi3a#uf>ic{1^nQ`t;RLyDfXP8pCPTeB{trqpgV(OH4A z8zV;UM@zVeP4Olf-|G2BX_ol4|Lec=+5dL>wmsG`6qbO^;~NQ{xX5WQAj|E_Ew`LT{;lO+>$erp%`6zvt(Q>t#iE&iUz>O*l86V?9w zZAZFWdARXyw=yj3IQu8xmT$h5H|E3R{m-Sh_P+Nkn|W!5x;Euo@~u1zm29b0qBkb} zMyzDb3Wj~XstfvBO@@ALIa1cn#~xNbe=GeDy}}ZgpSbnb)4`OhY`IMI9D7ja&+0>j zMC~}W1uh7R%BR|&4of-j5?pl<&6@Myw(sl5o!*RfkXp8Nu;PVunzem{@|~>*JCX#L z0K1L-Pj8}wD??T{_Cr=ThJaONtUJi=b2&<>*kzC^m;U|Crnb%&IrIFMyLzK=RpY9h*WmFH!7t^$`Y zs(i65MB|ygDnWuc5K$6#l7UqxkH5GQDGWC7O5!%|25swXKzd>?=^z zk;qi*lyWXgHILhwyYwJ=9+f4) zC5!C$yKL$d&WF*>=oMyMK+9MJ5dA!}SDhvlz>1b}2k1r4xMOle(YRy!M98>ff)IkY`I9UKsSVTK!$HA`Nf-9oIuV&?ms`H zy&6giv^2VFDW{h9C055vx#*T&XfHKYieXm<_V)XIY-Y7H08tJ^D|^Jw=-bvKFT>u_ zLy2p^N}Vs_t!3vsCV*X+%9s?nb8yE*<>3ynEQY&1nml`PT*3vF>pm`Q@s%2cz5O15 zszF+5D-DhGvqA_-7|yw(Ty5gK{AqXQtWo{+bULcd?Wvf4rB>XIg*a=!XMB(lp6!?9 zgWJ(ZEl;&V5L`M=rhyFl#RJl{A>?tmBCwCjRSqC+=@AB7c{RmsZFOr`>ruNpawYDY zL`0h&#%yhLJCRnBU{64l)pd?Lx3%JEc{Dp`M(wW2rKLETKxpz* ziavqsU9!A$y*ow=x2@M>8H3*jp;WpwMScw-svUQT8D&}66^2{Z#VIvJu173MXy?%2 zw~qna@15Mh@(5Z9$G4V2=P|I={+83KzT$6*3P==d1INO=0}$yx5 zB$dHA23~yar|Fxf0C*#=9BZk0iJU{bheCOM)js(ls+BiTuUa|Yu3as|TTgFqQ?few zV)m-liFIpNi^63+)jn{PG)HXM`_;m!&r+?I{kdWLIP+b^Su}1b+4Nber3dTj?cZz4 z2C7vk^4dUP8rD zxp_N;ab11*{K*P7stqwBJUshuLHMDQFm!Sngw& zA>okwh<9zwgb-j6toMUC9tuGw@>vxb?UdAwZM)WW1M;I=FKXaI;vE`6298OSYEtB7 zvB5b^Ml^`tQRYZGC<`&|wy~nPnSQ(K6TDHx%^Bjg^$jJw8cPPuaiO27MR0{n@Fm_a ziWyNQ+$xg9+sF`KG8ak}hL3BdUO2<;_HZkwnVq^-q6TFXOjixeelh!CagZsc)W%B& zv9UNx-m^>cBxG1hLWU*!BH4+pt&$!DFK(H8E7n9Xfp_k(u^DekUHN^It7XooE--=@vUcxPk3b!iw7EW6)vn*8MX zckEBEwxYb2U_gpH7u5W+hs$*?Ft>WZTW{}kErjjupR^ifM>4j%W;T`XNH~+_*O&?& z4+ek66;H?5AR*nTFL2!1U+cUQv0uOLO*FSDa@GEr1 zx81fvoJUu@jos7A&Ld9pfV(GeA7>#m0sEVsS9$_ec2vG~_2LP@@0HFDhlC)kzq(J3 zY8Z6{Zjz(4pRDKSAy@!#`2dVy-+LmQs6N7tOrH&|%N-@3)Nh^Ni1W%g))9;~_jO*W zy!5z`=mhlqmB%|fbdI1GWa_CSC0LF3SocrX zI9&KuL&Gd8Q`+_1(xjz;zZb+wAh1BhEa{k!VG-zbnQ|oddAUf z9pQ{|7eexw-B!5WQTt*|yLa=ir&TG*TE3wx)bJ@? zw_lX}Kf3;#i;^$v%6{@OUAq@%kLvmgsFtpH41G@5SMAOo))mj4hjiURr*vhT@ljnj z>_|rA>f)Bw-`b zELxUb)-hiqa~*=H;GPp*V*7HM~8+j90U)^nmRU9&&X>Lq1q*7xZ@ezW6 zvE?2>?YfTWKpo@poQSuK^2c?ngAn4xa7!OOH{8;5PaC(4N2FixGD=S>w~YOXSPDd* z^6g>*oSx>^tH^ear)wP!?xv|7G#Ek4#GYVc4O{Nvh%t7K*2{=GTJHtg(R>6cZ$HMp zAWVF7?`O*GA1e@_0cLKY?OUMz~RuT zuYqeK%KFI=zE&B+6CT3;tn*4#SkP2aMiDV&mnjNhJ#vG@j}1yF>}Rfo(nOsmW4?uo z?@pwEfY(Ni1Oas0!fOQ3Z4Y-xEhYHd6Wm@9N)?d0H{2>r^^$OVird%gRwQ3%M%J}w zej^ta^3@FGF$+!{auN}3PHTFOHLc7uazB#iNOVJr4oYQs?F6L6TWwtkw!plueYsfs zBMlhz#P4IHEnRd8;VROOZ6jc8VCaAw!-=5oEamnqW*;96FnCH^^gDrnv$#KRq5`u%R^%)7V4qQY=-)VQMR=lc1`}Zi!J#XYqdelI z9iQ{ik1iwyVNK+_gTTU@u@?wvbcNYThQGxxDNH1}TzwlQ)?-ljAmUMu5* zYEk^-WxCywF{u#nTCoSF(*7%Oi>%Q2=8%_1w|kt6RxM~;j25!Z_p2N0qGh02x6@^& zB~0Kv1!1Nri@?<|-^rrH7l6iYXB$a&AN{!ifei<5T2Sg+$uYy)=(nJel%3-6F*EVJ zU*~o(pIY_|YBmpwBT`g6n>7J?>`H55v4QHZYse(w;LZH46W*MlQNkOELVh$a9Nut=vd&h3cXK7Y*$S1fv;(}^5mn%g_n5To zjH7LA!&y?jvu|h_x2bTLkmXU2E_3`dZxIG&eH1GW)u%L}2-Pec*-61etxdU;R{v?b zw3Ni74st6my|7xnCcN%PrO_N$oq3=FJG)BMYeza1udh{rX_os4ja06gc|N8^ibuB9 z;vz#k$(t78?2?^U=IaE!T)@tgf6X-NpreLWg;{_mCcp|3ZUD$Zk$Vslo*yP=S8_x`Z+wxP;mvA` z3aJoJ1FYg{a7uXEAH2lV#I9fBY4+J?eMeUM5>G>Reu<~O#M4CQFZ`Fs)1E|62}MUD zkgWJ(GBpkM98B%P|8JPus%F<>YH#MSlw0aI=W=o)K!Gi*T=&p|Tn?vn7C!mfW6G=@ zMjtwQK${)?%h3@@L3H^7f^2#?uW=xibbxvp;Sg}wUZ+RXiULlF(|zu_^mUx+s#j`< zicwNYEdR&Dye;mGtWxNJYlPLJe)+;gH@$EF+|Au-9AHi(-b|k^MwduAq79?e8fal9 z^Nd_B(WiKtsyRE1TiX$&|E;RId2dO&6}ln8Dz7~wA8qzG?^e{S@2mrTW^^j32D%7@3g@qF@8 z+9#4nDm`U^M{O<7i;>}9cn{E)>rML@5%=^ZG>M~z+rYgeICo5}7=>T!U``v$Ifk*N z^T>V1uY$Xq%Y1Clj$RSxkxTeQV}+MW{4uhav@b;U!B#yU9qzkicY^q(S<2iyn>!?u zv3mnCLB8>2iLM;Ik%EVF2RLI&D1shhsUUJ}T;;sK3=RgEReNC zy9P#gDT3~J=}ePinpWn~e1zSDaYFu5X~xb4?ZN0lUbl6?{w8dg!NO<3LUQAbY1(x{ zpO8kj1Ev+!89mW=q&h~?bI*SBpa1*U{_JDVCC8nNTy7iB^AkCJfLwUPaG)R{V!WWW znwF`7rf~^dN7LFgqcYYi1wEK=DFI`|w}fTK%kd;AiH-C#0qLhDRM+-p13er}G&SQw1Dua@rXSdL3pst z(@aeS%gy0dJqEzqAQVljab1~Li>IH!%>REBPrnCyw){PQY%-gK1@#mKQhb>mwZu%C zfYf|wOuw)q9!4D@J_OBCxS%)?bmB0(bKd06n_FQC{D(jft?w-GpDVyAWhLqJA6{VL ze$VUJ!s|<&7lO4NsF&+ryg<_)*E}z2&2u@(pSb47K~iRdcEiFWSNu8_9^bR(pWi2( zdMZlJ!Jo2u#Wnx@o7S2KleOl-{UsP&Z_N`^jBc8qF``;n^R}JMps0kZ%!&-wwC1Iv z)yX{lH7_M<1JAsC85M+nur3;hU_b`XENi~m{>s>CPTU$h*ll!2*IM%eCu0*F?Y9Tk~e!eYScm@GGVms zi=w;0j1d!#_@gQ*%OfqJTqGqGOQoLqP!Bg3x&w_1bu5=2&+GBF^6|C{IdRkF+afKf zf}k=e9TCZLX9Z}2Aj_r&y`^Yc&=M_xn#qnJLSzNCupgT*q5d=5Zb+_5WYVIOda~JWDJ7a398A{zx z2uska^+Y%$iZYuLzX^m8zlv)l!i`yka{zYZoFZJyF^^G%YXuPwE@csJJ(<8)@uPp5 z$Tr-PIRPPbc6NIra#v(*h-@=ZwEG!|#C_fQqnPta0C#hx{0HvyF6hm<^<;dPUjHA9 z^KOs|UD>hH!yr6<19{^x?t_Q5`B7bZ@31x`4Srs^Fo8G8mLpWoLH5fyiznEII-3d- z8rJqfficv{z?jdxuDcl&pDE@KaE=yX^V7sJ%oOP%+m3h+m&iBJZw3I*5Pux+=vbM+ zYH?|>w<*m|2L}PJA=IBUoWMOcLpWvNgmL)-{`pT2Bo6yKnGN;N*H4%$7egp95pPM~KMadn^I+6)`dTqxd8K zzq~soz;L>HQhu)Oik4G@8YNbbfvUkDP?iwJJwioOYL85$0)d7>AM9Vlr{OC8A=ICw zB;2u4%_m>yWu)8+kXV|=f9Lzug-PcgXj2(?WF#TArtXX*W14dvs-}5oeBH)tK~=n| z8SZ(9U4q5T%O#(P34~c)>sEal+jFE)HyLKW0&(>$S{@UB81M4F$Ti38<<(*sK{|=QVlpl zhZ1O}kRuS~DiX~WkI1iZ;w5d^zea7?M<-s=hP|W>(|+V%uQn{;@JrgT|K+t|XQnuk zEu{D2h|?gcmwyR7k~SJGShkEbmxj!hy);BpWVbPKwd4SynEgM~vFH9p>{Q6O!nQi) z#PkvAfKYaniC0vJ-sk?$aGVG7A+h8HY0y?ve?on#wBG(0d^?qrY;_F3GK;&OOfLOO z+#3$n%el+kvBgT28C#8R;xKe5Jd#uA!$%* z3NBeS31879_?wlJ&^Y%b0G2f;fsPED1gBz=g5~*70-Np1B&_V-+LHh}3`_z&bMr5F z5|AE;PXd5ma}sc|Tr~;*s7aXAH!CNhbYncrN&qZtP68bnHVMuQ^Q}z+MytvstnA*} zlVG4L?^#?4!o?S5C7@p$J_*5Fclb&`o2f~-ph}L8eUnMBd)mrLsGWNy02Z7@^@kXG z)}QAxk|R1YY!aNP=3J8yt28;P_sEfm;awlbPLZ|0*(AZaP?;vuJIIU}6p3myh2^5|#ao|GDXZ&rua{f;k0yV=jB^@d?e40bQb8**!vGG-j) zHKs%AwT(-`vjRU~Y4y;lG*RBwb+&cH9wFSg5{-_qEM+a0-s_{nj31p!F!VUPLda_S z%v});=}}tTR$`B5bkdH(?T^ixC;-$+p{6ySTJGY|6dGTH8g#Tnv|7q*vh30=YC$Z} zM**8b5UP-&L^a8KM+i|Ip&dZ%Y^*4TmU#}^V;9k&;6J1h1OO1 zE$u;&K{UIK@SsPJL^3xUuAzbeR8f;2G;t5AKvVi!WoFF|v(B5;CWB^Fv@Wnt z^hB$>j!rN>Cit4JMEE(OrHDFM4E@7Dr?x;YXu+=*{Bxpl2Lp0|AH+0tT2+prB@YwR zB{qCSx!LIe2(NiXzZ*k@idmjXpkMShRN}}Uwik?iMO+Ut#JsDK)rvI(dxSa)>={*H56vo9KNrKX zI7=uM+@Bu04m7zV=2rjw$ zIEE`99So(SDo17gwZqD`hpKX9jBf)RUepk$2nV@@#xS+#7vi)M4(mkM_WvzF*1KMR z_$uJd#!?Q;&T0@ZV6raZE$CGn5I^tYFE(;H^lp6FF-jQghC~ms1p3iKP$y69Wh(=! zSm(WfDlJzjRlr751VmUb29W{3SM~>wU47PznOe~wnPDo?Ou1vGpu=*Z4SfoNEm?@5 zMq-A~JDO=zpfbRW#Sb}Ae_^LAq8QFZ>{S4ygRm6NRFBEp2z<3;XafSku;{D^7sKg? zGkLH>!kHRF!}s)p+JP?quab#6&^V@X80Wr!#|i4qKm!NdY=A|8{7i8BbsfB};c2?Rr& zL=3t?A%=*-PE11L`}zLX+WYL&eOldqWM-0q#@cJ|v-f)Z)^GjR@4d{?Aj;md(RqGj zP^3>|rW{HbVz|T*mkwvrV2gRNa3ZAkOZ&9}*u|<+@ z{Ar`|dC@LMn>V0Zy+g7Snd|K$36$qILem_a7ELLyBoovt;QM-A{_q^Y1(?nT*|`#! zSfNUn6J&<~QzUZYzyz!u02)02V6ubkD13Vl0O(@iUMqK#VKCUE(M{?-+@a5a4-mvX z8xSJbSyqXFprN+XKwBxnl1q=-S5u6c^_f>A7da|{u$E@;H-$=YOY{3au~^?Z_+;5# z_aiUhJe5IBb7W+IsJUtV(E!0kJa!2g0sTz-y|&fwcio=DPqWnT{#eKGZeOh9!o2xC z7n@xMdYl6tbzfVHB0C>wEeLM+a(cIfhM3i(zIpsaN77v&_k^yqWX@Z=)6U6 z;FAZ9O%t-U0tfJ6#-;eC&VZw|h=v15yhSWc4Nt9ZEDhu*sXf0~npQcMhNf>ulBVlPZk4f$;ds=>dc6jXC79xFO$MM4PVMc4Kx2IW(L zH*sSzM@{)DlYdBBBJZaR6H({XhjHSxG}?Ze+%8-=50|0o5lTylU##KkX}GtUug zk*6E8xnFYe2uDqh^rPoBv}pdOG8I^80AV*9oKt4h-Ej)Z7)}!;#rdacaWzOvQU$ec z%2xWg8nA`98XUx#?j@Zv<8oY0>}a!FeHK?!$^GjC@F4^>q;K~=_Oa7ha@hwWdLR1+ zz-F(ZeYv5dyj`A;eGz)K{7-yb4cZDksF*g!Ypm0Ah^qmYr0@W#W|F{x-XwWPU6@XO zxma8cyNeFs8QK&CnTxB@cI#%9)u$VwZUiFW9f)EcosGds0X9-`nFFSwGTJ)yDQUC- znSG#*kQtFi@f{wSXwpEb3?!1tTM}FkF)BTVSstKT<3j=Mc9_!JzdC;?0@=!dpcBcN}HN0Tq zH4;Gr^o3NCzh4TkVHQcCo?E!gPj(sD<$oc&%(s8C z%lu@Q`IoWF2$g@b%UBTSzl2@po2^n%ri2%=1DNn4hDPcS>C{|W025`LS&s8ay8)RM zC&s{R!lS?%^PdaJ6jS6wGWQJC=Y?eQwp3dZ-FoB39-J=37}#gx2qnf?Y^Ki*zz6X0 zPK?2-r=PqSLvax?2B`;i0{y`Y0KJ-tF?5*RmbBj|s4R|%p>bl2k(XMOg?oVr zgKo-;F!=CyP-z0 zfD#Hgxmbv>;@II4pKZLaVf1qf5$<(_e)dgEP2apvtJaC=7}%LM&g7WG^Y&SmVtj}asFQ5 zAiruJAN&Gk2Qcvk0Y)p)i!Y@v%oks(=1+pY!O?aTU-D>wIS4K3ldvGb@`FR1Ocg7@ z@`5zqlL)d*G>%v;i{ERK#u} z3fwSA^0R0qekr@yCoLJ^-62=y+Sn4!QJf}w?CmT{&gWG`Sd=}DO80lo-)}-Dg*cnD zJ=N)nsOhZBR?Oxp4+C@uF25kAsundk(~3Z&2}L2J`R;H`fUSD9Y|v4PfqVeK zMLs)VMi(x0wgeZ~Wf)I8L3#B0A>3V(He*aykjsSQin52p99W~-16Iy~<$)w;ICTx* zAOcUNQn&fS{fBDkihg(C0`+xv0elSktpzSJ-=6ibA}g}N$Y4c!dk?GI1uK4H{#`0s zbDzY620O;tp#AYt{nYMQMgqZ*07k2(04IexyE3q1u54h4rOUsK4ywojMW*L zU3C1)xxaZt9(&w+uN81%G=IvTnS*g;!{=BNvg;Fh6$ZGf%*sNTg5 z$7$U!#8`?aR?UDI2rWd8Y0yHv;1;4=DQ+PW+UOS|CpT-NT7Dto^hJVZz&%Jve|I6O z%Brgrkve0mPJPulU?YW&xWw(XJO(Pg zUTZIK!<-@!xO8=D-qhVBVUHM^Wr}EIfBL0Aea|o5l#Tq~X>%WotqD2pIcja33=7do z#W3Tk2`cl7)NkonGJZH+*-Z#^AXy0ud9bW9!F}G|N zfKGAOE0wir_mEFUoeVSA( znmloX!{+-(6YX!-K1RUP^eu}$FF3)f|2bP&vk(@VIJ9G>K&LS-!W zqEI+Nh-CT2cNWWq+Iq~LA)!+z+W(RKt2}y~?)F`7A_}&U1fQV!-C=hW@@CtogciMj z39^v>Z#qo6zsTXo|Lq;-<4pg{$A!xD4A(800^fl=0D(CuhvDc*p0ND~N=n>f+v}la1CqsUt_+WJQrzNa~G`7-;;-9>GVu7x4j;{8r zMq)uI?;I1x5|k3>XE)pLa2pyakwNmz6r;c*UL0e~AzCSKvg(T>e~#@SzMjFvGNl}0hf`Af2Qj2eTD@oTch%ORw9jM7~^$1(Pf@M|Fy zei5W)K#LAmjz;+qE7?;Tq7m^j@o~^tg7}E-%!v;T_9CsQ#|whAMx^@@AGydawlI-A zN@M)n5~_C3Sr?ICa$(BqosW?Qd&ek$w5-Kl{R$e)$LA4i4+V)bzI={K)&B{Lbh8 z?B@?3vNK~%3Np^TnI+N;)`y~UwyAEj(Y8#oIJA!pK(ol{in$%09nNEJ^Ni$Q{k_ln zjN~;F;UB?BF1}>WUvGD}H@nLl-Q^ALve#X1aF<=~A}*WnuW*;m?sCf4hNFu8dct3i z`zz<4*mKTAvFj0kJx$D7w&_oN?SvR(uIqI%#3COH$H>^?3nh!%WbtkLZ+N;Xm_*v<$An~1p|omF zSBIN!MQjZ+%T&OLK1AH8G`1z+?M^{rVE#)6QaB7S*f#&kgKH%3!~% z3wD-h4mb)1bO(q$u?{fAp>4Zh*oxUz%{jIw)SR+M6F_rEA z7wB#ZCd8LRS%MDJyve_#GodvtIC+>)Jrnfmpqdb!wM-<aV!x_)H2Wq($@3tL}Lk=x-N!yuu2b$b}ML-f!ZO$_35{;I-z#x z&9ig->SBbrd4d}tDaMuMV3e_*oz(Xqz=H|*S1mZc0_XLDTQ96sd`ehMqFr@mXLXAJ zUcE#(|6Fr&Z}a`b(cql}mXFS@0X(@awpO#f7PUC`yBkM^Ce^WUT^?UJ`)YME?S7@M(ebQv8 zNw@&z7DnnbZ#}paSF(4eY{I9sV26^Se(D;x=dy6Iy)<%ljTsd6Pa}Kx+dm()zcomt zqyx9$T%8YR%Xc6E3ne=BXq*0wT;_ltNrsjJG=ui4DDwFgiYOA*U}Ca!*d1*_D|S5u zOv!0$L>dp~_@@}PLGVx5H(0{H!4mdaq@JHYYtHD*2rhno6j|^EV)@t!JY*mVZdQr7 z;rSx-luxLc95tZ>i@dnRgwn1ilxq4+Xkug*Bc(!2)KP%~6Y&+`y23wMz617*g(b}@ zmo|GMmkF!_T5TXQmnp2qTs9M1&LvPhxC$JHPJo#nD2MAx9U}*xu+Hp&Rf>FR2l!br zU%5QZS1!eT#*MPv_=!GCi>%@d#{8Yxe3W0HncerR zpAWK;>=Rs^4ir?*&ipn`-WKuBY_{Jj)hGg#&L>P;TO;^uyE_%8urWvc9cS;^jPM#~ z?*Sou=LAJ1p5ZCS{c+koc`OA}ER}*VUhpzHAddO^x1xgfm2c(HzWl@JT34jH=xSHg z0e@GyqK^IJFhFl?NFp5ZQ=%=w24%XT1Tv^eO5lR}K#8d>GU8Zoc?JoW78o#@hlO*K zuPOrpgv(+ts)|IYuEXS|$XrY!JHdn^ve|s)+36UqHEtzq+)CECm8@|qfrbtDg&Mbr z25rObW!V-P>KQ4An}>$+y*HcUHmppOOx}3MTjWIb7;j86)9DDUx_+v=G?n^6+m%j- zpg;_+tuHJY(WXF0Mz;@*cNimxqOULn*}=79KQ}XIc1&haimXX4;2lc^!oab+^D+*P z*k)x3MwRB5jjM(Ojo##gxp-F8n+}$Dpmd~k*C)>~>TpbgM%J<$Fn3n7DcJ-FCaz{1 zRZ_>Y1ZVCmL`V-nQU=c`NR^t6XrZbhIGlpsl`ZD4ABDeL6^#yZXX|M*LCHf+82%>Dgf))&Kw`cF| z>DhcpB3C!F?;QI~kPWKybs$MwIy;@`kN$TC1&zpO#fU6EhcR+d{;O|f$MUt$U9bv7|O zM?Kcct<&nD7AB}&H=4~)4SwK=k02QYTW~+Gx8q-0z0d^CR@v?AEJw+T& z?F*7eH1+v_Z1t=x$vZX6Ny@fKgaIim?#Aa{+U5a`LY`&GfCDcV8qpA7;AksA)pbNK z!%i_QrTT&z*xDsV>m@&)v1BzDl<@bz1svLQ!8hOxa7qQT4 zmr~MEqgZ#0FUD@kaEELbo7vy~(dYciZyCNCvOX;Y1l5R%n*m$xEBY5G%pC*;o>(|u zB|RVddYvKkuJ?Q3nipMtVDaPf+Kl=frP1rVX+8xC(@G-?LlYAxtmi0=Sjltcxk=w8 zx{H*W-zG;nX~XwNIU(-MJIV>lu2`KwXK6^ZhZIS52Tbx5x?T3ou;airdTrbGa3=x$ZBHm*a zPSX%kAaA<%cL^KGknr4jBFxOY$}<73go871!=qaze&S#{><-uwyxCgO$^Z%Y5g2*y z`KI3&wg!;}oGcYW8T8)9AaI96AyV|TVXsNuQ+be?L?D`FI_m`g)V%i`TLm7GZ0n%K z@bsD^_d9PifdZ+!=KMmRwh=sPSm(eOc=ZXbggSqx?=fNef2?hx5TG@QiD zZ4wP1c%wB_#9$VW9HN@bd&^_3^h}0X^fSjjO;~7sg7V-OTlh?h9_Gd#VB5P7a zo`h(|y#~6RgDYQUyAIO9;c65FK^Qc1YuUXY`JA_wnHQyzp7xKRb8v}_lFKiqq>yK` z(D#@$eE9}Z#;NGq4uhYHcA4~aJ|qv=Em}o0*~88U5zcQ*bY2>mP_BY0rozX9H)&T+ zzRPE?|+#H4C$duh`N)(t;xy!jZ;qT~e2)ELb)*3k$aY;N+Zt`QRR zyQ~Bn73-3rx4&uN;+%BL#34EqZyDuvUV3ASWR8|eR>$ z9%EMqwB`2#Rt1OBFv?(xUb|3%|KMN}yer%q$d`(zti%ubr|;+KsC&v0HXrj(Kg`oL zJf))l5y_G+{aUQRnEC>H9nB-)k)xw1iP1I8}KO)O}Hl}5~w zX-Va>Ajp3B#qiBQ#@Rrglt#XunE{C4?I3&V@h^Y4rr({$-hMYRr;!cs#3PlN-W0U1 zWPCx!e%S?xXm|UF^2}up9@BsM_}kw3^#}gsW8V)BQy+vmdGE164CroNv0!*6`a_f-Qs$G|WzWVL3w zUvwB{XFgGsnUY65q(1|s2OU6}k~9A47kLUlt?xKX>oNcI4|%$lr%cpY|LB`MN@YB8 z_{J{e7u%xvW}KSrHNrPC5;4o!i3g!jvI%9UC}oG?|Mf)2)n#{!dYQe*QLnK5Ui!JXldWwqJiIH-lZVtDlM!=L;RmLK7f=H`jVG&j|3 z+++_;>KFgw_kZ{oAAI-kJYkb+2dW}6Nu2rqcR%{=8YdBEE0L!X7Oh+_ZH=?=btj7$ zWS8|X!)+G@5s+bSmYM^IrUj!SZzoS`F}o1!V#@BPkuYB9NPPnKW& z7$Fko9^ZCe-WZU`@@acs>69kf&}vwT?WCu1loDBlFyc>o8ctTvm_IW)amB=8iovH_ z1)b)C5yl;JqnswyS**9tOL!<7<0~mQP#ADV3voJ#m-4k%IuO;*Anj;F?e)*T4W0CK zkv3qdIxVRn?4&1D6A0b%Q&;#xGg-yW7|!9iCpfK(f-%g@G=NH+bGR6w9w{{fh9k7( z@M#0d8eQxxs5J;7gZ}xTdp?LNEgb+XQqe$K{GB*FhOZ0Vm2gJ}Gx77#d+Zp-57M)X zoa)rh62Lb&?^LHB7`tI7=%CScr#dOb!cKJ>;Z&!!DI@PIBKGg{Wbq0UEhXMM}Vd0b~ z&KNM9$9Y`qJ=JN{Dq?N9Q=KHdz=$zIIhHA4#VrwJM_;Pb*04i#GOb9orBS>}UaQ6l zTjSU+oufRw!JX%1CBvGgW?S`hD3i4I$*AysoaX8}NJ-D^cvX?)K_MeO8wF8PTeTc3 z#(_@i(r9sV6N(JK3>m!ZlAJzRzYTZ9lu1Qx^^!B4eAj5-cg;%HHJw%Fx`3^~68yUE zSd4^lRkGEne217H#$abTan2!mQbfBAXfBl;AI2sbcS90I|!r{_>lBd zC)6Ct9`ThIz;{2+7W3U-#u)MRD8>jk+dIZy-~Hz?#^>$3A1~^=zl$5mANjPck4uYIdQ znvUl2CRT`QEbU^8aV32!FGj1}*5e<)051FSqAvT(z*Q!@z*Ve)y|~)zvj05RWmrPF(Fk%=UlQnbLfQ#S0IZbz*l=mZApDf@bHXN!VFKwUJC7p(I<;HQ8xbQdPC=Ogz*6y-|BlkP7TQMFTt*r`O0&hvJ#I znQq7Vsb-%h+o!|*_DjMG#}!3;^n+IS*7%6-j^%epYp`Euh~!?&7)K=@9pR@=GJR)f z7g`(IkCL@!>&=dlU}W5Ll~ufQAmiBfs@@^a2=i@#0o=H!whn!;N=IvZfLkp)g706L zjJHq4l7lVpC5UgP*v@Jgbw+T!mhPPX;TOO1rTg#x#>Y_Nbgt3UW3_bq^taCa`yc-C z6W@5~37+msc20lq&))IFUwicN-#y3u4#xV_7r%TEMbPj5ko%qBfFg@6I9!%!9M9tH zEKg)cHE(ILVz=*0S61#sAPs39U8?zN?n$mWobFC`?N4_lJCdFI)1AqV>7idaoNnLW zxi-0$mPUU?E$&KoPq+1$z9hf0pEh^$+c>{nlU&Oabu!tbzN}0zl%SXr$C#{?9tUUS z#*7Rqop3tnY>)1M$E!G#TYctd0v>Ui0$k||2`{$@dg>kFwyz4{O9`2M@U6-AL!IrE zqg!|paPqQ@oah~RZRQp8-h=I&!J(R&bfshkXLdYe54LlqdDVF+y_S;FyRA(a#G+u> zlk8a*8202~xE3%>Gx+eq=__buw?Mod5CfxK)a1bEfNijJ4FF5M1sL4~FeL&t{XLvd zg`a?AmnMY?+YQ9sTl+iRN_JDlE}O%h$+i2zCCwKz$;`RW_PB@4uA9@H`dVKk+XV#w z4Wr(v2~O1!-W;``w;#GN(!g7y)=|QN zVdN}yC|YJD4nPyeD0TwP?l%XhX?~FQj@&bLMY6*gx=8f6QZC2d;TRpaQ9C^59j-a) z5m&2UU1?6QJ7kU8aWGX)Ci?F#nbi&g0R$-N6t|-hiJowX!Mg|}DCtN$7MrsA1>X{`=(8gT3yTeb7?kdQu-WO? zy8k8|{}m(&g9jgX&36Xe!M9T!jm-tW{PFg?U|k`oJDk-uHl*RZ1n0d@VvdVtqyQ2a4?v?`7$LaLpgEhX>L!(2OUdo8C>#oC~S*873Fy#R1xiVU~?J8l^A^{l2!7>oKR+tL=PoVb1ss! zG4@-_{l-D-$xBStz_27>RCqw%C~H@&z3yE47o-6XfZC?u>6m#1Vb3#5x;_!7mh1(D zokbh#mvd(a(buA@f4O4<5a#QdI=`gD@$B<~Ol-Z-2@Z&D!II*QeJ!h~@1nDZxY>288 zPXPuTa3z~bBjI_Q!K@$^Khw!wOH(QSRZ~Z6{K(Urug7zW>rH%zABtXRI5VuBCuFf; zs{m!PqJ0L;mRF~ZCec(^k{5{phHULGGSbJ4tx|0P$nIiaxayTvO8CInPsC7ouIFM` z&G}gMAfsC6&jC>9?%m8D_&YM4m^Fs}ZHZ1u2e@KObT3y;|1qw3&g&m7;A8cf_Crm# zwQP1f%hXJ!jpbbk5;VAxNzl&GyvWXBJ)4qWu=L<=<6!Hk`urZt**dPtw~lIZjU($# zTx<7bH=+Lv(X{~@^-fc3+C38PG?QzzTU>K6)yI8z3z!wZTg3TpVbyl9Xq9%0SZ9k3 zmUoNl0{3I}!VJU!^wGGkn`ql`yFcptcWDN<{ zm)m42xR0C7`8KjyY}Z2UfXi~&(YEs&w7;O0*ZxAvYQc`Y;@V$u=s)$a$B5pQv6>UG zZV^<+%GM}Miai$S1{P=;yaJeFwqLXE*OD42)T=;f;1yBf#R2_%gFUjPmsw2~Z=BC_C5VqiYYr z4UfwIqYWLu4QO>X@xlYRYmEw*xejtY9?S6sH%iON{xTK}IcIWgXH!4pydsR;Cof6X zwC`nQYHi%jbz0`FIs63<`G?2K507%ANjnp7jptyPRDO)|5nnz_`KT|Sr+mzpFHk=2 z%TH52Vdbf44oZAd+G*74sCupB%qFa#H9!qc0$9|N5zM@j&CbiciyIsa&iW$p0+0D3 z0Rv~^><*lHwzJ>4FL&~c)+9Y;r|QHIK{*jPf(mvkz7Cw znHW}yx%VK(CKw5h>dNE0b!F2!ViAP@i*zWvLmiSdP2p))?=-MKscXgJ|Lplx@>0#1 zNdHScd;3yum`gD2zY8xB#fkk9&*SJqqy1k+zhhR0GZ*}fRRB~>%}`KK%k$c|-w(#9OO zKeQszi!u`uus`TM_%s*T=cEtOWG1WS%La1+-7z*p4VOBd)K%HSZd+$;f3Ut=NqyI* z0Ci)EX+V?85YEJK$K}Z#p~{}QWjn*Rskz1RAd^2bE>)op%^7u+U0xwZ*;nKTy$B-X zS?f&@<^no2HYY?3)HOWGAff<(~2}?FWwGsk1E9oTszsW zVYFebAwAydSS*0x5ru zFL(_Bz33J-=ha>4zK1B!dt~w|-Xrs$d#^2p6fo3DlAIXm%%ocT4e>l&v`2Pu%j>LV z^J{=1;!{T@!mLcVG}5M~OtL0x9Xxw3#g0Bq2R(TAgg3D1}a=9X{3t^oW%_px*2YD1~gbZAcfM(J) zw@%_(=ZIm2+PnKnXn^8rPsm)B5ycWS&3GuYD;vWle_91-6h=;XvN@_ zI|H9{YnFf-aXwDWTe1)9=k?*ItPhaMqH4JOycM|DyvT-<7oiPd`!CpmL(|=$v_l&3 zP7nZUb1En29*ApYn+mjdWq09Ttn3`_7_zn6@RNf#6dt(qrB=@03kW2HUeH(%y^t;v zK+8O2fF4U$8YegadQt0ISL+Z)ZaWxdHNi9x)^R0BFuxfc-pPQ6lJQI?3(h62675N3 zOAD>49Ti=Lj`Khi%aaUBEE^H-Q)~}eXr4fj446K$8PB9!w4rPs3fF4x+BjIC^MP=M z_E@_@DDP%)ZFOf<(;*)hs;|#9;V=30^3DW~q%fZm@7A)r(Ne5S$maqJ0^PuwwsQ%k zbL>^?xt@WmT&t^gaq*}f_C-FK)KW^SoiQmdKs9^#Ua)Duth9|$vO`&N)BE& z)16^$IcujCOzJM^hyV`fEsK?_B@{^n@!vjLQROj9#`poq7K>*P1_ux|fdmi%4kqi%H|lX~(7+4q z9^<gE#Ye@_?9P?A4WMQ39-m`)qsko(7^H9%uZ=V7jxJ>j+F0}lz3q|=JI zwmJy1Qa?H1I2ZJw=N%kiJFJ^iEH@>bZw?2@C*{$mczBoG_X|X|E zS0Ym=*$u--Bboym%MSYzJQ_@)xEwFL8G;znIK{MqSf~P4{z2 z7RQN(izhb$WvYZ4dalPj9Z7+DOJdDRUo~2;3Ua(*4KmWju|~F-6!vmH z)-Vupo&B(egz`DojCQAIr2)YYLbGcqRJ@?@yS`|o=;K<#*Zpuv*u5kgsa`}@#$jx| zZl??sVq~x+Y5RKgH$Gmwj)Y`L5Uyuh&GC@dISMgW6xc1gaGlHiB>H*I24Rz;mk`yv z)KgTEU9F{L!~8a%ih_{R%&_W2UqIY|A-XLSflQ#~qYG#O)oIqr1zQAX*zS;Lew{1{ ze<+`5vt-^1DlwDS$?XghNL=fk7N#`FptxsajoAUUt`ynSB!(5F&LFo=?rY5OgS8Kg z8tgfe)9qCG1XZKNbo4y7MR}T)%YjZt(EI8Z+k7)S`3zb?>)G+V#7MMag}4UEhosr$ z8|d50S^D=T@DL3pgbK*xcngzg!;p&Jn8fjmF^T4Z$Q#Ba0tDmVazV4qRIm@*p}UT) z@Zlq?fQZ6JsNiyDor_}<<6b6FdZL0!1n6BRQ4XQvTyiFHw96z8BAj_9vFUxPpAVBb zT4oZL?1N_#i$45RqCUJ}Od^1COkxkj<(zp@CQ(0o=G?)ZB-27~^Sm_VIK?sp*r3PB zidfC=bgFXO;aP`$c}4x~c}4SKS0!glJCfD^FbV+u@JJZFSvDg<(D4R?AM1E&FjM@FDz;TsAq+m9_|Hd=5QbEK}~Q1 z78zJmAanNe5YvmK1!Asp!4)Va-Hz&n7_jj)STA8W_w3Kn&h$THj1I!wI)o~5Uh&mk6&pAv>*}CjrS(p@3 zf?ze8tQLTB;kW>h34T2Q0?S#nJpe+;GXM>HLjm!z%;Yd)-c7KPUa;wGNrq8E;au%t zvs!io?U@#hgT0{YOa(ukyjVuZ$wXE+BswRd;V~k8zL^f#lwZtC+K<=b$=%t?JF*@8 z6xS1Q>968?OcB`GnwicONVuajoqxpzv-*`>!dp78=8ccy!IX0SAlDah6~|~_pgPkR zcsJ<_QcjBVhh%0)xn?x{okxG;Rl7UWNwsqc#BBl@WEDw?dSk@X9c62F1^FncQ#~WX zIGi14fT3~;1*NwR_I_hx{UzW<=dy%LrPI+R=s@kT$97HShg0XHVJ0>l`rY2CH|1%^ zaN!K3&$AOT@()t3dD!joXERsMINv@fO7vgTK`1nd^BqL#$CTuNw zr>$cBN5~OEUKYpPVB*1mP*e6xiZV&y-bxY93+Ys{;&BAIWW<>;#cX22oTQb)xQwh2 zB_z#>?gU!iYoHD-=mDDYhLuKta2aj`z{{+D1|fDLgHTgo;7llprGrpK5K`6=2O;CV z1tHvVSemA}t{8+6fEeB}dIku|h8eEy4gqAZIPo6Qi5sn)G0&jhTknwDXoRUyFa#fK zUSK-quP3M(|M?hfG(B_2{U~&c`;zJ9yI0bz){px%$r2M$VGG< zbvG`Ca|!B`Jd!z^`;YR8jdZy z$Kc_^oh~B{AjO%$>XCkCcz41-du9Ru*lzvfiaXYUgU^t1g#dgpFo@ZDas8fIJbzH! zPz&cl$P5wl1cW+GxQy}^xvov7aQGkzIL%0q^D>muRD_W%0Nd7cV-YL5K@FZqVW9#6 zVm^hAp`@D8OO|1v+}#1t6cF%;Zu1Y_=3lz417-KwH8G2SlmEXo9x1u8p6m5kb*r z<7pQt#WY=pmaTI+$Z(m+TF{x|=M6&3%Z2P4w%gegU;EJ426YHuhu5X_>ilakpHpl) zKU*N<)%rH+bk;Lw)0Cira`GF};m@k>hHPP~`Dax#xu0+iZi2Q>$0hRhTzqq8x2 zIsKNNypzx@N=RAXhqdX!dt4U&Rs+2dAj6$m*vKo=>ww*sKiC{;8p+1pp#Me?kNY4+ zIidRj?)eu))RAC@2ZQeCOZD@mEFk7sN_tw-Ipts@<~KFZnv#ndGf0q@@_Ffdp-!Up znutM22>g=w96dilmXn@yUk?3eJS9#ezuP-sWdddUJA$Y$;v8m2LcWri{Bm;uignE$ zfJ_MtRRjQ9-7n9MN4y;H@_<&v%d>m!o`pC`wJ`=N_v=O?toh1L5K1=UDyCogDHGpv zyEGu&O;XLJcqFNuB$r|&u{tIN0aYbzvAM#`ChsMhWTR%bXwF>6ln_$Tcira~{Ff}E zuV446j2CZY-Sgt{C=K;4Pxhv)8}<$DPd$UU9u&=oASX3CCvVj3E;j_Ud`e^iNw<+) zucQYWhdfn#$D!TTaH0JnwzW;cks5lIe>5i^?oQO0X|Bg>9fZbB!LgeBJvIe+F~A)O zyVe1ZaS&hyl>S8o$c@{3C-H8GG=I++DXa@C9910W{T00bBHm9?(+*NmlS=WPhU=`@ z_vqDwcuR0l3yva6r8yPHt@yNf6N_bRTirx$#Yr$1EjMfUW(FY@%SR7903o)=Pe$kQLI2;cEo4R01^!gvtMa*H@?0f*;75oL4+oGMY$w^hx_d~X#5Y&4;K1IBQu3?L`+wyKh(gq8N3HBJaxeLn{&Yg{4{c8v>7R4*)3VL{DzNYopnHoxDIHMZSc8NR+d+h{&o+&gc^dK?1o^uL=?-2w`>I^<48a7y;?9*^>I{8dyd`0; z+rGXj?n>=1uV&R%^vlq_+YUsiOWY{t#0`>kOp86XM@Hl*LIRA)4cJp7auj)LM6O{^ zjmS~tDMSu|c?!z8C5WvEnOh$xT8)%(Ikl>ZTD)e{pX;*%S?7NU;o`YIfl zY}5tD0T#9;8L6y+{BwtjU?^`QZ^2nU)<~|#4Fz7Zz0){R(O{n9*d~fE&p}+qj!-tw zTg-7Ak|}S#<;A1k_y8?EVs4>R;%BCke{DSCOuF7xdKC+@GjDAtSBc@&lJ8k*3so*1 zr;}3ZS_xEZ+P?{~B=n$vHJCY%NTWq$u|NZ+WEQQop;ZYP5TPM6Rd$jQ!+%1GVJ2AN z5Tu+`iKJd|05^{10p2^!=%u8(kDSk^eED9=Cw=)I$|ro8bWQPbUp_?nm@gBJW*P^o zxm6m6>~vKeGL}SnC+ciNGu^U%Z;5W^iNJ_r;Z|2XN^!p{9;0{&8;{;NPWf(MK0)~& zUp`6sUSDPdqvLuXogn&&2jqPKE=oJWl!K#U$PoxAEBDKp287&zhaZ=KXHM~wG6XeV zfZ}pfz=%ZC3`nlo2}Oo^+!ry$4Gil=>9(0#Li2W1`x3+0oeEAgRIbS|W`Dv7Idglb?3%)GJ>hr!Vf9tambYn_7fID&AllueS5Bz6DSNjA; zg6=Q%{8xbWDhSF3T>nk!*x+`^Yx8XlpN-@g?$+~p$|i2GelAcx>z_YO`MfXBsgJ&V zgt7?3j$+6!s%@D%e?PMFh++ibZfOci=xy}i0Na!u7$!*#83xYbt zgcQ?hn+09gblPs=r_*)|%9>8wEhuX`ZMUGT>9pN~?rS<9k<2w9my00TaX-V|L9i*x zah-8O6afST3S+DB(^?M;s0WVZ0n2phc=KCf0>~T?dKcX5P^jw^0G7>)CMKp7-(wlX0uun7-B?1B<3qv zPMTa+b0o7zWIXsvtD}UWm>saeW2flxZtWT<6&Ya&iYD0*^kvB=86{@`0}i1sOoK;| zjZMiG{M=anmuUGXc$wl;D_vucm#!4fqmb|3ZHWfio^AcOZAmUoku~^=WRuqZE0ULq zSA0dXnt`%TU#XX0%y7)ciTzMUt$9al>_}D_unI%iQr5%mC9_!n_}Q`{jFoOvAPb=8 z0mBuL);yR!&QFFWNt3bTAO!Wrnu-_ORJ;8HHBVz35rWbVL^QM{?gf>w5SjKwYs+8+~lrAQkRe6e-Joz1!) zjj56A-7(mPjKncF36TwnlFeF)BVb4hqGy(9)=CgMKGrkn94FRf2VnQWA%zIBGYZwz zQ|XyoNozyAYioS7D{b2vztNSh*c!jVl{RmU_qx&)>27V4Ib*?gVxr=N(~`8sLW{Jj zqzmCfr8jIv^JS&ITZtOB(i^s-KC#jpw-Q%urJJ`#8xe;%+d$&bBrQRL67JZy*5jtY zL4k-)^jzntIG~O&WKz&^N}g7XL=lkN!B;D%2eeGNK&z*VgSP3!Pwd78XeoKnQu3gs zqky907q*;!o^SUADieP?gJtYu&yiN?FI~95ez!Lo}Upr3h~@E+-H$0s$jV z0`)`Gz%~&m2K|uQgm$#nSYMh!CXc2CX~0xL@G>5ZG7_8~wal*x&kMRDSlF83$RVtX zj3xi0uV&>PjzSqUi6aeCOL8C50GzFnX0AH-P^t2;Y(h1v-t^o5O}UYgnpgDZFi zN_}zWUe53S>1^)ZINMrg+oP0taJqPKip)or201L;qlWMH#yva_*H zn2_rUL+kX>KL}puq-GAUNa-GGk`$psKg_w`?>KNj<9p_rcpoOgHz`%=t(OJ&9^3uu zAOPyoEErprv2fPCQ~Fg}7n*8JKlACYU-k=Hn{=f<{q0~c+WP!eLAJos?c?cty8zC_xdZhWWdNyevQpCQMpK@SDMABtMx2q%09Id{Z!m zb#I58kg0q^x{w-}e$6i<(~yk!a8f_;zZu{Lri1^}1KU8FZCW-w4Jkc5LCWA#ux{}8 z^Rv4+=H}qERu2Dr`Way&GpZTtu9bXx+jY6l_$4Ko=wc8HhWsS*=PH!9iYo1hj( zb6vd}%V#fME9)MNbQRWxt-dC|o%s%`q7!*Vy+Em!x`^*PEh;1&&2PGe{a7+xHDX!8ieq4YT5CjuxpH=PKZ#FqQ`H zC{sWlxR6;LJK-rDm8sct@sO!yPWHoi5OPW7+#FJ@B-gnRAHk?^ zV!>7A#DbAxllvqVq|FZHEX#5dsi>4h$|Vu3(n<3@ ziXaWC1zciQN9opXzf~NK(1Db}*$J4BQLdy^BIWMP_6ydmC3dah9yerXr_kN}P2EW~6SyNRx2<)nq!Pu#Ooib9l@_I^2yAxcg6 ztdzQNYka#KHu_V%-P*rKYix*D2A_g`rT8gg^Fw>OAx5ne{Y-Q+w48eQd2XQH!zme; zHFx{daeAfvc=mt;Ro3W-+xMrdmHsYW#ji?MxR#XrtJI$%MV3BzWV=>ip-`$%Ivq|Ey$tRFMBnO~u#a z>cH5%uhpa;j`0oMwc7dEYNfYIuxGvEH%qX`NC{FfQU0ry$Csw*+GhCT7bzW{hK{Nfj~RxrCHtf0Nnzup|u9a z_5ihmyrx;>wvJijwsxU*wq93jjViqXMr+PQH2k{V34e~7{xaJ#r&!FSBcypNk~^({ zw&2@g1m6*|uuEZ=~t`gdd zEq3S<j2P|=JH8}1x-7;8>#&p;oJ&G2(sL>BH*h^86N0*nKMTxOT?#$ir3BT6W>WPZATlk~or1`IK%1bsw$|HfO^hJ(*@dU(g^ys_ zP;KZy$yzVWFhJ`l)B&Qcv-;T1NY(9^~=NB{%H)g4bc?0cBCk} zgcX`WIA&F9F<&vP4$3w&(FWj?X1sZ865k@w*OJz4OqG1mNM~vKUEAS9dh7;yM8Zd0f z4lWAwhM@4os5L60rIlDf(2U}#uAN%VTs#BD$)QBdL)q|( z=0w8|)mbXY6>9@hN+NtLsZG;l13b=dR!K*43Nrwj=`;;9LPvgUP=aqLeK75JM5OEu zo&t#og_G8!Ai)BK98;ashB8cz54s52*YPg3qkKK>J@USXgADQL0j_r3*neqpuzjU; zq_0FjPE<({0HmRADw>=}(x_@pWbti?4fUH869J(iF{_>Hi}v!iq`KPx!)u_smZya@ zajtJjpM`Fr(Bn>S;#;%&n}GViy^R_5=lVjmXhDi?DI*XF?sQTp%g;1_Qr!EqePgFy z;Ia?A@Mrrfrk-gYnNHrd`zdd+Ad6et> zQp{=#&hl;Fz^vh^!*`tTsl!l7<0gwAjq96!UjP+NV%xFZ(TsbK1k&y-U!~Mvzy)_C zokQcnoS0*LnQIRl8R-}xGdi5D0sWLtnzqFi*GpWn9{Dj!NRtt0h^u>B*wuTAFI(D% zz@M5*$v}^IqM{OI0%?0jmqwTsdpUpZzv8(&G>Fr?)G<3tSUZ2wRH8@PwOLK5F_eNs zi!xs}unPEuVN+-rE!THSMbEXedtH;I0cy(dL3A|q94IX71Yal$Lc2-SY|F3$KPGRf z`mpc>-yyfes?oNj>8OzD((Q!Wd4_N}-gy`pCYXWP>9iLMN4TiRtc+q!mFGAeDczZ6 zy!_yBr!9eBXj#qC2E--+3S3rHl5myPqN|}Ru{fM#x&T@I$-P2W1On-}JhB3i#lA3P zZA;*5A5;R*#Gl;DOjsKQ+Dd>a4dS3-w{uI8#2lI~l*emH$l^>u7!&i8d%-y~{#$fCDqIx&ek056 zLuI3yZMUJ=nw?s2ZU+N9*}qbml7HbRW3sx^~(x^#?~KaqVfctR42TR zs?P~Zu@0&4JJ@$Tqdei0U_`Z(PRldvI`fO^g)%`wgh$Bi4=K)A}wJ{ zu$gqCmVQ8z`r`Y6Fk4^tRM`HN;q2(cpTk@cMY}FKi3NwNFkk&L*K!Q$zoZY{$wMPV%(TdaMB?k7>Pc( z4-Ts04jUOi>JX?L6_w5jWTXiL39cd@9_@c1IGLA$!zKrZjrOq)ahu{fdbh>EFqwma z?>7Y-1qPcLZZ<)2%b<|$sS657M_*734M;6eDIj6F3z@q3XNH)bMb?Xdnk`MkKOg)9;i^NjkvaSW zbiMc|+tB|G_*ZxMSM!iiTA0O<#RsBX< zhJu8E?UCUv;L8`z_JMnTRw;_7bERtx3h=gd?2~D&>4hVTa?7dd%-NGGmy|+C5<2xSt27jm~Ilnu@@bAu(J zOt49763WEu!uQt1_i8|0p{#f`PbgCw5BIic)_kEXEQB&jxlpE}EU6`-Y*<2>Ue2F; zp^WEFC?mLD9b4FxBE=DiKvaPZ-g!}>3|)jg-ZUzc%a}yTW!$p(Y)TQ&P(m(OF2f59 z;fzHhy=+o7xh!&WnN}}rmr4hAuaj&I8lZq7r?fjeW1chyEQER_0@1ocW@04Gj<86G z!36}svHhhqIMTO(qM>}F|6p~nfT!s9iCBmRn z!br)Cxg_Q>k{lXd_+o?{3+QfgZ2x}PCd&YoOOo@F zSXEw*A$2NbfLA@d+YG5`(MCB{8{SKSxRIWGfoIV?cHv9ZoPd891h{{I8)* zT5};O!lJZt1D&GcPehQ@Y3hMo9E8SRtWFQ5P%$la0VlGkAkz(?$|5a;h#hnPU2 z0F?tNM>bqRnOA=)ZM>D$(KwP48?#Fj^7BY(eB$4BFG4on%Hrw1RpYJfILg7KaX*A| z_S1~urtIYX)tT%M+W#(H#qA!LoG}!d`0Jw)!CU|AU00{^G;>2`(?R?Dqx?)Xg&tM? zz1>voW*VI>)vvlNJb%~KGqmww8oxEIgKZcv#u&aVbX1|$@|q(UpeZ%*+u(!m-gR|H z5$>Yvp1fdKJ>GSOc>ARKJ)d< zc$77=0o~p6SC7ZLIX0lP#(r@RbY#`)7U${IGW+Dg|5owuP)#<+t$PEJV>~;j7BVOY z<@0s_-noEs{!)f&n;!@Eq-#_!it-D0qX1r?J^nWIzvk`v1f}e!vb*1&Ke(3?Z=5O~ zT=-QUY{^a>&EGho2V1kVTwEQG=#x#^)5Rwh1g-Jx_}gl}QvgGEu3MNhR%KravU}AB zi{d9c$U%tRie%+}cGFc4LjTqz6SE@F>k=YBk_H4}zo3hProuiOmJ!;OAv2+zHRV6C z`c3HsEL6H)+YIu=471kO^JLwEDWbmyiTA2N5{0rbana$A^PKRB4AK2F30iLTu zz6O~F?*OF-kKC_X$8GcC5yadoM-`zLlUr?Issp(Az%M|#G={XoB(PezXbACM5f1(vNJjT-lB^SiF6=)rjXw}shxmri z;Yd07a6i+V)D9#=2Y8_a0rKb1Q;+&y!4;MY26)GHJQT~kmRNl{ZZoMd38KI|q1(_Y zz5^VzdVrqGlID63J3Y$ZF@etzEXMX3X&-7*H9Zc%s>%U@6PP8<12@uz=Iih|g9yud zE0a?tX-`)U>}9Oc>ny;w`%{ptdv(}=b>KuWOFo7YRP__Uq59YI9|mJauKL+xsGon! z^+)dYf$6b3WYwM%NouT~M&az`vs0RmtDAx#+X#P^ zvASSJoLA_^Ak02>=e4q0q1ZbSVp@`uF)S?Sx0o%<0KhQN>r{jVVzyX}*~v%f^*>my z%!JMSg!WEWw^cpck@f)y0L_TLtCM7<#ehl=!40wSJh;NxR&!pb)qT)LHvr@CALKOC zgBX~@j#T1EOqPX#{-%gzItW2uI2UV1a1EGmMsD6bUi7R5ElBEC6RSNV(Z|gVNJgXM{v48kck3D5fpEhHYQZ*Rzavh5g>$t!7vcU zV++4RkCdzdk6Wk~ToikQ9j|TlSbEpZw|w_V9(PlJJ$JXiuv9Q4F3pU2+g7y zaG7wey!=Zs(Q24}n;a-~sAf%7&Nnx9BAao|j$j51==`o?7}wHd&oFGFg%8rwUh9Uj zi(#PcM0;VFD7P_Y*34xdKQbAGqXm7R5^%FS+rI(+F4ce3?(yCZ$f7^3Lqp(Mq)4Iy z0(#V%eqxw;6neC#U#Z1vPgvls>2tx2>++w@jPOuA{Cr}1x^N)X(z4)?7#t$tz|ag5=GJ2~nJ|M)PaTX$s+TBJ&z7zy$1vt8ZB4&gK@yrI zJOf2jfT?NtlvU0H^=?*WAMBz>{6MHM3rS!-!muHZ-6878AZo@#1Pu#AbU@n$0WoNZ z5E_15>$~0`sOql4lg?hHEv-*ykJ15|Cs`BZN2$?o-#6~8Z%55+G`*h7QRW{;QOS(KZ+;D1qD%vpWfuIhN$DOL#EH#t+!D8H`nQ~U4D%C5myVI z@=7CX*{?T4A=h%Z;#Pu&I0H*B#>I=bG_y-_sv}0T)r37xB9UhN6GWQpwwZ+Tz6jwQ z`3Zn(2QPMwlliVuyf4z7|9m?CS&-34MZ~y(LsBRTD2y`OwoB8bJBTtr6Mwl7l-(x+ z7(E^cgK_ryEMeExZpcRRX%E@8yVoVrEe7Oo2eZS&@pv>IjO%}u@$u?-Gyg`LPoHnT z7wjBD8glhU{oi>~@8Fb{zqUy8Px0Ey{GCObdotKDG}v-k)s}em9HVImV?F;1NeH%d zUv+Bm>0c#=uu^}%S*|Dw^Qs|SBu zZK{7x4TQ^T05Z08KX#H=m^@tXB_lxtL1YQe-M^_B?{H;P0cC5$-kyN(d+})+*2s zWPav{O@TXc##dI8l0DA0xT;YU$|u|ZHh4XE)>#-rnegOMDOS}F!PrDSg_e~*BD%z+ z4O+AytBpa`6DL@Ntcr(##$3&+2mn?w?GN6R49p-X*Z{A(3Gt`Sv*O9o^@@lV*FU&U zz!mY#(0-NUoR!(s$DI=IA%jyC){Rdz}X(P zX{j$#bL;Rl+A`*tBo^3{~_53uMtU>n9CJTtrXyayoQ2Y602%% z=~D5)coKTm^FU1BS;?i%^UbJvXH8<|8CH$NN|+rvh?8}R9>TwrwoeZ8azYx%D+)K7 z@)#!-4g*m@6fEihdoJl|V+a3$UqW|GUTb#h>?pH{UICezmgOMIaYDeOCKq({$6KO@#Xiny zInb9%_An(Ddi#4J7y@8V3ePMG3V?5jK0)M!{P_9hA$ZTLkoOTh5Pe4!v}HHP!_@LB z*v+vp9aYu}y8#$0l(@of2pw9vHBQ{kT&PH}2`Z+ZDK6BIaN%1$41aN^5f;%5#U{o1>U~ysD(n45YM<0gXkLV`)HXtu+I{ z1UCRy7r=6l+P;oRO=<%1oFh`x)kJInHQ`oVRma*Nk+R%P25$1RX^lz^e*zt-DFm4p z2p{tHyhwNsW|bQV{RP=wD>OhWMu#*Jgu4JD;H&i1lDI%nNQRr~lU%hZHgaK!XdaXo ziDp=Elicxz=7Y_K+!MM;QD?{@P&?d^G}V3_Ofl5J{Y#`<6KWak&@!ob58Zf!D=L58 z8(mT9>uy%jWv{#4Jq4rCuG>>#)D5ohDDimhP>Al0>zw#uu8)Ko%T)9z%recQ-7whx zIYcl!ZFxY72{RqZ!=WWh$eqZFbQLjg&r4SUY{f?dTT54Q%O2t>%#}>4Dv}-v@oX1{ zLThCO0ylXzTCPN1jWJguuf}>;BCp1zN<!Lv6-gObu2bqQP6{dCJF&46(W30KDi{gS(DD@0NnkhHKh=Xp1N&PrPO^_%7&2ZC5 zyPyjei!LAq3+gx*iac-!Tg9fTxSH* z)75h*uF<^TQF{LK48x2$cbn%E}R#Wf&1|`HhXFD6rMD^Ctbx94rgReX1I!Po!~CK zRWXJ7U2d@}?BGLYC6W(2vrn7alX;^hMr6jahzQj)r_YW5WjV-v=QkUuzuv?}AX21qq@c*Io|UA!u>6{_sDT<6yX z$?b>`Ye+C3LS_L}r^J9eD4c+UU_jK2I-0a~76$g+rVPoeVKQ2JM9wFI<9H+&`FcW- z9V&C2>O>ZanS+r~azsv|VLRpE3-0{81Fo8ZMD^KM?&BdHH3P~~hs!wHgdnEGtOSrO z9HR3(+mS^$)ZThJ;#=em?sS%gRpaVlYUEBKXaiA#{ASY;+aDP5t>BdCJ9Df5c9VYO zRtt?;s~P3dK$dU_i-`nTkOl3J8=&-A6NrF<58eT{&=AT!m<&I-9}GVHOZTJWGprym zL@HgwDh#4JIU2TMrn3^D8oPkmDtmi0BYjHJLWSbfVqsWkk7aC;j!XzpUNAT8M!InH z(a7}xqj8Hoxtz^GW|vu;GNt5|gO_oJjP+KrW3u~5reVOWAO`(&Z?>VpE9zx%nK$$~ zGp+X^K)vsQ;4Yj@%#lnf@C18EtcdLjVFjY?5k@;63#dwsI)aAIaAuZ|OwhP%RAfiU zgU14au|@3NS^-XNu60ufX<0Wz>x5et*hxi}l(4NTvA1d;wvr*wpk|g>LV7i{UBgJx z8%M;TlgQC-?MOXMb6d@7FrY*V2z41!e}l6AsL9{n3? z3k(}d8m<@gQI>(K@J|z9Dm-8=^^;Z~9Y!J)NHswX2Pe&$u!|6QcHo2qDl?tJYaaK5 z`pOUnU?weD7!6MpnJ3o;j9FJQ+ALx5U4Y$~**HZ_0TtV7Z|qSCkQV9Al`J3WH;vREMiZpjxZ#_c3{3 z>UT+|?x-hz-!;TJ+L8s(sBIu5aY%QTex&{BCMz2@>;@(b#8;eRBRlR60ihK;kt08~ zpkk*Mu%K;8VgI~8tzHL@Dw;v7v}lKDn8cu@Dx3oX7U;|Z-X&Q5{*)6wAjkyS@{OIM zplEvX^vvM7C<>HcCV>3~9T&hP zzEKNuD*D9^JcE7<*x?*F5I1)X$p@s*)2uC-4pK7?2EYkIwUu&BaiHcC4buqDWD|Oe zO>3MvMQ%2k}tWOCDq5*hFYVl3{wl)kh_(w zca=@J%2@vkE29Nf_N2@bR@V;()s5TnL*Q~NRM+EL&CZh{L5KVidJ(STmrPv|+ZB&% zHMd%{UQxx{YJs9jp;FNVW3q9A_8>UjgoXo)34)4CjH=sd&enjcS25DQm-)LQ)`^QI$lObx^lf?-T8hLT&N;)UP zMe%x0*Dw^^gKIKmqzz-~R2&#xn@WBwYmfhzO)bxxXbQeM0ygb;3yft+6 zNdRBvQpg#Cl#mky5psf~CFI;}$SDm>2^~30;`Oi(kP`$e62)cfwPb+0q*O3hvL}?t zaza>%*cPn~o+&4U8-R(FTYPwSdyKTcfMpw>NIZ#7ixlVzec?k!k_t>v=%$_i`r(2b48z zcWg2IqV<8IMY2iI%u31V-Z$SnT3(Zj$F8D}^s%eb5R$+YoM`MObAfi#=MlRKp9I1{ z1KB8C>}oA{k!HbkLK+j}wN&gX(8s_g_W6H!?5Z_wo}~CPFFSS>cTU+KQ8q)jHWaa| z#!i}Lm0vuEC`YzR7o5pJR8;0OPYY?g^WfGohaiDm_xeMF8%@Ivln4J)BUAsh z8JairX(#I#tDeFIJ6pt~u(aSIcjU%FdW*_Zkduq!?DrA5kok>dMcEfnAZe-M%8$&# z(M6IABYE4g#)YN}|E&JuN=WFdWF`AX7E!h}Gy!$aa1)he&0-wGol9bR<+31nb%@8F z_V$PnLxQ81e%s6@dK9>oz^Pl~$9lfw|^J{K6NQG~(6+&J=2Js48vpny`8 z?{~Miiz3R5!#TD;9+K>&GbG6=uAwQjPBi`KU0?aoeIGjdTZv*i_^G!JZdHfAHc>45 zdfvKb;7qx7nEP_;-1co9;_F*yFwdfOk@)P}dFvYcpOjl)=GdW@zIC((&!Tm-98vcD zymgKJJLT4wId&p$eCr_o@>>^6rCy-Ks+a9 z0ED#D=dk^GaYPak?Gz={%^(77H(H5o1N!uta9;PO1%uK~~S@Gwr`O zFDV4n4bjwAcw{RjTM^=|WC_x&WX!OYj2X6)B}gOV^i2ERHBK$14VU0iZi;uvI0Ghb zh_FRWxzZa|uRX(NAtgG$V#o08@C{;hf7zF=!1-yrtknHl= z_P20#pj~c6KnOw-Wetq7B1B=<^(G9LhlYv=d2!(Z3n80ju#=yC8XAOES+$5=qywpC zUa#Q%vvf`xP{H+=8RDo|M2qO6{k5$+bp2&;d3ViFM5lar$)}ZRk>q*J<=;VfG3+~& zhU+c{4V{L;6vWwSZ-Q8|$DonUBKQe;UwZ5K33*@c=JFHr{z8!VfB!;}_orSM^8Qry ze>i#ng2?+*Rmj~x5Ar_0zyGU{_jk3Tp`PSq5!ETeF7pfj znQjMu+7@oq=h~jgGpWC?{d5`Ywxpf8bL>jXz6w2=?s%o=yk}i1A{})^o!H$ zD0&pVj%kj%ImuxD=jnBLqUd2oy-PP`aHUKw^~+PQsRBi^xSC;GHAHQEu1i; ztx95fVq^2THJ)4fBY&idRJSW7*}BG4SJ+A{1%)x-Oq^iA3>wJ8BsOs%fNRK96ys!M z@DLG5;sgf_7%(@UiXaYnAdma`uJzmJ?9+W(-SQ(igWP59-`S7fWBt}|{nl?i5wQaZ zMIoyd&k{JIVMQ_UrW2^hW`PtF1f~d+hB6+Ohs-VD2`k?2n5*anUIX`9QY~;8mrB>f zY^(g<&Eb8Bb9t-BOc`GtB9L{27n~`}6;u_2^rtJozE5DN-mnN{}%r3Y3YYtS>ey0<}31r$aXCHn~!WN^6aePQT16y^+E-5ciW-q;9H@fby)B&`uK z4w^0zWKFD;uI__d!MmL^52zb{Gy~S5?h6=Jq4*~AujQdqlK~NUWplE!&Zlo$Sq?mVo5+Q~K9vcn1 zqk|8UTG4zobrLpnqSd+T4$FfSuu{pNC zndn?0#}u8mI>5iw06BZxPN~h)Vp7Qgal-+kr5p@!TvV$UV1S4*6fyhVN?F0^QKN`>CF$(*9MxxIjQQ4?HcTnjowjrYFTbJzvdTvXC;{4r17vOo zcu9k!0~B?5o&$ukP|J9{lmo$f3ojWN;NOkKOG*AV9H5!y2GU7`qXQH@eEtJ8YBG+p zz~ikuKnyV}l;x{q2PiIh!-Xd)e!1{yaCCqs2Yr5f0}D^J3>O{@(|V(l+*o0t^Qiq& z*)-3*Xq)Dlm&T^)1AH+yO$PW<*ff2BFUF?H055Es&IR=piKI%Ap7*Bt*o(GlKK9bs zG#xKrj7<}~d?{?2KEM}a(`0}bHqCP3RW{Av=)^AzsdPFEk&a&Jinso1C!~t=>lQ05#gLDZpp&tAda0fbnP82)vWh}N|W7$#DIF%lZ zCv*K79wRNA;c3O#*gnf$+EVMyiTma4omhg`l!4t$80Socf{4Z}@sWVNrdy}W*dHM? zRim?oISwmgrhc~6l3WR(G@L@^c!8OxZ0I|Bj#0KOrc}~B_p7v2B5Q8Djkj!iF>$x5 z$mwyQ%fW*zSu~!{s(Q8S&R}Z6eLYl_`*f%UotVXC;Z}hJNg|^O#3k~Ub>F0OK?sJM zSkAZxahbCa{I>4{X@gZIg_dS+G{+ptchXGoL+ z0<`IwApm|lW|}?k2%rEh0|da!6``v47u#zg06`uD0?3@t5dc-Zl?(ya+;#+z`?)gc zXcB7!1lUI7`MlpN5kM_C0;noS0JSh40q{-26djpOb~B;N_~K@!nOi$?{^Bx+D7xdb z-SOGxqS@w|W}6GMt&4!u#Bq$G(hrp$Z;o8Hz5yzRq*~;)URR5p8_nL!SsFljhvvWQ z^N&G!fbxzK$}cxF`KW)1L%DuVD9bg#p-kd|0hH04523u~wnKReDC5RvP@WQ$+4C?s zM`D>@A}CJ{mf4h`ocX;H%7``Bh4RQ+DP9J!lx#deN%ZN`Xd&N%ZTOKxH|obfFPevM z#1(9GVm7hxc2IQW9KkRjLIig92am!HY}WmiOd5r zMQqu|zKGdLTWQ#MIOi42U5R-ZKg}PT1SA@O-B9o&>Lz=cME!#F8Ifbp{gLcM0`yYlHD}NkF{0!YWDjV$1e1Eqs!P~!EZaOs=ZF%b3huJ) zFI!g~PO3Nijc$QfL})N!D@>%(?1ZfmhD2K$5@L+kbh~U7Hdvy+4v<1)H+0~gPfV5`o%9@_GPh1jC4-A2l-=C2HVx=&k>?b zMr8Ah5BjYKI4Ry%LlOd5N{SCbA;gCfR!YfNg*~Q^1Yp7GJR+%LxT(ugZLsScaV))vZ>4GlagoSbC4t?me zRK!flMoturySkL`iQd4QM!N(y{yDB9*vLP}k6lL};jTwkIQ(H)EWAB zO8H07PR4u}kNHkZx@Xct6W1l}Z{-c-)P)V?o3eo%Pgo7#dK-v$`@#mI{SOL)18&&5 zFKi&%Ktw(Mu{V%Y-})QKH`=Sxd%~}QZJcd6YFRV~egz9U8Rc-ewgfVYPvRDI>A*XZ zk}T-Z8lO)B8A2Rr9`TO6kU&P_8YxFPr$2`TGN~nyvFyEK!VqOh6O2huii>2NO2RiT zfedDEtuY32A%VqN(9ooAa4U?lG^raV zkP-VkCV@<8NEgeHZf)8aj!v-O-Yj}%HCw4@b$Xc6U@j~OGnn(7of{dRHz=JYhhceb zY$eB`xN0Sr9>$_e&apVV{G%p>`K@l!a1qp5iP13vm?$2Ej+=(HhJ*qukS22D2NbBL ze!s=&I+Yw-N>3;p5*Y)2`PWbBn-lSJ_F!iy;P8?Hjyyu3LaKj-~_xVs|kUK!UV*fVAY+;>_7cI5tJdlTK5T#dNngf8m63B*o zG7yREJ>^F_g*;ZlrYJrbxBDH!AKI71Xpb$+Gpklo!wHW;M(8|wi}6WLt#|&CHKvdS z6UE)-k5?8giFwVNyr(Mobi~%adb(N)qd%0vW%Lz{`E$)9>GU zt;FsGI+JZIPw2sQ!yY6Dib$iv@9c(tT}|NwCs()m8we0YtkS_35{nZsU-pB1)2p#! z3={~WzJhv0;r)u+6c$NgL^ug>=YVIqpO6b)b{7uIi^JWWw)aShN4&_rLv3(%qKkkN9um)G#TC&RYp+v-MfOu<7gPwp0YCM*EN z9V#MZHRJ*fdC4N5e3c+3j$@zVLpAgiZ65TZ`u9dJs(-Kd;+a^}e7*lr4}opj!vlnc z_Xvv)fv-=t-IW%mQf701|Di`p_tmuc8-5IC6BkaKP5NlF$!~J0*oq-K2Z2fd7!TGG z;sOL+RsV<)X=Qcr-cS|YD_RoZ;?D_lYD}X|I-mmG*cPRh}+-AXQ4a z@ZX*izAS?MVAFV|-AFo17I6{uK>e^+gcUhBE58+-Icv%Q#wYMNa0Ylp6vSnbb7XA? zgi-1?$*Fi6BC58GFaqnyVq4;OtG$&ELp20SI4rp*)lehO4PH&+)x>2rX$U}h)_p65 zz7NLq!ApZ{uASYjHOSQrrpg%RWCVDW2&# zJcN$xJHoB7Ndq@bVvM!5H zNH8}*<{ETc^yrTk_D$E;)w4Ev=?M}#v;@k9@_!!Pm2&d3Lssh zZ3zhlyi8h#kBW)~qJc$7Q-zYL0-2LEOh3RO3${kTB2cP$>`Ntl9yZyvQx@= z)ncvbt|VBBwI;Y)7j#UD6k3bfASAjjkwU^v^c2-2ViQCpPrNwIf0TWMHNb=`7K7B` zvg@X>_sSXqfA;1aWrwsF3d$Y*TLy`O)fUsF7E?=0lvOmTRW!K+ZuF`yDnhLz>BMb0 z5_-ng5j+PvN{#X~VZG@BGGs*WjBgWgWQ}hGM~KV%a6~gX3dhzt;V2OD!F&~z9S3Do zpk&MzhNTKo>C>JUM7vdpb_LO{LzL8}BM^n7SP!CbIa-`R*pk5RPrqMkKMi9t`>m8b z)2Lq(ska&3^BHw&$iFZZrQ$lZu{2l+b`O-eSZ7J&_TY1*a#klpOe`^Q39P^ymsknj3&p3EqV05{N9zq-3k zB~lSE4T)+eET(GS@VkrrJJeGC-9^LBZnY-88(YiUMRYYW7}XblFjsxBrSgCvhUx$i z8w$3b>YF$*E1yLqbt+60D>S#g8{>T=@78a@&1S(4D{Sp~4 zBql~s|23D&GRsr3JqlJ>-ZsOD1qWeww7dS+3({R#_f@+)yJ2@F^eemTwh}f9$RiN+ z?uH1(+}J7T`dcqZce7R9o!PLv?7M^R%3dM>-6!0;3&B%YH(Usq%V`0j-uH#z3h#hj zlUB7?=(=qlNQ0mj{WiAvY6pDhunem!)$s5shvV>+)nIDn@R=0E_L)vh!}p~c4!7}r z95jLrR(abQ8gE+);qbPpvP0ddddu5!r4s07c{>{31_||p!+-`5S*lCjfVzZLVF!#d zTSGWm7SJ+uyA%-BK!t$t5J!6Cl6IDnj$_nk2u^B3VS^_D{ zH>nK8V?8%T95(k?8cq$3saW7sQ|9H_oNS5UvjO<>g_xkVmk2%)%fL_4kz^k?MzLAK zKn#Qqa@g;BFii}c4l9;4+PRy1F%S#EPc3&utfMr3@eoGfp=1T9Mr4m>A9L*B_I%*h zO{k`m+QM@2_`5z46`#ESly{{cXCIoBh$!_C0`Wi!hg_v@1`BYzfiqEmjTe!hsP&dp zsxiNI%GupdSBm%=DpNz$2*u+#_Nz1cX16j6aV47Qa&g}&i`yirky4AQ>yyewvZjOk zR_LC`X>K}?BtVu7bVKYO$2dcghS)s1?tb#SqsXsK2C?K(U zmYHF)|0D;Yx}rs?OM8GfRxYx@RR6LsO^NSN5B9oAAvm~)FjC?z&cE70oeEO5w$5$j zmKNFqTwW*;TS}h65gan6Us}_jyE8~T5%m@-4sg?O*cxq2K-gKJ;fcd@~^RIbthNJiN;A`30=@Km5?|ec%)C z|NO82xhcD*+J$)_0A04i0wPrTf?tB}oj(%*rmo$=k1(s<;jm!R#t-W(q922=zI~b> z;ahAa%XXzg8{6(XtL?sh*e;RDHk)H)%)|x|>=+=p`LgZnH^UZl} z5S@l?8p={5I!)}+Y5XuFa$YE13QDEMo7muf=w@C}gc;MVL*IwG^|*{qlh7Hhz!04# z@~wr-A*Lxrr%6Tb3DaSRY}Cml?AcGejmC-nWo+B{c5Z#+>tFkazx&c3fAkyCG1H~! zAby^om>nUOvx-h53qYN7pF`8)SWtam3uxn^BKgZ>YGE0^>xd#cl)dLNq`k!@(S5=Z3r ze)l@&r)g$~9Hrg7P!7;)IG;cTIOdD6@pV0bs}v!6Z#O-(0IrJtQ*FaulNl?nL@Ufw zgWxn1Avld7VKFY4@2UM4lgxnBY{0^X#aqh)%HURME`V9Pgni16;crWTH>yfUbs69b z+n^#Sf*q>gqbFTr(s0mMR9SC#ZB12OdQ879+s$wRaQMLndL;M^bHTV^&#<1|(FV`K zHPIYI-S`S1{Z+)7WEgxV(Kcb;Sk>S&a5aj{sx_$eJH(=I(-JF1!DqAnpy4Kv)F& zrVeT6BKKc|+!JVCY@-L7=fK*gCP!Y;x?~><3kK~F<5oB{3rEJ~5M2laU%njx2A3Ks z*X0Z|vzFk`tReW8AL{%*iIL8-R4+y@d3bYj+@$mBfDb`m%ek}l$mIYKzu%Vg+JjDIrt;Yxqtwiw1 zd1XCSU$gRNo#w{|P=cAuGXP4!2wBs7GwusR`C2~f>y0(Udli~LKB~OYe5|KPn*q&d za={esD@TmA7!-!y)&;F5Eq!3$SkV7dq%X9F>Xb)b8Oxv3{CJ znxH({aqypoX{{K67r=(C=$4c=?XZ!IJPr3^Ym+uiOJ;Z>?;#~}#2Ym4+6JJg97XLA zha&7Zn2r!!UN$(|0`!#@3%aPdr2Z8Bkih<1rT)ApqAcpK{Vh;`^1-d3>hT4WcQy5* zaH|505&VneY}asM#%cVNW_C)WW?8Kwiv5|@G`@P{cn`@yEuZljpIR=lZ`uHzqX@$f z5gk(%<+Aa}V=Ts6bd#@bYy1}m-x(45ncG?GINuHsk1r~S*IYFwd(D{*R#!GaFVP+* zzEz19uUo#N^67w0leWo*$;B9kW2NV>QZ6j^H`{tU+IoHBm7)&HKb&z`oK?iWly9Yy zHHb{=RGv!KknYHJDwhzWdMbxQ2*e(oLA6ri@y0rclJwv8SD?N~|KD98{pYz`e2bI* zn)32>E>QjplwUbRzZsN2VB7`5|B@p77kK{jJtlmM6aLf2^S|l><-b7rzgd*OM7ay3 z{{rckv}-8czaZ`*jy4DMfqef(756-4r2qO0r2hix|7MZ?66G$C{+AT#|A%%mg{Q$l zw!bgg7o`4@*vmo~`QgSw{MJoix6u__0u9yed18jTCXFI zX{=aA#QZ58+Kiarlx629vwsd^{#0UqIWJYk{MNK3vYlb*o6#_wub3ajHDJJ#YmAs* z{#{ieKe9kg#u_odW`gKq@(0;S$}c^+lwL^9J+$@tO8F~VweeDZ)2gkJ@*5z>Ncp87 zTqWf%$K12ru~jMmFeR)>`AxpWw3PCju6RU_Z|dWXr2MW~7)tp;i?vdI z4b-Llpm(g0j>v?^2>X4}n6qBUGs3(|*sm}}Bf@@~`4$lN1L#uNUqQTc5&yMF_nc+@ z74#b~>o@dUCF?gN8Xa?+>c7}AJ>{k0Yu}0HP6&PHEW)!iZzdBo>@PqHP6&) zO>gza@g80wZp{-=p|s`!Cr8n*JI*dAWRPkYr?DwZo@vigKa7S^FVlgarzKBU3f_Mr zhCE-pz}}ya;m@}?dw<5nI{Pm0_oHH+3;g{HZ_Klbzb`TG0)zj8N_UZqSBqnjau1PyM;xKw~vbtpZT~uP;A43@qT_77p4%9 z?g4xXhYhvUdkGde?=L3z5JUZh-b{BT zcO^^d(NMmF@-2S*7{!BL{3@Yy-sr_=D88Oy2@K15Qv;ePK8y$r(@<>XxvT%*)DwGE zBRs`Qc0X2u!Gt(2EFuJ<1eA`W;&3llEm@kC4)^k;3=a1?Vg!f#33*ad87*53GmMiP zCR>@L7p0e+IZ|rOle|X)39B~*ZMpF(48aq(UkhH#M4Gl*2{a(r9e}tief^S|(ouTj zQqu8z2bYL%Z%=QL%c7Nz#!EN?Q(Od=^6N`ASbkkcxDI?<35_Ak*3zcVd`9Wn8c(+t zW2)NJv0CU8xg{;!h2)b4T#dVL#+*tKFydN+$zd(P9b9SRvnudA=yA4jcsuNw6Z>77 zb+={dC&&x_7*ikWw|5}txeCu*LL^^F%@YoPvQ}&c{^q4f6q5k|Nvk(_D*}JTo}*Sh zwpk@&h-xj&xxgJhE!GVn`K3>p+a#ipRqK)8l@(vpinq@RAclc$>25jv4wHAI6yiDoe-#jSXHFf}T( zUghbmM;|fl5Y8kYE^%g8avw#Wx zfOsF|NWI}#HkPQkl~yD&BpS^^gzf$af^9;?%E9u)pcGvyp$eD_7$hhsje;x0&0d9>ct14#sqo0SpYX# z^v$n`Slp!BxjZ>o#G?I*i+7)HA!t6ZlpOZbbxTC=vU}GrCC9>JD9Rn72uWei>;-7b zJ)sCudAH~!GfA)*p__IkwzygeIrd6HZc-FiMz{hQWS;fJj{#u7Fvj&DRSDS`?5R)` z2u_ExAaf>^1+d3LS#W$Jlm*_WjF=t7#e(^Wi!UT>ZE>%W?9;vFX zNI3|QAfu3Nd%dWLZF{_^fNhIjRJ^v_iwf5^??pvx%anG8`3G@G`NOz@2&VkFSvMKJ zJgs@u>=8Bq%WU~!+#j!am&(pe6yLMr*?#EBJ{-@u>}8+kvIn6Mmqp?_amh*R!(|@p zZ7vzfZcwxc12V$^Sd~|R2ouG3!_DNgI1ED*W|o*F0>R4Hm<&Kmq(i{4e<{hibQKtf zyWE1;0MLo2YGPb%OYom9j57jt4;LLhAPn+o8hMaLw|Pk;dW*2x~) zu(Zc^iv#5f@4iX8r(D>_#7<;C#S*g`6wQu(Se}L~Wx04y2tl>ulo3Sg+F?w~z!x`Y z<7cO-Yp1F2U`JpF(2hX$z9X;<3)_u4}O9UlZ- zFl^EO=wZ^tGBH3Off&w)k08|uY!PW(8o|UlMqojKR*xX?DvSWf&XEz&%7!D5!;VI6 zBY^$k0~{NHgd$S5wa64U;pw2N%oEVD?+-SrqcD0!;Iu@6Dw0`9BHqjA1qmqAxMcp1oFeD)btpF@_!;Y0l`0E z`z$6!y?DnX@17-CsD3sf;#_LI7Qn7c*@d$XlTg#HR4?}4U`LQwqv5L)nF74cSBi<7 z#f}kN42iY-p+bwT6W3`0TPF^9iB1@$woVYOpg78wk`#NFvom-LD|*%g(6~KbyqDsl z7f({my?8f83&OICD3%(NeRhH(Jy#8Ips8kKuS?KLxFKvNhK6Hvi=_x-C#fjzot5Yj z_+^?$M@s{XjV()sj`+!yY+2J#82?uht4ODfCq z4HRRd%QB!7aeqofvaz*s>-3ni#1gSh_*#O@-NvFBs`8l*(T3p7Bo`TZGnpb2%>%=c zC(&}4NwK9C|5!9ip{?@?^HwD?>4W!7T?@~F2TNr0j;jm{6uOgmI9tmpPuvgv%9&um zqQE6|R)Ho6Z;NLttwBhD)FNe=!{C8q&ab+?o7-?X+Tqf^IVUEH9D-`1h_Xj)FUZxR z!VKC$jsC4%LzIEE_-p#72ULL?UEEN^?p?b>F=kifrp<$$;I3kESV=nJ*K!6iXwwK> z1^XtxHt(6y8%OCZ!FhOpB&_6y%ebl$4n#KhNE|{&QeTb2B*1GJ`ByL;ME>0^`aJ9) z$cwMt>Rz%fslzAY?YbOuKGTb=Lil%q6yP%>a*$35tcgVj)t*Qca}TvU=S4&h#hqct zi)~>#oj3up6Ul&39JL}bAIC&K*)9vPVC%$yM;>N zJ){iQ8llm$pCRZQx0Hi$j=-KqO61lKVZkG|Aj(R_YE?f(Gv@T}9dug%2)lSQY*ASDy$KnE810taVy}w3APCHfIxlvB#sM{S zO5d%1iJr8t(H_c+3TPx~2}Q-8I56NQ<14QKDpUYs!$urXX;%X3Ti^CND{~zOLK-;W zz)=M4cL_Sy0Y$v#8R57g_pC`J0fg_?5!MNz+=Hjv%{Q0TWF*TDw}fH*lWRHmdgMXn1cDBli{G5thduvk*hOzwbU87 ze+yk$BzlHVxXEJ1wlQo$Ff2P|(P^oZn44vtbI>_z&3Z~j2dv9x3EN!0G7ms`g_vvk zgc=rEjSs;DvSy`P=f&T&N;+OwlbTpga5WaD!yXY53Gzcx>r=1;iNW#L3Pxf82o+>3 zsL)+e9IAhsGR>mpbJWfPhvEysP{@`NvMZ52>dbv%?Z(---?$16y~PRXHHToepi~}n zWYW@03hxnUxg$1cv|HzsvJC>Tgf_%3H&n6OQ8%oW-QEg0d`DYRAc#sUT3H?xK>Y4* z_&NhK%k5f?LRW*^Uf(HAzG|8nu2zKWRx)(2k*WE@fC zx_wAk2gz~h80}FG#`-mko*GNKP`fmWIOjkTg!Vi*A)y1;xxW4EtR*PQODuxIC}2v| zNiij2+4%M5C!<%yHj&n+Ii+K>A!^3YHAMDSZ)!dak;*ixT%Caj^1%*J>^G_EEZAw-JPU<>rA;*v|M4)L?{6Ds>ytW z-BC21eFzS%wI4dRSCV{fV~B6Hhw*Fwmw)^Be&>C6eC}7CiH>VC)2;vcM{ob~yB>Y~ zH=fk3dA+>+=$_jN@Pk*X#&vVr_r+w(xr%8p`eFk$!!D z{g!zsB!C>or}_*J{%H)g&gq*UrZ_th{lYroC4=y*Y9G`1?qW3zE%~rI^cHZ>#1{ z;WzlTzzGkuAe#Bsd@lPP7*B5I{n>oWpDt<^9}QJzF>2Uo7tjW{~^F9cqQnD0nC-l!u2{dN$-Z;~n{og(ZL}Ur85c zN@jBkW>W%qz*?O7AOXxQx<(cDy=lpbHazf9L#KE`q4>Q95H5b}?N~A8+q68l$$Ms2 zD3q9;El811E3{8P@c>iZybD09lVkJWpI(N-Yk$-G`9<0=D9PS<*26y7Eoh(ZGHm86 zeNSxUmP1j0QOvL;|< ziX$CLeB0HYFX}^CX2Z?ml${$}@Nz;a9_skd7gC!^E&;a)BIV@orGM})**j-diHqiNOvp8Szs0vab@4GaLh1lq|{t8X$<*uVOb=x5oE=@aF7rTe_vflL$93(Up&bc6hgs`MKhCen|f4ex4veVDCZ`2lMSiLi; z$C&OJ1Mgrw@vGpHt@v_Qlv&w2-ex*L*wEurP+!w31*3|4SA$ej!%WWkgp$XZ2{puv zieFs)E>+tQw{SsKi&!bIDdRgmL1?IDVPaK;r9pkUh0NyMtTDIArO|9xXK`RpSmYtl ztXpemS`)`i)6^jBuT8TZw>ZHrvbZ&&$T@`x*+=VQLW}p>q-I}hq8irFcrU!Hc5FfE z)!3ooZ`)l*0gIiewIK#N-f_fnyc0Vz9`RTNribA?VE8E(R|r8r zIATB}2K^ybh9hMio}t($LxHp)!&5I#gD8N>*Adj=E#MoxqX2L9f!U6VfI(WrVdR3I zZMp^;d&`!%L)JbD;2M4ufV_I9NcGHu%ttG<$zn~1$%^UdV6p`ExOnA?N$rNCo%PPA z!_Ko(kP8b)>2^);n7Kd=8mIxK0X6Ws&;i70000_G0~iq}8|`Ece(7d-SGXW_x4y+B zUg(Jc>_cKBR!r-+o3L)daZW=%&z-)(?7#RTg7hx~cZapukZ1qwAq?kPkWUJEiH21C zyzcyXTs+0q?^rMPpq+2u(MHQ|k-d@iH#n^bo3*ymeWSb4=&u~PHz>f%A*U3q@)_Y#J@yHo1Ne!E#eqD_tisW-o%p*$aqmC@e z54FOKLLrfk8?Qpy2vL%X@U7LP+R6bjL68DBI41jGpU>&1JY*wNzE+>KC0EBKT`DvsDmRT zab6|TV@+W`I8H>dG#>8H~wbu}!R9Y+9I*Aowi+Dll{1aIt}LtjE$s z&VswC7fj6!98XvmU9v-S)Jp#}$7 z;y}tW2q-xqCAy+}XxOp>yCMFsfjTr*30PPzV`00^k7Q(sOijk73#61fOp*o<1L5Dq z3GwUgWahTIY@Y6{4K&*#HbUo;(i$ZaW2H^!PNZg7ii&T&H??A>_gQ;F8RXy<5?nJJ z5XkQp@4)-;IJFyj4=d7#gGwk5nGDY6aQ-K>=uXqbfBDkKG|4Aw9)MpA#2<)};<$4! z^fCKow1Yq{J(KjekTj9%_3L!fpF^7!ew|ACTd6YqdNAo`tIJO z&++SQ_;q)(B%?HYa+31hD$g$^Cyft-`e+5X>WN~hkfKN(Pv~8WoZ+4dMGkRiLlNDP zDY|%JZ_wIN+(##AOz?5C!v0*G!Rqygg+%wJeGyp}fpzGqlmRFAgke09GT`K{@awUZ z0Vj8aUuRMVoE!_kPNxhw`Dz&A1L<&x4^p-v0*F(T!!U~{h!|ZXvST?>C|+wAAkn3- zrfvxRY>Ir5ug<0juaqgQd^KlI9#d0bG`hvE?K&-RWRfE)YHD;MEQ~%3o9#;=#K`We zhwQ#!A*Ha#LXFd8OoCFw&1ftFW?DSzH)q41YBsRb2w$o;uu4rw8d5bk4Q;aB zw4KjdbE%e2O6*!0T(C2GK2{s^q8aC)6E%UAS;M;J5P@!k?NhLZwc(gGtc*6SenhfX zKWZvW+4HXJT&EZi`@B_HCZ0hg1`31fXdpAJN)GS@A^o==(oNM>9TpL5$6bX+HU0H7r>dGoSr7LR_HMIA`x*56%C&~o78GSwbargp==`KtHmN?Z}@yHVL z94j5x!QVQ?r&%3s`8+NrmJs}$5AB=l?QgrZdY^# zI>o&J>H@1K`QJff@a2}f!6Bw8eIWqvrIGSq*|ClD#^5OEf@?T-F)Wx4u?6bQo*FYjMLLlpOO!7>cA zocC6cxGRApteXo}x!O@p@!WOf!F(Ch3~`-oth$)j0y2r$veQmpwIX?%tiw3~)foxQ zh~z-MF1#&u>ZI3|Z94YzGQsDGNu$ur2rw;9QWW#{Rr=?(D`rzMl_aScSD-_?2zMNa z^{d1SS|8l*(uRVr(mV-jW@94|Teq9p#}Q%qkW7bx9ffQ)ZCXaYv1u_*%D$vuVOZRy<$9k(J&v1v;g`#mVj#-rnY4HrkZ2N(xPw zO?^xyiJI^ud@!lEBfOc^>!~#{ZB3vCmP+arb7@9uG^I*AJCv&q_Dp&dj`raoO^Ih5 zk2@TJ6DHP?BS|?oM{ZjZ4eAqaxE{vFuWXQIPbjGqBy zOL!qddIjQe(UF=<)?>VCz5)Eo)-CC@&QJ}(37lgpCMD{al&GUcnW@lIgOj(e zsgOxOb}XPt5c{#%%vHgb9tlj@*JH^-#vzw5kj@x-;ZYWPJLo3Vl^&w?qD#tkOB-gC zN0s8rElE|K+MT`imw1LoMcjluAjcrIwJDh?5E`~QfRN2J_G7sYM-2w&O#>(JaEB^2 z{#?p^bT>6FCVfMmqP5PH3t4zk!r+m&O>$x%Mfyl@vl46#ni!T+O_a(OMumb^@OFp| zl1Ul`3)n!t!Ulp@(Qd624{gYgKi!TSr76#V>WVh_pY_g{ne{F;Qsw5KsY#e58VY!& z0`{LkLrzSP0yC4;R3-a-pF9@JaNGl@ph zJMrRh&*8@r%dpzy`*k&K0MP?ssp49+Pivfq`#7&>|EuX|b7}Qe**X@CKA=8fus}6H z$}!KT3GIkmFhZ9kVWLA43B6sYTAC7SS!p#XdF#0>7)zj)EvUM(Q;4L#!gH zPF9Cpf@$5b+0w|7XTnY{b67A!ih>2BAAp&IV*pTdag?>Gc5GGvAZW{|XpReBRPvZ* zn3h^;-+?YFb-NFB3KNFZI+1Y(1oC^uzFZo`#lJa(M@PN51V32zttP6pym2EpUQgsU z)8Zt&0*$C2zL6KTdOC;o{GdH=7PE)Z^`DInskU_R>W%GwQXGwW2lA%r=ojZUH~K9Jl$MO|xO-H?UZ2AA zGWtbmz>+Z8L0EKQ>Q$jHJrR9isAbppRR>iYt~!U#=*mMKEV)g8WZ|*huUdE#1eXiX zMPfjrh>AdY_=6-g7$7tGrjWJnZw{xS&J~aGlJ zV&4RWBk@vk_CYf$#~2Q*FdJG)y-p`cP@DU2!$+2FaeqT5Z*^^-w2=MDWVu`DDzOu4 zI9;+n>N!+UVk{}m!$F*tC>A7qqgMH1@&+&hDnaAor)e?h%uH2nj@mHAGAV`^#_kr2 z>$;2*aXd#@{n^2{poyt>xM~m$DN^f2>x#%eScJ5)xDfA!5C004APPRbS-D&f&(4!yH@jfeH#GA!PR5dC zes(Y`np}8HvWl5+IlrJ1g-t1<^r*je|E-u?=3DpQ_Wj*j=@e0z{!pUuf#w(KcN#~? z`-&4ELRIyps5r&d)a`VFO))WyVBP`f4zV`6+h&Rx^x=M{k@b)tE+#i%WyeW%cMXIfCrMUB-)Vlsr&Re%!E>HP-arUjB;7n%@|7>dLiqME# z{D%5|PGm+7SX^Os%X0y>gU-j0g?=;p1;Yar_;S;hD<5_6u3jVl3$9hGUNA8>&i389 zbh3}041g)l2+hBU!OyRhXx;@eo;>#7-MqD`D`n*}c-Rk}3MlP0nYk1#F~_~P`Osvi z%P@3ekbIv8St9}9Y>%aeTKjS!VP`h$yY=N}Jbjzl9QAD7tJv(L221xPt^}JnY&tMl zM%V6`yA?X1dB9XrmzeSb^eVH9E4qx7ONL;9`XD?p1mo)txXdN<4D7wwn$u{nfr_JIhjC7?)Wp>mAA4M@VCmsWW+3UM;RQR#im z6sJXJtyN4If}YwMVfRtRz=n#Vpuj`6k$p}MRbHdK^cbF;fs4Cv!~`_B(<91|v`Jpw z3Nr+UK@EJ#KMsq~Ey05Al=?_g96f{vYMT6>r|5WQJ_J@nl_PQ--S1R)TrPMH->m)vsvOzIh(>89Tci~ zBl9!OCSMD0xQxM@x;KNN%Mfo+HrkokbdMeQkt)Hi)6%39Y>@yPSTmotme%48jgI2Y zKsr>xo1t_l3}FCx-*_29_Vfgv24Y(JO+R=6JvSXGV>uYv7DguW9Cx`>pxQR2Mz!@c z%tg@7hOw4{v0|~<%{z!;gndlB1Lo0)bBN1e*rn*jKm#h%Im3xk4Qe$-5S`dO*bR80 zLUTP$G)a1D{fOZmm?VPQ-1&1@%6@xsiiZu&hfLqLOzI8@SP*grlN) zQ?oH*vWfcaOg25$?X+8y%?QIDne5cy2eqpZS|-?cpPj;DLpCT$@n4Uhf{MZe$g-Og zp6K1HyNc`{nJ4V%hqCnW?>>2d<-0BR9VALSR`f5E=H68e9-SWlAw04-IIR!AEzQ0= z9c}Q=bw0$7iw|oG5`*o~*g@Wz4BC9#yB-=2G8=x{UFXx2!&XN=m7x`Ur&d-+r3E+= zE;!H^G4md*&ta6Xam2d5JGI@il-8i6kOkQy^1*N#Xr_m0K`(;Balr6d!a${&K=GKH zDvU*1*#%5uRD9eGI@N}Rz(w2v9qOhB|{hFx*cS!R)PhS zm77gCc6Fohe_$O*bo|>s?Gq|M-T_*G=hTg2Wq+z{!}MIa$-K67ZPxs z;M3;X^)(#*$fqnwK5gn#DICUq`oM5$j(jQ;ICYp$`A~%4P!G?*@u)XZq8=6-<8be2 z_JZLa0O1&fSxN=@PUHLDaI@PH>|@u`F#52HIx8}i)tGZ89W2}TytA@wVGuO$e3>Y6 z5no;rjpEz`!!Jib2YENpS%5DG-s(n=#)C#b_PZY&(h5Ytaq+8KZEP3-T?+_a(<(7d z%?MSE29;FX*ReuIhV6Hadh)Cy?E^wycS0UX#D;{-dBAtebH^23GJWp!Cq!TBhPb^* z^kQhB4x#z*CqE7y$n7O@(sA}|2Bk0^NAYtq@`l}14GqYQD^cXLD{m@n{^WQd8~K52 z%fN(P4lRm%p%bbi1?1G7FgmKIs#@@8!Sz8#rRsWd;!Zjqt1NDXCJDd>E+Zzeb%T7Q z9As4dk_Kr*Ha-wLFm-Wa)###fboNvOKw}qYpO*5{qTiJRwC6Ay8sH_g2!YiA8P@s( zyreQf4bLjK5q>%b+~B|%ub8eRsOt^ZwQM$E31(bG1Qy>{nNe7tFj!9QBU3p#SPjMo z`;IvcRy1K`u<+E+b+CQFQXTF)=Adp-WkPj&SZ|E1&9M{up|KO1o^y;ELuEomFh<76 zLVT`c933GOYKwZ@gfgIY2MakFJJ=6vurBG-DJD#4a?ZhOFqOfI#*GYCBK#K$dreR{ zZmGKfYuun!)h;K$# zayVxrx|z@cH?wu()5}lZyP0@lym2bJc1N4YhZi5|;S9@>4KI4lKyND>1BYk0<1Qtr zCT17?i(rB=3_u2&!)|o)d49!*T^gIW5ya=S^qTHt;UQr;YGc|=_W57l5$Dm+CAzBL zg`+kb1Kt%Ux7BJUcoWPxa$nx*6Us{A>uQSVM4SPg4sjD9ULkO`uTUt%^o;xR8kn0g zU-F$a*%Rs~1}CnIjc=Aa3j32rM)#J@{a-?Myq-;DcPO8uPua4fz}1Vd<6GT0M4X6@ zdCo}ck2N<>D42*`{>F0bp0rofo2YlWugp*ghRF)Tfb5rEnvyrNP79<~QQbhko@acC z3HhYPO2;%@yr@IBG-Q736>7D{(J5GKWMwJuS*2nrkc$Gi!ytx1El0%6;BkLCY$C1g z)SOFxS>%{_LHqL*U00Mn0nYemZ9KTaqx)~o%^=|BmHYGd{YOB<ks&WcCNRLx#Up4f*NJI_=#j$`Z|kh?I&#bI3yx?4yoIka3Fp&oj@8v%8cdy z%(e8ad83XRhy482&SzHivdPVL0x?^p8G0&f0YYzR0O~o*fIVEDTX}=<$qMZ)0>-$-GBwoW z#4x0(u{nP9r>+7C_&_sHjB$C~gWu}8W^w9Tbq@zU&~Y0zZ?T^yn9=lQ3bC!a=?9kc z>~g>ia8b6zV=`)PzSgQ$ea)-%IV+?kw9A`bxdiqSSqkCkt?c#z5M7|NS{ijKmTU&q zL^&t{7+AGAEyq+h*=JILhb_dG(9vd>k>_1$S8Y-q&@kyyF0!H3OB=!^3>kZ1a8Kcg zd}?S-WJz=4B&<4j(}hWo+dqDReSZ~3-G)ngcIV?7Q)BKNWE&hz5heI99cl-+s3 zxOV38rNg!RU|&40ox#3zxON}xi^sJy*q091?t^{txON8nJh}E$A=$|Tus0Z>44B*$ z9%rf+#c9G+VZ+?Pm_-smicN|u;;M}~(E4xK9jT`XKZC~i=V#be*<)K`XU_RCm9PIX zeE$1ChJ^Fdh+ygnY{gf?fTV>dUg7t%SXU(Q5wf$2vyYlR$B{nFu5{Yycu+mUaPp-> zO?GW?7WoFX4VyUu;fgvA;egwWO#&1bFLzOqF7Z~5${py&2<-%{n1dQ zom=2Fegv)t_6b!O&W2*6>ExtfYMOe5SYGs^LM$8qt1!fpciRiH_mr!cY4uao0XUVK z(Eww|N6EbHob!7)zwY!B=1&V=T3kwYGsj{g(V{Db09y2e z{G#F;)KTW8t&>L^9RjR0F+(|Q0ojaXD>`Y2zYL&;1uUUVeuOnp*0c!FrkgMhbO30x zW@+}P1!w`UGXyln63`S&KvOIMP0;{7EkG0eSN)vge9#EzGhue#mJf4im^TO}FT~G& zUVOJrdpgvDC(I5Q{hVe;2y+8wD75BQLoli61}{^t03IEb#ib1YE|c@DPafO7n;4o& z6D)6-JS*AcS;;2PN;Y{`(&W)kSD0${G*D-S&AnZbDde^bBkQ`}fzeA>iweFS8CB4p zqVNp{Q967Et);A=ZQUJ&)7H=cj7S9_T@e(CWFYK_RsoX^1&35HsCgbeuoK^v5QESI zSa9{gjo{m|Ytmmn$&h46K4DpY8rkPDL@O@S>K(Q$M-H7Eec+|ym(gBUS^@-hEdv)r z5>+e#IBU_Ys0zNPTD=pj1FWcEWPHvdUvTcKsrN9k(?aB+IW$E9a0NLIESJfKCgaCD zaVC@TqexxSU_xki5;%iujyTMt8FOh1c0Wv9Pntn9v(u6XhfsS-5|2*&Mkc(ojFYit zc!KAHBJuAXW_FZhAF{I&h7HTv`)6%0=&Olr8N#nGpa-JQ(1XrEUgD6aMe2DS=R7WN z=uheNMo9q zvS5GdnDvZD^x#v?6=ysh3)$a5B2`(1i=r%RXCur>&TioycOcOzj_mAYni$BA`l-G! z=t+Zt0-DHKUi6IQAc=Mw4J^^q!QgbvEC-iZ$j~rAGkhrri5rZKkAo`v#@aE`0gKXL zV1!B=SlPJ2*v$?Tw-jsv&oM?up`Q0!LX+iuDi9hPST$cl$8t#LIbX<##?O~VJvv`n zT41t+p1Bq1C9b18)=fYLtOszeA`vTOus8%}vZ*>Qv5N}KxQLB_nXM5q2wgKUv&XE{ zm8rbbCxnV39)ne~xh`&lZ5hFFp^2NVTLjurbRZ6qv3L>)cS~Gv<+wtE(bzqjIj_hK z07g#1KtM`fE?<@FQL`5d4gyXrQ1oJ9YN>)1qRY1r^T|LPBPC{l+qSoFkgp880=la)ddkn>R4!HJMQjXd?D?`%g$fExX7( zXYd)A#c z?K4MZmDv9Lwz#EjKyh3qhKzi&ulna`4S&MCtT3}v6Q(6b;0G_k;;UtE(+&y--WRh> z#4KXqq-RQ*Q|<{5V|OY*e#CZ#xcCU`={*J&NI!#r*e2-|3kOaeb_K&vMMSr)241s} zwWY;3g<)2YFbihxC`f#VFh50l3?8=FS8NsX58I09sUa~}V(3VC$U^2k(8_*ZpFNo_ zJ3($`zng962J7ytlA=EPx2M?ypQV_$ND8AXYv8ONq5MB8Q*_w`+USrK?&2#Cwm|V2 ziejNDK21@QNs3QWjF?jZ#>e&SA7sl6cZ<=NmP=Q7<0B$OlzK0okOL905f0FM7=8^+ z>K)AlQdoW;`?ITflfu(~dKClq@oDvh&RKsSSO3{M9t-360~^QX$r=4-$dBqb8`CMK z$U3Mtuy~}CZBv;Wylqme0M~J@1h~2eDTBO)E`u%yz=Db57&3pT`4HgPrP_X5)L!Fa z-~f9zNQ3>S*211;Sb@C{lI^}6B&PA@3|P@;z=}QtRB-_0r?sR+VvMu1$Jn=YV&kDsYz=mM3QchiVkR2By4W-3=KzFE=fxtn zBuCuwkh5jtK3?K|$-NDS_}Rnn^t7!WWISb&CBDc=;HO2#X;}1zK+I~Ang(#yyc;qKGSso6 z7r2UU0y+h}p?7CROhl8u`fLbyWjR*X;J4B+fF~?nZ3vWxYjZZEs-FLaHo6+Lwdz&)G{<0 zjlyc+HCIIMhlemKrVN5cK2(6Bh?22@ACxO4*AH8sLzNzg&mXry_H*GDLLFr>4#cea zk44NxvDYPLdMIMn91^p~H$XFFD#M|UV>Az z4Fc*U&*dhATeTdHP2&419VRYMevmX4Izb_JyqY^_e^fj-vY7oRxmjOIUeDWg&YG~m z*Hd_yQ)*p7=(4X&vS;$loIO=Fd;ir->0ZT@msq%u?FhWEc1(l=5GC4g(03 zVaRk}G9UB0;@ArbHL#c7mFB@DlXX?0FC_5qaYl}iZ^3bMLMBc_yLe1#X1=Sq^FBO4 z6q1ytU`}Q0>Di}|PQkI(!l|v!L4#&(b_9KwwP@z97us-iX_|49W}!d|iMZJk(=rpU zqYqqO?^%u&fE;QnV+y*)hLbn7{m>E{7M%7Z${?L?jBDo1Mx!=zV~||5BFUJB1KeJV z#lCY@8eqvX`-nL}C#nn%NfN;p(CD}95N>F3y+ALQ{wBPuIP`>>2eYHncgvv~gcBA& zr3}P4DWSyV4!VC8J{J}`MJG`cR+FvWgw<`3)(t1I2B zvm_}#%Nz@GPto*Z`c%3+$O>JHY;L*uZx5V`C~2WRh&z^iZ;kL0a~?YcA6^;g(S{cS zJmv|*6Y54+GReUwO7a0o^>O*K$t+KYTC#IXkrWEFu=DchGDEP$l86*pz(**I+$|;Y zbajvB8MaA`elf3?kS*!7%b}bcIK^Fm@!w5!&37h9+5cuIFA`quxgx@&Tj36O=TIy~ zg}?|+hUSs7dgKy3DQAMcf)$s3NixNS&*^WpYbp93FYQ^1UPXzny^Y3N6KeOt5PiS>X%qPCr)77fA6m|XP=+tn+;|5pPz)FCknf(?0&KHg2_H}mg=|n zNB@pwq49+L4e*XbI)ETNB6^i;%y>^xN>FW>`ch5_J;a!SDuVG^sSSoy^JN;#8N8j{ z0c;f$N4Z0gz!26#N5$R#YjHn^TFqMdClizfR>D-0My!6MJ-NJeB+^4z5fzgw#s4e4 zkBlvgM5$$Qgia5U?+)6*+dKR9Uc~Z@z6*$V-kP_M^gx{b`4Obt5ZnuHQ6E!>DGe}&Q5}&MD^UCQ*wIOlZ+&H(vaTkBuBunoY}w>#_}ZN!$C5M;^j zF@?(kC^0a5l~3p^kqGf?Z!e;^NSGuxU?LUPg}E>~X%tu1h5<(;4Gx4CYNELAP!l~h zvMa$EnWJkaRAJG`Bu^ovU`0y#a!Z7F(t;{TLS_W2B}(2>2rR^Ts!$;ptU}b8UZI@f zY%8Rj>hskWCCXq5VbRttLtvvSOo`~D_kW@kXIJ_kQccsG$=M{$4*f^dZ`4o>(a280 z^p5Nl@}!o74}E1#dS5w=+sE{7zF(sT3OiZq-jRWeC|L{+i%tW`q0UkCc(g9}<7LG% zJR=!iAv%Rnp?TE`?L6N&YK=)y=hCus=FZF<3p3CIm?Bb9&tIyv?f3=Sc7e8C zplugu+lx%wzS2%Qo-X024tXWtCZUV@5$uTo)I&k^#P^*S-{?vLb?(;93tG3U;{nrS29{n(fve~8dAeWh?6lE+2uV0ET_R<@dqMnxyE=9Yn6#ej0w1-l|Lc8ws5=V!i!BngidobJ5X#+R`uq68YV&c1{U( zbZG%p2GkG?OADZ|d7|W&;R?I4YBDYaRb;ud11_C$)r!DXRk#>1C8TUv#uc%PEnY3~ zArg-uGl^FA7ub1$2z`q&VF5a>2fvjl7vU~GWd62V?ns!km^>B3U2}aBO_i=s#2Ct$ zx}L|%H)4}Psm6TJq}*=268Zzm7{7-#%@AVE^MY8(w+%v zN(%|&J=RkBixWdAp5OBNFsS9r>pmb|<+{b2vLefrK7s27S)?j7W;ZbTSQ?hd0z4)B z>G37q8N_Q6*#lYbjVsG*Ky|gcvileqIWFD6ZZjC%CUa%swEN~iT{T{z#WpUC)>jTYNuPd+=hpLvOLyKsC` zV%j}iQrY?{?eVHS&APQJPctvC&eN=0tMW8YN>Fk&{YHW(#V?}SKB3o0%nV_`ze!-k z-%amGlBoy$#?5c!_iXjI_Pg+js`X0kOYZLi*(S?m&zuE!DcLjT#|&QCl2c3eY`-}W z={CupCoI`B7KWCmndQb{N%lOUtkC3X*5fkSvwaT~Ii>NEl09=i%bO&7_DYad4=T|c zU3()`GU&kS3f6wD`6G(mn4WmXXmUPV_v%N=MySI^7jiyZ=Sak>oX`FAef_P?3F%v|Is(U<=BZkPo6q@ z+wGQ|nT~-&9VHX)GMG+8FZ;SSumb_aQFZxn%ohfGHcOv46u$P}?kGaJ8+|WbLu0vXT$bioeyWmF z!K|Ted0+93=ukfs)7i3N(KeZxB^agkqParF%UZVfif#!#>;bD>qwK7>n=eU{S3Hbn zl=G;Q1AddQ>L!v(Nn+(X3xUyRb1P-3w&Fg;);{PAnN)=CXaG^5Y+Mpo(Vr=i@G7A- zSVYb;L0(KW(f*TmJSEz^4@&krdvP}e!tEWvgn8~?oY1_2Ti;|-Kh1O z*K{%DGNv6R4^G?ag>}6@-39IPDPEvI%@9LbkkP>U)6%h-JpS#LM>G`u3-MLq3znK% zIspT|SH)e}UuxG%O`w>)7fp+WUIdO57W?qR%IiAlt#{74s+(b&)K{CP6wL-ksb5q! zd)9&CWx<949jgXXs8Cq;g6{70hx2B*4f4~Nv5$IIhNdPR{GKH`32#h$A%riAF@>hi zrxn3lTiJSpvcTUysJUM3gTjX6dskGfo#7HL%g31|zEZ6K0lyod1Xn0FX1o z07GLAe(=hUyEaH$1$9{pbI_FZ+}6bIzO4POVjFF(u#^sg3@GM2jyKBrJU3fsc4BFY zT$zC2TNQJRqSe>b2##&RKIVoB~4wkvrgZJEe zJx520KX0%q7q!muaHp(iTTViMKSa#IdC+oaEj6&zj8w%auzOV}O$Fve;mx0jUJ z;7rx0IkVN&5H)T)z^pSw0x5Y@2<~l&LV0S))eDk4`(Ow2PZWPC^uzEdnCrklV;7`x zoGtS9H9N9*n29+6Den0(3uerYeiD^ru~^)v8y`dx>_8K+=%E7(nx;BfQ0g?tv^m>H zMS2KgZiLcbq^a@EamKP2TCEN4+Wgx;&I)7WzyjIMf3vgkTqiX>lK0;pk}2ZB7vfyF*E|D zg;dJq4N@txmSE2Xng*uj^j?@ofIFR)U|SG*2tlBx{7P>w8aHsAyb2Ru7K}-nVy^f_ zNpK;7lWZ)K;$FCqdiKsKgE;##C$I@D+Qow`5-B)X%*ybLJ=AYuZ0MiCJN4_?&r+{U z)!aGCsz6lXfhxjzu#D4bN(zj{mD`n=3@PVM0V9frzTFCkZ{`MeKlg|O~EBJ;yQ0Cm}7pq%=cpkY*`vPi#{&@Cz5FE1Hc+P zg_cnt_`xZm+Fs0}NSVg|NV6tGvPSjvU)=cGLv%uoO5JC?-I=)0)E%WP6g-VpUq~a$ zuTya!vCdh*s%Ho;x*_o>zaGFMHDn~^7n6lF?lEn8ttAxZHP8Yaz_n=!l&R%iS-MM9 z2UU{bj@3tTB9nfNd3sZyTgeHnuN+Kba0oqx5>kL~fz@{21k!yje2dj1x%}uHb|F|8SRONqb z&b_0p=yk#Sd|xu=&o{5(VFjj!JxoFJ*-l}yM|pO0UFXC!%Cx%!qh-XgXW)9to@;Zn z4O)U^(J9U!%27jceWv{{A&w(VyECTx1V$8+U&!^FUp1sh>aH^?uo)vv`=esoA(87c z?T;c$S0W@kz{;p`F9`OSpGd` zel|5Y;LKcJ;M>`;po|MIJ-+?)i^jKWup9903y5andc?PPzKMMMnr7GG+dtKcCxU1O zrd{@I9XKVKwZTi7;hGt_v1L~2qMnenL}GO!+QG2M?o1{}@JHo2luZh5Ox9B1g+7=Q zODoGhgG;#;2P+3IcvB;nseN_isD3nZ z6Ae9gf}q)|&R!L0XUBKg7X2ocx@0@m4uj|FunrR@=Ex(`JZxw?{I*vTXEm1X@Dm(3 z8x>iI2nL{oKa<3hQnQd(I}RN7Yj>frqq@J?j}{Sc{MF-c|3LjFC}K^T0*?JR-Pnyp zb_zqjPCr7f!S{M4`d)%YEdtBrf9QC1?cwm=yz0AT&9vxywu(~*60S@Yt+Wml7KV=x^VtL-u z>?FcTexbB1?oCYZf^qwGw24nV2heJ{7Kyhbu>GyMJG}o(xwRQ0V;=Ty+RMrYjWUX!w1EEzAAGWo`2f zNv$n73<$AMC|H$HBkxDw0djoliC8$~`9;5MXr`xo^p9-Uxy<*sD%aTXPd9h=r;5fk zz;((kyV*CFizA27=F}7ogUbqnCQJly8YyHyjKmM*s|%aIT`3vVLFUSiP)(iMr_gip z`6L#(91;AR@V0z)k&H8umqxKZ*A47(>_$@FNW+b^yg^UwjaqqwT%LAg!ftT*S^t#f-IQvUS&!`rt|Z z#zTeFu%tq=i&i3|k|1$Xu0qnoTZkQ13jijI+ioJ|nFVbN(CJUWRF&{SE*8u2Ms7k$x{)Bi30i`Y?m_&UE_?avPA!cs{TV28wEn7d2-qeyMs zzB@7ZGwL|0M_dmArx^0pC{A(OopYh?5E;r6&mj{YF?LcmZ+s%xFbPf(Txd~sER~ze zc!lFh*C2?T)tGBGU0Xuk7irjSg8I6@AY-lq@{?7R6R|-0Z!`kU5mfR{(kokupX|#-M=i2EflOaO`lXaQ%i{;t@ zMmq3JKt&~B!7kzcJi32>{?=n8;0a%;6y9s8<$?QIxLMcCth(8;9<2*&>O-z6E!Ub) z$4^fAK|Q}{bzA5BV9<$??^pfDS<0ike<^e=3~B39@6gHU~yb!`N_CE7%(27w29Siw22U4xU^Sj)1|&g5f4x!Pvvf@1&5Z_*K375(a*d;8HTjb2S{N^i>$PAFg}2p zK%OQ8c@oj}-Z^>diabq6%Gg8Gz zv^)I%l=!O?7(_wx>hN1Pz&UW|7!0;iBn3m&va?er55(MHD{uEAXK_LvFMUnC0x>qM zAPy6ePUk2WwfVuC>P!RoqIrcc6rLazwEf1nK^gyMY5-l%Loo|@>E7}f**TE8;CaZZBm{BO?46qrlB;ci+`{ceAl!{fJIl5k{ql3CTTwE z*-vg^x|D7J(l^aXV1dL3mIDF?$(}R@z-r{%{xw=TL;GCILP2e5(n=hxwIaAj&|V!? zEkv>QEb)N|T)_uRkw(d;gcFYL&0QK@-jB3Quh~HdxRW!-To#N`jDc!~Tdkm)pH~{m z;g;x|9Ft3)Yfgs%4B946^+^Sns9hQzC{n?M(p8GS$;2)8w+5jv5%;j6cY<3q|0J<%vg5>{C_elkG{d49JY1GaSX)O^I-16{2p-Lv zq@(Y!j@FhX8u+WH;+t*+=S}@h&tcrH?KK^IG8Un$zRA4=| z5v;N2i}?t1BCtb~Vdhc+CSg7>dBwlB!{Aoc-rlJ8&L(Onn}})$psQ+cY*c&G@nrj| z`N730>dXUBLGYnZAzT5QOosQ23s=JE9NBOsk2>3gJ+jqW(}|glIx)M6A#U*@US!x? zVld*pC{5E?mJL-zHa+dGDBAz~pFjR*pSb@&{l+s`m}`zkCU$il=~DM$!WCX;Mpl+Z7S!KAnqX5|5Tkiz!Mb?7vh>9u^ZzWU@ZJ zEsM5o+cryA1F%5-;e!72-+iYo=!@2j#M}taMQnC%Vk9qfI4N`Q=q$W^BRE~MiQ03o zUHN@SYwvATdw&zPW6P=K1#O*x*2A0^SfYvHKne-E+amd7b&)*DBGEQm(y1H{MYI)4 z6(>>3_G$FB*_v(7@?V#l{YG=9mCnq}C{1p-kxgbeoK->p$^@2mWVt91_u7{#V>P8y!C;zYXQy z9qr<-jb`ItZla6d=3O+q^$6vz*n{Pog20Fe{Q0! z%e*bvqgAzk$40diAZNo(?_YWC0^(X+NzD`G&;R20{^MtU{GR{%_W@_t?7q7<>d2*= z=*YKwN7yD-4f9`YRQn>egBGiK9Qpnt+;2md5wwdAbD(RgB$GXkF7UU3Jw5NW)*0P9@t%)!8-e%!lSqw;ab^mh;*11z$iIsZ zBGomvJNx@O2x6zR$KVOkxJVI{NOOb9ps9k)M5>|+f>11TVljGhIe2|uJ;l-d6vhUFeS*=fnD>@6w@ctbI2M{GE(PVP;eszKvnJ=&8cNO;&VM>t5Z1rA z7`a&691u~|}_zR%q3C*(Y4?-oQ$kQLiGzcDF6l2_|F-tXe| zMi#xZII2;bxhKl7n#l-9as~VghjNQID2pIspUI3_NAEg{b+_9&BWs^|yG1m#!97_> zD>uz$1j4`XR78n$yN61<%%u#I#Roq9{!d5OcG>b3w6{QTfz+~g&5k~ae~5bjY7<-5 zB-$urKC?Rz-iRP;S{amfC6_^V;7f4j(6Mk2{lLCf5!0BVMY=kvTWYXP_&7$a7m%R3bLoH0t`VG$lB z7rTyo$Q>NU22iZZ1;KqQYaqB!5R7ShFrxpTy>}0`>pBZO_ul7m?>*<h1lbyKwA_1XeaG7lkRd&9fcS$!3iQ5 zY=|8U?L4M1LAEoiQnz(QKxuLz4{xtyo(G=~u>D5byzMEYCVj=<9sbE|Y)ujzhHDZs zlM@%(b3{gwx6iEX#xOK_`%E^)>LLuvW(w{d zW#EBvdG)B69@QL55WHqoGkR?_M*uj^&lOp$faFBVU=@kX@h-XdtkPJ$ZxP;_A4&?w zZlhqFFws=1Pz0*tZ#AAWz>qv;#wRPFpvsc63a&-D%vP(`Yh#H-+-b6IhBgao&cQ-E z7E~2mB|b4<{EJ`uT=x}h;T7un9v1`6U_MU`TbHtTQQ-=eW*P6F~j~G`Esv z)CRIX$PX&IG((9-s~uZy8nNoA^*JD|;rsH_fA9g}i%J6YB&G|gND@IAB)42-Ig^a0 zi0vOd(f6(FU$^E*3%|OLP^k1D0q`uC{&(sd+5ft>i_Zbf#%QA%bF|=}`M3En3y4Hx z>S3{3W@bUn;RXOXg|~$eKu5@^=1SIBSWNyt3Oc%8R>VaXz&HeJyNcAnnX5x zuB-N}Mx@rHooKplhxcdNQQo$aptfiQ@0t+kS*mTIPLb25+DK@d=r3q_6!?pZ8PG|^ zlFhIt<5V$sf{Z^S_~BVP)%76%sjjmZK_r_7iSu^Smu`YsJsK>sXp$OJC!qiWpS=kX zKJ&P=xLIS7dqn5$uf8G})!~9c={SWL({UA3&_oqLqmNW?9T1F@bRE;v)0X%y(;51cH@p;D(i<9Xn-^~p7cSt+0ndwuLg6ZYB-(@OuR z7K?4k4f7~RO}E!B5Te?KBc9)F+{j4CXY%VtTeW&~N7X$i4W^^%%0eDfRFCG@4Y7h% z_n`_c2x~WgQ}tEO;wG!NS*Bf)FCx(lcaIdFtn(=Q#B=C5(%`u~<8odF#iiAWfhFJ$ zH-r%p@7ZYkzFYns1KR=&#q#rlmyNbmC(>~O?ULBI`-lgOc_9dcFY8@=lGxNEZJjaC zEvH^ajO84c_~?k!g!dVaa|S2)L1-xRMs#EH!EzQccTptF?i4bFwy*)tgz@f2&4|M{ z54G`w;QC-29|*4Zdqz}r6hIu{rm~}Yq);!F-4(^C>=;G1yzL>|V)nZ-+#0IEms)K8 zd3ZE-|53b)qACGiJ%$Xf1rj6PDZUX6C%rCBAg9ZYZv5!y@g+zR8gBo=~%OfHE zNcXmg`iR!|B@z^sg{ z5+rwPnRqUN&(gs3+t2Jwp(h=KP2-n-=pB_w@r!w%a2UU6s&e{+W$+qArCZrEbx{K7TBqg|AX{rC3B z6`9{$VT|B^)MOqxTF4QZ8n|>}7>6{vn(g!i$5Gc({OdHU*11DDAVcFx0{d_ROfonBY;WkZH`slMCuT#?d4$YEoSxspT zqP`EL5TwxsKsD!-z~Y$PUkhwMfbE;;0SDLwEbgo$)EEGP14RQWzBHGy&dQ-?^1{(K#GoDaAr`08Z7C==Pzo{2#LHZRO_MECPqWQn{Eaw^BKr^bo0l z4+O_#VRkqb@jB4*|5b!kxTN>-f4hYtxW!>&-CP~wxG*HSbqt3z zV8Snlg0+0vp`g49SG(oL7(>&b;K@@i?&s{evVFA*fZC_0Auv=PoLCT~CbG~zshEk; z3L3LLG%1UY3Qi&(tH((c0fImU)p62ZqB;~>QXL;kbvT%_`+?T9wnB1ld}%G<;1pW* z|EqQoRRHaq_Y2(5ivZKohxwM_X1~bo$eTV-G(z;3sSVk{>0!LjkBrm=BkbXY!9r}f zqk+qFP|aD;l03j!lBq@HK!lV$J~;8q`4x&r#z?nC44mnB1h{kw+eD#fkUuU}u2%>i z2KlozxQ>y+6-KU}(tspxLzG9p0Oxr7GBAdpQFTgA62FyDpB(cQhOv5P{L5#PUn&#F zZ~pmW3Jqm%Ii1f14jD6C%>*-Hxl4FZyVIpzH|VMt$Q#BMD@6OOy5~J4rHPF-IlfS4 zkJ_7Yw%5*{@6LMYoz0lXhY$T88g%%9PhH%Qqw>Ks1JE66i0Zwc`*>C%jQU(b9Sq@3#qTTc^9%3P|cZ)y_Vc0upXXD;2PW3J*Cw1)8IdhdgWLfvk@~+eqQ}1oqM^5CP z>f`-Wqc`cJ(g}R=x%|-(0$A{PLV}3S$WU$A5q`}!f$}j#w`bb6V zk0T4>hJ8e@F*S~l*hh>jYAGhuFgu$*GT7rj(%@_#^M9y5QqlT-WU<_+k1QA{Mt89$ z_TRBsEG09k=XlAnk_N%5Tk5}e-%9~jIcnLnOb7H(%w)6*m z6ALv9#OqzJwTqz)(H)>w;hk}XuNd)05+Ij{__Zxv5HeB|Yb&+3m#5k=a9P_$>5G-- zi)irG=@oYmyz;8_iisEb{LSgvK`tQXb)yBQ;;5&^x@ABLe@$|B8wuZ6ibE)M2@OSZ zVs&j*_u#I8igcwooDUvBzj$GBUycaNjeGKbip})k(koO{wW?={j$8Kk-jQm_&;0gh z-uDC7k*2FIRh#~g(Y(U-e0Ba!4@|Pt-b@N)K6+KN$v_c-#1)Bbx7=25zb+{x5=q&rRO(aqb!(-m&Xs_llZy7xYJnBf8p7#UXhi1*u2VWRG%0@leH9 z<5{oYtb<1ibCoX|ufGsp5@a{OS)btqQL(q$<38U#c0?T?L%7rM$S9N4i>le7QVnxNg;)PJBw&CQ6;z@lvsh}YW-A60@FHp)XrZyO>R9|Rd zcaGvb_CQDpQhBs1P(+H?7>bzlY_kkDK+lhuU7KKu9S8zg^28vHLknZ%5_^OZ`-(Xf z4#sn!N?K%U)Yj5Xp-Q4tj_s5#gX0ZV<4l=!VGCs(bV%GU%WG}f4J`&+uFHAaO_f3; zwHD)Sjhbgxca#&9VYGHDXXq%ZJrJzyOP+GqSkx7;HOMMXchfqJ5m7Z$h!wo4-M&zN z3T-uqyXEM8;G5*Tt)BjWo5S58F+_-FoHB@wVL*cu`tZc43pN5OJ-IThWCi|hL5k7OYiqBJOGF$fi=0{Y9_kNt$8TCB&gl<^IuEANZLcSh)J#y}j>$br$~} z`>yx@A6aq?qt6q@nR>VJ!$A0Td_nO=a6^C|zeuHsERtxfXxHGXrnX7tIuWXeYw z87jgpirpS-CdwNT2hR}`IOC|FE2@R-sR44`F(S$QRrpVN@KtDYS~P~6j_jqUBBRfg zgyv;|Eg1&$B%HyWMd`OUTUGD6{nP)miE_c_JAw*W0W@T>oQ9#uNk0CF7d3)GwsQ=` zXf9?J@aWPLhOGrE8GH=&wbm4baV8YQ1xryg6;x3GtIkBjoSGAMV6lnldBlg%viV}C ztAfih%=<-;ny%16fE-Yj+5tOCQ41vAl&f$airUu5C8-Mt9t@Ln>4tOrGCgXdFN>mX zzWS=eb07?+sE3ID*?0KPzkI57bGdYAwDg_w6p=GO{Q%y5h-!!vOwU;>p7Z(Qb3R|9 zI%;ddwF53;o{R)1gJA0eUmF9*S9KkXV`HNo(@C3&E3M!;F{Tw2N#7i;XqEaVX@wy{ zkV*stZRpRzk)2_f&43T`dTmUaIFN>f=oqnKacI|CsrSAP=_#W@f-ZtFG~$f=u=#$9iFymTMAL04fJp{&l%n+IS##7CWDW-w<>P=-w%@*>wiY9cAC@vj2 zL%}jwB~-vo)fhr7E+Utdr0?>e5_8nvLFxfrU>Nhufve6XMJHJxKC|AqTz9G;`rtb| zWJ)yQWg&BU6w6L5);u?t`&{i^3I`FPop7qE6`-WY#Ejzk!wdU05`r*9l*XolkOkWd zg-JT7vc}aeki@c8ashJ_HQGK7>BzXL+vCVyg&xiRVLKeC5(gyGiO$Q=tVbC9%HYpFqvTI(%INIDv*Kpv8S*3_~M}bY3 zsduCp;?ONVhZlI+K7{T)J!PjMhQw~~&Pqc-fG>@#GXXW++hL)*GrpGDK7f1)!f&X4 zulC|$XT&X#e9%8{9{d`6Hh`vl#5~1RMiJq8OlsgRky&Vnp}Uy4%CPX0`Sr<-;Ci{1 z3(SssSx)9>Bc`*RQC+MWG$jtcrJ;a4T z!;;GmZOK`=Gkhw`3lbMP4-(Kw0?OWysQa2oPa)Es53#xya@NAh$Sj-vD3;y4PSR?g$ZFM`gO9)p))#&4G^$+lkjP zOf_KP6mgXH2)J$?aqR<8dk)Tz7KTAb@d!m$vVBF(h*5C6JI3PfT9(bO)3sqYB`bb= zFJClMCDG(#U!Jny%;gaxtQ*rT;Ed`mxv@#R6V>dYCW5(68KbizzKOLq7V4G@b<2Zm znUgNl)R^{hROCLc=(9vjR>o9vmM&ws<*=4=&jC21`kWX&Xszy+$P>5-BUe z*wx3e*_s)1A7AQK!3^e)xohD4?5(-X4?cmEma2)$tG8=7SSZATR0kI1im^r3EetPgcuVZ%mGatYYvi&day@4vRgfNP5#-gWWxU8&d42$+kSd#Wux>n1Ku)dz-Vg480WcpY7=c?5>aALX0 zjoDv+d>9&*i@|5mrIMF~?e-Z{kU062~2H}O_o9Nqs zySO79M@u5q7WssH4JjTip7DLXCI>d*4-!7@htwY~E*bD`fK-`raFrUVd@fhX`vThz zr^T~LFZrIG#g23|{ev4z?e#nXTfhU9?n&H6&8^bX%fA1B?5c$X4^_9;J$d6L()m_aGb>}Q{z3SonwSWvhf&CaF?p4S99kiGTa_}SR30)l|ahoLmtQLpYoJJA| z38XmNm6W;)Ml2EMLO%CVYlOT}X>|`jYFB*Tg^gC(zk!4)&pT^l$b*iJrI;e%I0|Ds zyuVQT_%apn?JTkOBz*Rh2a2`Bb_66w9n5J_`*)B07{cqt8hc9-V zLjt@dg7FBfDc$z(yly{&b|I!cRD>hHbWTf(9hKC`qD8Yus8;q5ca|@?cX$r`aIxH> z_*|?@0xz8=0X<*WBLTw99?u=(=gw;MZ7+S zelYo}!J%(uNq)1GIfwd3S=$ol&CxYWoHrNuQpQS?=K(r_V!#KO9OR1=6|ax_p_;Kh zX}73uOV!?I{}6c|!&HD=9eqWv4roeG&C%viXha$O-$+b2{_1mj*f%NSbo%C0LfpPS zl?Kw`n^Kw0{k5sYhW{F9KW!R0Hw07L*HN7Zg*^>zunaBk&bANUw*;RF;(8630~c55 zyiJr7{ot|}tp%4?F$P>NQ3F9L92R>ndmKCC)Xwv=0#R})hg%DWha%^mDXp?`y^QRQ z+}MRojn)Sb>n@6ibBE`bb8eogbn8&X*m)?h#MMgidhT<19j|cNIogys($<=AmnGZ* zPF6CbWeInAN4W{Y-N`QqcR;$GU`8(~w+7+%X>)-uIPZ{lAqaYR9?;D^iIY5gAud4KwnJ`qUbVd+SqcC|**ZT0?PU9(PJi)L^=(%lpo(*9Mt9h=WU#rChgRo_-ry_C=1BX879p-#M})vY zK3*l>lthSYCnCfZ2nu5n0^|B*ks$=$%v#{(<4*9g4AE(p6j)}s$SgK81j4obA_>M> z_3Koz-nxi9bhsrgg=loD2+;@%@;tLy*$BPEq-RiGNJo%ey2%Q7gz}_ws4J#=hsGm> zv+7Yh*G>Ww@|3DE;-UNUd?rqhCFB3$jTJ)+nP&t7j~7DT<tU~tqHRl3+~99`XQg-tqQdA zSF?GmdYE$CIUM!ehZgriH4W5xjPiYT`7X-G>hjUR{ay91BRmP+M2t%4Cz?edG=8xN zgo6e12q=!JaSK$y)48H%#IQ-H1a1z(uXkT`GV~gFGSH9EIk>Z68v!G9`;hbydTvs} zAyHK{B^cH&ORNU4PeVG-iqf8k5dP$Ply;KNjpxuajtca7qPYpBJxX~(Xv6GMtr;&plze8u+S2K1Wiet6V}bH__S`Y`ht8Pv`S%zjmBu z`xwiUUhJ$x9DZ#J$1ujx1COJ~$D%_Wo)3SYgNHl`$MkYdy1Xu3_NEICNZb!$4{N)(a&L9x)`A9k zZs84vl(w~0BM2x|&W z%tsTb62ivIs+viOz>>fMI0{ ze;-=+71ghIx^RLe!e-i zJYvJd{QXZ`oQO^LbHqY^K7_t#8Z~rsf|^&Jh8Nco@ZxG_13~*Zv$%et9v-(4wRmrx z7DPVXU~Q=f;8p*Daf}zeY4t9iR(~`H-)%Q?(uTsg^XS`juc?PTkStXNX95yNn?IWH z27eUGR_ZSe)UAEv-FQzl{lZQ+(=gkvX!tJLib0E=<$N<8(ltSp%+=l*Q^XC`f6W~E z&T-N!palk6P8z`-20D3}+vyH@ap_<=TQs+oo6rVVu}j3^3kye34!>UC*gLhEeA;eaWXq#o2_x1 zG{Fu(rTwe^H7cS|+jKZX{FS!d@(pbrFEulvW~ZsosJw57V>5NF>i#t>bWn zf|xOS1$TqzjT{QtW8$P$a9eI=DAlHJRrs`3Bup*XVP2FKOmbUF&`msew^yD$tiOGOgD0m}exdFK%r>gb_0H*bt zi*@8;(i4ttFA+>(wn|>6xAHrny6r&vwI`>4+D$6R#S3v zj8$>0eEInJ4wLi2#F4@#oL7&$zq7wO@`>K`dLa{oZ@@3^si*I;97^jn%Sqx-yfAnt z;_~hcMjNaT&VZ&#meX3vNIaIYe~$8pD1XW_YVk+CBI#mf<<065S@_^M7W%|V83-)b z)QI?#bd4B}wb?KO!|dP=7%XAGVzJ}@$r$GxuS{pf>g1*dO~>!}qYWuEQ{(aR9Y`XL z5(s7K=KrJPXE_N{sL+qbH({QPIbShgjBSkqU20??8BZK_8Q$Z%H1yx!YjOr0hh{s- zPoYpl)3qOUG3pXGi^)BtJ;Z@@DESS1Hd-Fmys}(gE{Ys3vaEZQd90~Ezi9-!!nL4^ z^vXSR*oRiWT$0rAM!ixd-%};U{c><+pA}(2!rMV37~Bx&svJ?NPpU7f%u_|J4Jv9) zRYbcc2-^!~qc^xMA8k(hug%p_to8kB+xMYfMvX#7@$>E-wNbU4hu_=iym00QG(3NJ zaX*d?%QlKKIg&(ULbLDqH;5keV|XmIoSgX7<;Yh@n_%a=W9?5rg`)YV%k*tYq_cRq zSYd_x?8ix_BWFd0rDHOKMk&-$JrF_K5ZcI5Yr!KD4#6PvzB}%)zs?c2>>|ldO|Q=t zqaeRqooLQ_(LGz&%jzoxpuuS{yTvDI5urA$*9Z#-6xk@n=a8~4(y$G^*kEJa z2qxjC5c5RF1&!V+wC6ewSzbG8(LRMYj_qlgJ2clN^_eVa2S(Wr+)ee}&fKBNltQHi zAZi~NX}*6m^MqY`rmZ*g#-VSzLchL#7?ofh2R!Dx)F8RhE!cYiXgc2`I5`(#o&p4kEYo<4cETIMu7 zNlwEVufc{}nzSOZ%63hA@J%$A%NQIb4JICwG09uHOn3uXX3QAU#?a?^kwJ=XmXge+ zlXIuqj1<5?=$DHrt+(&H-oCH5FB^Q3U>JPP{4*H!x%)lPsC6SDAao%5bV_5|I}eN& z-!kg``*IN$ccbq(3lW|~ei!5`Zt43?8#A9vjPYh~U+-qBc?&#n@=*h5Q=f1TYDiB9 z6D6H)l?hCi{u<1#U^3?cvFslj;e+tMgyJch6%V710D?4~C8q$44`aoQt~>x*dN&^e z!0|^;LC#a3-rdnbLC<$f(T~$RsL}L04*+eFch~tFrSuO2F<`etTrAR zSaRpFXCL9_>$!Q1ngJPJyo?a>EKjK9^k}n+qWw)gS!sC$wKh zF0L0+eQcxZ>aF)b|GxD`V+yG+r0UqBo(}ngKU+io0;`7*)@&KPv9sWxXH-1)8UDud%+yJyJ~7?bC+=ITRoa)~wfXL6xVP11;&RxnL47we$QFtStbb$D6kg=d z(9ynJ7C(=;!X>3C8~iHftq?^a;8>a1Tvpqa;uUwX=)&17ty~-%P)d97ZrhhR)0mNP zh_ntgzE#1kYp1F(Bh#4cz}O(eoDDu5lT(lh01U_OGrMuuIcQteU*W{}G!t=>gZ3lK zd3WM2SHf>+C;9Y*PvtVl-8rxSYjyIx-TauoF8E^(UXWK$u|-DrP>|G%Ux&L`iuA!L zuQdC4^^NSxrJj3%E^H=uxAW8q58`%HFuCh!PFh|5al;~Z&lnx3PxR%M;($jq^y7ecl9^GfQaqz;q<>B zGW0jn)rI+@iKyF=0q~rtc?^ta%(cHg-}cIEUQIq8w1yU;5(=Ni3F$l{>4d70tmW-m zA^{{`RP$gV^48?l*F`Xpeek^q(2Bw*yiuL_9Xtp-K>EIuQOK*4pYE?#*DHJQ^-0Q~ zxvu_kcyYCQ@4@ur@t@r(Y*;y#$e0r~{iQhGD1dYg-IH3KT{j zHOXK9&At)J2=@~FI>|3~P@%-&fFA@1wL$o-A*{NoYP?t(d4gHwId>Dm#+Waqt019wu3uE?6pioE?csAWsl2q2hT}(s%slS?r{84^Q zLk_F0A%6WmC4Bfy5gT zkP2%_LY^&`D96X+J!$>PQ>V9nPtsdee{|}3x2_^1Ppwl6t+Q>7Sx>j%>TKDn!}+kN z-dgVsnRK|V$Ozc@Lk?p`aDM!pW&|&ZJJXE7v&Ci^!H&2y%?NOTnPvp%J}*Xa?t~F= zb`&*@8No{vBX}u{pkMVkJ&2e?l}fNPqy|(#ALu7P^SyAwT`)?0PGetF`|Y^jr$)qv zP&e|KdS})qZed4fbCLEk z`2B|A(&79)p)tz;=M`uHTIs#d+8_@oG*qnn9JAOC$;Pdbs{F8<`l~KUsiL<9u zx8G&AQy0N)4IRGY!h>7o)y#sNKG79SJ4C&d{nxS@dCN4uV%h$_%Z)O7zkG0K$o&JG z;aEA3?V<&ngHciC>1|9}u(}4Q2)VH*b%pIAE%14o){{0dsWq>V2G~~?kqbEl>Rn6| zz>bOIWVPa;gK#am4XZ{B>tS9FwbP}61XKayQ}==);{^d63Z!7~J(`aQJokKJbE(o@ zaE)}VPZgqZvjN)!YS=&EV226n?{!299k+n3)F*?p%S33UVF(N)$t)>DC)yCec90^v zdB`-;Ukq(fvd6{istW0(5xU65xO*itrnd^92Uu7L8;XT7`Ft(d4YXzk0>DvpZb<#2 zJD|q^;<^=-rSg?DXQYE@=c3e3xwai->*;nRZQ779Y@?h@;{?55Z9kkKcQ9yn&shTX zdtv8Kd%Mce)8!oP7stJEYo$bt;IJw&1C)#iUx*ikjDFaWp;`EF!Vd+B4e8{yXrd@L z6SK2BGyfAGNxD2Z65QLD1NV!k&*)A)qv-`6y8_9U!`+b+`>p>YvIrot{s7W81?T9Y z-F~hf;)j-6!h6gE?V3)N!h|zr>g#y;Avt|pCZn%jwL0JY2!8P9a`Cl02JhBhSGys= zP>bsB|A?1boG*9m19%>-RQG%17d5s8>YU~PnoyhdA^y{jVkrEgQJ7CLMYscF5Elf zhMQ3?Zbl(!wBJePos!0&U}c+GJ%d=zl&|oo9{h4)%EAjgGQr=FhPj0R9H!sO7*9`X;Mui$?xHE%pXwMx1aPocdiqAz3!Hhvv>ck5 zhYRFKzI=!S;aAZen;{mLOqM7BX`_qg12oFhTC(`=qeUd-;L8W8q2Bw3M5!WSzAGJvQA;;M5+Hge3`16`tAsFb-4Qo!jgW5Yw!$-% zjcI5wYR^#iriRBMkY3J+WT_QUE5eHSemi@j(7!iH`8_W=0snj}6r8~@xX`wde(!K} z5XBrxD)$bz+|q>peTMcL_x+mYLhn*jovsKoR0lmNbE|)!rY9R;963CV{yn1l^I)gy z+!J1E4S!&zo%A|IgO#Lz$D^*D6gqc*0A2futoka~@bIl_*Wfd1dj7DV&#BEh!Il>; z=dOQXIz@a#;5bPH&5FH~f81kB0hu|_M`SP<_#nN*brIS-r4Xe+!{roQVPWv>B9&Py zBj%DL8BJqH2#7i7N9pJllo zJV2-dmk$lp0qa)rAwa4Sp&k;n)`j_B@aBi>GO4Wda1=%8d&2i1VteC}>{LQ~ttK&z zJyS@!(YKh*c--GjAnw`%Ds63E} zSGSFG)=A?I9f@Jk;xyThF@V z?2|C7yHCmoAJxFl;wnLl_pgS9b5iTz=~xV7ESizvfZRy72I1GYsv@~~a_9NO61$M+ z1!dEbNUV@}bFC+c1>u?i+jT3us;GG8V*s`0@2K=bSX>`t9uiJ3UKE8N|vNvkqj zMmAEid-!n3PErYE_M}TKjbOzFlV)mx=$J!8W(x|H5jm56AdiXgeQ?f{i2Vb1Qs_|7 zo@eGAgV>$t%%E1dT_e(lV8gSR+5FaN+w<6h^Ps;?GdnEmX-8ws?>+9F3ityJiGT#e zF~kyqxhq85nE&)LM1{NM+R@FJm`IvVe_3DRV#nBl@Jkf3a0HgDUMVVbCcm24Z1ij0 z@H+PE`sie=?R9<&C-LC8`Ggw@xEnGUqrvT%WP=eZ+H9E963CsN6SC@L=|6G01@`ee z$1Xwb>*m;{PBe~0UfsCd&6q7D+Es3c%oCS>_zRyPq#-Talf;lXOPic01Ca>e<0QMY zIcOCE^1fmgi-DA(JH-fFR=^(>Q2cII=HJ3NfcF;}e3+&)iTaf)X=wMRltv`b9gePEa#n@oGmfAVcs{s0vRu>PYzJY@FSLVq57f}CKL>Sg-Dm_^W~VxM>@OL?(>e&N zJ97saW;*zp7(p7G?Vz0F1&-inwxDR*po1!&HtL|9d@_QcdOLx4F(ao(@VVJ%*yI>L zB(G@3KkdQC+^nhcn(Zk|xqMW%2_IF{L%-pZGE6pze3>dLV4Q59Ok++}Z2PjQ)Yh!l z8})}JD3sTv(*69o#oW#3xmS1`@0>n+g;1Tal)f9U;sO^haT0PQCG?!EYTPZtjsa56 zDGR#5>j=x|u*x+nUfeyW#afD`kUYS zom)SB|DSy1OWr~oYy!$iyuOwL7Lb%ct?F_J05&Im_Ib?>?_}K2yGF2ntkWQrqdk4aJe4Gb5p@&X)(0rUdWKcu5Gf!*^i z&n->K2TlUcygavhlye?JYfVytXeIct_?oohEl0zYbqR*4r}e$XXp=T{*@k>IlWYm& zPkA2Bx0~4j%uCLo{eY|F5*1qK5`%*8JC3cm_c_uGDjzdxG{fiBDTsP5Of>S}$PY1< z8`t;D<>5il+km9(eN~s>C8iY4*-X}KxL8l-&AhTG`k4z;qYUF)BrEvlVUJ;Mr=yB5 zaF{QEu7PHG&4|HmCSU(M&P6!Wv|FR|%5Cm89d`0d-z0Nfsur%?k%*u~^x?d^$*|*gy}!Z}4XK^6 zD6Os5j)tFgld8H2NZpKL5&BTENGgV;SR`Ex>ee8yX_7v(=WccC83djGsk-yenFS_3 zMKsX1x4C>NjI?}dOuLy}@T}|_ayQ9?CjUr?xhXQjqf2E0nsC~;1P8ozibQT5wVRyq z%*KXPmN_KvKus+{E3ai1*Hi*NB9CFRZk)sXiWG({_3zw@fd$bj4SG}@1JRvsZ`eYJ z$vtUEH=LH~vYY85OFPK zR-O3Jr)q8@Z+ZL|n_o34MlXk+qjlz?L00IR@17}Hmd?bIBxN9pVabOBSVtf1?U1#y zbOv+XRBl?2vPV0#FUw?oKe0?olJ@2)E}F&S4`F$3d(W&Lac9M4oO~TCeq9exLK|wF ztZ-=niGx^wbfNk#_#PswsPh+Yc9?Nj(LvG;UfecZmg}Vw-wtGL3U8E`9a*xI|LkT( zQVih{hQJaXqNfpWtPN3O(u=K7|4{+FDR23m|JKtFo zp@)~ISbb!1bt2~^!-y&*8^V7S89LuYnU0eJh??WPxgTCkDtVpY+q<&K>{!2~?0!FS zb!EW{J^M;kRJ1_CSvN#0sO!+haxN(t!TXv6ykI%YMV7Ox=t8qR#FO6lcaAW3&tr(B zydA5?NmYI7aX~(pI$7ZLSL2R}DOBrbSYbH?B03(gpq0DAmm{wk*K0;$-bUR<-Lc`g zyC5IxT(yh3=hyIHZWZ{z8nluxOs4H&CV**Kk3}`8qCG zJYHXrB@PLi_x=CM9WW1iMiIC69ccoo4`prb$C2+gkbge4lzfeCV%DZ(;~wTjoDaxV$XlxV&l9-Cunc zH6=BIC&-;Xzexh}>9uyKqX2HsS{wx?pMx?#Pno4LP1B9=Pi8ZM>7?u={VhGau(;Ng z39*e~a^Rb#j`orSD83B=D6g#4MU}Lrb-!A_HDm56UomU@UC;iuIaz(j_O~r)m9_eg zCkDYZy05jQIpXgm=P> zUE-v{of!7GYzOCA#7aNUtC;A)zAF!r-HahE@ekJyu*p1ujZxM zJ#?WuBwHPSg62H0{ye@xWgj15Jp;l^v-^D;=e}R?N-Z!bFWBBvZ5ZRCw&U^MrP)*Q z-7E7y_R5P7>X23=l^!^B{7Oj0aVw4ChvpXt3434udM%eXr#av8@FTT133Il3di?k{ zPI^g>lg5ZY_AC6-2?c`gO@5_PxL3k_Cij{D^OIkbx6ZUYHuhZQ3XBV$6FX84Kdu)wpP@mhQErx^NNE14NAF|dmI+vFTZZemHs_ZgRi z^Z{;nEf>c0-*a>4rP=F!X3B$(po(tK7?lfqqr0@{-i}%hTbtD8(2p=a^YG$$dO8EavbTad?a_mi)LU zm-|OfcS0nIWyMgflOC@wGUHl8uNpB@oKOr~IayAkh|1}R9vHL)iaOO1ENnmA9=Fov z9G}q=14P<1o684pi-ZlS**pPoU(V{8ydc)i8EF9DIH^({z}F;Iq9UTKG18_$a4Jlh zzq>RsJ&2)OMl#bRGnKbH2X%|7#_3k^f5HBh92aVL92WIp%v5w2 z6~QkV`qV^X1j!2RQw>{j>^XV(M=WH zQ`4l(emeXCy5bEIC1GZ55QcF(IYGLUGk)Q^q@%EEAv?S8|==m`R@AE&SXBV*#ciSi=*S$a`1>dP3Qfb)h=k7!Tv#ytfawG z2cgHN6E2QkzPEbWjSSVYau0h8{DvWt7O_0{{qYt1tK$S7fpUT*NE;Q(GpLvF6{o|p zYBw&`J%7?Df^ZQ!=t*<;{4r9R93lO4?)WnGdxU&61JjH)Mv-rr@MZ-mqx3t2y9%}b z@fHjP?^F(@K_$phsAPuVKL}E;iNu7?vbRryx8~78_=7`PwgqS7)j6`JFgK9QsH5bx z8!6P&Y%t$bL30zG?jhxxvVI29ZTM_)!)FE6P>Tu1hx);xN1S5@mz)%k_cw%sSL+X_ z^dZIT=y!21&*&LyJZT^s{N$GCs0UPWFBT5ZP+DYji5L+4r0m|9_UD07uqjr-XyB84 zL)5cS&&zPZQZ*iD#Uw|*i3gVbV7B`-W;@=UF)i71G7r=CuAdS*BXgx@i?i9BBQ73f zy1F34&t$WXHWXOhIi{n$S_*%XF58H_Xm5Tx#JP%soe_dls{-yJnUlyrdb(EZguIDBa-M z*`agoTz^hfcGE12Bl#w?jJZcykl%7^5d}b>sIb`g&&O`QsCV<65T3K-CY69mPT0-EGqG9lA1VQ6 zsGiwu+QQvGLv78Cas)rYjhSPC_76A1by)E(W8rJ-+Dy_FYlwkk`gO}q;AM^{a;kjM zv}vK6$wtTxv8gLuZy9igoO%D6H2Xr6Lp?(e*jm7?jH71YDssJrZ_j^jeza^(Wpg_r z7V?UxsFcgB)=YHTSDDhg64unaYBk{D_q@O7`OV+UcEH*RiSw%^n&B~V68yPpHC(Z6 zP_Q|(oiol;^TI0!57n1TrQfUJWCcOf4^d-;SpYK(BJ0llaAD@O%iDg9%}+=Pz9Xu4 zXOHJph>^2Sy2;2RxyFfrw|PZDa+s^@JvKwM1u$&V61|!7cAeX|QaFWR^pRN6x4VJG zdnk^=!$+YLde9S%qZyT;bvL^&;Wv7gVS7MrxHgCd3)dsVy) z&u4*lG`bFb3^f{Ahlt@9HQk_u`PbqIscoYq1k4yMv5WHXwU7{*&w~g7UK(krEJkb> zFLl*WZJJO~SXSDNIuhMa5qLP=FY*l4}@Z#KMB%eiZ=K-L@_)7IEN} zCn))U`J;_`KvEh1N~KT_sByi=d35_$B|FD@Y}0C$`0AO*wF_Xm$3{MNc5a?WC<@m zGAvm_8#zcNv~Al{sZ`k)Pf2*Nl1d~z*kg&*=PC+&8p7@)aWAYI;O;3{lDQr$hT6I* z5kP#4!`%-%Xjz}%w~6VmU6hRiw$3GK)ND6Pu=7?@PPT@q-Q)N$c0C>@)+x`?0R$zz z7k8E&68mcOZ?i}D+L?7VIh^jz_?nz@ui2h;HaVH@&3KzU!@cU6!b7nzaqCmk3q{&5 z!e1%=VrxI!Ht&*;mS(=AIM%9tO}KLy&y2Q@P9nXdiLE_FxN%A&0M}=DfMdox4xwHT zrx4Z$_M^Ibbaf@c)x*c(ZPL^budu(H@is}7ATsM&GJZq9lW`?u5XO&dca;W&>90=% z!LMyH!G*U;@@nbuadfPl4_}jjs`fRZ9q8M0%*wpnK6rm}Hp7>sY~Oo;gY(+^&Obu; zzLDKJF&^FwJLaQosQzFZ|DP-UHvho+=CC=kI{>wl&oBU=b`JH}=EzEr%)*=XO{fkc zj+~#i5@cHlVmlwp7>zQ(8<`h7Gv-B1&GxG8W@ox?xt7D1YhL| zb!~Qou-PGL_9qvO0fmXu7K%AmUaYsC8vJ06$U818Zq#wHWW)OJwF%Gwx>y z%6z|+O6}E9yOoKzH2i>lS5f3?z$q0X}jl zmEbK0DZv%4Hv!0|Dy#%c^&YNoS}z2Q&_a=YGtSrWm;%gpZr@tXF$EmZ6x+ApV1plL zI;s9IN;%<}3tqm|MWG_aoRx+FJ1tE0TxbcL4mXEDg)d-O^pXbTdM9_}UGD$PV$$iJ ztfOwg^ERY{mO2e|H$TPZ*Nw$<{gZbeS2;(X{46=fJdiG1d zSsxDCqlpM^GkIq<$1mJjNz)_x9=wCMKS0ui@!N$i9<6FC>8>Tm7B+#52t)lBfuh>t zd3NZqFU^zzQ86uY5j!nb_F4rMEPkUJR7+h%4H#aGBu9$eHK~?oJJYl6=^65-E!!6A zW7{$*Ws9B7I7sAp$`C=@t}0z{g{oPQ*d8R6SpA6H!z$L=y_>e7O40+bER|fL>*1uLy{WQgWZf>x^U;{~I)n!i<)y;6hhf8@!1F(eco6N-p? z2+IJ>#{tNc7lK$GSGZZHr7GeY5s2P`dFlerSPV>I8&sJT8X5E|blY!h;CL|i%KS37 zDwk&8T@kPX`aN=mVLNDp%yd2w%aZDN=qb|y)}gjIENUF0o(&wbX*pTru$aPODkmKB z4N6Jy=ZMI66N+f0K@qCAF?s@nprsB6S&Nnw4)Qo`Hi3%jtYQpC3)Lr*U{q+!8TAG~ zAIIOI6$F!yx`k!^Yu-WiD<;@ugNYi~BP=pv1JZzaP!`9Dlqj<7HLYm*_wR$n;J)QD zM)CTTAfjpOdiJ%vz;V*9B6F$LPEyEHfvNB>Zk4I7M?-hpsSX$FX*pImj4#!v1DDue z8dPHIiDFXTN)^QoCWyd-(wy}}cbm?pmN_*ww(O~8(0pO*K8|WEkNo=YOAv$W| zz;_G=>bpWujBmA=7CR-WVdktB-!cBwKjOgR0rOeoLcF6=Z3WFr098^Q6+}i%?(RgP z&Br^3J=V>lWv%#@x`W0@Rb0kT9MmvTXud2i=d7CqF`MN`S%Mw>rzi#Q$2*5MRvslx-Qg4CO8{vD_9j{kB)mS9Exxy(%j-QqHX;3T51i{MbMH3*I$69j|UKrqrB4ROL4 ze=bK^#gFs-aem#_e=Zx^eGZ?@`ad_1TiY~;nk`q$4yaCuORLN( zQiCin=L^Nc0-=cu3*Cje`OFUSj_G(J4?wuIaAP~1FniRQOz*W=44xqMx zGu4s-2TsS9fl3BptZgMK(*B)m|IUMrj*6rZQg>Z2A(#km?NA!l=VKLGzX1a4cik%1 z@48K^2&0ku2;GvYQN0a;mXZ!YaZZE#6 z9Q@=gYLZMr#<-^WNUSas2~4Ei1ZToTw5TLI3pUV!3iWPd=s^WC$V`iKvW5oiFzcNK z*h*E?V7ooDlJ&rj(P5+j#Q6v}NMJ^yh{lJk$vn{pyPEc>9I-uN7ila8%h-%W4SPw-<7aA$6n+ghS*5IV zZB5ey66B-|KaI^6o3Q7#$cucU<`WxX;#-MN1P)&06aQ`a#A6G^ zmUOE9<7nFlyRuLwsaZXa1pL70yu-uo1leuBdFuZ6JYeuk_0|%%o+_tg;%Hn0*|Hu$ zP|R;ai*eB1Yo?X48k5PR4Au7+<=V5nZ%h%e=K9#6SckAWy zRikqdQ8AY8=l3#@gd&#*oE1@SA#M|S49$qnG2KY!+U%Ihh22>`!i8gZmR&jOxgjpt z3G*(YY3w2mUj&g%vy?2$^V;(&%N z(MrTrle$xX6Jn}rBdADwpv)!rAy>ot$ z0S>GXg)Zuej5-*HnO}e_Psy!rRT6^64ulO)#xcx)qPuo{)Xvoo>|Yrb>h;;b3Lt1^ljYY^k3J4`)5Bk&VO(_Z?3klj z0E8k4eo`|9FhEfUG>J*@(#Mr6r>;dbni2mkG#Ea#r!t0S#$2)+F?2eU;>xS>#HkMQ z?OIJRcvUP6&HXeP1DS}Ulo-zRC=IH|)fM+YwOA~qyreiU>&p?UywK>CXdL;qlU+QQ zZAl}DwW;A6ldI3Sn~G1hcxQ<=$<75U(6DUyDjftVP*D721gpy59IlvtG7tu@WyX`Tb^pGnvztf#d#SFEAL+g9IbZhuAe;BIE9j}jFV#ek8i4;#XYO~ zWJaJgl!xh)C*d*kDo{_yFM&|GygaEvFG>ytD=B7Uf}&!tFYRF;9Z15J9xa|oiezr2 zvlmGyQUXbl-F|+Iq{1|F>8D82)6YxX5=nMGkQ6?E-7%7I{|F?tY9tw+12N!ThkkZ~ zq>!OS60qGEsQ5lK!rcZ*0CppEtBGkENhGjdgQWR{B;w&CuTl|wYJ!1K7&kvf#uW(_ zl&%j&CILJy01LRGZ(6N>@bI+}Q101M?dq?J)#^vy;th@qYyIyi5MK8E6b_gp_^S`q zIponRALRMc!5ePig;U>kp!(C@DfM|V_|0YA0-?;oVYquLJ+yggP7(!z*Dx@wYeDds z)2f$Qo`%F<&)smVTCidCbvIp4q$IgD2&$a;A#SFl-fsn2NK%v8XV68&>(Xm zF?S#`z8Z}u;W!?QEJG2_Yl5;_#^9}?p(jBwC&fRyELE1QelQUyAuHhSY=K%m9G)c< zwIof81SWHhgj9NHGxq`uQP z@Z6LeH{>fLnozgDmN;V;vb~|4mu6*2iEgjlF$86@gTSUEmqiI|GW~0YI7KWJarw68;& zYonI%h>g_<^T^=AE#BE4F8N^CI`L)Oq<`LmGs%kTI#{d0R%D*u=}OFZ41TJKB#Nn~ z#UX2~)L93ly ziUylh{srKbwd-R9{o-4YU&sHXe&nwN16>*X1F^7}Fs4v#&xnP#d0{w38AxkWU>`47 zmStBQz74O=MGE_QmA{i)M_bw1g7leeCU16uhzx%J?JZ}E3> z>r~HM{B3R()o~o%Wl#|X7sr@*HVb_LShG@K%tO@T{p*xAc#RU%xg`s6ETb4~ zHxLnMVvL8Z*0pU2978bbie$M?m2y69lG<6d%-dqrbn5>P#I+olWmVjrtA1}Yig9cm7|Q0 z>tvL>jxV>SM!D$UE2gVVp5>_Rsh0uxykHWLTAH4lt=J6jC&y1eXZK z#Qwx6$W)Wp9o>UE!|Sft>puo8gn$;loUv2 z`B59U2&9H+gTHkEXf!_lsmzOGeE6RcP1x3NF8r~C@+ld}_|B8DPGOcODPnSy!@d;V z(Us<4)2If`>F4WMJQZ1(YhXyhO#NU15r%BclW%3r@t^@$aKO>zCsn=4#hj@1 z`ZM;pQ^;YNnRw8w*I9c7e z8K_&;9pUEqm_^bEJjzwKs^ea94Ercod;XBm5p+oV5FU?&&PR2)3CH~-UjJiMb(=-1 zI?UCo2tLw7>v}3;>RiV|Jha}#1;;=3RmsOI;DKLPZ;v`&MTsgdNj2zz$ zDN_xKestwJC!E#BuQ#&s$_I~xPu`OR2}=M^#XfPRI1$s3kGEep)HY6ncTL9A-B(?QCu?COy`1SWZSuP(gyA`3@&ufYU{Cpg#Yyn z|63S`|1F4)R3YN0$U{9Pn0Pd`n$t#{u2J@elj$4^XYNl$9=;8;J6;+MN5Po zt|B_lr{)Vs+I7IpSIQ6({>S!&l-x`Bz$06DsA7@yiiH2Q!&^OWMPMaxc#4>Mx7?%@ zdW-dny)Ee^ItaPg>|AsZU!l`F*#4*KpfUnm>s3^1vis1R(!Wr$=~n2?wLN6NV;{-2 zS?s(RCvkpXSZuqPEzeSw;#27T-Qy=QWL1!i9pr7ju_N!h;ibbo%^dV z|0)q+e~MtKGaj`d7>tUmVV;yC!;k`|2Ynk@5splRfg;o5h*v%0w~>M-s4)H@3)DwL z;rwwD7AB%-m@rx5|QsloP!uFa;0=&@)pdr_2NIL^GcR-71;!cKrbPi3jg_g?4 z(4#TAq9R}hYs>EJN&{8|h$k3}n&k`7K#0qvsKnmS$i|Yw*u|?!iDp z&#PR&&fLQwKqgxs1bt?^v)|8kqkEiX^YR_yM31TPp4RON=`s;lA`m_cQj1@)F#m0n zg+iVkLl@6xerd_5?t7LaW9sivtB$|xa`amq7W@Q>k*ag6aZvEz_XsE4+~k2)1uY4Z zTaQbdL5ZBTjIxQFQE?ehXCxnc?mb*smsk8X8%cH}&--kZ%6;K)Sip0_pC> z?80o?J|x+g6O@$Kuq`6!_+{>92n+^hD(r28-*TnV=X(oTObKt_YCg|%XYzT%H8nku zm}kh0b*-3QRGGu9mvxj~_w1wWIIJ>7*)2tsT}qh>m@u+!SHp+_n$y$Zg4-3Rcu)>h z{VbCg^+f&qY@_ekxfv$Ll8MCKB=;=z(W7JAA+18rtADUJjNguibF%t{W+Io=gPFhI>~TcUBNiMnny+*cvPJDhNs_He3TjVU1!zVb9O*^_T8_ zc7aK30%y#i{=y2&P^_|1MZr-ZHE{{;dVIEx4$m_%=Kk!tFe(9sHXV75Ebft{u8c5m zaHAnA{5yXxa(_-&1JtmS)9S)K+r9mox`IT;6rsRX69P6t_dl>D6RQztYG$;);fv(X z6EkF$&^_Sm=x$X@hyhs^tD3Ag8uQO!ctOMw-u1#=sPzujfjR;wDgPt*PQMf8kL-Zd zL=RDp#3m!0QVZs0qdomr@SWZW6W>a{PJx4O0beI4R%B!|Zz<*fwocRkGC0H07dgW) zM_5G@y8$M?l{iD-;6={xkL)IWe;+Gv>t?dQaPBB@B$K z9APS)N4;_WO*0byRs@xudMcVO9n~hU?nD{JWjnh*F5B1xBD!Jeoe}+SY3)U-!wePT zKRbxqN1LaUY-~O)$;Rd;u|E=168{mpF`6MP8VeH^Aoj~wBch9MN#OfatQsHodDgR(H+C7TZBZ=AJ%s zq6hy7t5BC#y#+S~wmplykA*di&^3^e>=R^%&|fF{M8sC;=S?H9HZ_V=Pt%=L(jTHI zDQ>PFKlv$i0GZYsN?OskRL4`vcG`nq*&Od^{HMn}A?tQ)ezZjcH>IpU+DtLNDM3J- zP}A0+PafWVxWFF9pwEFw?UFClTjJPaGU(RDWava0;knjWd4E3IRwdT1?rMJQVpM_5 zA#Z~ijF&-Cg!Ven(^wsCPA9-*us&Ss)J?jNqK_!5${ruC^F>lkPZ0p`WwATKnaWHR zXs_ttbUQ&SyyWhL!C6o(5ipS-TQJc_;MU6?j}$0)H>FIYCC1A+_p^QXF(~+Oztuo%eTebQpI!=Fb^B-LaN&r=g|;97KOQnr1tVE8)1)5XYH2jc*h< zo$ZhPR`;J$y3F*7M~i)&Q4Jm~>+b7tYXS^kOq(>gFrF^ zKYlRy1dqH$Iu;EH>l7Qr+d(p=^WHrhc{K(D^d!-@Dix zJCCVi&B2`&(*}wk&EKo7c79)eO&s9R$_wUsm1ES2KDVnMdl$)8LLoDK>ReJ@3^VYQ zZ+Lbm!;WNnb1L%@ZU$*X{mf@Q??%K!fS~${is;mNcXLFXJ2#TrIb=`T+ z&dGRo0#+iA>LoT|vlxV3@-B8q%FC8IzAoMA*a4d(~lnQ$GY+ec>-Y&OEcsV*0911^EUjz{wNcQhSVnpv1t|Pjkpt6`$4ET7q&k zFHD^TyS>4qK5yYDxxuH&0dIYx3uojp(S1as3zC_hPsMZ68nghCAC{SV9?Z|amHgYA z8yuo_$KB_r^Xm5{DJSOp^XkLCf&^AQ$g`ixC-epBL0`Y}oM(BWXFIDoxoe6R8cGNt z9b_7MA#g$?0VmUO{V~y7TNbtMJTGQg*qYbIfvD7ZqatHyV_3 z@(SoqUA!kB{D0;_)nR3pze(`SByl-Az1E*sr{j`lYdoIbGT4chnfV)F2cq8)JGkON z&3f2qmEknb7Z(Z`0qCk30WTOS07^jqk1$TUS(MW-ak__35tB+~8Kk8Pj==@Uqsu z0v!z=t$c${c{6IN(6X6l5q(IlB%e2lnmH5nj3LGkb?^=%Q%o900PN)`WLrr|j)zqp zVnbs@=0=1afxIJ<=<4Rd-Ajf>+M3cpcN`9HAcg6k)CV&gBXn`#X}$m)1&Tf*4b}Pa zXMXVcq{$Kb*Bcw-fu*>f4BiudZMevm3+kLTeYB`PG#MVpf%?=#zEc8zuDT!jFeTt8 z)}P=Ey&x7swM(_H^VASyfRi1gSLdweElwFDz6B)oL_%)|C|IBj3alfdjL4dxa}c}1 z2P2vTJsk=ux=K(EJs-TI;JjJ`HgxJo_oAi?cQgYC;sVxb83hB{BONOv#(g|SV0z6M zF(_ee=?Wzw^#Pt|;EcLyjL?${pwTJ;ps8u&=*{ZcANIt^T@r^r^J7Yh2W#l0h?_Kk zS2k`zWG^%1M;$B)-D?nV)IY!|w1A}AR$;!_A%(O9J=G;wA25Sk-8Ai%st9zt1rzG@ zrpWZ7QD;r_NaAbBlpF0AMy9ALh%>kzEd=1KXsrp7Q=2X{grbDoSZD*DMZtarvJPIm zPZRsFHx-|vcu6WgL2*wiK1LBGgYP~<5zJbAn4;1W#fK;kN~S~81nL3-0Syo-$@~;y*5k<1H6Ic<&J#|)gUbv*r)lPBm#hiHP3xtEeqPRbLRVT5X_PC!Z zANdMeyG_+Y=(+~KxD8eH86DS7EaY2dMTeOzH5)qFZj z!UQYLc@n4&3+6crSR%#ud(@Dp^J4y7!qBuh?6vk%MK6Id(rdrEK)!${S2o1WcSwky z=2FZR`gW<#qOh32>!yQS4HJNsh1y5rS%@&M?}j7Dhs@`)ApP(_Qx~6ev`iIgjwxgI zB909{0DqwK-~p@E2~(S3MIoC$pDpX5!mE0G&U5~|EFt4+1R6v1WxRr`U(c&2zJPad zm^(PXqdwasO4Kq>_X+4-@Iy~#N+$pmuw5PPyvJa`do1B*9*5aS3UAFx+(U0}0v1ZG zblJ5Z_zDQmdl$tINY5WHj~@`9KVB6-u1G(?yQB8HROMsn`Ow?@7Uo}1C9(*oXIwa@ zWa2>`mhk?m4g)qu;a9=v`QLZy;$%=LBgVUi~Oq>pf#9%jBxkXic z*rT*;5htKRH=w8~afo>;(PA7qSBKgTzRX%lK-c~O>7ei?jhGEg283bi}4vQ3p(kA2P_MnDngeRMAwP%EdK#D(R>TAsv;0)M-l%@-hCe zRnL>$32C4>OR%dmCbPcOMkD?t8l=aCK)&{BRS>nlAA&dC0SBYP+d@KMWL7Li3{we- z?lHo<4LuD`z{pwe9#8zS6Qif)iNF(##RR&Hdf*4E$V|Luea_`n)DN?V;Hsg)f^|@5 z#P>Exh)kf4b{Bx_(XJDMf&>CBW=4Aw=>%yz+Of0-XLYnSzpG6?oFYlj%;A1=KJV4Z zaJ7QG5x<6+l$#uAzGl>?N4qp1tN}hjko7pRiaFi|1Ve_7R2`?W5f%Ca-noPEsT!|O z2J4LV>z6WJKPX8AABVS2>bm=d)peVc0enaD5xJ%vv=-cxUL;bg(>IGArUJ`Oo4gpD z*g>3P9SIy_fdRqQLpdiBgsn#OEFj=4^ZcRSz(wQbl#M-T>{v zM`|k;U5K&8u>C??Ksp@e8q!mIpqR^stU%0eWS1C#8uuZ&D_Q1vr*u+_vFDn`d*BF-&P&x zvc5cY_eO5s6^8BvNU;i53D#cjVEu1*U_LxpFA*}11%6?M|6C!(A2Te_Ah2oJrEKia zQnuoCptx7ZdFF$=98IVi3Mr(JB9 zIH;+khzvmy?+4BS0Vm2pGrzx;^^|S_qXjD6# zCS-Njr0|9}qS=(=MT0kxy9(jzzXR^@6EAWHS?M%~`R{={#IU}|9nOk71g`!Gxx;Pq zd4FnSVW`*4#$poh728Rqw^)r@X`eg2v8d%X4*i&{MvG|R;EQQhXg6ZCjGVL?>R^*n zwiZI4Q_fJsYf=iwGF|sDd%20ij^sSM%CVk20L$s+%87>Y;$ga%RmsdwgBR8`g zDY2*5>b3&+3HqZX{Fo7OV|8eWm+?Z1bP)?F^(>Aunxim@FKQ~A8ORLu);l=+6zFBQ z+f=iY-8+?(^`2`k_Cu_v9NrP<|7;s^)|CT_Ln5OZ0!R&eNW6A)T57a8b@%~w-CQHZ z@bx0N;*#hla8-aUvC>J+gd)1xy!7jqVt;|cD_UwS107m2Ss*Q;Y)%~`Q*3nXbh@F@ zdVtnIUry~UCfojT7wWwQ)E*VL2A{`g8}zVqnM;}@u(y4bGZu{|zY#LQ%sMBau;2@F z;vrY*|EVTlok6pYg`PoowNhO~4Tz{xA2b+Z0>KR=##AHzaOZ4x5MS#RgIhWVeH@>p zr#h97Hdk+XEg+K!NwZCL3gy!m&|Cv)_GXk)&d54T4AcCk18bCf>HA-dJ)e)q|( zDP`kQ_44aRo77LXhXZw!yz-FAZZ@d|!cDOtSsheUR43Rm; z8T`yVCmHtn9~X4>u#4D?sPz_pN9N{MwafiVX#LA5ky!?HU8n+(&1_qPRFw~zFT-B^ zuJxplHytI*wbDNQluU)r^ zCSYxws2C@0ZZkhY$1UZD_1y*C49Phcw<6sVzfR_(b1!a@9BH9sn-9gT6wjb%@`y@Q z?8<+QrK)Hr5k))#W;YW zK28KieS?|$#KClxVdh9x(q@n&F1T+Qa+KsS=&P*WG6sj-47rNJ9}X~}TpL&2i~isS z_PA-hY4c5MKSHxJ`AQwq9ZZ9@UpGfhv3Wk;BnHS z^A105D@Y_%Pmj29ho^S(;0T5ZW<@W}icaV|NsJh(v@SCvlBLZFDy(F#oMTXPbZc`7 zOLL~X&L1e}#2|9|%0HrTG~tn=J2=bm%! zz2{zSIWj1gx_X~ecdD-nX`-o8EVZo~?$#)_Ol&Ne%#=R3s`bGiRFW!VIUbLD+KI0d zITpm-5sZg;zytxNEjqFzhy%{FyK@OnT7YQ;V;T`mS`b%bh%+NHrpHj}cz*x?TKk-R z-y}J*0Y}Vye}}ewLN>rMM%7ls7w@{0T~m*VrznaYC6{kohdJ1 zYdRBOm~|d7Fjr9mPRUn>+S`HO^N`A#)8au$T>VeC z_DMM@)YnA)*4+b)M1P%u1fml|R5=QgdMz#6UYYmAFE zPweb8dj`$nD(&jA8JAknkKht4J?!GMGJt3ir^TxrrEV?vw636gOHgBhaNvS+r9HyV zrY8^U@P!sZUXYCUv+3m`QvEeKP*?UC?h;K%GUnYOazVLrp@ z6A%>bcSbEzz9%HxQ}K?NZ;#@E?Kz9v74~n>-3#vS+n&>bT%>`uL9#NhC)^Ueo*kIf6cvQAzAl0~bC?`{|%32q}XWQIx<&c*veE!0^%`!L){t?V8G+Ii(Cx z;uV9H5;k)Wq^w0qDSH7aXKoZ;Yh$f5dSdYO4hU_JRzQF!G?#%G5TiRKl$0G1Fe>&9 z1dog96*xRb2-~RTH0h;8B`?#sZa>?FmGRnQ#uLq(+fyHCcZIbz+;3?wEUQ|PX3nG-hCtbMc<-nJBUG0_MY|1L8eg+AsFQrG0_Nm=AgRs^hO>=HFDE z!|$V5cn3CQk;F-^O`F^$P5)=cqx>2)xV?(uEhr8u8B#^xBZdkzO5T-DV=hH8AM(v* zRiU)TY@bzru)3Fg+E@!qPGVN@trlBpsxVRA3meQVvc!l-9gJ;GlIrvK{eYN(R57OY zkF5D4AO1isNSa{0iwsINVS0;IzJ8Y)Y`(%c1ytH%Da#ydgKdh%^3B&?Bi;At%g`iD z{Svs~(l#flJK&pS;fpu3cvES_vb&+_tUneJ!;sqy`NcSP29GPAE~KQ%nbMHQ`REj; zSeSeLv+v^7wV86ILAPa3EPePnW!VOJp2 zu`DtH(v;_reW7m9dju$GOeF6mwH5M|vK;!k7ECFbEo@-aA=x94Y`a64!yRp`E(ulC z8>WB*9)Js4ol0%~Pw(Aua1vL!&LOp^#B$KomR1Cf(`>?&asmqUHX zw>!`YD;fg+5AFs=ygr>JDXQ?X;9NLXed{&d2GvP5MIQdw5_y10{{r_dMUGDuVgjf} zw{*G5(x7-Oj~r&k`IFYB=rN?#mp_e=4k+k>A}$d~Sv`mRdOuO$m>me5Z$Kt0Wnx;X zJ>Us!)DJhOeuWmrQ@1BSIgxg)iBlRs6l4lnQ}DDl!iyAl|pwp78+iTTNoH1)G}hwKV29z&DjToJH;pM z;HJ#c(o5LQg4@2!9d#Mqybzl4g!7jLi zHJjZKV6+2jl-=-w;ql{{wvyRwH`olMb|btgSt$93b%Zz%cIx)d8?ko68aOI9)$KXm zo{M#M$5(Nz^r{Rsf{ZqYKUTo`4BR5R5W+7q1@N`~h-5KqwCCioVp@b$TIGIX#m2I` z66Z~KsTdF8)~!Y7H{UqrwB7JL@^fK*nhJom8Qu$FBnh590foc~>2!wTw?G}Nuv?Ow zg|j!uW5@BO)DSsMyrb*pfOVVunUJ|YLSCRl&w|}eB|Z+AwyOG89TCotZThhd0xQJ2 z2E5buD_9`RSJ&LkpF9IQ#3X{8h(_d*<8%Rw)F@cL3)$h}EO7ZNOv`ZdesMkU4 z3S@|L#96|b&c)%m@{-brVlZ~Y5ypTHS|_|~$N>y^=IQx5-K9E7U-@GgY)Md!@FxPq z5y9O>KX|8Z#9EXdtIWpX`f%)6o292_!LJsulYcZ{3hmtpho@2KIcph8902XyDuo7x zW+dLL-^kbmX-BrRu$;74Q`AgErpLrAL5Nj4tDWQp-oXjr4K7&fIQblMeTH|pL}!y zy@uZ=Jy+I~amq>x;$1dckvu?|fP^E(a9;cy49|$`s3#Pg$9?MJkx0@q#lE1mPfC|C zo=MHhz4cPP+6e^}lAUYq@IgImkKyVSp;9(N0wl&qe;PS_prr`#@ZbByr{lkjnh5Qd z)jT?O;fQn@q-;v7?>~ZEI#&HdV*IK$2OW-8{{+>|HF}uw5d9c;sY2X@pWb1uP`kS7 zE_AgQk|U~^4=dg|37EGYswQ+GS*QBt6eSqq%XoElrQc^ywop~Jt4Z0V(MIvL?5^4D z+$a9KYEmaHPTn;bd+!Devgj%?eNcsit49^Wv-~2@tb<+Uy^B2?eMCw!)MNVdUW^H7 zeWgzwtImDm*D>Hu$c;eVz4~qxTR+e7!AM%&Y7>ehDVSQiPshYah7^@Ri^$t2^ALT7iZL*2cILFEboi^Z4 zsx3-mkHjm%zczM|SIlB_(2TR~Axz5ffksX`2_JVUSoxDIea z4Qa}hq-*76b>_?8J;$oL$DeW^b zqn_n-=`072l$Gb@pZ|yNo_R?wJugzmHReTj#Ypdrn@*L5=HZeyrx&HEWhc3i*jSJ5 z(K@Y~Xi5_U!500N&L*gjx`VdP@j>zKwWzH}n?4KJnjINkIYdnP5M^^k1-2#mv9!u= z#5oE=qO&XXDwZklT4?7KeyUqJ8-vb{yv*jj@(DKlF#!V?ptN{+Lfgu${%pq9%;~Ru zSQ!Yxnk6H#!nhm0EMmczWu}2*M`3R(U}ybv_V7jSed{I`SK@ zqd==TsNfH>PbG&V?$sxE$V#ke{V`qkc=F|BRQv=RIE&HHa?P9hK@>0*@jpSEs7t~Y zC(WMw&R+3B9aF*91_jr>qdGWV-{t1PcR{ZI)mLO0pk4CL9b>j+KcS!Z8tbY|W_2Ch z$c9MG>k}9Xor!mtF7v{HGB<03Z_R#njfdxP327C7jrGOTvCnBbvFPS|#bBgm*F#TP zA;m{0NVS;Mvn~v!!eWFEXrjZO1acwDz)`LYR);a`R%YA*$~7wLT&ajQ_^7Zl-Z&}_ z8*BwU#DujN52e43-|PlF>@CN`0RJ$%^TZwwX9=Yab5aH?U5Rle#0@e-vZ&4NaR8g{ zLkqmio6@&xK8lxHfqla8CiaPd_4}Bx_FWtm&5d9@ql%fRu9zq)a#ryoHmWmXqo`^& z%2i>b6kQ4vRl#CFCguy3G0Unv-{SabIdakeHZuVV)xZ(#_vj7}ng6-%&?EX!Jpp2! z@DPrIbcyv!RXxyu^a}CV^KwZXRmbat>bxj?2WIko$QAVH^P)l|uGWE|Sv~i$GfDAZ z2>XAyN60Hw_G}IZF_YBPRaY_Eds&ip>}<*BLVggeS8!9j_;ldR@!Ns^_F+3HetD|i>?^s9Mc66ZE-f-E^kT{O>oT>uZ z7j?xA@g-eJ{QNRk9pia{YwZ-1FVsKou&)!g>+6zl=mjR~jsT(aE5k{#v%T z=lf;g24_lb28bj867pVVYrBck)x41PQ&5!BIiiXAc+BqrN`yeTFNz`O!0rxnw3wk4LONCJa3qSBJnw>to_#%jT|0t z8{jGpe<)`qdCKeLzgb+nVBNKG0rE4k$V4o}BGdD9EHY`QV-WzK%!EXTs%`HNq;Mini`Klq`(P}~RB#Nu9XDHiwGG1C?1IQcZ*1#4c_O!69|VF)fVMh}d;jNHSe2s{>I z1yInSfr4!{!0`XMp_~W<#}lNF6P=92nyIr;Gr2@{Hu27OyF^i3pjd{xPg9gr6n9Tk zlvfnRlN2SdgTdRlOqen%^9vFeD3u4&*zknHDt1Y}l;N?@zMxUSQ=HQ^e(HQIs|PQ| zvO0Dlmet=^V_CzP2eIqX9aEWpKID6wfavz@cr4FT_mNmWM)^c6AE$gWmLH*fI+jmR zep+P~@N>H2%zH*xNb$3}vI-XR>ea7)F{!qPRaU*EAE#d=5&D;}N+zG{WnQuOl*Rw%F|KNoU8Glwm<1pGGoNj66UBUVz_3;302H;WmzwZb5A)rqC= z35Vr=$*NJ_h7Bcf+79i`V*2co8%8h`KQc;hU_({PY-OO3N++w1zw||B_8~|__1McQ z9#!#S7dfcAI_lD0!_r|&7ye8YZ>RLi*HpTV(u*#=Z}{|PN@v~nZc5Ml=}t<|y0ncx z0Ny>iR4M>|JR!R~NLvgt4 z%usU1XU9N=q{)?LV0e!Ds;JHcoXdB=4stLz|G-8;N}V41T{x%f}1a@ zO^|f7Jh*vIH$m6dFw}ZZwZP=j+TrGcZi3T|Wt3FMTHF+NC)L9$UN&~K z1y*vnW-d%#j(vt?4i=CiS(-{wmA;iEV%fk)qg^z_;fyiHdY&lOvqQ0-6N>drP^{rk zv4%Ru8nhH^fKprv#>>NUu|+GBh)Jlu)SE<5M*Sum0F1i%B~kN}OR0I^D$V1{yTkDr z-|A))>?WBwDD5N8_~M;poCP%e$An46eI}JRKJ55l^6@G=R8Hzhjp;nil&Fx|-6s}{ zea2`Kf+yseWWKLf2klb~g_Utg2xxV(;?pg=S<3%r+3T={(g4x+`eLh;R4T1lEoz&n z=1L_WrS6P#DQ5j7XMDxK>@Wooa(c){iS8;W3?aUX_0d{gtk{I^Fk}RA@oLd-0Iw!z z@rD{r&QOt8ve~T1~DPOa!E4eOSa56W1I2p{M`oPJ%#VKLTWqr9;qE$Bv$L9btIU6E^gzv1H z^+*;NUvgTbyc|vPk58o2(s7g|{G4H#MCV9GFj_OU0-1o` z(i=M44`&y^#Kx)iEP)Nq=EtigtSXnyRtieTEE5x`dmQDiwRKW0M@-@1rl6|C$L=Sk zsl?Hd30nuDLtSMxprjH87&6o;sz{8UT^=8zztR}iAKt9jOSCX<=crtAxiOF6s_Q*E z>zjBq9rvaJJ&r20+>Y+S1ypBNU^I&=v`kb0mQqTzv!DE8f`-fIjcOV*RH9=@mjlfO~sc{l$#4x|QySV4dtCfLv?jT;jrGtq>A zUh<2}<^iD#V>h96n>fTfN3;=@9Zdt`veK`Tde08c4k;H0v01y1K`ml_U;Pc-Y-xlR z^&Mf7zp^=erCj; zc+Z1lX;@I}2L9PwzF-vWs09P)3O-FIy9~`~bhGOIXVEyRPts7ba-3aGL)5r0HpKPy z5ZA{c#!;2(6r58S><~3j{+m|_!xPM&C%ffrm?(?}6`X7^eD?gtP z)}gvnf5ot^3w74*x|gcFDEH@eyYhQ^knIDH);$hGG@Z3tTCivn7%UrgmE1gquo3if zWJ29_-w%l!6Hn(V?D(pZR^Q~{M3BR7_<8Y%;Nw{F3uk45Wt$E-XpE( zV=NtQ%A9k_<<_Z*UHA6aG19gC691}DRV#DRl0s5Zuw+u`b8DvGA`XEJ@k+jf=GL_YQMwsced3N9P9R}h6 za-2CXBvOXsri9WwycQqw(cbnPm6T<*SHV-VAGkAy$&$*wEr}De02|cwt?E^OVAlux z=w495D&&XjxmM8o)6tC#kxR+0Wc*M?zdIG*r90Adpmm)v^C`T!I^fOKO}x2Ucyo2Y zo2wV$jp@i8IIu*#(Z(l0_~1$7PCM+0_k=n^9O~qgy34MoxqC-sLB^H6RSC|;nzDJ| zWwW8|zZ3 zPLN~yr>}-`H}u1o)($^9k*raRBAg9R)<1`WGyYm~hJcD!N~FzJt_glg)6br+d=ne= z65tSRCN`Q-dl^3|;k4J&gLkDf*QYZ?)AY0^1Z3yeRt}m)Kt>Feeq3#CjBVO)(2Y2! zh8m{1_1CBCK`hM)|4rBPGCQ0XQF#a6$9b7n+*X(u*lM{Ap_D2HJpmU(AM9}e+mvPi z;j^69k;cLAkYfi_Vpy0j1VShBP!4Y(z8qFC5<7T+XJT<24p!scHgLXIN?XB~t`Y*| zgQ2Aqz7JgKr)+QpT{UpVzETlqbiTq6XJBU8|o zUtvv}gNX3eIEV0EwkG9$S+B_$TgaM>frovs$z``!S(7MI-o!Pjl>xv6PawtWsQy7* zIPXe}>(gSA)CPh5OhVd$Wb!X2vet)!zX5aATS_1UP}dJ8;1Lr5YI?bDptR!x(2W+L z#+6z{;DU4G6mf|ak_9l>&t`i-elFzm*X4a|89liNv6r_F)_G_0rAMfHn=Dy!M1=c` z8~f-b`S`fbf`-j&KQL%D&qi-8JsVwKMZD44tF`^VBFD6Js(I@ptSx*+AFuMeOPJ;f zg~AUe4+Yjk5qR?w-Y2Ws!tuX%W0Vk z9cR3{W)RC14hTRcx6uqdWRT#fGt08kSr}9R)mAur9Tr5d&_@q~3}1;{R>kq_kA$#1 zoKsJ0eXDF&fd*z&NH*}8LcO3v=TqX> zJ(IYbu-~mRH=(Ok(IifO`;!Q;SD!@7AWRfvPZ@hRj9u~rE28I|JZMiwOJO#NUeeyy**PQVYjZyM~d36y+Kn)J9RV zE6fuo+lzQ;mc%%EiXQtohu3o82^VKVVV9g39Tl$e6(2=V2TbfMhE+{5I2;5iUCbmU z?ccEqlqFUXZ(q!v2QkS@APNrPXn(tMSQ%Si2RliJ-PwIB*A2CY(Q7(xj| zV3mO+*heo)YIT|hXgguzk_}01DN>8>Es$FC8gm1ZmWX3t0%j{dcEW@4#clnfL1w9J zIAhGa6r4w77RnfD7if8eWR-C(UL`UM#Sob-(0{!oGP@?CPfcdm$mvy!R$KMTWERuK zN}CQ|Xo3S9xjt(K%Vbu9^IGxx7uzeTq6zFlX2(~lc!>!_eW3}o%Gjmm1eP8qhCt475~iE@b?yh(A($XJ)JWt8;yUeW{E5UB?h-S2IUR{BYiH?vqUg}!MKl5U z(>R4l6qlO9C0t2!si4O9Qepk}hQw9dL^&<13ZIhu=tYPtn?k_S)rhOMlCz&C>6Db8 zj4u+`DF&`oUIyAAt7(VSeQ~=P9}-*41}jwMxk&Kn4M+~uzWq3@H4Ljv*CN6@-Xy%^ zHQ|*>RnmgH6MGQo?YDGz%;gc>sp^E1ZB2e|GHprp7rB+o6w7a2iV|a`nLe}G43Gk;jgu6K!ebIQNK4&J!lBA0h z@}kPGB@3iR@M5hBM7M{Z7B1*dui-hy0J20{3%FqYS!}X+ajfwUn-S>-RY#R=-{8?x~pYR(@gH1IG_3(59>L)>EpVFGuVpH7Bb7=mw{pRk*m}@ zEY>aAzz#5AQ1Esha#0)aN`EDltxb?bUt4`KuClUqeR>0gmic-QkNCo2fj79d@auMI z*VpSi2z#^H;UKW!nt8iq>a1Ak0HbUO_9_BB7tm?-jR76s%n0;+G0^GX>jOHwa`B4> z(E%vLe0F{M5RS1G@)runyn5*`{~dFI#~ZG&_6W)~2lte@rr-`?n*$RBo&(eY{(Ayw z4=*43cNo5L4ijmCj3*5sIK7GC@O*^BSzZ6qaCk1l;S5*7VL?{_@ibRK0vu&(ugySX z!$LU8N<&=pvRMq1??7+_8Ae-ejT0kqJPPtxu*SIW=GEUA91p7qTHwZOa2(SWaLjWR zILIq&aNxyjaGV1iA`dJi6Rk0>fzFI*iRi-EkS1u3S{Iq47u5swd*^li@Hd33IMBLN zIMBLNXLY4hXSk|U&+0jIw4f{adIIkWc~pDZCY7w_u=P#ltO#yl%S#`A19e1j4&thw z>7l)XpwB_W+tBMiKAw&>>|LWZp^}p7B-0ZK9!N_0HQo&gloZT@6H`w_yUZ;9q{S(y zx@dmiARVeOA-i&YKvZt-QPMxD_7dkGTvC(24@yaGO9FO^l-l=cL-C-4)%)xKXCWK&h!gYy%$H`cj4;luk}BYHUTZYtI4(#hKy4jrurQ|Ae#)6%Az&low`%LfM-stt>G zVJ!3uhN<{UD@@{!JwERb2xc06LO@k8>n!7c3r( z4Rda$Mz{<@PG7aL*s9ONR~3ISwYVeLUD-ix0Ng{fBpjJ({IcuDQJPFC>UF?!4TFHObX{O6LL5u=Cx^89UR{7&~-? z*L4WlC4&#%G(z>n+eD}?{@u5ZP+k1HR|plJeTxXypS)Fs>e%ZfROg0-DwI|uK~h+K zTZ9VCc>4*}6C*-Ju_ja$YeIEwM5wr16RIcPAfdYC*x!Ca_2k<`s4o89w~kO<{JU2O z)lx$B)whaJee`t_sxJ=-RVcmbgbK`f`w7*PBSJ;7CR7w_LiN!Rq2g{$sGfX-gzA!G zfBOm5r{5+*b@A`Mb%g5T-@QVpmJ+J-Zxx~Xj^n7njJKaq5%5)ueiUm$6~e$Qf+zMLa3G!sy}_J2-SBSM+IiAwATN2 zbyTNEgoRHxq{p}OSQzimSG#ffY>gqFw>nqvt?k$+t>Z>_2_%jDJ5 zFMkOWfXq|4>0+KDxs2>myA%PjKzV;=%^nfQj$%L`Dw=gX3x@R&C}ESMO$Dda@;PkT zxx5X~lIGP(EQ&vxq8r4heJ&-5kq+s@D8SDbF)FyYi39DFz{kgGy+Uy|RL~KMTUGNV z9ZJUagU$xr*>#F4_Wm1DP`7LKaZk!Y8o=EM&9(I2J|qiMDCSIu ziPnl~hliphcIEm2x3(H@hx9KF64hgCrXhW9S^!YqqV-|?b8@%#JyNt_5zu$Y&{9-e zH5r&O@T{`)6&GG46Dqw@rBcb3a8QslroG09UzCR^?#QahRBu!XLySCX({imdxm0JL zSL%&!i7_O&kz(y}FpwvPq%^T#2V%ca7&FQE+Nx#xBKK(Z6KM1elskgk#a(E@jbQr% zg6(Y}*q&0;MIZ{6WEo+Yvf?uwJBN3h{@gYgJ5;6|TSFD%yO<4p$*M9|xvkH95Vf5g z#@m891#itB4@EFt(GVz5MQd}AXDoqKMrg4`MD(QTw!BmK0Y4ZzInyzD5$kOEb z)@NkopsS?IA<+!(mnxp5hzEX5D-}!jnD#w;QM*J!AKYzaSHTCfDm6~IgoDpISBu3W zuUq_kgDVN9y4#p19J%-6gG%@D4If2K3tcA#OJY%0j1O1fmC=lgpI$^ppRUR1{falcLPl9l zSIFoUGJ1uK>R{o&b7b_nNs`ZGI&}R4jFbHGvg||E*$clRuZ|Xuca-Fnj0<2WiNnrh z1^(A-T}`}e;%bU$Ee2Bx9HP{n91uvm-mjItUFp5PFV|=?7@3n*j^SBc6?mhJx9$+9 zg2US{`lH(kI?Ad?>K{JPY@K*KSR~~@UHXs1JA;!T`^*3Rh0lJfeQiQlayRW2}OT+VfGgwfCDiH{x0oI43=VZq@p(`&wF@CsHa%uHD)p%q{fm!v{Q=Zf765@fYKjO!xB-t(i z$w{XbI48;l(m>!p%r4hFcx00~vhgP3Z_OynNyMB7As^;EI0Z0(8b(zPzxY%w0X5Gh z-+b!#|JBvEayr_5l(*vEBgl9A^g*z9@Eu@>=bD5I%Y-ru5xDlqr1hs+i42xwIuFBR zb>td?XAZgS3*~}m7Q0L+8y7wy?@j9>BjO1x z9=1Q>GpXDv30WjTdOi1qHp_pSj;Pc-6xe;@0OLI(;9>NXZYgd`y%~R1QVL z{e%msFBVTRm(2)M%O5=+1O}40QI#y?xWrKrGrEUwit>6O%!BE32n>9w2dC_Y%`iGr zQD0(3h_4I{#-?d7Hcf*He+>=JFae5{215fbrxF5a#5}YdZU*TFveDhdQHg|W+{lZO zi{?BHa9MuAFP!IS;CEK9atQ%3Sp|;{iWobpq)Li^_YOcsYN!ALqk~D~nMu*e3yL$r zYbE3sUUIplD@!=Gz3XVo`rS*u^!dr`d*d1I9C;w!g274h29X7Hh$0Jkt;q)pG9XYp zp+i?;E4qm!rz(ifViqV+zr%8xP(W`0RB3O@U{N8eX-9>6{$~H;;&!Tb;I`jyy`sHIardY-=rOO_Gd9TW!Yr z!WVk25)pC(he_RNG86R01h{4k5cO_#a_nm%ljWN2!-@ht1O9Q{x7dxtF(5IOv4m-H{t z6;ggWe+QaXuuHp>FG?lg0f2(asGvykFaVO3krV_-L5%L@0vmP@7a(*OfZ`jl-gew) zK~Z8u8cY?h_Np=UiNo%ta9bcUU`s;JTKss1AG1kcPsKXaq0C z&W!1y9>>l&|F%+W0B=$ca9iR>uZ~cPZxMPU!bH%)elgCx&S0g7WX|?*Va|4Qp$+Y@ zCkUw786Ikj;NiCLaI0Qajx)bF8=lRCXJvS{k&8Jb*OaQ47ivhth_gDC?H_f#}B;euQi zFpH8o3AcDks}P8u)b(dPj>lAFASbv=1^lS4ObYqT{rh1(r)_ebdpVK++`o_M%Ew-k zM?9S+g2YXq*Y)S!G!Z0jng|kSUV2_vzD^{Ge?O<^G)+W_mnab>{=J|pO`p(}riqwI z6`VrEOj@0G(?ra;X(DC}j$^t4k9n?IXQ-at)T_GE)H(mYJ|z|@)x@0D^+`ANoQeQ| zCE=zPbj=)#WKuyal3zKkD@`G8lMPI$0Gxw8gkO=CnT6#(RTc%eXo)QfZo!UN^VF@t zVe3NLhNces=O@D19~VfP(4I*Gm8<`P#ukU5R>dEX-KRR4k)j9cq(9x_K?oRmXfxtj zy`%HPNz)$shut}KCPjA&@{tW$dW%oG)s6%obR#N(s5lOmXB~19E^};E_z14*#(W2 z=*U>-#J_*eD`tIIE@|;eVpO2p#^f@TXnH-<2wLpW=~R+8+tz@+CVdOyKEG$PorBuk zYndOmb(zdBOCtOsoMw$I!O&~??4?oImpx%%JNR_#2~=^B#b(2V^rAra)MPPs z-L!Yn(7wkJ|) zf}reY!c8VIQM+&lPQXWTbLhH*%~;^vCOsi<_>mQBeq(Eh&)XK97y4;Vn*gfzm0+W{ zuf!rbs3V3C19vS4$yY*|$iQ=DAoI{kYY^oiG?MTFqFWrJhO!E@mOv3e*@)j;A>s9^ z@q1xr!dXB|VF0nJVNeDbpy8`QV@Jf{yyA0oS@UX^wK1=(Q_ZW~e$5vyr{?o0E zO=uRsiX@KiM}tdB=tWF`p59$CXS}OlCh7A zOfg^H%5u4%h*G)1C%ZpM{hoVkpZpsw-(EjFVA+EJqe zElJL^>jY(l>?Qrs#S^bR;9c0Y_L#K+~oTNJEP7sk`VKQf80wU2r3tz-?3h4Up z#OW`D48JlyEFdZJNj{?!gyCkKvs)$)a&~u=lbeLieD*)492t0x>N$0{&d0lx+DKY4 zb@v4hxue3^D0eq?ox9t0?=)Md#z?YSaQT8tv!r`vDc>fKJx~T2vPp;+-Wmww$zvucgD+7KX3oocSkk=C=s? z6=}{>VKMLI{*<>BTHz2dM6Fhx`WrmbnXy%N6P!~H8^ktF5;Q=Grw?Z*E7kS568my1 z8B8{B!DuOI3l=;m69@WIXLFMAF=_0P0;Tii_+jaXdCpn2Ik}R{Y(SSx1eI{Ttq;gT z!3;+P@f?alA@92Ql7FHB5m%4Yf2aCK!?C7kG4m{{{vGmULP4O(bj92i^X0SYcS4=k z!O4Ec2tdl9`Mxe(#t&5-Gz>OZ4}cWZ2>8T$yGE0VJ5 zaf=3quW+=T?$HCsXxAtJ?rE|n4j;sxW;EJ)*b^P_LI|OJEFci%tPclWc5a*!*^lyI zINFh~(98t#Nu#0T8_B_x9HQztiBY?JT+^@rF4W6m*gfTuQ}@KItH$|dHL5s(RI7&n z&ek=)K8}ZHE}QxswhfFhP*o(3NT6!?FTcw4&J@T8j5i9b=_Pmr$fG3zxb&)y;Y?dh((Re3iR2@6?xpI8k1gFlne){CIG26P*6=@p)CvG7p zHd+&>r5dYdfY=y5Y~f++78uttPK4qod%*L`X(csba5=pZy*`^tWH-f(b(;szZ{=ZD z?P%Vb<;J>$)$cyEkWiXEs1xbo2}yDNLiz40wd+XVatotMWO}H6(Tw;)Z0vQp4kL*{Tod&t~W#Lnv!3 zD5sbjmjCKgLsqg|FjuZTH3`3h4Y zDhVMD0H%}c88O12PFvONkpI_HxhW$}^sJDxpIp-KOJjSBir!Rz!G?X?6y<7tuy@FKa?tKva30=;4_Qb_#K| z;pk%8?Lo>K@_`6dgXyv}gJ>4*3Z3093TtsikQOY?&|AonI}1UPgsIMwk3iY=!ui!^XTi#wdHpppz8K(9Tz zFR^v>E0kib=G&JP2fu5`-NG+kA$PNo^Y1`%w|r`@kh?47&ZqJ&S2(Ol?oMlQo7}lH zBzMF6CU?VMRkIe#?BUy&BzI>!m}tH0#Zw2^0J{T}-#Hu>atg<0ljD-z7oDIF2jS}U zR`4U*S@~H=*~_NI5Ay?y1nyd6*%Y{C|6-F8d*Mw=7BWS>&=$w$!LLw2o7UVuUS~5q z;7@5}=U@$@W76;C@S$kipNkyctiJ-Q$Eiy3D>lE^U#Znj(hf*|Zgy7YH;3rJ*ulut z2$js&VL33VipJh!Cr;xpn$4HJSp{F$^s;hf6s z*-v3yCZ;P&||j`i&YP!48xdd4nut1m$uKLAN0yKflp$xx0!9LnT|}Hmm0-8WvK5$ zvNN{Za(cb(qm5-neNrU%h5^w!MG3LL|)?vybdfB4EvsugR#~% zXEsagqn|JbXYm3 zs|WYCp&pht_j*!lx0&I|i8Q@j2N_ADM3*?`;5&mdPkEFjfCsM&nAdBO*kH~#WjKay z4W*enP)81AWw^I4g!51j%Z3~~Dao#c-T^H{fIwy#lt`h%cc`2GppdW{U*Ew+rHAy& zT@J-IXtd^0GN*bKck)5cS?W~-|I%24Qg|f;K&@&aJ!G*ihv`PV>SxWI|1>av|A&tr zJAPteo->VLZEf3@B@Fmu%xpYD7{*RilLCTL=Y3kzszV%Qkbu4ygpQxC0sV$dwjgVz!nY24eZ z+adwJ>;bnY-_(UT$s~niLoV%*_LcE$GPnbuCEgHCRE3gHkWZ@RC)2m;#jUHzZ+FlE znI+!$nQuAjPsmQKO^$#MOy7WCj=Jo?wAzWO>XV=uIsd(=T(lH^=ZOU{h)rI)9h7OD zyaVaS*&7Gh*-$FC=Vd54a?(#x8{n0wdf28hlcvTr_~Jy zt1ujg?S`|>b+9?g{)uWnJtD1p0Pl&VM?QxWwlOS!KOa8vwJ(4}yJ;slvrC;q31{{_ zl+aFtPSVn33URfqi>N5gP-oJPB_>CrP84wSh_qu;ySxH8 zL^LL~yH9Sg9z?%Dd11b3Q92Cjz|F9$V~z21xB+#GwEO*b9*!@Rr*>G8A<-t=MVK%t zo5F-a$AW*n^lS2IHn4M)i2fmX=L8-2hc}#RvznA%FV(ajnaV~GmUmtz`}`XPBW(hg zmB7ft4mbtrsi$-Kf$7Zp5ZHn84?$g%{hmNAE>)oJ3Dms+>T!MnY7y$VZ3nU+QQ5$5 z1LZ**eAdR>;Z!lZDWO2mMNNn#w#)mWYU}%13ozA?c9vV9j?6h*h3BPa#=Hg9eW|w~ z#q!AeuGtq*!&{IhR+Aq41m!q1NX$pqtVw-5v4@9M3q#q4a)Ru_{mFRN<>Yi2x6@+t1Lrm?gICy{xJcsQQiKEgOxpNa z%BhguA3JO{d60P;Fc}9c4jJ-&YHTb!@PcvC73zgKu_DzpRKm`g;_iLGCilo*fU}qj5Z#kBp?gr>6R`-{eIyp4yCI^@ z>-bo_3+0`s2pofdPFB1|mS>2PqvE0CE}p<+s0_tND55r2h2s=8YKq4wiilE_cTqxd zLTT8o#+P&MLxFR+gW|kG=!##pSM9u9Dgq@tsvXQuyTvg`hd`Q$g2)w+{_SHmNNB(~ zq~)MG0h4ttwNc2^BqoTUK8N+Fc9XG6OYs|keUZf#wmp2H$|7z(m4e#zlw`+{wbP!tS=9A71_4*R9?y%%Wds_v?z$c3uYN~K11*N@|BGU?N zqs*$OK4iWYwrN5rhpkg%C<#S{9oQ2}ASF{Ax;0)s^8n`;J?l%Xj#~=UY@EQ9VY>ie{3y9xP7>GPL+VGB-jI& zQ(F6m_6Y*AbgNtZQLCI{-tqGUw*VU!(P}-%(~k4O=*R)$St<$^EUA%@gZKl{kuof} zmErjAW;yjw8_c-F2*5D?L4+Oo}g9O8@EoyWC(jfW&KKG;@IP0{h>^i~+?r@!8$>ghWcFp?-^o~Z)t~q=oT8>y(Jlh09T=YXl zq?zmsH#;JKgSCKfio_*n$&2Df*bq3{usDX?B{V3wD3y+a;h5CHRpnYzn7q;>>L4wN zv7>`y#lKaK6uLdDl}%|=R%&H;C1Tp?S8f*598lC_Qm6UQn!tC6AmH0BYJe|miwiEC z90da;$BhVWLh0z0d|;PCob|10apl*H0&82Y&WjW`Uix`p7oy^(9i4$awomE+#}Ed9 z2+U^3$c*;G!6lL^)l2q4dTAL`%k4?z8Lx#wbgW|;ysvK}w@=D6rf3>SbEJ<(?vy7+ z6ZU>026)mgJ}h$?f==;K4K#=wAljip*QiBJL{SE+SCpQ`DBVah^b(_86!2t`zrBcK zh>|4~ZCZ3ZD!=THSMN#<#oW*z?_zqnuq$E0i=-xcxHryoxU}T>jV`_j?RtG<-o91i ztU5=;AVFO@OPu(fYWBUF6Ob9e!NvDj@ zI0-=-Ws{gf|7{aO(+&r$EWAUcd9W49DbaSGE=6p6Q-#6sqt&pDBz-U zzp4v=fe+?`)5&Bt%Rm2;;qG4y6XP9kCdRu%`)fF!DdfdFQ04?IWc#_GOi=bRv9v@U zD4bRFn!gB<1GLFbatEWrKgq^t-~<|}?w+UF6EOQoL)ml4BgjB5zessjMdh}WCFH*0RT#aMG8CE zeGPC?x;rEg`3f=5di5<%cei)gv3+&AyO)@1pi38|FtkEV{RAGGq1kLd?1?4?l4-oz z6YvIv7~&04ebAB|-!w2({7IedZnxgNxsmM-<0RA3%yxIP1UOB|VfZL&6DEmXshRC= z4_k|}-SPeEq}kNGI*)Zy+3s3wcE(mVxM6ZTPO996>#2DVDCr#DLk4cP8tH! zFicgRxG~OTQm3|tzM-ue_N`(E&pkd~vY=S`ggZPc&0@pJFYB|UM$xo&xDB^3o{7aW z&0SVG6_J*hNew-e_!#&z4M6DI2C3m!5~UJg9iRu;h{M(Id}y&61Z0u1ob98&5Ai1fZ= zA!6?yizop-rRjoztc)SjUN$iVQOE0H9GXd}=|u3(V5zf~SrN6}CQ+kl3GPUJ7JOCU z(2fj}4am??DK)C6R-d7lR->1rL;t%@Ww2p@LszH_xD-~^6)Gd@dxgpn_IZWMyji>q z8p117<_a&fl()M=W&T#F%%4rBV=|T1A8hQ@`^?UM>9`j@B~SfFxEp=a8~r?Kav9-Z+w}6cqVxiB{Jo zasrSlsS4)ntp}^Wxj>s8__jYuiyxV;?*B`E5)_YFrutLg`TduXL8cX+uu6=&%u8RyN$Q@Ql$mcNSq(>QbNIQW+u|7x7k_bs)y zs%O5=^tb)Aft~3^aTBGvtXIrJb^Ilr8u3s{@i7pIy!{lJ@|P75Kd;*l`}V!QdtP_( z!>Eq>CaxG%MX?rgrG=Y^eY4~qZVlCiKU1T(`(DAl{oH%yYq}@bl%#rIE$-vyi@y0j z-$b#coP+h-H|wU-jp6j;?(TN2XH;vBo6q~zoxX{g(H=F`v%V=*OsZFPbE}I-Gl~Hp zH&Qy5!sG=IRxfBF3A9`2} z9F#^krb9| z@@HT9voC$+haWh)7t(J>>{Q7IP(uuzDmG#`=f?Uzj^c8xLQ^PJg?cdnTZ+%HNA%Gl z!dz05%f_IBUQcCyts`-OSGnqh>^|rUFk*xB&f%TQmWtKE`e_ucv$W1La!vqk2sLC=$oA~^xUVk!Y08-T`I$1+Gr0=?p$l!y3MG=LCU#VC6c>ACZF{nT2!xmjfdulYX^#RQ)H014Ll=#< zZoH0XQ{(alu)ZobPNpI&!Mxt&R5^6AP+~S=v^!g8@wU&5hCrWVGH>@dRihAry2rIE ztKy>3gUG6}|FFA8?~9!L#| z#X?h?0Q1Dk=D1k|NEe^-*n4svR<{|zPdBP5+i;(z3AHXY2m3o8&(N=gRRO;!1^NgAn#UfF;m|LZ) z?8|j9HjPCO3S+KDb@G&i89m1 z%iz0x+o04CzLW#i;=h|VL|3Ymf%02)S{+hTY(+F%O`x5|fjuIWJQu$KN(-f&Cka_$eRx6 zr;l#rNIBsglWB~Q$E|F3@OX0FVM9*1kcIw<4+?R}RJ)uIH7O9D7Fv9f21WNl{C7;) z6qI5bbn?^qJ~;XGC8^4T6KO|G&IMw3;BvCL(Lb{fLt&PTUAoa705Sm2RxOh>AO?PKpKf85QMY;8;!q%*n@nb9o#%`NSHm83}dk{#$AiEW0N*OvD%Mjn7bV5WOKT1VLN5~0&BQ;K?8?JmU&q=vdm5%2=4v=lEizN6Z2xz3YrI^f8$bO0Z$jliro7cC|2XDwZr>tdq-bgt|Ri~VD)jKEIX6MO3hWdxTQ!Z3ypH_Lkb<+kNYs0F7&DNAd zAf4;RfWo&%0<@4|uaUrdh;_>526cBPAP~QJ(*8BA09?5qu#nK&fY#ObRNl{e!_&jrTmP_^#;fQfBgTUaI+i41bY z+9O*Ne-Pj_Nzs)(P$)f=(O!XsU{8=WBuuHz*$_!obHYPzsU;tYRh+TZhW9TvMeiES z3Tn83aD?Ipe53K*A=-=Cs}{7D=qO$~yIMayB{)jhBi*!~K9!0eFaDC-@GrrGO{eR4 zF--8D!QtRyg9A=vF*v%*!7(Xt=-ec6>6$>Uj%v9Ka4cf$#5^{@v5c)7f`bI60UUB0 zngxHLz%$`e>cZ}i+lRBzuQu_fmVi*>+ik|iBS#k$5y5)kCL)Y2AGx9t03Hz+apYVt zcjR>_ndPk|BadPi>;p71u+2k62=QbA5ln-ft&ve|eLaZ2Ga&l5w*b+11iY*feV9C! zRk1uZ1^dq;aid0bh?Fo1k2WsaEiLxqa445P1n^R>heLV+S;FH>Oq!H9M6*lx68WnW z(qqh4ul_!w-lx|g&0Uhs`m2tE2&FpRx9GTxrh|?ivepBwQPrNjV89(>VHCW6ukiM*`Ji>EHZJl8F{=nmq;wjV__aP^T6sAvdZGLJLqc@cC9NQ%$M&|_Z;M;AY>PVT zOp;`>>%IpXNe({Z@au7uR*zjbsPxKOR_((H7AZu_y^JE@CznA+x13$aziG0y2*){lYjMHbHfetBL4gw5sUr z04FCf5sF!Zb2fl8h_kh`+2w%KL<6wx2Vz`;TW;P@BcCZ2Dk>}-XEY|tkCA71eofn3 zLHO>f2U05xi)kGC=(34K+RY4@6RVRf(}m!oTZ`tyzz%U}aZ`vG0{9|+s0nWh@U8WL zln;~E?y$q}+d7~Fp$k!3|F#AsY!4bGFCNslrmouH#hCN3R{jw7pw)8E5sp-Zw;^G$ zpp=`UfatdpDIP*HFURlc&pIi&5$2lz1XGxUEy+51FrBwDt7gPECZM;oIXYu`h#4(& zV+va>@|QdWM;#6RUyFo8olC?XBXw+0S0Er*%_6;ml7=9W_WBb!9YO)1y!I?Rw&@*% z8aSr+L1b!ZcGyb%ou+nes7s96HJF@8R%kGxL2_#ft`6DHiEc8*)i|Phu*)1=;u}$M zBr8l5x%~}s7PX4k+Rv{M7#_U8BK8?_Yp+#DKiZgF6G z>W@mB0KL>lQ6K37h18;rA6<}rRf(XMel<9-uJBPMf?D)drtKnM9ZHk-yw_KmK4a0M zB=C{S)QJIBOlc)0u#U2XmPjAu@xf(x7lb|k71}9&1D-1>bQ|=6z*FM zCoGmlfRo=VtiiYiV4+}F>aC#m0#E9N2R@5s(RuL8+h(Dni1OoqbPx#-XV>cG*9gY_ zYtFTrhlQ6?HLOd36SL4*?E}8WrOs7Ly=Efh*vJ><^H^=H$}(f23(+-%Y9V2v!}SR= zEcD|)&4&M9R|{NL-ta#?!T#vFrPf zQJZGQdAyJHcjetOVwX2^J?EB zlz$~X?e=ao9?WVknd4&-N8zhDd0rMEyl|_aB-MAYy3qV&pLq|ORJa!jWxNUpm(A(a z8br!GXE73S4b9`=zvp=F;AEwWlJrzMeO4AvT4fMo{4o2_>ZW{7z;fw;!f{;MzdbKQ zX`cc?e2>)%NZ9PdRT066;A{oa89pS`DkTM8*3h|j2OJ~ z*~<3}CIu1(ddH;DqzGp#Pc+X~o-H%0w58@Nfdy}@kGJmd%cHZEG1`vKR^BEISdWeY zM5092jBJj%lYP$PN6?u<^P!1lygP%HM`)3TV7nC69$;dBwuuml66iyTrSKXHSm>2+ zLnZ(vV{q8>gEn2*SBDF)n5sk>fJq-DxT4bxL~JSs3M+#kABJiL>pThyp@G$OElk9g z>(k=-DIGXRI;PPyQ&V&N)TE9U(KLIQMiVutb(IQjNT4AUbZM&q>k{J0`cOhV(bA$G z!7u^6kV}NVl}{?E89oa~LOQX^^^PsVA9qu|VEP=*Fyws+Myf@}v_ui-72KBs#fyfl zc>k0Rtd;1)cff7aDe>1R7_EW6q(Jm@6IipHz8v9UfFG6See_TGLEQ6}WCwF7jeiDG z3|){gJjoLY&5C%8Oj|yafmm*HG&Do|u@r)E^-73A-L2Bg@ME8TY~zRW3aC7Tjhaj8 zXef|U{1624Ch&@q6j^N7Hk<4hp8Bke4z|G;|1%I!M4<=(DxjAOY079xhw?d0MtG`D zqcljkV(G?=FN~2V1KO#QE+dNKPlD;1BqdvtJ*@2k>Ic-5kiO7AHcNE{K^OH9&2u&a zYlf~RtPJkk7+Q9GumiOuxG7UYlz1kK-@p9=lFonQ2AKNrRz?;TJP5&3{h3|nqIqVQm|a$O!Qo+vPy`&IOO zb!|Bd#p(~MNK?uRgPR*@NkApz;@2_a;eW~J=XeiKK!TtK;wojxm{ek#Jmfnrn*(TO zCmH-`OaLOV94N@IOLp+WmgIH_3l<6JkB|vX0q7BsY2Sd;xLP7d02T5m^dWso#F*Q# zCF;j*dSgF7GGQd;xdA$!rz}KMIF$u#+RN_3!<)gI>W_cxk3acO4_9mcmq9xm8S&1$ zpV(EW6-+;*bJ%o<8-5Q}wb#TBIsa7!LB|5L} z`OlFV|9h&3xkSGW1DZ(DuvZmdZny3$Q-p9t2cf@KFI6NrHP9cHGpy?+vzf-(+{Y@W zh4-m(ws7bYxVe|r)zv&okhx4m24iddoic*f_zO1Q5s>b#A+FXa2s&qnV`3tTw{yl= zjhGQ5ziGSXw~x{PM(05p*JISBJpttrcDv{(N1j1VGK5Ui&}8z|6{hkHGL;V1A2OAs z1-xvgl1+8QSfbHCSp55CjAd@UY?HBM)k8Q$7|mF^WX94ZGnOuyv2@9drAv{q)QS{t^>s3qpZI&qSf;BnmP^>maO_iLE0yF31Yzq9Y$b$v30rAyO?EYf zL~A-O&QI!iv>`tkqw8ya(mP)dTI8wrFX^p^jO70{CHg6*6C%2VqvRE^p*VAeqio9L zzZMcKvn}JFeuAAwekB=N!$>9|mP>avFo$@49(s(&hII`W`+o!%66* zO9_H_8MgJ(30ow>{h>6H&ZWVVG3C^d-HVaJyQb{+$^{K5PuaZ4+6VEC70xrb*AXk6wlB3LNP<&0~EMYTwUmO?;Vm2U#lj&ER zUxNT{Is2ffcmE28%tN;C8YrRRuU*P#(tLiliUn>++~`hdM(If(lF$v-iC31lYK)7Sw3jQINYJTk+#ocu<(uUt^K3Or5!7X5$Ud5}*emktI z;826H7}k5_Qgq4YG{T`L)SK#nCA}ap{s^rKZmv$ie?GDBoE?5xrc=o4Vu*T7O zE1QZ=|EyiGsIuhP&v767S-W73kIsptYU9+;N$lqHLl-Q{Ll-Qi_g&cqORH75u+#-h zivyjNa6Y(Up##x@Y{78iSAwGzMTs~tJhCGVt0SJ+neb%QH5V~+KCz4rtH9W6rV2PU0H_GzHsCQPjR-B9+}dfkUxkL zQz^azeVHs9y@SPric*X{kFW$dVNUA5yZ~3)mc44M4P)v<+R-7BPFmW+cJ<7oXV4q& zr-a2rnS*hL-N%K~%jvpwGVJwr>%U>g#!(y461PFD(CcY~mAR~q&wwkhrw!KgvNk^V zI@^E?8?^yqYAm0Booz6mqc)gfwecB(L|@NXa8K_A^fe+sE|q=OTuRxBODSR=3v0NP zvPB3G7DZ4^FJ4n%>ux$4*OcD!sz05|Lc;_3!?MEu224Y$2rI0sE+Xc_;qCfAUpe_x z|KD%_)GuucYnvr1JddsNOC55nxEM$fuI**E=ccfl*mGg{pH9mZi!K|t>^VtwPOck> z*jRKWw0HsR7%r5p!-X{4HZlW2Sqov6Opp5*^ECAg$<zbD={zAiQnn9d3e+XCvP??$q_j`@g}g09MKBOymVzR*8Ab06LDVd!m~M5C!%kt@f@*nLi;#BEdImmLPH~@o z?*I7Ahi;vMi{-mB???8=4t5Lnb#mWgNSPeenn0e*mW;GqPRX)N??9;vd!vY(9#BID zzr36dd(zOGrvwIRo=DnKU-_d0m}WRgx|*@PApc%EtWjW=p~M`3lNv*?x{!NRzzFaT zR%-jzDk0;{`{^teymc|6u_v=NU{m%c`lVM%-;Oy(CDOO6+jNp;XDL8Qo7ENIj75m! z7b0-1M`!o(FnUa1jgSj7z_9m_;orp~r~R zZH@qg){?%n@ss2=^qt63^dF(2mHHliorxU{c0Bc3r0`=;ethg!z6*X1(Ue}u2UNSx z8MG|yx7P$O0!+rx&qY-Xbd;R?^$ey|2e`9 zgh)|hT$8$*)L^w*88xz2!Gt{gp=3sFjwfcY+ zn&t47R9|3f)ViGfG19gqM7E?By>7W6+WtvKNJ9 z(2MNJR>G^nMD`X@Q`QykTJrQ4>mkqD$)B9a#_wzEsErG(<7Gx+rbWxA%JF;2aGR@- zF+TMqU9mAbt6n8{ruJ(fd^)AL2bv$)&N4QuO*?}<-HI>Zr#js=dy?Ol2s@1 z3vJy=8?A#RZuFi7?p}+9PC}qo#UMSzMV|by!RQe3Idx2dF>1Z(a*%S!oo`M=pNc2gg zNsS+5_U~=a4}>2qFPoVCgg6#XHX>1js?qN?+w;BQ$2|jF81~RE&1~gD1G8LswdBG} za(WgepTPXY=*)P`cr*K(SIhyG|z`=YkzEhdk!BEKf66&h-DoSazZ4EHjH@n|NdtB0jP@O7CEWl19#e*{bdL&Daz3fR`!c(Bax6@__u!@ z-dP%{`&obSc|Hk>;Njs+oe4I570;yG6YVM#7br@xLh)&eNy(bHjynmeF^!F(ZjyvE z9!lNq$=XmVwkPilrS;pBeklFJ?a6F_#s^84E^68EtD`M@gG66F$hI7(1DnE2#s$=z zVpJd+#sgS~F9RWR5@(C>;Dv062QQjQG;q&m0{V#v-ZPmH0VTViEo8z3`xa=VnNZi+_vTPyi2SPjS_0rk?p$-IlblbWA` zXdy&otj?5xkbv5`O5<7mX9w(;o@(#L0CR429?A(b%KLeM~o1!uS4ze^4Vvm zZnX(y%%_P?sS!43d+MjYbgczPI9XmL*yQ~w6jnrJ zaaNz&;9R@lq{*$8+*hje>^1LDThs5E;?yyQxdwFW^a~nE%Xg>|0~PntuMmYEM2x+I z%xTiW5-}gZzo&gpbI``IBrv1>9^ID~ohEu=W^L0KBS(OkX45_mOF*dNm4p!o-+31cUl`xoW_s}=E=8m`$ohH-@Zz6rT16xW*i3CSTz$_PrJ_C(G zS+>6H?rMqa>F(-l?{Za58P86`zD0oF0)1RE>f4Y{76UxEQL(4i00-GnJqzA<1b83T z#fZQc<__`aWsn{ONCFy$QS)-}3hU875TB~iF! zU876ZHFop{@&;@HMJCQ}fPnq8UqY09jJvz!R*K>U<9w%jB zW#NtNL@YN2IS6}x&ZjBOiqzN+sn2c=+8j#ge~^^rKbXQH{Yda*6&uQGm23iogRmRW zKZ)4KwMPFMua-PAVs?=1ieJEe)N$t0JyR;_$1>+`iLHygyX~r*TZhE95nXi^gCZUm z`LufRTXsD~(yBX`#m;eE+PNi<)VZjN)*PaQ(-=J+oJ(3y$4s1#hkj)^9g0S%r( z9e@aC4mRA$-;l<`Y9}%jv^P%2Zba5a)4@kH9ipM4 z`1YXJG(kFmL8n>>sxWBM!|SR?Pkkw21Fl{Im4Z~*fEm>n{i>Qo^^!bTv-U!_KF@m& z(=zlF#;W*wJCIV72JMwuIGP#)gqlEn=z1Xyg1#1ai$h4u-s4=Mc3RVja%)?(q|^&u z+1q>q+8m7r{(Y~QR+H3idYC=n+xEpDme2b3FAFIaS zYe9_NmbdA$7+cq7+tEwNU-1SOIlF6gB+h;P3y5>{TKpTN;RAPSdT`Uw7(svaH>Y2` z9lw-S6Q~enr^OAAISgQw$1!8K;LCSJPLF=GgN2V|&%anY^ zhq5ZdK+X{87u3@zQ#u%zHgrZZooRc9wK>|4LP{2u>xSz@Om4WVhPxyNrC}XvN5ja< zpcj7~S+(Dl=QcW-ff!!&dd!PZE`8 zb8R!XtR=gcp%o0HL(R;x9r~FTAD6?D%pi;NQ_5W*QCMz?&~c@nge5^(j%g}qG_y|4 zI!j4u)WoT%L{378b4lBooP0jsX2#N(fRS{pQnR+|tc%M2S|4GGT7ouEIx?W@l}`+Z z1MlftG>3Wgzv3HYarNgz*hG1-dil2?^ErC~+5i4!rtG$lVJiIp*?ZR@%c|?n^E~b= z^WMxn1ql>X+B)|}&U6x8HL8imq8c-;JQb)Z1~5#IJ}?nP3?GOvQAH?JsDfc8kSGL5 z)iSnAVA(n{J^nZkJ^&AzNc(jpUYX$tqiq1__VxSR>OdS(@K}t-a4Z zH}mELD6m>8D#)|%dF;p9Yp=cDyV4N2^C8{Q`uVS<0Nj%-k6O1Fp)hwX_;74N0wVTT zJ5*bM63DA{xoo|w_H132Ri2sc--j_6&kb>j8cbIM!&8Uhj9Lt6F3(m)Fvd;Bxv{6B zE(7?N;%RAbEiY_LnQPC5u}se^0EY>U;M``@^NMxTW7XRXJ>54V`+!o;W||?!k;EBN zV+;*Mrv;m#iJ=|6pP?BNHiwpNIy7~?F*Iu}WCM183*yQECj$T5AqX>*MsznrQ2IXpCd+&>-wnhxV4KLrXRtnlJJiA+5FM&{$fhacJqp z&=|*>p)oKs6O=j2xBv4!va@Qg#D>_03=`41r;pJS_G?ei)#=h?)+{?pwpeyU=8N*D8EThAJy- zgEQE0s4}XW`Jvv$ZK$F%FVQ5hfo-d2vb!{U2JOJw3D>X~dX+kshNscQ59t<*EE z@|UP*Vqvz^GiOc=tqpOJYm9$FJtK8!2=~{r&cLy zG*!BtTpNGapbqCV)OZG7*i}a61klwcuPqZiC=lt@A(zJnMuS_C^pby%~U` zwXWVkn*S925=AAmqbFj!;Iz3&ch3FNURe;Cu(#YJ*`B};aSP6f@#SO29223!TOw~B zndzw!(`^Wt)Z$E;d=0GU(#R@bMofAv(%5p+sBTA7Wg~|Z606G+AzGPAQAkZJNbF=* zDIE?lH#XO$iU27UabQ@V50f0o!;6$9=@$k1Y) z9(BBO#RfH3E`+PDZ>J_91q|5bzdI8_W(cePn`o#>gyr1MO1BB~xqhITV8`G~ZD21Q z2T#1PW^SQV8_lg?Vlej3898lX%6IiicF`cPS6-*Iyh9Xx$-(wJX3o1gJk$%?l zC;E+;y*L2OjwCmLN$3u3I{l=Y(%U3coN5~{&3tlcMzMJ+>bO@yK%LM8b|pg{B>(k& zhl0ofFLu6>exenV}VNMc%^CXflX4YCKMnq&_psjVU-d$Jcb6OSpd zPxe7Nqx@nveX}8r&U)C=nsJ0u>v*NLn+9Yrp0gLcG=QyH<5GsHm8o1e$mzBov019B ziCV;>t83wNqg0S$QQDw}k?`%r6D_T>9E?x@vr`t=a3YCK>Xa#mve>rcYeYT<2L0`1 z$2k>FQdr~FsyD8e~Qi}Mhwivuc<>P&lRlC4%JEflmZlmU%G z!;oOvOxOr4Bj6D)p%lN}OE`?)Eh9OP@gl`qVMWXhWIC`S_6E!uR>TT|m4l+?E`7)d ziDwo;w8w5((Nrsg)(AF1kI)hdPY2P_3=MMZr;QZ=out+Pp(jF7AbK*C1*0#7vVe3d zlm(@yLRnyX*2)g2=S=0h)K_ z6knP{jE^2;3k;AIN}D!cD!!HMIc8*^iWk!O#o1mj>Ui80FP@@UdQk`B2HzSTh#P!s zaI*o5Rs(J}SUBX@4o0EY8aUd)X&Gp>F^QrG-vo0kxC&Van3fx+86YWwY6eJ(H6SV1 zfTUall5!15$~7Pn=!9?pQs7bI67Cp4<+Z2jl|DK@#KYI2h{tY(r3Coq#V<-0&?gWu z?K*AS^BDy}U?2ts@{R-wV_O0%))rE91Pfe+?LD?J=&=zmg%Uc?7CC=%W2rfOsTV73 z7I;!?--O_iU)xe+DH9u{g4x3HLB?yG#9BaFDsQ(tOM#TgGnJ=it|MO%GXdW;9-K1a zZZ$Y_(T+JM5_Y|~O~BC_NjFDvc(gdUMuxw{1_$9ZXk@kL z&X$&;x6h;t3S}wKLoX-ZT{#9wdN=iE562P)(Hi!$RsAb5518(IX4G+S#&SkZ7kFCq z@Hjz3c`E^?`1{UPmVc%j93n>ZGMx3w`71>zyTN0k99+>KcF7|Twb}*NuoC45of5^< z?}sYoOp6wz6)UnN#3wgG?uCU0*hUiqj95uojkQHfl+z;h*o3wVbCE8?eZzzFHWRj4AX$~`pr zMy~o$PU1v`1dw$06NejSv;(_rujVsPcckqMVFax+3qaqp@RZd?ClPT+wgOha2(bCR z7|k%luDlu&sk?Jo#FXrd!C3edW(vk9>p6OT&on2hA|-#wza)2K_iwS~<&ne^vQA`% zshm6neHV=sQ}G_V$=A!$2g1Rt^A_`}>`?+|%JR@N%GI0Y5TJ-`5jlxOfP?PYwrmWR zxJeNUJR;1yDt1H<1vm?Nfe32wB^UOWCI2N*z}+lz0V1dt^b5c!bPB*!|2t{P9X5Q* zwlE8|u)O7RQ~Jzrl847qPiai`FE7cz&^)hyAH(Y=`j9m%#E4S1>ROT=iCLSZAerqC z=H?fQ9VQF;=~RPr?FZS;0n#wlIN6ST*3nHC;dyxZoK0U|82Iz>vZ4p2%a~sC{J@`w zm(Skx<+*`B4=+b8$@H2B1AiV~_R((Cjs9Q)8nOUx+~?VWKMys#?7LCTGXsAfUY_5y z=H9@chnEpZHt9xp;LpR$N(#AgpF5T`667}jZ_5t3@yl&{4$D`3bxyq>m(aG1^5RQk zBYfkP@eJwsql8X9<#8hG5M!X58Ido{E13bb!iJHeDg-@Vv z748Z@mXyW0M-5gKlTD)SK)xg|1yPo*Ljo7%?Q*C}&|u*_6u2R?F0T)uj6M-I@&^H;xV44seE+UprdkH&*6JE<7tOK}G+`zfw#Zvid_&;}=xOL5@X&B5 z$zc)Z*v|fxP{YKTOrsk5IP~lPdG!L$COY-o?`268QfSWzh_0KTaX)@z_6en6!YpFL z^Cie^C4pZqydkr6K7`T1k3X;d_^HucdJzbT9
^@etD+>l(SwrWWB`??`GQySVi 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

f+c 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®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⪼g{%7tYlB=_j1Ab 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 z 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 Client)): Client; + +/** + * Used by `@prisma/extension-accelerate` until we migrate it to a better API. + */ +declare interface AccelerateEngineConfig extends EngineConfig { + /** + * Allows Accelerate to use runtime utilities from the client. These are + * necessary for `@prisma/extension-accelerate` to function correctly. + * See + */ + accelerateUtils: { + resolveDatasourceUrl: () => string; + }; +} + +/** + * A stripped down interface of `fetch` that `@prisma/extension-accelerate` + * relies on. It must be in sync with the corresponding definition in the + * Accelerate extension. + * + * This is the actual interface exposed by the extension. We can't use the + * custom fetch function provided by it as normal fetch because the API is + * different. Notably, `headers` must be an object and not a `Headers` + * instance, and `url` must be a `string` and not a `URL`. + * + * The return type is `Response` but we can't specify this in an exported type + * because it would end up referencing external types from `@types/node` or DOM + * which can fail typechecking depending on TypeScript configuration in a user's + * project. + */ +declare type AccelerateExtensionFetch = (url: string, options: { + body?: string; + method?: string; + headers: Record; +}) => Promise; + +declare type AccelerateExtensionFetchDecorator = (fetch: AccelerateExtensionFetch) => AccelerateExtensionFetch; + +export declare type Action = keyof typeof DMMF_2.ModelAction | 'executeRaw' | 'queryRaw' | 'runCommandRaw'; + +declare type ActiveConnectorType = Exclude; + +/** + * An interface that exposes some basic information about the + * adapter like its name and provider type. + */ +declare interface AdapterInfo { + readonly provider: Provider; + readonly adapterName: (typeof officialPrismaAdapters)[number] | (string & {}); +} + +export declare type Aggregate = '_count' | '_max' | '_min' | '_avg' | '_sum'; + +export declare type AllModelsToStringIndex, K extends PropertyKey> = Args extends { + [P in K]: { + $allModels: infer AllModels; + }; +} ? { + [P in K]: Record; +} : {}; + +export { AnyNull } + +export { AnyNullClass } + +export declare type ApplyOmit = Compute<{ + [K in keyof T as OmitValue extends true ? never : K]: T[K]; +}>; + +export declare type Args = T extends { + [K: symbol]: { + types: { + operations: { + [K in F]: { + args: any; + }; + }; + }; + }; +} ? T[symbol]['types']['operations'][F]['args'] : any; + +export declare type Args_3 = Args; + +declare type ArgScalarType = 'string' | 'int' | 'bigint' | 'float' | 'decimal' | 'boolean' | 'enum' | 'uuid' | 'json' | 'datetime' | 'bytes' | 'unknown'; + +declare type ArgType = { + scalarType: ArgScalarType; + dbType?: string; + arity: Arity; +}; + +declare type Arity = 'scalar' | 'list'; + +/** + * Attributes is a map from string to attribute values. + * + * Note: only the own enumerable keys are counted as valid attribute keys. + */ +declare interface Attributes { + [attributeKey: string]: AttributeValue | undefined; +} + +/** + * Attribute values may be any non-nullish primitive value except an object. + * + * null or undefined attribute values are invalid and will result in undefined behavior. + */ +declare type AttributeValue = string | number | boolean | Array | Array | Array; + +export declare type BaseDMMF = { + readonly datamodel: Omit; +}; + +declare type BatchArgs = { + queries: BatchQuery[]; + transaction?: { + isolationLevel?: IsolationLevel; + }; +}; + +declare type BatchInternalParams = { + requests: RequestParams[]; + customDataProxyFetch?: AccelerateExtensionFetchDecorator; +}; + +declare type BatchQuery = { + model: string | undefined; + operation: string; + args: JsArgs | RawQueryArgs; +}; + +declare type BatchQueryEngineResult = QueryEngineResultData | Error; + +declare type BatchQueryOptionsCb = (args: BatchQueryOptionsCbArgs) => Promise; + +declare type BatchQueryOptionsCbArgs = { + args: BatchArgs; + query: (args: BatchArgs, __internalParams?: BatchInternalParams) => Promise; + __internalParams: BatchInternalParams; +}; + +declare type BatchResponse = MultiBatchResponse | CompactedBatchResponse; + +declare type BatchTransactionOptions = { + isolationLevel?: Transaction.IsolationLevel; + maxWait?: number; + timeout?: number; +}; + +/** + * Equivalent to `Uint8Array` before TypeScript 5.7, and `Uint8Array` in TypeScript 5.7 and beyond. + */ +export declare type Bytes = ReturnType; + +export declare type Call = (F & { + params: P; +})['returns']; + +declare interface CallSite { + getLocation(): LocationInFile | null; +} + +export declare type Cast = A extends W ? A : W; + +declare type Client = ReturnType extends new (optionsArg: PrismaClientOptions) => infer T ? T : never; + +export declare type ClientArg = { + [MethodName in string]: unknown; +}; + +export declare type ClientArgs = { + client: ClientArg; +}; + +export declare type ClientBuiltInProp = keyof DynamicClientExtensionThisBuiltin; + +export declare type ClientOptionDef = undefined | { + [K in string]: any; +}; + +export declare type ClientOtherOps = { + $queryRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise; + $queryRawTyped(query: TypedSql): PrismaPromise; + $queryRawUnsafe(query: string, ...values: any[]): PrismaPromise; + $executeRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise; + $executeRawUnsafe(query: string, ...values: any[]): PrismaPromise; + $runCommandRaw(command: InputJsonObject): PrismaPromise; +}; + +declare type ColumnType = (typeof ColumnTypeEnum)[keyof typeof ColumnTypeEnum]; + +declare const ColumnTypeEnum: { + readonly Int32: 0; + readonly Int64: 1; + readonly Float: 2; + readonly Double: 3; + readonly Numeric: 4; + readonly Boolean: 5; + readonly Character: 6; + readonly Text: 7; + readonly Date: 8; + readonly Time: 9; + readonly DateTime: 10; + readonly Json: 11; + readonly Enum: 12; + readonly Bytes: 13; + readonly Set: 14; + readonly Uuid: 15; + readonly Int32Array: 64; + readonly Int64Array: 65; + readonly FloatArray: 66; + readonly DoubleArray: 67; + readonly NumericArray: 68; + readonly BooleanArray: 69; + readonly CharacterArray: 70; + readonly TextArray: 71; + readonly DateArray: 72; + readonly TimeArray: 73; + readonly DateTimeArray: 74; + readonly JsonArray: 75; + readonly EnumArray: 76; + readonly BytesArray: 77; + readonly UuidArray: 78; + readonly UnknownNumber: 128; +}; + +declare type CompactedBatchResponse = { + type: 'compacted'; + plan: QueryPlanNode; + arguments: Record[]; + nestedSelection: string[]; + keys: string[]; + expectNonEmpty: boolean; +}; + +declare type CompilerWasmLoadingConfig = { + /** + * WASM-bindgen runtime for corresponding module + */ + getRuntime: () => Promise<{ + __wbg_set_wasm(exports: unknown): void; + QueryCompiler: QueryCompilerConstructor; + }>; + /** + * Loads the raw wasm module for the wasm compiler engine. This configuration is + * generated specifically for each type of client, eg. Node.js client and Edge + * clients will have different implementations. + * @remarks this is a callback on purpose, we only load the wasm if needed. + * @remarks only used by ClientEngine + */ + getQueryCompilerWasmModule: () => Promise; + importName: string; +}; + +export declare type Compute = T extends Function ? T : { + [K in keyof T]: T[K]; +} & unknown; + +export declare type ComputeDeep = T extends Function ? T : { + [K in keyof T]: ComputeDeep; +} & unknown; + +declare type ComputedField = { + name: string; + needs: string[]; + compute: ResultArgsFieldCompute; +}; + +declare type ComputedFieldsMap = { + [fieldName: string]: ComputedField; +}; + +declare type ConnectionInfo = { + schemaName?: string; + maxBindValues?: number; + supportsRelationJoins: boolean; +}; + +declare type ConnectorType = 'mysql' | 'mongodb' | 'sqlite' | 'postgresql' | 'postgres' | 'prisma+postgres' | 'sqlserver' | 'cockroachdb'; + +declare interface Context { + /** + * Get a value from the context. + * + * @param key key which identifies a context value + */ + getValue(key: symbol): unknown; + /** + * Create a new context which inherits from this context and has + * the given key set to the given value. + * + * @param key context key for which to set the value + * @param value value to set for the given key + */ + setValue(key: symbol, value: unknown): Context; + /** + * Return a new context which inherits from this context but does + * not contain a value for the given key. + * + * @param key context key for which to clear a value + */ + deleteValue(key: symbol): Context; +} + +declare type Context_2 = T extends { + [K: symbol]: { + ctx: infer C; + }; +} ? C & T & { + /** + * @deprecated Use `$name` instead. + */ + name?: string; + $name?: string; + $parent?: unknown; +} : T & { + /** + * @deprecated Use `$name` instead. + */ + name?: string; + $name?: string; + $parent?: unknown; +}; + +export declare type Count = { + [K in keyof O]: Count; +} & {}; + +export declare function createParam(name: string): Param; + +declare class DataLoader { + private options; + batches: { + [key: string]: Job[]; + }; + private tickActive; + constructor(options: DataLoaderOptions); + request(request: T): Promise; + private dispatchBatches; + get [Symbol.toStringTag](): string; +} + +declare type DataLoaderOptions = { + singleLoader: (request: T) => Promise; + batchLoader: (request: T[]) => Promise; + batchBy: (request: T) => string | undefined; + batchOrder: (requestA: T, requestB: T) => number; +}; + +declare type Datamodel = ReadonlyDeep_2<{ + models: Model[]; + enums: DatamodelEnum[]; + types: Model[]; + indexes: Index[]; +}>; + +declare type DatamodelEnum = ReadonlyDeep_2<{ + name: string; + values: EnumValue[]; + dbName?: string | null; + documentation?: string; +}>; + +declare function datamodelEnumToSchemaEnum(datamodelEnum: DatamodelEnum): SchemaEnum; + +declare type DataRule = { + type: 'rowCountEq'; + args: number; +} | { + type: 'rowCountNeq'; + args: number; +} | { + type: 'affectedRowCountEq'; + args: number; +} | { + type: 'never'; +}; + +export { DbNull } + +export { DbNullClass } + +export declare const Debug: typeof debugCreate & { + enable(namespace: any): void; + disable(): any; + enabled(namespace: string): boolean; + log: (...args: string[]) => void; + formatters: {}; +}; + +/** + * Create a new debug instance with the given namespace. + * + * @example + * ```ts + * import Debug from '@prisma/debug' + * const debug = Debug('prisma:client') + * debug('Hello World') + * ``` + */ +declare function debugCreate(namespace: string): ((...args: any[]) => void) & { + color: string; + enabled: boolean; + namespace: string; + log: (...args: string[]) => void; + extend: () => void; +}; + +export { Decimal } + +/** + * Interface for any Decimal.js-like library + * Allows us to accept Decimal.js from different + * versions and some compatible alternatives + */ +export declare interface DecimalJsLike { + d: number[]; + e: number; + s: number; + toFixed(): string; +} + +export declare type DefaultArgs = InternalArgs<{}, {}, {}, {}>; + +export declare type DefaultSelection = Args extends { + omit: infer LocalOmit; +} ? ApplyOmit['default'], PatchFlat>>> : ApplyOmit['default'], ExtractGlobalOmit>>; + +export declare function defineDmmfProperty(target: object, runtimeDataModel: RuntimeDataModel): void; + +declare function defineExtension(ext: ExtensionArgs | ((client: Client) => Client)): (client: Client) => Client; + +declare const denylist: readonly ["$connect", "$disconnect", "$on", "$use", "$extends"]; + +declare type Deprecation = ReadonlyDeep_2<{ + sinceVersion: string; + reason: string; + plannedRemovalVersion?: string; +}>; + +declare type DeserializedResponse = Array>; + +export declare function deserializeJsonObject(result: unknown): unknown; + +export declare function deserializeRawResult(response: RawResponse): DeserializedResponse; + +export declare type DevTypeMapDef = { + meta: { + modelProps: string; + }; + model: { + [Model in PropertyKey]: { + [Operation in PropertyKey]: DevTypeMapFnDef; + }; + }; + other: { + [Operation in PropertyKey]: DevTypeMapFnDef; + }; +}; + +export declare type DevTypeMapFnDef = { + args: any; + result: any; + payload: OperationPayload; +}; + +export declare namespace DMMF { + export { + datamodelEnumToSchemaEnum, + Datamodel, + DatamodelEnum, + Deprecation, + Document_2 as Document, + EnumValue, + Field, + FieldDefault, + FieldDefaultScalar, + FieldKind, + FieldLocation, + FieldNamespace, + FieldRefAllowType, + FieldRefType, + Index, + IndexField, + IndexType, + InputType, + InputTypeRef, + Mappings, + Model, + ModelAction, + ModelMapping, + OtherOperationMappings, + OutputType, + OutputTypeRef, + PrimaryKey, + Query, + QueryOutput, + ReadonlyDeep_2 as ReadonlyDeep, + Schema, + SchemaArg, + SchemaEnum, + SchemaField, + SortOrder, + TypeRef, + uniqueIndex + } +} + +declare namespace DMMF_2 { + export { + datamodelEnumToSchemaEnum, + Datamodel, + DatamodelEnum, + Deprecation, + Document_2 as Document, + EnumValue, + Field, + FieldDefault, + FieldDefaultScalar, + FieldKind, + FieldLocation, + FieldNamespace, + FieldRefAllowType, + FieldRefType, + Index, + IndexField, + IndexType, + InputType, + InputTypeRef, + Mappings, + Model, + ModelAction, + ModelMapping, + OtherOperationMappings, + OutputType, + OutputTypeRef, + PrimaryKey, + Query, + QueryOutput, + ReadonlyDeep_2 as ReadonlyDeep, + Schema, + SchemaArg, + SchemaEnum, + SchemaField, + SortOrder, + TypeRef, + uniqueIndex + } +} + +export declare function dmmfToRuntimeDataModel(dmmfDataModel: DMMF_2.Datamodel): RuntimeDataModel; + +declare type Document_2 = ReadonlyDeep_2<{ + datamodel: Datamodel; + schema: Schema; + mappings: Mappings; +}>; + +/** + * A generic driver adapter factory that allows the user to instantiate a + * driver adapter. The query and result types are specific to the adapter. + */ +declare interface DriverAdapterFactory extends AdapterInfo { + /** + * Instantiate a driver adapter. + */ + connect(): Promise>; +} + +declare type DynamicArgType = ArgType | { + arity: 'tuple'; + elements: ArgType[]; +}; + +/** Client */ +export declare type DynamicClientExtensionArgs> = { + [P in keyof C_]: unknown; +} & { + [K: symbol]: { + ctx: Optional, ITXClientDenyList> & { + $parent: Optional, ITXClientDenyList>; + }; + }; +}; + +export declare type DynamicClientExtensionThis> = { + [P in keyof ExtArgs['client']]: Return; +} & { + [P in Exclude]: DynamicModelExtensionThis, ExtArgs>; +} & { + [P in Exclude]: P extends keyof ClientOtherOps ? ClientOtherOps[P] : never; +} & { + [P in Exclude]: DynamicClientExtensionThisBuiltin[P]; +} & { + [K: symbol]: { + types: TypeMap['other']; + }; +}; + +export declare type DynamicClientExtensionThisBuiltin> = { + $extends: ExtendsHook<'extends', TypeMapCb, ExtArgs, Call>; + $transaction

[]>(arg: [...P], options?: { + maxWait?: number; + timeout?: number; + isolationLevel?: TypeMap['meta']['txIsolationLevel']; + }): Promise>; + $transaction(fn: (client: Omit, ITXClientDenyList>) => Promise, options?: { + maxWait?: number; + timeout?: number; + isolationLevel?: TypeMap['meta']['txIsolationLevel']; + }): Promise; + $disconnect(): Promise; + $connect(): Promise; +}; + +/** Model */ +export declare type DynamicModelExtensionArgs> = { + [K in keyof M_]: K extends '$allModels' ? { + [P in keyof M_[K]]?: unknown; + } & { + [K: symbol]: {}; + } : K extends TypeMap['meta']['modelProps'] ? { + [P in keyof M_[K]]?: unknown; + } & { + [K: symbol]: { + ctx: DynamicModelExtensionThis, ExtArgs> & { + $parent: DynamicClientExtensionThis; + } & { + $name: ModelKey; + } & { + /** + * @deprecated Use `$name` instead. + */ + name: ModelKey; + }; + }; + } : never; +}; + +export declare type DynamicModelExtensionFluentApi = { + [K in keyof TypeMap['model'][M]['payload']['objects']]: (args?: Exact>) => PrismaPromise, [K]> | Null> & DynamicModelExtensionFluentApi>; +}; + +export declare type DynamicModelExtensionFnResult = P extends FluentOperation ? DynamicModelExtensionFluentApi & PrismaPromise | Null> : PrismaPromise>; + +export declare type DynamicModelExtensionFnResultBase = GetResult; + +export declare type DynamicModelExtensionFnResultNull

= P extends 'findUnique' | 'findFirst' ? null : never; + +export declare type DynamicModelExtensionOperationFn = {} extends TypeMap['model'][M]['operations'][P]['args'] ? (args?: Exact) => DynamicModelExtensionFnResult> : (args: Exact) => DynamicModelExtensionFnResult>; + +export declare type DynamicModelExtensionThis> = { + [P in keyof ExtArgs['model'][Uncapitalize]]: Return][P]>; +} & { + [P in Exclude]>]: DynamicModelExtensionOperationFn; +} & { + [P in Exclude<'fields', keyof ExtArgs['model'][Uncapitalize]>]: TypeMap['model'][M]['fields']; +} & { + [K: symbol]: { + types: TypeMap['model'][M]; + }; +}; + +/** Query */ +export declare type DynamicQueryExtensionArgs = { + [K in keyof Q_]: K extends '$allOperations' ? (args: { + model?: string; + operation: string; + args: any; + query: (args: any) => PrismaPromise; + }) => Promise : K extends '$allModels' ? { + [P in keyof Q_[K] | keyof TypeMap['model'][keyof TypeMap['model']]['operations'] | '$allOperations']?: P extends '$allOperations' ? DynamicQueryExtensionCb : P extends keyof TypeMap['model'][keyof TypeMap['model']]['operations'] ? DynamicQueryExtensionCb : never; + } : K extends TypeMap['meta']['modelProps'] ? { + [P in keyof Q_[K] | keyof TypeMap['model'][ModelKey]['operations'] | '$allOperations']?: P extends '$allOperations' ? DynamicQueryExtensionCb, keyof TypeMap['model'][ModelKey]['operations']> : P extends keyof TypeMap['model'][ModelKey]['operations'] ? DynamicQueryExtensionCb, P> : never; + } : K extends keyof TypeMap['other']['operations'] ? DynamicQueryExtensionCb<[TypeMap], 0, 'other', K> : never; +}; + +export declare type DynamicQueryExtensionCb = >(args: A) => Promise; + +export declare type DynamicQueryExtensionCbArgs = (_1 extends unknown ? _2 extends unknown ? { + args: DynamicQueryExtensionCbArgsArgs; + model: _0 extends 0 ? undefined : _1; + operation: _2; + query: >(args: A) => PrismaPromise; +} : never : never) & { + query: (args: DynamicQueryExtensionCbArgsArgs) => PrismaPromise; +}; + +export declare type DynamicQueryExtensionCbArgsArgs = _2 extends '$queryRaw' | '$executeRaw' ? Sql : TypeMap[_0][_1]['operations'][_2]['args']; + +/** Result */ +export declare type DynamicResultExtensionArgs = { + [K in keyof R_]: { + [P in keyof R_[K]]?: { + needs?: DynamicResultExtensionNeeds, R_[K][P]>; + compute(data: DynamicResultExtensionData, R_[K][P]>, modelName: ModelKey): any; + }; + }; +}; + +export declare type DynamicResultExtensionData = GetFindResult; + +export declare type DynamicResultExtensionNeeds = { + [K in keyof S]: K extends keyof TypeMap['model'][M]['payload']['scalars'] ? S[K] : never; +} & { + [N in keyof TypeMap['model'][M]['payload']['scalars']]?: boolean; +}; + +export { empty } + +export declare type EmptyToUnknown = T; + +declare interface Engine { + /** The name of the engine. This is meant to be consumed externally */ + readonly name: string; + onBeforeExit(callback: () => Promise): void; + start(): Promise; + stop(): Promise; + version(forceRun?: boolean): Promise | string; + request(query: JsonQuery, options: RequestOptions): Promise>; + requestBatch(queries: JsonQuery[], options: RequestBatchOptions): Promise[]>; + transaction(action: 'start', headers: Transaction.TransactionHeaders, options: Transaction.Options): Promise>; + transaction(action: 'commit', headers: Transaction.TransactionHeaders, info: Transaction.InteractiveTransactionInfo): Promise; + transaction(action: 'rollback', headers: Transaction.TransactionHeaders, info: Transaction.InteractiveTransactionInfo): Promise; +} + +declare interface EngineConfig { + enableDebugLogs?: boolean; + prismaPath?: string; + logQueries?: boolean; + logLevel?: 'info' | 'warn'; + clientVersion: string; + previewFeatures?: string[]; + activeProvider?: string; + logEmitter: LogEmitter; + transactionOptions: Transaction.Options; + /** + * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`. + */ + adapter?: SqlDriverAdapterFactory; + /** + * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database. + */ + accelerateUrl?: string; + /** + * The contents of the schema encoded into a string + */ + inlineSchema: string; + /** + * The helper for interaction with OTEL tracing + * @remarks enabling is determined by the client and @prisma/instrumentation package + */ + tracingHelper: TracingHelper; + /** + * Web Assembly module loading configuration + */ + compilerWasm?: CompilerWasmLoadingConfig; + /** + * SQL commenter plugins that add metadata to SQL queries as comments. + * Each plugin receives query context and returns key-value pairs. + */ + sqlCommenters?: SqlCommenterPlugin[]; + /** + * Parameterization schema (ParamGraph) for schema-aware query parameterization. + * Enables precise parameterization based on DMMF metadata. + */ + parameterizationSchema: SerializedParamGraph; + /** + * Runtime data model for enum lookups during parameterization. + */ + runtimeDataModel: RuntimeDataModel; + /** + * Optional maximum size for the query plan cache. If not provided, a default size will be used. + * A value of `0` can be used to disable the cache entirely. A higher cache size can improve + * performance for applications that execute a large number of unique queries, while a smaller + * cache size can reduce memory usage. + */ + queryPlanCacheMaxSize?: number; +} + +declare type EngineEvent = E extends QueryEventType ? QueryEvent : LogEvent; + +declare type EngineEventType = QueryEventType | LogEventType; + +declare type EngineSpan = { + id: EngineSpanId; + parentId: string | null; + name: string; + startTime: HrTime; + endTime: HrTime; + kind: EngineSpanKind; + attributes?: Record; + links?: EngineSpanId[]; +}; + +declare type EngineSpanId = string; + +declare type EngineSpanKind = 'client' | 'internal'; + +declare interface EngineTraceEvent { + spanId: EngineSpanId; + target?: string; + level: LogLevel_2; + timestamp: HrTime; + attributes: Record & { + message?: string; + query?: string; + duration_ms?: number; + params?: string; + }; +} + +declare type EnumValue = ReadonlyDeep_2<{ + name: string; + dbName: string | null; +}>; + +export declare type Equals = (() => T extends A ? 1 : 2) extends (() => T extends B ? 1 : 2) ? 1 : 0; + +declare type ErrorFormat = 'pretty' | 'colorless' | 'minimal'; + +declare type EventCallback = [E] extends ['beforeExit'] ? () => Promise : [E] extends [LogLevel] ? (event: EngineEvent) => void : never; + +export declare type Exact = (A extends unknown ? (W extends A ? { + [K in keyof A]: Exact; +} : W) : never) | (A extends Narrowable ? A : never); + +/** + * Defines Exception. + * + * string or an object with one of (message or name or code) and optional stack + */ +declare type Exception = ExceptionWithCode | ExceptionWithMessage | ExceptionWithName | string; + +declare interface ExceptionWithCode { + code: string | number; + name?: string; + message?: string; + stack?: string; +} + +declare interface ExceptionWithMessage { + code?: string | number; + message: string; + name?: string; + stack?: string; +} + +declare interface ExceptionWithName { + code?: string | number; + message?: string; + name: string; + stack?: string; +} + +declare type ExtendedEventType = LogLevel | 'beforeExit'; + +declare interface ExtendedSpanOptions extends SpanOptions { + /** The name of the span */ + name: string; + internal?: boolean; + /** Whether it propagates context (?=true) */ + active?: boolean; + /** The context to append the span to */ + context?: Context; +} + +/** $extends, defineExtension */ +export declare interface ExtendsHook, TypeMap extends TypeMapDef = Call> { + extArgs: ExtArgs; + , MergedArgs extends InternalArgs = MergeExtArgs>(extension: ((client: DynamicClientExtensionThis) => { + $extends: { + extArgs: Args; + }; + }) | { + name?: string; + query?: DynamicQueryExtensionArgs; + result?: DynamicResultExtensionArgs & R; + model?: DynamicModelExtensionArgs & M; + client?: DynamicClientExtensionArgs & C; + }): { + extends: DynamicClientExtensionThis, TypeMapCb, MergedArgs>; + define: (client: any) => { + $extends: { + extArgs: Args; + }; + }; + }[Variant]; +} + +export declare type ExtensionArgs = Optional; + +declare namespace Extensions { + export { + defineExtension, + getExtensionContext + } +} +export { Extensions } + +declare namespace Extensions_2 { + export { + InternalArgs, + DefaultArgs, + GetPayloadResultExtensionKeys, + GetPayloadResultExtensionObject, + GetPayloadResult, + GetSelect, + GetOmit, + DynamicQueryExtensionArgs, + DynamicQueryExtensionCb, + DynamicQueryExtensionCbArgs, + DynamicQueryExtensionCbArgsArgs, + DynamicResultExtensionArgs, + DynamicResultExtensionNeeds, + DynamicResultExtensionData, + DynamicModelExtensionArgs, + DynamicModelExtensionThis, + DynamicModelExtensionOperationFn, + DynamicModelExtensionFnResult, + DynamicModelExtensionFnResultBase, + DynamicModelExtensionFluentApi, + DynamicModelExtensionFnResultNull, + DynamicClientExtensionArgs, + DynamicClientExtensionThis, + ClientBuiltInProp, + DynamicClientExtensionThisBuiltin, + ExtendsHook, + MergeExtArgs, + AllModelsToStringIndex, + TypeMapDef, + DevTypeMapDef, + DevTypeMapFnDef, + ClientOptionDef, + ClientOtherOps, + TypeMapCbDef, + ModelKey, + RequiredExtensionArgs as UserArgs + } +} + +export declare type ExtractGlobalOmit = Options extends { + omit: { + [K in ModelName]: infer GlobalOmit; + }; +} ? GlobalOmit : {}; + +declare type Field = ReadonlyDeep_2<{ + kind: FieldKind; + name: string; + isRequired: boolean; + isList: boolean; + isUnique: boolean; + isId: boolean; + isReadOnly: boolean; + isGenerated?: boolean; + isUpdatedAt?: boolean; + /** + * Describes the data type in the same the way it is defined in the Prisma schema: + * BigInt, Boolean, Bytes, DateTime, Decimal, Float, Int, JSON, String, $ModelName + */ + type: string; + /** + * Native database type, if specified. + * For example, `@db.VarChar(191)` is encoded as `['VarChar', ['191']]`, + * `@db.Text` is encoded as `['Text', []]`. + */ + nativeType?: [string, string[]] | null; + dbName?: string | null; + hasDefaultValue: boolean; + default?: FieldDefault | FieldDefaultScalar | FieldDefaultScalar[]; + relationFromFields?: string[]; + relationToFields?: string[]; + relationOnDelete?: string; + relationOnUpdate?: string; + relationName?: string; + documentation?: string; +}>; + +declare type FieldDefault = ReadonlyDeep_2<{ + name: string; + args: Array; +}>; + +declare type FieldDefaultScalar = string | boolean | number; + +declare type FieldInitializer = { + type: 'value'; + value: PrismaValue; +} | { + type: 'lastInsertId'; +}; + +declare type FieldKind = 'scalar' | 'object' | 'enum' | 'unsupported'; + +declare type FieldLocation = 'scalar' | 'inputObjectTypes' | 'outputObjectTypes' | 'enumTypes' | 'fieldRefTypes'; + +declare type FieldNamespace = 'model' | 'prisma'; + +declare type FieldOperation = { + type: 'set'; + value: PrismaValue; +} | { + type: 'add'; + value: PrismaValue; +} | { + type: 'subtract'; + value: PrismaValue; +} | { + type: 'multiply'; + value: PrismaValue; +} | { + type: 'divide'; + value: PrismaValue; +}; + +/** + * A reference to a specific field of a specific model + */ +export declare interface FieldRef { + readonly modelName: Model; + readonly name: string; + readonly typeName: FieldType; + readonly isList: boolean; +} + +declare type FieldRefAllowType = TypeRef<'scalar' | 'enumTypes'>; + +declare type FieldRefType = ReadonlyDeep_2<{ + name: string; + allowTypes: FieldRefAllowType[]; + fields: SchemaArg[]; +}>; + +declare type FieldScalarType = { + type: 'string' | 'int' | 'bigint' | 'float' | 'boolean' | 'json' | 'object' | 'datetime' | 'decimal' | 'unsupported'; +} | { + type: 'enum'; + name: string; +} | { + type: 'bytes'; + encoding: 'array' | 'base64' | 'hex'; +}; + +declare type FieldType = { + arity: Arity; +} & FieldScalarType; + +declare type FluentOperation = 'findUnique' | 'findUniqueOrThrow' | 'findFirst' | 'findFirstOrThrow' | 'create' | 'update' | 'upsert' | 'delete'; + +export declare interface Fn { + params: Params; + returns: Returns; +} + +declare type Fragment = { + type: 'stringChunk'; + chunk: string; +} | { + type: 'parameter'; +} | { + type: 'parameterTuple'; + itemPrefix: string; + itemSeparator: string; + itemSuffix: string; +} | { + type: 'parameterTupleList'; + itemPrefix: string; + itemSeparator: string; + itemSuffix: string; + groupSeparator: string; +}; + +export declare type GetAggregateResult

= { + [K in keyof A as K extends Aggregate ? K : never]: K extends '_count' ? A[K] extends true ? number : Count : { + [J in keyof A[K] & string]: P['scalars'][J] | null; + }; +}; + +export declare type GetBatchResult = { + count: number; +}; + +export declare type GetCountResult = A extends { + select: infer S; +} ? (S extends true ? number : Count) : number; + +declare function getExtensionContext(that: T): Context_2; + +export declare type GetFindResult

= Equals extends 1 ? DefaultSelection : A extends { + select: infer S extends object; +} & Record | { + include: infer I extends object; +} & Record ? { + [K in keyof S | keyof I as (S & I)[K] extends false | undefined | Skip | null ? never : K]: (S & I)[K] extends object ? P extends SelectablePayloadFields ? O extends OperationPayload ? GetFindResult[] : never : P extends SelectablePayloadFields ? O extends OperationPayload ? GetFindResult | SelectField & null : never : K extends '_count' ? Count> : never : P extends SelectablePayloadFields ? O extends OperationPayload ? DefaultSelection[] : never : P extends SelectablePayloadFields ? O extends OperationPayload ? DefaultSelection | SelectField & null : never : P extends { + scalars: { + [k in K]: infer O; + }; + } ? O : K extends '_count' ? Count : never; +} & (A extends { + include: any; +} & Record ? DefaultSelection : unknown) : DefaultSelection; + +export declare type GetGroupByResult

= A extends { + by: string[]; +} ? Array & { + [K in A['by'][number]]: P['scalars'][K]; +}> : A extends { + by: string; +} ? Array & { + [K in A['by']]: P['scalars'][K]; +}> : {}[]; + +export declare type GetOmit = { + [K in (string extends keyof R ? never : keyof R) | BaseKeys]?: boolean | ExtraType; +}; + +export declare type GetPayloadResult, R extends InternalArgs['result'][string]> = Omit> & GetPayloadResultExtensionObject; + +export declare type GetPayloadResultExtensionKeys = KR; + +export declare type GetPayloadResultExtensionObject = { + [K in GetPayloadResultExtensionKeys]: R[K] extends () => { + compute: (...args: any) => infer C; + } ? C : never; +}; + +export declare function getPrismaClient(config: GetPrismaClientConfig): { + new (optionsArg: PrismaClientOptions): { + _originalClient: any; + _runtimeDataModel: RuntimeDataModel; + _requestHandler: RequestHandler; + _connectionPromise?: Promise | undefined; + _disconnectionPromise?: Promise | undefined; + _engineConfig: EngineConfig; + _accelerateEngineConfig: AccelerateEngineConfig; + _clientVersion: string; + _errorFormat: ErrorFormat; + _tracingHelper: TracingHelper; + _previewFeatures: string[]; + _activeProvider: string; + _globalOmit?: GlobalOmitOptions | undefined; + _extensions: MergedExtensionsList; + /** + * @remarks This is used internally by Policy, do not rename or remove + */ + _engine: Engine; + /** + * A fully constructed/applied Client that references the parent + * PrismaClient. This is used for Client extensions only. + */ + _appliedParent: any; + _createPrismaPromise: PrismaPromiseFactory; + $on(eventType: E, callback: EventCallback): any; + $connect(): Promise; + /** + * Disconnect from the database + */ + $disconnect(): Promise; + /** + * Executes a raw query and always returns a number + */ + $executeRawInternal(transaction: PrismaPromiseTransaction | undefined, clientMethod: string, args: RawQueryArgs, middlewareArgsMapper?: MiddlewareArgsMapper): Promise; + /** + * Executes a raw query provided through a safe tag function + * @see https://github.com/prisma/prisma/issues/7142 + * + * @param query + * @param values + * @returns + */ + $executeRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise_2; + /** + * Unsafe counterpart of `$executeRaw` that is susceptible to SQL injections + * @see https://github.com/prisma/prisma/issues/7142 + * + * @param query + * @param values + * @returns + */ + $executeRawUnsafe(query: string, ...values: RawValue[]): PrismaPromise_2; + /** + * Executes a raw command only for MongoDB + * + * @param command + * @returns + */ + $runCommandRaw(command: Record): PrismaPromise_2; + /** + * Executes a raw query and returns selected data + */ + $queryRawInternal(transaction: PrismaPromiseTransaction | undefined, clientMethod: string, args: RawQueryArgs, middlewareArgsMapper?: MiddlewareArgsMapper): Promise; + /** + * Executes a raw query provided through a safe tag function + * @see https://github.com/prisma/prisma/issues/7142 + * + * @param query + * @param values + * @returns + */ + $queryRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise_2; + /** + * Counterpart to $queryRaw, that returns strongly typed results + * @param typedSql + */ + $queryRawTyped(typedSql: UnknownTypedSql): PrismaPromise_2; + /** + * Unsafe counterpart of `$queryRaw` that is susceptible to SQL injections + * @see https://github.com/prisma/prisma/issues/7142 + * + * @param query + * @param values + * @returns + */ + $queryRawUnsafe(query: string, ...values: RawValue[]): PrismaPromise_2; + /** + * Execute a batch of requests in a transaction + * @param requests + * @param options + */ + _transactionWithArray({ promises, options, }: { + promises: Array>; + options?: BatchTransactionOptions; + }): Promise; + /** + * Perform a long-running transaction + * @param callback + * @param options + * @returns + */ + _transactionWithCallback({ callback, options, }: { + callback: (client: Client) => Promise; + options?: Options; + }): Promise; + _createItxClient(transaction: PrismaPromiseInteractiveTransaction, scopeId: string, scopeState: ItxScopeState): Client; + /** + * Execute queries within a transaction + * @param input a callback or a query list + * @param options to set timeouts (callback) + * @returns + */ + $transaction(input: any, options?: any): Promise; + /** + * Runs the middlewares over params before executing a request + * @param internalParams + * @returns + */ + _request(internalParams: InternalRequestParams): Promise; + _executeRequest({ args, clientMethod, dataPath, callsite, action, model, argsMapper, transaction, unpacker, otelParentCtx, customDataProxyFetch, }: InternalRequestParams): Promise; + /** + * Shortcut for checking a preview flag + * @param feature preview flag + * @returns + */ + _hasPreviewFlag(feature: string): boolean; + $extends: typeof $extends; + readonly [Symbol.toStringTag]: string; + }; +}; + +/** + * Config that is stored into the generated client. When the generated client is + * loaded, this same config is passed to {@link getPrismaClient} which creates a + * closure with that config around a non-instantiated [[PrismaClient]]. + */ +export declare type GetPrismaClientConfig = { + runtimeDataModel: RuntimeDataModel; + previewFeatures: string[]; + clientVersion: string; + engineVersion: string; + activeProvider: ActiveConnectorType; + /** + * The contents of the schema encoded into a string + */ + inlineSchema: string; + /** + * Optional wasm loading configuration + */ + compilerWasm?: CompilerWasmLoadingConfig; + /** + * Parameterization schema for schema-aware query parameterization. + * Enables precise parameterization based on DMMF metadata. + */ + parameterizationSchema: SerializedParamGraph; +}; + +export declare type GetResult = { + findUnique: GetFindResult | null; + findUniqueOrThrow: GetFindResult; + findFirst: GetFindResult | null; + findFirstOrThrow: GetFindResult; + findMany: GetFindResult[]; + create: GetFindResult; + createMany: GetBatchResult; + createManyAndReturn: GetFindResult[]; + update: GetFindResult; + updateMany: GetBatchResult; + updateManyAndReturn: GetFindResult[]; + upsert: GetFindResult; + delete: GetFindResult; + deleteMany: GetBatchResult; + aggregate: GetAggregateResult; + count: GetCountResult; + groupBy: GetGroupByResult; + $queryRaw: unknown; + $queryRawTyped: unknown; + $executeRaw: number; + $queryRawUnsafe: unknown; + $executeRawUnsafe: number; + $runCommandRaw: JsonObject; + findRaw: JsonObject; + aggregateRaw: JsonObject; +}[OperationName]; + +export declare function getRuntime(): GetRuntimeOutput; + +declare type GetRuntimeOutput = { + id: RuntimeName; + prettyName: string; + isEdge: boolean; +}; + +export declare type GetSelect, R extends InternalArgs['result'][string], KR extends keyof R = string extends keyof R ? never : keyof R> = { + [K in KR | keyof Base]?: K extends KR ? boolean : Base[K]; +}; + +declare type GlobalOmitOptions = { + [modelName: string]: { + [fieldName: string]: boolean; + }; +}; + +declare type HandleErrorParams = { + args: JsArgs; + error: any; + clientMethod: string; + callsite?: CallSite; + transaction?: PrismaPromiseTransaction; + modelName?: string; + globalOmit?: GlobalOmitOptions; +}; + +declare type HrTime = [number, number]; + +/** + * Defines High-Resolution Time. + * + * The first number, HrTime[0], is UNIX Epoch time in seconds since 00:00:00 UTC on 1 January 1970. + * The second number, HrTime[1], represents the partial second elapsed since Unix Epoch time represented by first number in nanoseconds. + * For example, 2021-01-01T12:30:10.150Z in UNIX Epoch time in milliseconds is represented as 1609504210150. + * The first number is calculated by converting and truncating the Epoch time in milliseconds to seconds: + * HrTime[0] = Math.trunc(1609504210150 / 1000) = 1609504210. + * The second number is calculated by converting the digits after the decimal point of the subtraction, (1609504210150 / 1000) - HrTime[0], to nanoseconds: + * HrTime[1] = Number((1609504210.150 - HrTime[0]).toFixed(9)) * 1e9 = 150000000. + * This is represented in HrTime format as [1609504210, 150000000]. + */ +declare type HrTime_2 = [number, number]; + +/** + * Query plan nodes that perform database I/O: individual queries and statements, + * and subtrees executed within a transaction. + */ +declare type ImpureQueryPlanNode = { + type: 'query'; + args: QueryPlanDbQuery; +} | { + type: 'execute'; + args: QueryPlanDbQuery; +} | { + type: 'transaction'; + args: QueryPlanNode; +}; + +declare type Index = ReadonlyDeep_2<{ + model: string; + type: IndexType; + isDefinedOnField: boolean; + name?: string; + dbName?: string; + algorithm?: string; + clustered?: boolean; + fields: IndexField[]; +}>; + +declare type IndexField = ReadonlyDeep_2<{ + name: string; + sortOrder?: SortOrder; + length?: number; + operatorClass?: string; +}>; + +declare type IndexType = 'id' | 'normal' | 'unique' | 'fulltext'; + +declare type InMemoryOps = { + pagination: Pagination | null; + distinct: string[] | null; + reverse: boolean; + linkingFields: string[] | null; + nested: Record; +}; + +/** + * Matches a JSON array. + * Unlike \`JsonArray\`, readonly arrays are assignable to this type. + */ +export declare interface InputJsonArray extends ReadonlyArray { +} + +/** + * Matches a JSON object. + * Unlike \`JsonObject\`, this type allows undefined and read-only properties. + */ +export declare type InputJsonObject = { + readonly [Key in string]?: InputJsonValue | null; +}; + +/** + * Matches any valid value that can be used as an input for operations like + * create and update as the value of a JSON field. Unlike \`JsonValue\`, this + * type allows read-only arrays and read-only object properties and disallows + * \`null\` at the top level. + * + * \`null\` cannot be used as the value of a JSON field because its meaning + * would be ambiguous. Use \`Prisma.JsonNull\` to store the JSON null value or + * \`Prisma.DbNull\` to clear the JSON value and set the field to the database + * NULL value instead. + * + * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-by-null-values + */ +export declare type InputJsonValue = string | number | boolean | InputJsonObject | InputJsonArray | { + toJSON(): unknown; +}; + +declare type InputType = ReadonlyDeep_2<{ + name: string; + constraints: { + maxNumFields: number | null; + minNumFields: number | null; + fields?: string[]; + }; + meta?: { + source?: string; + grouping?: string; + }; + fields: SchemaArg[]; +}>; + +declare type InputTypeRef = TypeRef<'scalar' | 'inputObjectTypes' | 'enumTypes' | 'fieldRefTypes'>; + +declare type InteractiveTransactionInfo = { + /** + * Transaction ID returned by the query engine. + */ + id: string; + /** + * Arbitrary payload the meaning of which depends on the `Engine` implementation. + * It is currently not used in `LibraryEngine`. + */ + payload: Payload; +}; + +declare type InteractiveTransactionOptions = Transaction.InteractiveTransactionInfo; + +export declare type InternalArgs = { + result: { + [K in keyof R]: { + [P in keyof R[K]]: () => R[K][P]; + }; + }; + model: { + [K in keyof M]: { + [P in keyof M[K]]: () => M[K][P]; + }; + }; + query: { + [K in keyof Q]: { + [P in keyof Q[K]]: () => Q[K][P]; + }; + }; + client: { + [K in keyof C]: () => C[K]; + }; +}; + +declare type InternalRequestParams = { + /** + * The original client method being called. + * Even though the rootField / operation can be changed, + * this method stays as it is, as it's what the user's + * code looks like + */ + clientMethod: string; + /** + * Name of js model that triggered the request. Might be used + * for warnings or error messages + */ + jsModelName?: string; + callsite?: CallSite; + transaction?: PrismaPromiseTransaction; + unpacker?: Unpacker; + otelParentCtx?: Context; + /** Used to "desugar" a user input into an "expanded" one */ + argsMapper?: (args?: UserArgs_2) => UserArgs_2; + /** Used to convert args for middleware and back */ + middlewareArgsMapper?: MiddlewareArgsMapper; + /** Used for Accelerate client extension via Data Proxy */ + customDataProxyFetch?: AccelerateExtensionFetchDecorator; +} & Omit; + +export { isAnyNull } + +export { isDbNull } + +export { isJsonNull } + +export { isObjectEnumValue } + +declare type IsolationLevel = 'ReadUncommitted' | 'ReadCommitted' | 'RepeatableRead' | 'Snapshot' | 'Serializable'; + +declare type IsolationLevel_2 = 'READ UNCOMMITTED' | 'READ COMMITTED' | 'REPEATABLE READ' | 'SNAPSHOT' | 'SERIALIZABLE'; + +declare function isSkip(value: unknown): value is Skip; + +export declare function isTypedSql(value: unknown): value is UnknownTypedSql; + +export declare type ITXClientDenyList = (typeof denylist)[number]; + +export declare const itxClientDenyList: readonly (string | symbol)[]; + +declare type ItxScopeState = { + stack: string[]; +}; + +declare interface Job { + resolve: (data: any) => void; + reject: (data: any) => void; + request: any; +} + +export { join } + +export declare type JsArgs = { + select?: Selection_2; + include?: Selection_2; + omit?: Omission; + [argName: string]: JsInputValue; +}; + +export declare type JsInputValue = null | undefined | string | number | boolean | bigint | Uint8Array | Date | DecimalJsLike | ObjectEnumValue | RawParameters | JsonConvertible | FieldRef | JsInputValue[] | Skip | { + [key: string]: JsInputValue; +}; + +declare type JsonArgumentValue = number | string | boolean | null | RawTaggedValue | JsonArgumentValue[] | { + [key: string]: JsonArgumentValue; +}; + +/** + * From https://github.com/sindresorhus/type-fest/ + * Matches a JSON array. + */ +export declare interface JsonArray extends Array { +} + +export declare type JsonBatchQuery = { + batch: JsonQuery[]; + transaction?: { + isolationLevel?: IsolationLevel; + }; +}; + +export declare interface JsonConvertible { + toJSON(): unknown; +} + +declare type JsonFieldSelection = { + arguments?: Record | RawTaggedValue; + selection: JsonSelectionSet; +}; + +export { JsonNull } + +export { JsonNullClass } + +/** + * From https://github.com/sindresorhus/type-fest/ + * Matches a JSON object. + * This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. + */ +export declare type JsonObject = { + [Key in string]?: JsonValue; +}; + +export declare type JsonQuery = { + modelName?: string; + action: JsonQueryAction_2; + query: JsonFieldSelection; +}; + +declare type JsonQueryAction = 'findUnique' | 'findUniqueOrThrow' | 'findFirst' | 'findFirstOrThrow' | 'findMany' | 'createOne' | 'createMany' | 'createManyAndReturn' | 'updateOne' | 'updateMany' | 'updateManyAndReturn' | 'deleteOne' | 'deleteMany' | 'upsertOne' | 'aggregate' | 'groupBy' | 'executeRaw' | 'queryRaw' | 'runCommandRaw' | 'findRaw' | 'aggregateRaw'; + +declare type JsonQueryAction_2 = 'findUnique' | 'findUniqueOrThrow' | 'findFirst' | 'findFirstOrThrow' | 'findMany' | 'createOne' | 'createMany' | 'createManyAndReturn' | 'updateOne' | 'updateMany' | 'updateManyAndReturn' | 'deleteOne' | 'deleteMany' | 'upsertOne' | 'aggregate' | 'groupBy' | 'executeRaw' | 'queryRaw' | 'runCommandRaw' | 'findRaw' | 'aggregateRaw'; + +declare type JsonSelectionSet = { + $scalars?: boolean; + $composites?: boolean; +} & { + [fieldName: string]: boolean | JsonFieldSelection; +}; + +/** + * From https://github.com/sindresorhus/type-fest/ + * Matches any valid JSON value. + */ +export declare type JsonValue = string | number | boolean | JsonObject | JsonArray | null; + +export declare type JsOutputValue = null | string | number | boolean | bigint | Uint8Array | Date | Decimal | JsOutputValue[] | { + [key: string]: JsOutputValue; +}; + +export declare type JsPromise = Promise & {}; + +/** + * A pointer from the current {@link Span} to another span in the same trace or + * in a different trace. + * Few examples of Link usage. + * 1. Batch Processing: A batch of elements may contain elements associated + * with one or more traces/spans. Since there can only be one parent + * SpanContext, Link is used to keep reference to SpanContext of all + * elements in the batch. + * 2. Public Endpoint: A SpanContext in incoming client request on a public + * endpoint is untrusted from service provider perspective. In such case it + * is advisable to start a new trace with appropriate sampling decision. + * However, it is desirable to associate incoming SpanContext to new trace + * initiated on service provider side so two traces (from Client and from + * Service Provider) can be correlated. + */ +declare interface Link { + /** The {@link SpanContext} of a linked span. */ + context: SpanContext; + /** A set of {@link SpanAttributes} on the link. */ + attributes?: SpanAttributes; + /** Count of attributes of the link that were dropped due to collection limits */ + droppedAttributesCount?: number; +} + +declare type LocationInFile = { + fileName: string; + lineNumber: number | null; + columnNumber: number | null; +}; + +declare type LogDefinition = { + level: LogLevel; + emit: 'stdout' | 'event'; +}; + +/** + * Typings for the events we emit. + * + * @remarks + * If this is updated, our edge runtime shim needs to be updated as well. + */ +declare type LogEmitter = { + on(event: E, listener: (event: EngineEvent) => void): LogEmitter; + emit(event: QueryEventType, payload: QueryEvent): boolean; + emit(event: LogEventType, payload: LogEvent): boolean; +}; + +declare type LogEvent = { + timestamp: Date; + message: string; + target: string; +}; + +declare type LogEventType = 'info' | 'warn' | 'error'; + +declare type LogLevel = 'info' | 'query' | 'warn' | 'error'; + +declare type LogLevel_2 = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'query'; + +/** + * Generates more strict variant of an enum which, unlike regular enum, + * throws on non-existing property access. This can be useful in following situations: + * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input + * - enum values are generated dynamically from DMMF. + * + * In that case, if using normal enums and no compile-time typechecking, using non-existing property + * will result in `undefined` value being used, which will be accepted. Using strict enum + * in this case will help to have a runtime exception, telling you that you are probably doing something wrong. + * + * Note: if you need to check for existence of a value in the enum you can still use either + * `in` operator or `hasOwnProperty` function. + * + * @param definition + * @returns + */ +export declare function makeStrictEnum>(definition: T): T; + +export declare function makeTypedQueryFactory(sql: string): (...values: any[]) => TypedSql; + +declare type Mappings = ReadonlyDeep_2<{ + modelOperations: ModelMapping[]; + otherOperations: { + read: string[]; + write: string[]; + }; +}>; + +/** + * Class that holds the list of all extensions, applied to particular instance, + * as well as resolved versions of the components that need to apply on + * different levels. Main idea of this class: avoid re-resolving as much of the + * stuff as possible when new extensions are added while also delaying the + * resolve until the point it is actually needed. For example, computed fields + * of the model won't be resolved unless the model is actually queried. Neither + * adding extensions with `client` component only cause other components to + * recompute. + */ +declare class MergedExtensionsList { + private head?; + private constructor(); + static empty(): MergedExtensionsList; + static single(extension: ExtensionArgs): MergedExtensionsList; + isEmpty(): boolean; + append(extension: ExtensionArgs): MergedExtensionsList; + getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined; + getAllClientExtensions(): ClientArg | undefined; + getAllModelExtensions(dmmfModelName: string): ModelArg | undefined; + getAllQueryCallbacks(jsModelName: string, operation: string): any; + getAllBatchQueryCallbacks(): BatchQueryOptionsCb[]; +} + +export declare type MergeExtArgs, Args extends Record> = ComputeDeep & AllModelsToStringIndex>; + +declare type MiddlewareArgsMapper = { + requestArgsToMiddlewareArgs(requestArgs: RequestArgs): MiddlewareArgs; + middlewareArgsToRequestArgs(middlewareArgs: MiddlewareArgs): RequestArgs; +}; + +declare type Model = ReadonlyDeep_2<{ + name: string; + dbName: string | null; + schema: string | null; + fields: Field[]; + uniqueFields: string[][]; + uniqueIndexes: uniqueIndex[]; + documentation?: string; + primaryKey: PrimaryKey | null; + isGenerated?: boolean; +}>; + +declare enum ModelAction { + findUnique = "findUnique", + findUniqueOrThrow = "findUniqueOrThrow", + findFirst = "findFirst", + findFirstOrThrow = "findFirstOrThrow", + findMany = "findMany", + create = "create", + createMany = "createMany", + createManyAndReturn = "createManyAndReturn", + update = "update", + updateMany = "updateMany", + updateManyAndReturn = "updateManyAndReturn", + upsert = "upsert", + delete = "delete", + deleteMany = "deleteMany", + groupBy = "groupBy", + count = "count",// TODO: count does not actually exist in DMMF + aggregate = "aggregate", + findRaw = "findRaw", + aggregateRaw = "aggregateRaw" +} + +export declare type ModelArg = { + [MethodName in string]: unknown; +}; + +export declare type ModelArgs = { + model: { + [ModelName in string]: ModelArg; + }; +}; + +export declare type ModelKey = M extends keyof TypeMap['model'] ? M : Capitalize; + +declare type ModelMapping = ReadonlyDeep_2<{ + model: string; + plural: string; + findUnique?: string | null; + findUniqueOrThrow?: string | null; + findFirst?: string | null; + findFirstOrThrow?: string | null; + findMany?: string | null; + create?: string | null; + createMany?: string | null; + createManyAndReturn?: string | null; + update?: string | null; + updateMany?: string | null; + updateManyAndReturn?: string | null; + upsert?: string | null; + delete?: string | null; + deleteMany?: string | null; + aggregate?: string | null; + groupBy?: string | null; + count?: string | null; + findRaw?: string | null; + aggregateRaw?: string | null; +}>; + +export declare type ModelQueryOptionsCb = (args: ModelQueryOptionsCbArgs) => Promise; + +export declare type ModelQueryOptionsCbArgs = { + model: string; + operation: string; + args: JsArgs; + query: (args: JsArgs) => Promise; +}; + +declare type MultiBatchResponse = { + type: 'multi'; + plans: QueryPlanNode[]; +}; + +export declare type NameArgs = { + name?: string; +}; + +export declare type Narrow = { + [K in keyof A]: A[K] extends Function ? A[K] : Narrow; +} | (A extends Narrowable ? A : never); + +export declare type Narrowable = string | number | bigint | boolean | []; + +export declare type NeverToUnknown = [T] extends [never] ? unknown : T; + +export { NullTypes } + +export { ObjectEnumValue } + +declare const officialPrismaAdapters: readonly ["@prisma/adapter-planetscale", "@prisma/adapter-neon", "@prisma/adapter-libsql", "@prisma/adapter-better-sqlite3", "@prisma/adapter-d1", "@prisma/adapter-pg", "@prisma/adapter-mssql", "@prisma/adapter-mariadb"]; + +export declare type Omission = Record; + +declare type Omit_2 = { + [P in keyof T as P extends K ? never : P]: T[P]; +}; +export { Omit_2 as Omit } + +export declare type OmitValue = Key extends keyof Omit ? Omit[Key] : false; + +export declare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'updateManyAndReturn' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw'; + +export declare type OperationPayload = { + name: string; + scalars: { + [ScalarName in string]: unknown; + }; + objects: { + [ObjectName in string]: unknown; + }; + composites: { + [CompositeName in string]: unknown; + }; +}; + +export declare type Optional = { + [P in K & keyof O]?: O[P]; +} & { + [P in Exclude]: O[P]; +}; + +export declare type OptionalFlat = { + [K in keyof T]?: T[K]; +}; + +export declare type OptionalKeys = { + [K in keyof O]-?: {} extends Pick_2 ? K : never; +}[keyof O]; + +declare type Options = { + /** Timeout for starting the transaction */ + maxWait?: number; + /** Timeout for the transaction body */ + timeout?: number; + /** Transaction isolation level */ + isolationLevel?: IsolationLevel; + /** + * Used for nested interactive transactions. When provided, the engine may + * re-use an existing open transaction instead of opening a new one. + */ + newTxId?: string; +}; + +export declare type Or = { + 0: { + 0: 0; + 1: 1; + }; + 1: { + 0: 1; + 1: 1; + }; +}[A][B]; + +declare type OtherOperationMappings = ReadonlyDeep_2<{ + read: string[]; + write: string[]; +}>; + +declare type OutputType = ReadonlyDeep_2<{ + name: string; + fields: SchemaField[]; +}>; + +declare type OutputTypeRef = TypeRef<'scalar' | 'outputObjectTypes' | 'enumTypes'>; + +declare type Pagination = { + cursor: Record | null; + take: number | null; + skip: number | null; +}; + +export declare function Param<$Type, $Value extends string>(name: $Value): Param<$Type, $Value>; + +export declare type Param = { + readonly name: $Value; +}; + +export declare type PatchFlat = O1 & Omit_2; + +export declare type Path = O extends unknown ? P extends [infer K, ...infer R] ? K extends keyof O ? Path : Default : O : never; + +export declare type Payload = T extends { + [K: symbol]: { + types: { + payload: any; + }; + }; +} ? T[symbol]['types']['payload'] : any; + +export declare type PayloadToResult = RenameAndNestPayloadKeys

> = { + [K in keyof O]?: O[K][K] extends any[] ? PayloadToResult[] : O[K][K] extends object ? PayloadToResult : O[K][K]; +}; + +declare type Pick_2 = { + [P in keyof T as P extends K ? P : never]: T[P]; +}; +export { Pick_2 as Pick } + +declare interface PlaceholderFormat { + prefix: string; + hasNumbering: boolean; +} + +declare type PrimaryKey = ReadonlyDeep_2<{ + name: string | null; + fields: string[]; +}>; + +/** + * Options common to all variants of `PrismaClientOptions`, regardless of + * whether you connect to your database through a driver adapter or through + * Prisma Accelerate. + */ +declare interface PrismaClientBaseOptions { + /** + * @default "colorless" + */ + errorFormat?: ErrorFormat; + /** + * The default values for Transaction options + * maxWait ?= 2000 + * timeout ?= 5000 + */ + transactionOptions?: Transaction.Options; + /** + * @example + * \`\`\` + * // Defaults to stdout + * log: ['query', 'info', 'warn'] + * + * // Emit as events + * log: [ + * { emit: 'stdout', level: 'query' }, + * { emit: 'stdout', level: 'info' }, + * { emit: 'stdout', level: 'warn' } + * ] + * \`\`\` + * Read more in our [docs](https://pris.ly/d/logging). + */ + log?: Array; + omit?: GlobalOmitOptions; + /** + * SQL commenter plugins that add metadata to SQL queries as comments. + * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/ + * + * @example + * ```ts + * new PrismaClient({ + * adapter: new PrismaPg({ connectionString }), + * comments: [ + * traceContext(), + * queryInsights(), + * ], + * }) + * ``` + */ + comments?: SqlCommenterPlugin[]; + /** + * Optional maximum size for the query plan cache. If not provided, a default size will be used. + * A value of `0` can be used to disable the cache entirely. A higher cache size can improve + * performance for applications that execute a large number of unique queries, while a smaller + * cache size can reduce memory usage. + * + * @example + * ``` + * const prisma = new PrismaClient({ + * adapter, + * queryPlanCacheMaxSize: 100, + * }) + * ``` + */ + queryPlanCacheMaxSize?: number; + /** + * @internal + * You probably don't want to use this. \`__internal\` is used by internal tooling. + */ + __internal?: { + debug?: boolean; + /** This can be used for testing purposes */ + configOverride?: (config: GetPrismaClientConfig) => GetPrismaClientConfig; + }; +} + +export { PrismaClientInitializationError } + +export { PrismaClientKnownRequestError } + +/** + * Options passed to the `PrismaClient` constructor. + * + * A driver adapter (or, alternatively, a Prisma Accelerate URL) is **required**. + * See {@link PrismaClientOptionsWithAdapter} and + * {@link PrismaClientOptionsWithAccelerateUrl} for the two variants. All other + * properties live in {@link PrismaClientBaseOptions} and are optional. + * + * Learn more about driver adapters: https://pris.ly/d/driver-adapters + */ +export declare type PrismaClientOptions = PrismaClientOptionsWithAccelerateUrl | PrismaClientOptionsWithAdapter; + +/** + * `PrismaClient` options for connecting to your database through Prisma + * Accelerate instead of a driver adapter. + * + * Learn more: https://pris.ly/d/accelerate + */ +declare interface PrismaClientOptionsWithAccelerateUrl extends PrismaClientBaseOptions { + /** + * The Prisma Accelerate connection URL. Use this option to connect to + * your database through Prisma Accelerate instead of using a driver + * adapter to connect directly. + * + * Learn more: https://pris.ly/d/accelerate + */ + accelerateUrl: string; + adapter?: never; +} + +/** + * `PrismaClient` options for connecting to your database through a driver + * adapter. This is the common case in Prisma 7. + * + * Learn more: https://pris.ly/d/driver-adapters + */ +declare interface PrismaClientOptionsWithAdapter extends PrismaClientBaseOptions { + /** + * A driver adapter that PrismaClient uses to connect to your database, + * such as the ones provided by `@prisma/adapter-pg`, + * `@prisma/adapter-libsql`, `@prisma/adapter-planetscale`, etc. + * + * A driver adapter is **required** unless you connect to your database + * through Prisma Accelerate (in which case use `accelerateUrl` instead). + * + * Learn more: https://pris.ly/d/driver-adapters + * + * @example + * ```ts + * import { PrismaPg } from '@prisma/adapter-pg' + * import { PrismaClient } from './generated/prisma/client' + * + * const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) + * const prisma = new PrismaClient({ adapter }) + * ``` + */ + adapter: SqlDriverAdapterFactory; + accelerateUrl?: never; +} + +export { PrismaClientRustPanicError } + +export { PrismaClientUnknownRequestError } + +export { PrismaClientValidationError } + +declare type PrismaOperationSpec = { + args: TArgs; + action: TAction; + model: string; +}; + +export declare interface PrismaPromise extends Promise { + [Symbol.toStringTag]: 'PrismaPromise'; +} + +/** + * Prisma's `Promise` that is backwards-compatible. All additions on top of the + * original `Promise` are optional so that it can be backwards-compatible. + * @see [[createPrismaPromise]] + */ +declare interface PrismaPromise_2 = any> extends Promise { + get spec(): TSpec; + /** + * Extension of the original `.then` function + * @param onfulfilled same as regular promises + * @param onrejected same as regular promises + * @param transaction transaction options + */ + then(onfulfilled?: (value: TResult) => R1 | PromiseLike, onrejected?: (error: unknown) => R2 | PromiseLike, transaction?: PrismaPromiseTransaction): Promise; + /** + * Extension of the original `.catch` function + * @param onrejected same as regular promises + * @param transaction transaction options + */ + catch(onrejected?: ((reason: any) => R | PromiseLike) | undefined | null, transaction?: PrismaPromiseTransaction): Promise; + /** + * Extension of the original `.finally` function + * @param onfinally same as regular promises + * @param transaction transaction options + */ + finally(onfinally?: (() => void) | undefined | null, transaction?: PrismaPromiseTransaction): Promise; + /** + * Called when executing a batch of regular tx + * @param transaction transaction options for batch tx + */ + requestTransaction?(transaction: PrismaPromiseBatchTransaction): PromiseLike; +} + +declare type PrismaPromiseBatchTransaction = { + kind: 'batch'; + id: number; + isolationLevel?: IsolationLevel; + maxWait?: number; + timeout?: number; + index: number; + lock: PromiseLike; +}; + +declare type PrismaPromiseCallback = (transaction?: PrismaPromiseTransaction) => Promise; + +/** + * Creates a [[PrismaPromise]]. It is Prisma's implementation of `Promise` which + * is essentially a proxy for `Promise`. All the transaction-compatible client + * methods return one, this allows for pre-preparing queries without executing + * them until `.then` is called. It's the foundation of Prisma's query batching. + * @param callback that will be wrapped within our promise implementation + * @see [[PrismaPromise]] + * @returns + */ +declare type PrismaPromiseFactory = >(callback: PrismaPromiseCallback, op?: T) => PrismaPromise_2; + +declare type PrismaPromiseInteractiveTransaction = { + kind: 'itx'; + id: string; + payload: PayloadType; +}; + +declare type PrismaPromiseTransaction = PrismaPromiseBatchTransaction | PrismaPromiseInteractiveTransaction; + +declare type PrismaValue = string | boolean | number | PrismaValue[] | null | Record | PrismaValuePlaceholder | PrismaValueGenerator; + +declare type PrismaValueGenerator = { + prisma__type: 'generatorCall'; + prisma__value: { + name: string; + args: PrismaValue[]; + }; +}; + +declare type PrismaValuePlaceholder = { + prisma__type: 'param'; + prisma__value: { + name: string; + type: string; + }; +}; + +export declare const PrivateResultType: unique symbol; + +declare type Provider = 'mysql' | 'postgres' | 'sqlite' | 'sqlserver'; + +declare namespace Public { + export { + validator + } +} +export { Public } + +declare namespace Public_2 { + export { + Args, + Result, + Payload, + PrismaPromise, + Operation, + Exact + } +} + +/** + * Query plan nodes that are free of side effects and can be interpreted synchronously + * without touching the database. The `Rest` parameter controls what other nodes may + * appear in child positions: with the default `never` the tree is fully pure, while + * `PureQueryPlanNode` describes a tree of pure nodes that may + * contain impure nodes anywhere inside. + */ +declare type PureQueryPlanNode = { + type: 'value'; + args: PrismaValue; + /** + * Present when this node is the result of evaluating an impure node during + * query plan purification. Never produced by the query compiler. + */ + lastInsertId?: string; +} | { + type: 'seq'; + args: (PureQueryPlanNode | Rest)[]; +} | { + type: 'get'; + args: { + name: string; + }; +} | { + type: 'let'; + args: { + bindings: { + name: string; + expr: PureQueryPlanNode | Rest; + }[]; + expr: PureQueryPlanNode | Rest; + }; +} | { + type: 'getFirstNonEmpty'; + args: { + names: string[]; + }; +} | { + type: 'reverse'; + args: PureQueryPlanNode | Rest; +} | { + type: 'sum'; + args: (PureQueryPlanNode | Rest)[]; +} | { + type: 'concat'; + args: (PureQueryPlanNode | Rest)[]; +} | { + type: 'unique'; + args: PureQueryPlanNode | Rest; +} | { + type: 'required'; + args: PureQueryPlanNode | Rest; +} | { + type: 'join'; + args: { + parent: PureQueryPlanNode | Rest; + children: { + child: PureQueryPlanNode | Rest; + on: [left: string, right: string][]; + parentField: string; + isRelationUnique: boolean; + }[]; + canAssumeStrictEquality: boolean; + }; +} | { + type: 'mapField'; + args: { + field: string; + records: PureQueryPlanNode | Rest; + }; +} | { + type: 'dataMap'; + args: { + expr: PureQueryPlanNode | Rest; + structure: ResultNode; + enums: Record>; + }; +} | { + type: 'validate'; + args: { + expr: PureQueryPlanNode | Rest; + rules: DataRule[]; + } & ValidationError; +} | { + type: 'if'; + args: { + value: PureQueryPlanNode | Rest; + rule: DataRule; + then: PureQueryPlanNode | Rest; + else: PureQueryPlanNode | Rest; + }; +} | { + type: 'unit'; +} | { + type: 'diff'; + args: { + from: PureQueryPlanNode | Rest; + to: PureQueryPlanNode | Rest; + fields: string[]; + }; +} | { + type: 'initializeRecord'; + args: { + expr: PureQueryPlanNode | Rest; + fields: Record; + }; +} | { + type: 'mapRecord'; + args: { + expr: PureQueryPlanNode | Rest; + fields: Record; + }; +} | { + type: 'process'; + args: { + expr: PureQueryPlanNode | Rest; + operations: InMemoryOps; + }; +}; + +declare type Query = ReadonlyDeep_2<{ + name: string; + args: SchemaArg[]; + output: QueryOutput; +}>; + +declare interface Queryable extends AdapterInfo { + /** + * Execute a query and return its result. + */ + queryRaw(params: Query): Promise; + /** + * Execute a query and return the number of affected rows. + */ + executeRaw(params: Query): Promise; +} + +declare type QueryCompiler = { + compile(request: string): QueryPlanNode; + compileBatch(batchRequest: string): BatchResponse; + free(): void; +}; + +declare interface QueryCompilerConstructor { + new (options: QueryCompilerOptions): QueryCompiler; +} + +declare type QueryCompilerOptions = { + datamodel: string; + provider: Provider; + connectionInfo: ConnectionInfo; +}; + +declare type QueryEngineResultData = { + data: T; +}; + +declare type QueryEvent = { + timestamp: Date; + query: string; + params: string; + duration: number; + target: string; +}; + +declare type QueryEventType = 'query'; + +declare type QueryIntrospectionBuiltinType = 'int' | 'bigint' | 'float' | 'double' | 'string' | 'enum' | 'bytes' | 'bool' | 'char' | 'decimal' | 'json' | 'xml' | 'uuid' | 'datetime' | 'date' | 'time' | 'int-array' | 'bigint-array' | 'float-array' | 'double-array' | 'string-array' | 'char-array' | 'bytes-array' | 'bool-array' | 'decimal-array' | 'json-array' | 'xml-array' | 'uuid-array' | 'datetime-array' | 'date-array' | 'time-array' | 'null' | 'unknown'; + +declare type QueryMiddlewareParams = { + /** The model this is executed on */ + model?: string; + /** The action that is being handled */ + action: Action; + /** TODO what is this */ + dataPath: string[]; + /** TODO what is this */ + runInTransaction: boolean; + args?: UserArgs_2; +}; + +export declare type QueryOptions = { + query: { + [ModelName in string]: { + [ModelAction in string]: ModelQueryOptionsCb; + } | QueryOptionsCb; + }; +}; + +export declare type QueryOptionsCb = (args: QueryOptionsCbArgs) => Promise; + +export declare type QueryOptionsCbArgs = { + model?: string; + operation: string; + args: JsArgs | RawQueryArgs; + query: (args: JsArgs | RawQueryArgs) => Promise; +}; + +declare type QueryOutput = ReadonlyDeep_2<{ + name: string; + isRequired: boolean; + isList: boolean; +}>; + +declare type QueryPlanDbQuery = { + type: 'rawSql'; + sql: string; + args: PrismaValue[]; + argTypes: ArgType[]; +} | { + type: 'templateSql'; + fragments: Fragment[]; + placeholderFormat: PlaceholderFormat; + args: PrismaValue[]; + argTypes: DynamicArgType[]; + chunkable: boolean; +}; + +/** + * A query plan as emitted by the query compiler: a tree of pure nodes that may + * contain impure nodes anywhere inside. + */ +declare type QueryPlanNode = ImpureQueryPlanNode | PureQueryPlanNode; + +export { raw } + +export declare type RawParameters = { + __prismaRawParameters__: true; + values: string; +}; + +export declare type RawQueryArgs = Sql | UnknownTypedSql | [query: string, ...values: RawValue[]]; + +declare type RawResponse = { + columns: string[]; + types: QueryIntrospectionBuiltinType[]; + rows: unknown[][]; +}; + +declare type RawTaggedValue = { + $type: 'Raw'; + value: unknown; +}; + +export { RawValue } + +export declare type ReadonlyDeep = { + readonly [K in keyof T]: ReadonlyDeep; +}; + +declare type ReadonlyDeep_2 = { + +readonly [K in keyof O]: ReadonlyDeep_2; +}; + +declare type Record_2 = { + [P in T]: U; +}; +export { Record_2 as Record } + +export declare type RenameAndNestPayloadKeys

= { + [K in keyof P as K extends 'scalars' | 'objects' | 'composites' ? keyof P[K] : never]: P[K]; +}; + +declare type RequestBatchOptions = { + transaction?: TransactionOptions_2; + traceparent?: string; + numTry?: number; + containsWrite: boolean; + customDataProxyFetch?: AccelerateExtensionFetchDecorator; +}; + +declare class RequestHandler { + client: Client; + dataloader: DataLoader; + private logEmitter?; + constructor(client: Client, logEmitter?: LogEmitter); + request(params: RequestParams): Promise; + mapQueryEngineResult({ dataPath, unpacker }: RequestParams, response: QueryEngineResultData): any; + /** + * Handles the error and logs it, logging the error is done synchronously waiting for the event + * handlers to finish. + */ + handleAndLogRequestError(params: HandleErrorParams): never; + handleRequestError({ error, clientMethod, callsite, transaction, args, modelName, globalOmit, }: HandleErrorParams): never; + /** + * Builds the `meta` object for a `PrismaClientKnownRequestError`. + * + * P2002 errors carry the physical name of the table the violated constraint + * belongs to (`meta.table`, extracted by the driver adapters). It is mapped + * back to the Prisma model name so that `meta.modelName` points at the model + * where the violation actually occurred — which for nested writes is not + * necessarily the model of the top-level operation — and the internal + * `table` key is dropped from the user-facing meta. + */ + private resolveErrorMeta; + sanitizeMessage(message: any): any; + unpack(data: unknown, dataPath: string[], unpacker?: Unpacker): any; + get [Symbol.toStringTag](): string; +} + +declare type RequestOptions = { + traceparent?: string; + numTry?: number; + interactiveTransaction?: InteractiveTransactionOptions; + isWrite: boolean; + customDataProxyFetch?: AccelerateExtensionFetchDecorator; +}; + +declare type RequestParams = { + modelName?: string; + action: Action; + protocolQuery: JsonQuery; + dataPath: string[]; + clientMethod: string; + callsite?: CallSite; + transaction?: PrismaPromiseTransaction; + extensions: MergedExtensionsList; + args?: any; + headers?: Record; + unpacker?: Unpacker; + otelParentCtx?: Context; + otelChildCtx?: Context; + globalOmit?: GlobalOmitOptions; + customDataProxyFetch?: AccelerateExtensionFetchDecorator; +}; + +declare type RequiredExtensionArgs = NameArgs & ResultArgs & ModelArgs & ClientArgs & QueryOptions; +export { RequiredExtensionArgs } +export { RequiredExtensionArgs as UserArgs } + +export declare type RequiredKeys = { + [K in keyof O]-?: {} extends Pick_2 ? never : K; +}[keyof O]; + +export declare type Result = T extends { + [K: symbol]: { + types: { + payload: any; + }; + }; +} ? GetResult : GetResult<{ + composites: {}; + objects: {}; + scalars: {}; + name: ''; +}, {}, F>; + +export declare type Result_2 = Result; + +declare namespace Result_3 { + export { + Count, + GetFindResult, + SelectablePayloadFields, + SelectField, + DefaultSelection, + UnwrapPayload, + ApplyOmit, + OmitValue, + GetCountResult, + Aggregate, + GetAggregateResult, + GetBatchResult, + GetGroupByResult, + GetResult, + ExtractGlobalOmit + } +} + +export declare type ResultArg = { + [FieldName in string]: ResultFieldDefinition; +}; + +export declare type ResultArgs = { + result: { + [ModelName in string]: ResultArg; + }; +}; + +export declare type ResultArgsFieldCompute = (model: any, modelName: string) => unknown; + +export declare type ResultFieldDefinition = { + needs?: { + [FieldName in string]: boolean; + }; + compute: ResultArgsFieldCompute; +}; + +declare type ResultNode = { + type: 'affectedRows'; +} | { + type: 'object'; + fields: Record; + serializedName: string | null; + skipNulls: boolean; +} | { + type: 'field'; + dbName: string; + fieldType: FieldType; +}; + +export declare type Return = T extends (...args: any[]) => infer R ? R : T; + +export declare type RuntimeDataModel = { + readonly models: Record; + readonly enums: Record; + readonly types: Record; +}; + +declare type RuntimeEnum = Omit; + +declare type RuntimeModel = Omit; + +declare type RuntimeName = 'workerd' | 'deno' | 'netlify' | 'node' | 'bun' | 'edge-light' | ''; + +declare type Schema = ReadonlyDeep_2<{ + rootQueryType?: string; + rootMutationType?: string; + inputObjectTypes: { + model?: InputType[]; + prisma?: InputType[]; + }; + outputObjectTypes: { + model: OutputType[]; + prisma: OutputType[]; + }; + enumTypes: { + model?: SchemaEnum[]; + prisma: SchemaEnum[]; + }; + fieldRefTypes: { + prisma?: FieldRefType[]; + }; +}>; + +declare type SchemaArg = ReadonlyDeep_2<{ + name: string; + comment?: string; + isNullable: boolean; + isRequired: boolean; + inputTypes: InputTypeRef[]; + isParameterizable: boolean; + requiresOtherFields?: string[]; + deprecation?: Deprecation; +}>; + +declare type SchemaEnum = ReadonlyDeep_2<{ + name: string; + values: string[]; +}>; + +declare type SchemaField = ReadonlyDeep_2<{ + name: string; + isNullable?: boolean; + outputType: OutputTypeRef; + args: SchemaArg[]; + deprecation?: Deprecation; + documentation?: string; +}>; + +export declare type Select = T extends U ? T : never; + +export declare type SelectablePayloadFields = { + objects: { + [k in K]: O; + }; +} | { + composites: { + [k in K]: O; + }; +}; + +export declare type SelectField

, K extends PropertyKey> = P extends { + objects: Record; +} ? P['objects'][K] : P extends { + composites: Record; +} ? P['composites'][K] : never; + +declare type Selection_2 = Record; +export { Selection_2 as Selection } + +/** + * Serialized format stored in the generated client. + */ +declare interface SerializedParamGraph { + /** String table (field names, enum names, root keys) */ + strings: string[]; + /** Base64url-encoded binary blob for structural data */ + graph: string; +} + +export declare function serializeJsonQuery({ modelName, action, args, runtimeDataModel, extensions, callsite, clientMethod, errorFormat, clientVersion, previewFeatures, globalOmit, wrapRawValues, }: SerializeParams): JsonQuery; + +declare type SerializeParams = { + runtimeDataModel: RuntimeDataModel; + modelName?: string; + action: Action; + args?: JsArgs; + extensions?: MergedExtensionsList; + callsite?: CallSite; + clientMethod: string; + clientVersion: string; + errorFormat: ErrorFormat; + previewFeatures: string[]; + globalOmit?: GlobalOmitOptions; + wrapRawValues?: boolean; +}; + +declare class Skip { + constructor(param?: symbol); + ifUndefined(value: T | undefined): T | Skip; +} + +export declare const skip: Skip; + +declare type SortOrder = 'asc' | 'desc'; + +/** + * An interface that represents a span. A span represents a single operation + * within a trace. Examples of span might include remote procedure calls or a + * in-process function calls to sub-components. A Trace has a single, top-level + * "root" Span that in turn may have zero or more child Spans, which in turn + * may have children. + * + * Spans are created by the {@link Tracer.startSpan} method. + */ +declare interface Span { + /** + * Returns the {@link SpanContext} object associated with this Span. + * + * Get an immutable, serializable identifier for this span that can be used + * to create new child spans. Returned SpanContext is usable even after the + * span ends. + * + * @returns the SpanContext object associated with this Span. + */ + spanContext(): SpanContext; + /** + * Sets an attribute to the span. + * + * Sets a single Attribute with the key and value passed as arguments. + * + * @param key the key for this attribute. + * @param value the value for this attribute. Setting a value null or + * undefined is invalid and will result in undefined behavior. + */ + setAttribute(key: string, value: SpanAttributeValue): this; + /** + * Sets attributes to the span. + * + * @param attributes the attributes that will be added. + * null or undefined attribute values + * are invalid and will result in undefined behavior. + */ + setAttributes(attributes: SpanAttributes): this; + /** + * Adds an event to the Span. + * + * @param name the name of the event. + * @param [attributesOrStartTime] the attributes that will be added; these are + * associated with this event. Can be also a start time + * if type is {@type TimeInput} and 3rd param is undefined + * @param [startTime] start time of the event. + */ + addEvent(name: string, attributesOrStartTime?: SpanAttributes | TimeInput, startTime?: TimeInput): this; + /** + * Adds a single link to the span. + * + * Links added after the creation will not affect the sampling decision. + * It is preferred span links be added at span creation. + * + * @param link the link to add. + */ + addLink(link: Link): this; + /** + * Adds multiple links to the span. + * + * Links added after the creation will not affect the sampling decision. + * It is preferred span links be added at span creation. + * + * @param links the links to add. + */ + addLinks(links: Link[]): this; + /** + * Sets a status to the span. If used, this will override the default Span + * status. Default is {@link SpanStatusCode.UNSET}. SetStatus overrides the value + * of previous calls to SetStatus on the Span. + * + * @param status the SpanStatus to set. + */ + setStatus(status: SpanStatus): this; + /** + * Updates the Span name. + * + * This will override the name provided via {@link Tracer.startSpan}. + * + * Upon this update, any sampling behavior based on Span name will depend on + * the implementation. + * + * @param name the Span name. + */ + updateName(name: string): this; + /** + * Marks the end of Span execution. + * + * Call to End of a Span MUST not have any effects on child spans. Those may + * still be running and can be ended later. + * + * Do not return `this`. The Span generally should not be used after it + * is ended so chaining is not desired in this context. + * + * @param [endTime] the time to set as Span's end time. If not provided, + * use the current time as the span's end time. + */ + end(endTime?: TimeInput): void; + /** + * Returns the flag whether this span will be recorded. + * + * @returns true if this Span is active and recording information like events + * with the `AddEvent` operation and attributes using `setAttributes`. + */ + isRecording(): boolean; + /** + * Sets exception as a span event + * @param exception the exception the only accepted values are string or Error + * @param [time] the time to set as Span's event time. If not provided, + * use the current time. + */ + recordException(exception: Exception, time?: TimeInput): void; +} + +/** + * @deprecated please use {@link Attributes} + */ +declare type SpanAttributes = Attributes; + +/** + * @deprecated please use {@link AttributeValue} + */ +declare type SpanAttributeValue = AttributeValue; + +declare type SpanCallback = (span?: Span, context?: Context) => R; + +/** + * A SpanContext represents the portion of a {@link Span} which must be + * serialized and propagated along side of a {@link Baggage}. + */ +declare interface SpanContext { + /** + * The ID of the trace that this span belongs to. It is worldwide unique + * with practically sufficient probability by being made as 16 randomly + * generated bytes, encoded as a 32 lowercase hex characters corresponding to + * 128 bits. + */ + traceId: string; + /** + * The ID of the Span. It is globally unique with practically sufficient + * probability by being made as 8 randomly generated bytes, encoded as a 16 + * lowercase hex characters corresponding to 64 bits. + */ + spanId: string; + /** + * Only true if the SpanContext was propagated from a remote parent. + */ + isRemote?: boolean; + /** + * Trace flags to propagate. + * + * It is represented as 1 byte (bitmap). Bit to represent whether trace is + * sampled or not. When set, the least significant bit documents that the + * caller may have recorded trace data. A caller who does not record trace + * data out-of-band leaves this flag unset. + * + * see {@link TraceFlags} for valid flag values. + */ + traceFlags: number; + /** + * Tracing-system-specific info to propagate. + * + * The tracestate field value is a `list` as defined below. The `list` is a + * series of `list-members` separated by commas `,`, and a list-member is a + * key/value pair separated by an equals sign `=`. Spaces and horizontal tabs + * surrounding `list-members` are ignored. There can be a maximum of 32 + * `list-members` in a `list`. + * More Info: https://www.w3.org/TR/trace-context/#tracestate-field + * + * Examples: + * Single tracing system (generic format): + * tracestate: rojo=00f067aa0ba902b7 + * Multiple tracing systems (with different formatting): + * tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE + */ + traceState?: TraceState; +} + +declare enum SpanKind { + /** Default value. Indicates that the span is used internally. */ + INTERNAL = 0, + /** + * Indicates that the span covers server-side handling of an RPC or other + * remote request. + */ + SERVER = 1, + /** + * Indicates that the span covers the client-side wrapper around an RPC or + * other remote request. + */ + CLIENT = 2, + /** + * Indicates that the span describes producer sending a message to a + * broker. Unlike client and server, there is no direct critical path latency + * relationship between producer and consumer spans. + */ + PRODUCER = 3, + /** + * Indicates that the span describes consumer receiving a message from a + * broker. Unlike client and server, there is no direct critical path latency + * relationship between producer and consumer spans. + */ + CONSUMER = 4 +} + +/** + * Options needed for span creation + */ +declare interface SpanOptions { + /** + * The SpanKind of a span + * @default {@link SpanKind.INTERNAL} + */ + kind?: SpanKind; + /** A span's attributes */ + attributes?: SpanAttributes; + /** {@link Link}s span to other spans */ + links?: Link[]; + /** A manually specified start time for the created `Span` object. */ + startTime?: TimeInput; + /** The new span should be a root span. (Ignore parent from context). */ + root?: boolean; +} + +declare interface SpanStatus { + /** The status code of this message. */ + code: SpanStatusCode; + /** A developer-facing error message. */ + message?: string; +} + +/** + * An enumeration of status codes. + */ +declare enum SpanStatusCode { + /** + * The default status. + */ + UNSET = 0, + /** + * The operation has been validated by an Application developer or + * Operator to have completed successfully. + */ + OK = 1, + /** + * The operation contains an error. + */ + ERROR = 2 +} + +export { Sql } + +/** + * Information about a compacted batch query (e.g. multiple independent + * `findUnique` queries automatically merged into a single `SELECT` SQL + * statement). + */ +declare interface SqlCommenterCompactedQueryInfo { + /** + * The model name (e.g., "User", "Post"). + */ + readonly modelName: string; + /** + * The Prisma operation (e.g., "findUnique"). + */ + readonly action: SqlCommenterQueryAction; + /** + * The full query objects (selections, arguments, etc.). + * Specifics of the query representation are not part of the public API yet. + */ + readonly queries: ReadonlyArray; +} + +/** + * Context provided to SQL commenter plugins. + */ +export declare interface SqlCommenterContext { + /** + * Information about the Prisma query being executed. + */ + readonly query: SqlCommenterQueryInfo; + /** + * Raw SQL query generated from this Prisma query. + * + * It is always available when `PrismaClient` connects to the database and + * renders SQL queries directly. + * + * When using Prisma Accelerate, SQL rendering happens on Accelerate side and the raw + * SQL strings are not yet available when SQL commenter plugins are executed. + */ + readonly sql?: string; +} + +/** + * A SQL commenter plugin that returns key-value pairs to be added as comments. + * Return an empty object to add no comments. Keys with undefined values will be omitted. + * + * @example + * ```ts + * const myPlugin: SqlCommenterPlugin = (context) => { + * return { + * application: 'my-app', + * model: context.query.modelName ?? 'raw', + * // Conditional key - will be omitted if ctx.sql is undefined + * sqlLength: context.sql ? String(context.sql.length) : undefined, + * } + * } + * ``` + */ +export declare interface SqlCommenterPlugin { + (context: SqlCommenterContext): SqlCommenterTags; +} + +/** + * Prisma query type corresponding to this SQL query. + */ +declare type SqlCommenterQueryAction = JsonQueryAction; + +/** + * Information about the query or queries being executed. + * + * - `single`: A single query is being executed + * - `compacted`: Multiple queries have been compacted into a single SQL statement + */ +export declare type SqlCommenterQueryInfo = ({ + readonly type: 'single'; +} & SqlCommenterSingleQueryInfo) | ({ + readonly type: 'compacted'; +} & SqlCommenterCompactedQueryInfo); + +/** + * Information about a single Prisma query. + */ +export declare interface SqlCommenterSingleQueryInfo { + /** + * The model name (e.g., "User", "Post"). Undefined for raw queries. + */ + readonly modelName?: string; + /** + * The Prisma operation (e.g., "findMany", "createOne", "queryRaw"). + */ + readonly action: SqlCommenterQueryAction; + /** + * The full query object (selection, arguments, etc.). + * Specifics of the query representation are not part of the public API yet. + */ + readonly query: unknown; +} + +/** + * Key-value pairs to add as SQL comments. + * Keys with undefined values will be omitted from the final comment. + */ +export declare type SqlCommenterTags = { + readonly [key: string]: string | undefined; +}; + +declare interface SqlDriverAdapter extends SqlQueryable { + /** + * Execute multiple SQL statements separated by semicolon. + */ + executeScript(script: string): Promise; + /** + * Start new transaction. + */ + startTransaction(isolationLevel?: IsolationLevel_2): Promise; + /** + * Optional method that returns extra connection info + */ + getConnectionInfo?(): ConnectionInfo; + /** + * Dispose of the connection and release any resources. + */ + dispose(): Promise; +} + +export declare interface SqlDriverAdapterFactory extends DriverAdapterFactory { + connect(): Promise; +} + +declare type SqlQuery = { + sql: string; + args: Array; + argTypes: Array; +}; + +declare interface SqlQueryable extends Queryable { +} + +declare interface SqlResultSet { + /** + * List of column types appearing in a database query, in the same order as `columnNames`. + * They are used within the Query Engine to convert values from JS to Quaint values. + */ + columnTypes: Array; + /** + * List of column names appearing in a database query, in the same order as `columnTypes`. + */ + columnNames: Array; + /** + * List of rows retrieved from a database query. + * Each row is a list of values, whose length matches `columnNames` and `columnTypes`. + */ + rows: Array>; + /** + * The last ID of an `INSERT` statement, if any. + * This is required for `AUTO_INCREMENT` columns in databases based on MySQL and SQLite. + */ + lastInsertId?: string; +} + +export { sqltag } + +/** + * Defines TimeInput. + * + * hrtime, epoch milliseconds, performance.now() or Date + */ +declare type TimeInput = HrTime_2 | number | Date; + +export declare type ToTuple = T extends any[] ? T : [T]; + +declare interface TraceState { + /** + * Create a new TraceState which inherits from this TraceState and has the + * given key set. + * The new entry will always be added in the front of the list of states. + * + * @param key key of the TraceState entry. + * @param value value of the TraceState entry. + */ + set(key: string, value: string): TraceState; + /** + * Return a new TraceState which inherits from this TraceState but does not + * contain the given key. + * + * @param key the key for the TraceState entry to be removed. + */ + unset(key: string): TraceState; + /** + * Returns the value to which the specified key is mapped, or `undefined` if + * this map contains no mapping for the key. + * + * @param key with which the specified value is to be associated. + * @returns the value to which the specified key is mapped, or `undefined` if + * this map contains no mapping for the key. + */ + get(key: string): string | undefined; + /** + * Serializes the TraceState to a `list` as defined below. The `list` is a + * series of `list-members` separated by commas `,`, and a list-member is a + * key/value pair separated by an equals sign `=`. Spaces and horizontal tabs + * surrounding `list-members` are ignored. There can be a maximum of 32 + * `list-members` in a `list`. + * + * @returns the serialized string. + */ + serialize(): string; +} + +declare interface TracingHelper { + isEnabled(): boolean; + getTraceParent(context?: Context): string; + /** + * Emits spans reported by a remote engine, together with the log events that + * were recorded while those spans were open. + * + * Implementations must call `emitLogEvent` exactly once for every entry in + * `events`, otherwise the client silently drops logs the user asked for. Each + * event should be emitted while the span identified by its `spanId` is the + * active one, so that handlers registered via `$on` observe the same context + * they would for a locally executed query. Events whose span is missing or + * not emitted must still be passed to `emitLogEvent`. + */ + dispatchEngineSpans(spans: EngineSpan[], events: EngineTraceEvent[], emitLogEvent: (event: EngineTraceEvent) => void): void; + getActiveContext(): Context | undefined; + runInChildSpan(nameOrOptions: string | ExtendedSpanOptions, callback: SpanCallback): R; +} + +declare namespace Transaction { + export { + IsolationLevel, + Options, + InteractiveTransactionInfo, + TransactionHeaders + } +} + +declare interface Transaction_2 extends AdapterInfo, SqlQueryable { + /** + * Transaction options. + */ + readonly options: TransactionOptions; + /** + * Commit the transaction. + */ + commit(): Promise; + /** + * Roll back the transaction. + */ + rollback(): Promise; + /** + * Creates a savepoint within the currently running transaction. + */ + createSavepoint?(name: string): Promise; + /** + * Rolls back transaction state to a previously created savepoint. + */ + rollbackToSavepoint?(name: string): Promise; + /** + * Releases a previously created savepoint. Optional because not every connector supports this operation. + */ + releaseSavepoint?(name: string): Promise; +} + +declare type TransactionHeaders = { + traceparent?: string; +}; + +declare type TransactionOptions = { + usePhantomQuery: boolean; +}; + +declare type TransactionOptions_2 = { + kind: 'itx'; + options: InteractiveTransactionOptions; +} | { + kind: 'batch'; + options: BatchTransactionOptions; +}; + +export declare class TypedSql { + [PrivateResultType]: Result; + constructor(sql: string, values: Values); + get sql(): string; + get values(): Values; +} + +export declare type TypeMapCbDef = Fn<{ + extArgs: InternalArgs; +}, TypeMapDef>; + +/** Shared */ +export declare type TypeMapDef = Record; + +declare type TypeRef = { + isList: boolean; + type: string; + location: AllowedLocations; + namespace?: FieldNamespace; +}; + +declare namespace Types { + export { + Result_3 as Result, + Extensions_2 as Extensions, + Utils, + Public_2 as Public, + isSkip, + Skip, + skip, + UnknownTypedSql, + OperationPayload as Payload + } +} +export { Types } + +declare type uniqueIndex = ReadonlyDeep_2<{ + name: string; + fields: string[]; +}>; + +export declare type UnknownTypedSql = TypedSql; + +declare type Unpacker = (data: any) => any; + +export declare type UnwrapPayload

= {} extends P ? unknown : { + [K in keyof P]: P[K] extends { + scalars: infer S; + composites: infer C; + }[] ? Array> : P[K] extends { + scalars: infer S; + composites: infer C; + } | null ? S & UnwrapPayload | Select : never; +}; + +export declare type UnwrapPromise

= P extends Promise ? R : P; + +export declare type UnwrapTuple = { + [K in keyof Tuple]: K extends `${number}` ? Tuple[K] extends PrismaPromise ? X : UnwrapPromise : UnwrapPromise; +}; + +/** + * Input that flows from the user into the Client. + */ +declare type UserArgs_2 = any; + +declare namespace Utils { + export { + EmptyToUnknown, + NeverToUnknown, + PatchFlat, + Omit_2 as Omit, + Pick_2 as Pick, + ComputeDeep, + Compute, + OptionalFlat, + ReadonlyDeep, + Narrowable, + Narrow, + Exact, + Cast, + Record_2 as Record, + UnwrapPromise, + UnwrapTuple, + Path, + Fn, + Call, + RequiredKeys, + OptionalKeys, + Optional, + Return, + ToTuple, + RenameAndNestPayloadKeys, + PayloadToResult, + Select, + Equals, + Or, + JsPromise + } +} + +declare type ValidationError = { + errorIdentifier: 'RELATION_VIOLATION'; + context: { + relation: string; + modelA: string; + modelB: string; + }; +} | { + errorIdentifier: 'MISSING_RELATED_RECORD'; + context: { + model: string; + relation: string; + relationType: string; + operation: string; + neededFor?: string; + }; +} | { + errorIdentifier: 'MISSING_RECORD'; + context: { + operation: string; + }; +} | { + errorIdentifier: 'INCOMPLETE_CONNECT_INPUT'; + context: { + expectedRows: number; + }; +} | { + errorIdentifier: 'INCOMPLETE_CONNECT_OUTPUT'; + context: { + expectedRows: number; + relation: string; + relationType: string; + }; +} | { + errorIdentifier: 'RECORDS_NOT_CONNECTED'; + context: { + relation: string; + parent: string; + child: string; + }; +}; + +declare function validator(): (select: Exact) => S; + +declare function validator, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): (select: Exact>) => S; + +declare function validator, O extends keyof C[M] & Operation, P extends keyof Args>(client: C, model: M, operation: O, prop: P): (select: Exact[P]>) => S; + +export { Value } + +export declare const warnOnce: (key: string, message: string, ...args: unknown[]) => void; + +export { } diff --git a/apps/api-effect/src/generated/prisma/runtime/client.js b/apps/api-effect/src/generated/prisma/runtime/client.js new file mode 100644 index 00000000..15832c43 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/runtime/client.js @@ -0,0 +1,105 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +"use strict";var pu=Object.create;var xr=Object.defineProperty;var du=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var fu=Object.getPrototypeOf,gu=Object.prototype.hasOwnProperty;var eo=(e,t)=>()=>(e&&(t=e(e=0)),t);var at=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),lt=(e,t)=>{for(var r in t)xr(e,r,{get:t[r],enumerable:!0})},to=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of mu(t))!gu.call(e,i)&&i!==r&&xr(e,i,{get:()=>t[i],enumerable:!(n=du(t,i))||n.enumerable});return e};var Pe=(e,t,r)=>(r=e!=null?pu(fu(e)):{},to(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e)),yu=e=>to(xr({},"__esModule",{value:!0}),e);var ho=at((Rf,Lu)=>{Lu.exports={name:"@prisma/engines-version",version:"7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3",main:"index.js",types:"index.d.ts",license:"Apache-2.0",author:"Tim Suchanek ",prisma:{enginesVersion:"0edf323efd1d98336f3f0a68684b56f689b900d3"},repository:{type:"git",url:"https://github.com/prisma/engines-wrapper.git",directory:"packages/engines-version"},devDependencies:{"@types/node":"18.19.76",typescript:"4.9.5"},files:["index.js","index.d.ts"],scripts:{build:"tsc -d"}}});var wo=at(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.enginesVersion=void 0;Pr.enginesVersion=ho().prisma.enginesVersion});var bo=at((If,xo)=>{"use strict";xo.exports=e=>{let t=e.match(/^[ \t]*(?=\S)/gm);return t?t.reduce((r,n)=>Math.min(r,n.length),1/0):0}});var So=at((Nf,vo)=>{"use strict";vo.exports=(e,t=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof e!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof e}\``);if(typeof t!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof t}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(t===0)return e;let n=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return e.replace(n,r.indent.repeat(t))}});var Ro=at((Lf,Tr)=>{"use strict";Tr.exports=(e={})=>{let t;if(e.repoUrl)t=e.repoUrl;else if(e.user&&e.repo)t=`https://github.com/${e.user}/${e.repo}`;else throw new Error("You need to specify either the `repoUrl` option or both the `user` and `repo` options");let r=new URL(`${t}/issues/new`),n=["body","title","labels","template","milestone","assignee","projects"];for(let i of n){let o=e[i];if(o!==void 0){if(i==="labels"||i==="projects"){if(!Array.isArray(o))throw new TypeError(`The \`${i}\` option should be an array`);o=o.join(",")}r.searchParams.set(i,o)}}return r.toString()};Tr.exports.default=Tr.exports});var qn=at((Ig,Fo)=>{"use strict";Fo.exports=function(){function e(t,r,n,i,o){return tn?n+1:t+1:i===o?r:r+1}return function(t,r){if(t===r)return 0;if(t.length>r.length){var n=t;t=r,r=n}for(var i=t.length,o=r.length;i>0&&t.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s{"use strict"});var Uo=eo(()=>{"use strict"});var Hm={};lt(Hm,{AnyNull:()=>ee.AnyNull,DMMF:()=>Qt,DbNull:()=>ee.DbNull,Debug:()=>K,Decimal:()=>cu.Decimal,Extensions:()=>Rn,JsonNull:()=>ee.JsonNull,NullTypes:()=>ee.NullTypes,ObjectEnumValue:()=>ee.ObjectEnumValue,PrismaClientInitializationError:()=>_.PrismaClientInitializationError,PrismaClientKnownRequestError:()=>_.PrismaClientKnownRequestError,PrismaClientRustPanicError:()=>_.PrismaClientRustPanicError,PrismaClientUnknownRequestError:()=>_.PrismaClientUnknownRequestError,PrismaClientValidationError:()=>_.PrismaClientValidationError,Public:()=>Cn,Sql:()=>Fe.Sql,createParam:()=>os,defineDmmfProperty:()=>ps,deserializeJsonObject:()=>Ae,deserializeRawResult:()=>Tn,dmmfToRuntimeDataModel:()=>so,empty:()=>Fe.empty,getPrismaClient:()=>au,getRuntime:()=>uu,isAnyNull:()=>ee.isAnyNull,isDbNull:()=>ee.isDbNull,isJsonNull:()=>ee.isJsonNull,isObjectEnumValue:()=>ee.isObjectEnumValue,join:()=>Fe.join,makeStrictEnum:()=>lu,makeTypedQueryFactory:()=>ds,raw:()=>Fe.raw,serializeJsonQuery:()=>Vr,skip:()=>Lr,sqltag:()=>Fe.sql,warnOnce:()=>Vn});module.exports=yu(Hm);var Rn={};lt(Rn,{defineExtension:()=>ro,getExtensionContext:()=>no});function ro(e){return typeof e=="function"?e:t=>t.$extends(e)}function no(e){return e}var Cn={};lt(Cn,{validator:()=>io});function io(...e){return t=>t}var Ie=class{_map=new Map;get(t){return this._map.get(t)?.value}set(t,r){this._map.set(t,{value:r})}getOrCreate(t,r){let n=this._map.get(t);if(n)return n.value;let i=r();return this.set(t,i),i}};function qe(e){return e.substring(0,1).toLowerCase()+e.substring(1)}function oo(e,t){let r={};for(let n of e){let i=n[t];r[i]=n}return r}function Nt(e){let t;return{get(){return t||(t={value:e()}),t.value}}}function so(e){return{models:In(e.models),enums:In(e.enums),types:In(e.types)}}function In(e){let t={};for(let{name:r,...n}of e)t[r]=n;return t}var as=require("@prisma/client-runtime-utils");var br={};lt(br,{$:()=>po,bgBlack:()=>Au,bgBlue:()=>ku,bgCyan:()=>Nu,bgGreen:()=>Cu,bgMagenta:()=>Ou,bgRed:()=>Ru,bgWhite:()=>Du,bgYellow:()=>Iu,black:()=>Eu,blue:()=>He,bold:()=>Ee,cyan:()=>_e,dim:()=>Dt,gray:()=>$t,green:()=>Ft,grey:()=>Su,hidden:()=>bu,inverse:()=>xu,italic:()=>wu,magenta:()=>Tu,red:()=>ze,reset:()=>hu,strikethrough:()=>Pu,underline:()=>Mt,white:()=>vu,yellow:()=>_t});var kn,ao,lo,uo,co=!0;typeof process<"u"&&({FORCE_COLOR:kn,NODE_DISABLE_COLORS:ao,NO_COLOR:lo,TERM:uo}=process.env||{},co=process.stdout&&process.stdout.isTTY);var po={enabled:!ao&&lo==null&&uo!=="dumb"&&(kn!=null&&kn!=="0"||co)};function B(e,t){let r=new RegExp(`\\x1b\\[${t}m`,"g"),n=`\x1B[${e}m`,i=`\x1B[${t}m`;return function(o){return!po.enabled||o==null?o:n+(~(""+o).indexOf(i)?o.replace(r,i+n):o)+i}}var hu=B(0,0),Ee=B(1,22),Dt=B(2,22),wu=B(3,23),Mt=B(4,24),xu=B(7,27),bu=B(8,28),Pu=B(9,29),Eu=B(30,39),ze=B(31,39),Ft=B(32,39),_t=B(33,39),He=B(34,39),Tu=B(35,39),_e=B(36,39),vu=B(37,39),$t=B(90,39),Su=B(90,39),Au=B(40,49),Ru=B(41,49),Cu=B(42,49),Iu=B(43,49),ku=B(44,49),Ou=B(45,49),Nu=B(46,49),Du=B(47,49);var Mu=100,mo=["green","yellow","blue","magenta","cyan","red"],Lt=[],fo=Date.now(),Fu=0,On=typeof process<"u"?process.env:{};globalThis.DEBUG??=On.DEBUG??"";globalThis.DEBUG_COLORS??=On.DEBUG_COLORS?On.DEBUG_COLORS==="true":!0;var Vt={enable(e){typeof e=="string"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG="",e},enabled(e){let t=globalThis.DEBUG.split(",").map(i=>i.replace(/[.+?^${}()|[\]\\]/g,"\\$&")),r=t.some(i=>i===""||i[0]==="-"?!1:e.match(RegExp(i.split("*").join(".*")+"$"))),n=t.some(i=>i===""||i[0]!=="-"?!1:e.match(RegExp(i.slice(1).split("*").join(".*")+"$")));return r&&!n},log:(...e)=>{let[t,r,...n]=e;(console.warn??console.log)(`${t} ${r}`,...n)},formatters:{}};function _u(e){let t={color:mo[Fu++%mo.length],enabled:Vt.enabled(e),namespace:e,log:Vt.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=t;if(n.length!==0&&Lt.push([o,...n]),Lt.length>Mu&&Lt.shift(),Vt.enabled(o)||i){let u=n.map(P=>typeof P=="string"?P:$u(P)),m=`+${Date.now()-fo}ms`;fo=Date.now(),globalThis.DEBUG_COLORS?a(br[s](Ee(o)),...u,br[s](m)):a(o,...u,m)}};return new Proxy(r,{get:(n,i)=>t[i],set:(n,i,o)=>t[i]=o})}var K=new Proxy(_u,{get:(e,t)=>Vt[t],set:(e,t,r)=>Vt[t]=r});function $u(e,t=2){let r=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i=="object"&&i!==null){if(r.has(i))return"[Circular *]";r.add(i)}else if(typeof i=="bigint")return i.toString();return i},t)}function go(e=7500){let t=Lt.map(([r,...n])=>`${r} ${n.map(i=>typeof i=="string"?i:JSON.stringify(i)).join(" ")}`).join(` +`);return t.lengthUu,info:()=>qu,log:()=>Vu,query:()=>ju,should:()=>Ao,tags:()=>qt,warn:()=>Mn});var qt={error:ze("prisma:error"),warn:_t("prisma:warn"),info:_e("prisma:info"),query:He("prisma:query")},Ao={warn:()=>!process.env.PRISMA_DISABLE_WARNINGS};function Vu(...e){console.log(...e)}function Mn(e,...t){Ao.warn()&&console.warn(`${qt.warn} ${e}`,...t)}function qu(e,...t){console.info(`${qt.info} ${e}`,...t)}function Uu(e,...t){console.error(`${qt.error} ${e}`,...t)}function ju(e,...t){console.log(`${qt.query} ${e}`,...t)}function Fn({onlyFirst:e=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,e?void 0:"g")}var Bu=Fn();function ut(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(Bu,"")}var jt=Pe(require("node:path"));function _n(e){return jt.default.sep===jt.default.posix.sep?e:e.split(jt.default.sep).join(jt.default.posix.sep)}function $n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function vr(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n],n);return r}function Ln(e,t){if(e.length===0)return;let r=e[0];for(let n=1;n{Co.has(e)||(Co.add(e),Mn(t,...r))};function ct(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function pt(e){return e.toString()!=="Invalid Date"}var Io=require("@prisma/client-runtime-utils");function dt(e){return Io.Decimal.isDecimal(e)?!0:e!==null&&typeof e=="object"&&typeof e.s=="number"&&typeof e.e=="number"&&typeof e.toFixed=="function"&&Array.isArray(e.d)}var Yo=require("@prisma/client-runtime-utils");var Qt={};lt(Qt,{ModelAction:()=>mt,datamodelEnumToSchemaEnum:()=>Qu});function Qu(e){return{name:e.name,values:e.values.map(t=>t.name)}}var mt=(D=>(D.findUnique="findUnique",D.findUniqueOrThrow="findUniqueOrThrow",D.findFirst="findFirst",D.findFirstOrThrow="findFirstOrThrow",D.findMany="findMany",D.create="create",D.createMany="createMany",D.createManyAndReturn="createManyAndReturn",D.update="update",D.updateMany="updateMany",D.updateManyAndReturn="updateManyAndReturn",D.upsert="upsert",D.delete="delete",D.deleteMany="deleteMany",D.groupBy="groupBy",D.count="count",D.aggregate="aggregate",D.findRaw="findRaw",D.aggregateRaw="aggregateRaw",D))(mt||{});var Mo=Pe(So());var Do=Pe(require("node:fs"));var ko={keyword:_e,entity:_e,value:e=>Ee(He(e)),punctuation:He,directive:_e,function:_e,variable:e=>Ee(He(e)),string:e=>Ee(Ft(e)),boolean:_t,number:_e,comment:$t};var Ju=e=>e,Sr={},Gu=0,O={manual:Sr.Prism&&Sr.Prism.manual,disableWorkerMessageHandler:Sr.Prism&&Sr.Prism.disableWorkerMessageHandler,util:{encode:function(e){if(e instanceof Te){let t=e;return new Te(t.type,O.util.encode(t.content),t.alias)}else return Array.isArray(e)?e.map(O.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(p instanceof Te)continue;if(ce&&l!=t.length-1){E.lastIndex=c;var T=E.exec(e);if(!T)break;var P=T.index+(H?T[1].length:0),S=T.index+T[0].length,a=l,u=c;for(let g=t.length;a=u&&(++l,c=u);if(t[l]instanceof Te)continue;m=a-l,p=e.slice(c,u),T.index-=c}else{E.lastIndex=0;var T=E.exec(p),m=1}if(!T){if(o)break;continue}H&&(ie=T[1]?T[1].length:0);var P=T.index+ie,T=T[0].slice(ie),S=P+T.length,I=p.slice(0,P),A=p.slice(S);let h=[l,m];I&&(++l,c+=I.length,h.push(I));let f=new Te(M,D?O.tokenize(T,D):T,be,T,ce);if(h.push(f),A&&h.push(A),Array.prototype.splice.apply(t,h),m!=1&&O.matchGrammar(e,t,r,l,c,!0,M),o)break}}}},tokenize:function(e,t){let r=[e],n=t.rest;if(n){for(let i in n)t[i]=n[i];delete t.rest}return O.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){let r=O.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){let r=O.hooks.all[e];if(!(!r||!r.length))for(var n=0,i;i=r[n++];)i(t)}},Token:Te};O.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};O.languages.javascript=O.languages.extend("clike",{"class-name":[O.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/});O.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/;O.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:O.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:O.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:O.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:O.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/});O.languages.markup&&O.languages.markup.tag.addInlined("script","javascript");O.languages.js=O.languages.javascript;O.languages.typescript=O.languages.extend("javascript",{keyword:/\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/});O.languages.ts=O.languages.typescript;function Te(e,t,r,n,i){this.type=e,this.content=t,this.alias=r,this.length=(n||"").length|0,this.greedy=!!i}Te.stringify=function(e,t){return typeof e=="string"?e:Array.isArray(e)?e.map(function(r){return Te.stringify(r,t)}).join(""):zu(e.type)(e.content)};function zu(e){return ko[e]||Ju}function Oo(e){return Hu(e,O.languages.javascript)}function Hu(e,t){return O.tokenize(e,t).map(n=>Te.stringify(n)).join("")}function No(e){return Nn(e)}var Ar=class e{firstLineNumber;lines;static read(t){let r;try{r=Do.default.readFileSync(t,"utf-8")}catch{return null}return e.fromContent(r)}static fromContent(t){let r=t.split(/\r?\n/);return new e(1,r)}constructor(t,r){this.firstLineNumber=t,this.lines=r}get lastLineNumber(){return this.firstLineNumber+this.lines.length-1}mapLineAt(t,r){if(tthis.lastLineNumber)return this;let n=t-this.firstLineNumber,i=[...this.lines];return i[n]=r(i[n]),new e(this.firstLineNumber,i)}mapLines(t){return new e(this.firstLineNumber,this.lines.map((r,n)=>t(r,this.firstLineNumber+n)))}lineAt(t){return this.lines[t-this.firstLineNumber]}prependSymbolAt(t,r){return this.mapLines((n,i)=>i===t?`${r} ${n}`:` ${n}`)}slice(t,r){let n=Math.max(t,this.firstLineNumber),i=Math.min(r,this.lastLineNumber);if(n>i)return new e(t,[]);let o=this.lines.slice(n-this.firstLineNumber,i-this.firstLineNumber+1).join(` +`);return new e(n,No(o).split(` +`))}highlight(){let t=Oo(this.toString());return new e(this.firstLineNumber,t.split(` +`))}toString(){return this.lines.join(` +`)}};var Wu={red:ze,gray:$t,dim:Dt,bold:Ee,underline:Mt,highlightSource:e=>e.highlight()},Ku={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function Zu({message:e,originalMethod:t,isPanic:r,callArguments:n}){return{functionName:`prisma.${t}()`,message:e,isPanic:r??!1,callArguments:n}}function Xu({callsite:e,message:t,originalMethod:r,isPanic:n,callArguments:i},o){let s=Zu({message:t,originalMethod:r,isPanic:n,callArguments:i});if(!e||typeof window<"u"||process.env.NODE_ENV==="production")return s;let a=e.getLocation();if(!a||!a.lineNumber||!a.columnNumber)return s;let u=Math.max(1,a.lineNumber-3),m=Ar.read(a.fileName)?.slice(u,a.lineNumber),P=m?.lineAt(a.lineNumber);if(m&&P){let T=ec(P),S=Yu(P);if(!S)return s;s.functionName=`${S.code})`,s.location=a,n||(m=m.mapLineAt(a.lineNumber,A=>A.slice(0,S.openingBraceIndex))),m=o.highlightSource(m);let I=String(m.lastLineNumber).length;if(s.contextLines=m.mapLines((A,M)=>o.gray(String(M).padStart(I))+" "+A).mapLines(A=>o.dim(A)).prependSymbolAt(a.lineNumber,o.bold(o.red("\u2192"))),i){let A=T+I+1;A+=2,s.callArguments=(0,Mo.default)(i,A).slice(A)}}return s}function Yu(e){let t=Object.keys(mt).join("|"),n=new RegExp(String.raw`\.(${t})\(`).exec(e);if(n){let i=n.index+n[0].length,o=e.lastIndexOf(" ",n.index)+1;return{code:e.slice(o,i),openingBraceIndex:i}}return null}function ec(e){let t=0;for(let r=0;r"Unknown error")}function Vo(e){return e.errors.flatMap(t=>t.kind==="Union"?Vo(t):[t])}function nc(e){let t=new Map,r=[];for(let n of e){if(n.kind!=="InvalidArgumentType"){r.push(n);continue}let i=`${n.selectionPath.join(".")}:${n.argumentPath.join(".")}`,o=t.get(i);o?t.set(i,{...n,argument:{...n.argument,typeNames:ic(o.argument.typeNames,n.argument.typeNames)}}):t.set(i,n)}return r.push(...t.values()),r}function ic(e,t){return[...new Set(e.concat(t))]}function oc(e){return Ln(e,(t,r)=>{let n=_o(t),i=_o(r);return n!==i?n-i:$o(t)-$o(r)})}function _o(e){let t=0;return Array.isArray(e.selectionPath)&&(t+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(t+=e.argumentPath.length),t}function $o(e){switch(e.kind){case"InvalidArgumentValue":case"ValueTooLarge":return 20;case"InvalidArgumentType":return 10;case"RequiredArgumentMissing":return-10;default:return 0}}var pe=class{constructor(t,r){this.name=t;this.value=r}isRequired=!1;makeRequired(){return this.isRequired=!0,this}write(t){let{colors:{green:r}}=t.context;t.addMarginSymbol(r(this.isRequired?"+":"?")),t.write(r(this.name)),this.isRequired||t.write(r("?")),t.write(r(": ")),typeof this.value=="string"?t.write(r(this.value)):t.write(this.value)}};Uo();var ft=class{constructor(t=0,r){this.context=r;this.currentIndent=t}lines=[];currentLine="";currentIndent=0;marginSymbol;afterNextNewLineCallback;write(t){return typeof t=="string"?this.currentLine+=t:t.write(this),this}writeJoined(t,r,n=(i,o)=>o.write(i)){let i=r.length-1;for(let o=0;o0&&this.currentIndent--,this}addMarginSymbol(t){return this.marginSymbol=t,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(` +`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let t=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+t.slice(1):t}};qo();var Ir=class{constructor(t){this.value=t}write(t){t.write(this.value)}markAsError(){this.value.markAsError()}};var kr=e=>e,Or={bold:kr,red:kr,green:kr,dim:kr,enabled:!1},jo={bold:Ee,red:ze,green:Ft,dim:Dt,enabled:!0},gt={write(e){e.writeLine(",")}};var ke=class{constructor(t){this.contents=t}isUnderlined=!1;color=t=>t;underline(){return this.isUnderlined=!0,this}setColor(t){return this.color=t,this}write(t){let r=t.getCurrentLineLength();t.write(this.color(this.contents)),this.isUnderlined&&t.afterNextNewline(()=>{t.write(" ".repeat(r)).writeLine(this.color("~".repeat(this.contents.length)))})}};var Ue=class{hasError=!1;markAsError(){return this.hasError=!0,this}};var yt=class extends Ue{items=[];addItem(t){return this.items.push(new Ir(t)),this}getField(t){return this.items[t]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(r=>r.value.getPrintWidth()))+2}write(t){if(this.items.length===0){this.writeEmpty(t);return}this.writeWithItems(t)}writeEmpty(t){let r=new ke("[]");this.hasError&&r.setColor(t.context.colors.red).underline(),t.write(r)}writeWithItems(t){let{colors:r}=t.context;t.writeLine("[").withIndent(()=>t.writeJoined(gt,this.items).newLine()).write("]"),this.hasError&&t.afterNextNewline(()=>{t.writeLine(r.red("~".repeat(this.getPrintWidth())))})}asObject(){}};var ht=class e extends Ue{fields={};suggestions=[];addField(t){this.fields[t.name]=t}addSuggestion(t){this.suggestions.push(t)}getField(t){return this.fields[t]}getDeepField(t){let[r,...n]=t,i=this.getField(r);if(!i)return;let o=i;for(let s of n){let a;if(o.value instanceof e?a=o.value.getField(s):o.value instanceof yt&&(a=o.value.getField(Number(s))),!a)return;o=a}return o}getDeepFieldValue(t){return t.length===0?this:this.getDeepField(t)?.value}hasField(t){return!!this.getField(t)}removeAllFields(){this.fields={}}removeField(t){delete this.fields[t]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(t){return this.getField(t)?.value}getDeepSubSelectionValue(t){let r=this;for(let n of t){if(!(r instanceof e))return;let i=r.getSubSelectionValue(n);if(!i)return;r=i}return r}getDeepSelectionParent(t){let r=this.getSelectionParent();if(!r)return;let n=r;for(let i of t){let o=n.value.getFieldValue(i);if(!o||!(o instanceof e))return;let s=o.getSelectionParent();if(!s)return;n=s}return n}getSelectionParent(){let t=this.getField("select")?.value.asObject();if(t)return{kind:"select",value:t};let r=this.getField("include")?.value.asObject();if(r)return{kind:"include",value:r}}getSubSelectionValue(t){return this.getSelectionParent()?.value.fields[t].value}getPrintWidth(){let t=Object.values(this.fields);return t.length==0?2:Math.max(...t.map(n=>n.getPrintWidth()))+2}write(t){let r=Object.values(this.fields);if(r.length===0&&this.suggestions.length===0){this.writeEmpty(t);return}this.writeWithContents(t,r)}asObject(){return this}writeEmpty(t){let r=new ke("{}");this.hasError&&r.setColor(t.context.colors.red).underline(),t.write(r)}writeWithContents(t,r){t.writeLine("{").withIndent(()=>{t.writeJoined(gt,[...r,...this.suggestions]).newLine()}),t.write("}"),this.hasError&&t.afterNextNewline(()=>{t.writeLine(t.context.colors.red("~".repeat(this.getPrintWidth())))})}};var Z=class extends Ue{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new ke(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};var Jt=class{fields=[];addField(t,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${t}: ${r}`))).addMarginSymbol(i(o("+")))}}),this}write(t){let{colors:{green:r}}=t.context;t.writeLine(r("{")).withIndent(()=>{t.writeJoined(gt,this.fields).newLine()}).write(r("}")).addMarginSymbol(r("+"))}};function Cr(e,t,r){switch(e.kind){case"MutuallyExclusiveFields":sc(e,t);break;case"IncludeOnScalar":ac(e,t);break;case"EmptySelection":lc(e,t,r);break;case"UnknownSelectionField":dc(e,t);break;case"InvalidSelectionValue":mc(e,t);break;case"UnknownArgument":fc(e,t);break;case"UnknownInputField":gc(e,t);break;case"RequiredArgumentMissing":yc(e,t);break;case"InvalidArgumentType":hc(e,t);break;case"InvalidArgumentValue":wc(e,t);break;case"ValueTooLarge":xc(e,t);break;case"SomeFieldsMissing":bc(e,t);break;case"TooManyFieldsGiven":Pc(e,t);break;case"Union":Lo(e,t,r);break;default:throw new Error("not implemented: "+e.kind)}}function sc(e,t){let r=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();r&&(r.getField(e.firstField)?.markAsError(),r.getField(e.secondField)?.markAsError()),t.addErrorMessage(n=>`Please ${n.bold("either")} use ${n.green(`\`${e.firstField}\``)} or ${n.green(`\`${e.secondField}\``)}, but ${n.red("not both")} at the same time.`)}function ac(e,t){let[r,n]=wt(e.selectionPath),i=e.outputType,o=t.arguments.getDeepSelectionParent(r)?.value;if(o&&(o.getField(n)?.markAsError(),i))for(let s of i.fields)s.isRelation&&o.addSuggestion(new pe(s.name,"true"));t.addErrorMessage(s=>{let a=`Invalid scalar field ${s.red(`\`${n}\``)} for ${s.bold("include")} statement`;return i?a+=` on model ${s.bold(i.name)}. ${Gt(s)}`:a+=".",a+=` +Note that ${s.bold("include")} statements only accept relation fields.`,a})}function lc(e,t,r){let n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(n){let i=n.getField("omit")?.value.asObject();if(i){uc(e,t,i);return}if(n.hasField("select")){cc(e,t);return}}if(r?.[qe(e.outputType.name)]){pc(e,t);return}t.addErrorMessage(()=>`Unknown field at "${e.selectionPath.join(".")} selection"`)}function uc(e,t,r){r.removeAllFields();for(let n of e.outputType.fields)r.addSuggestion(new pe(n.name,"false"));t.addErrorMessage(n=>`The ${n.red("omit")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function cc(e,t){let r=e.outputType,n=t.arguments.getDeepSelectionParent(e.selectionPath)?.value,i=n?.isEmpty()??!1;n&&(n.removeAllFields(),Go(n,r)),t.addErrorMessage(o=>i?`The ${o.red("`select`")} statement for type ${o.bold(r.name)} must not be empty. ${Gt(o)}`:`The ${o.red("`select`")} statement for type ${o.bold(r.name)} needs ${o.bold("at least one truthy value")}.`)}function pc(e,t){let r=new Jt;for(let i of e.outputType.fields)i.isRelation||r.addField(i.name,"false");let n=new pe("omit",r).makeRequired();if(e.selectionPath.length===0)t.arguments.addSuggestion(n);else{let[i,o]=wt(e.selectionPath),a=t.arguments.getDeepSelectionParent(i)?.value.asObject()?.getField(o);if(a){let u=a?.value.asObject()??new ht;u.addSuggestion(n),a.value=u}}t.addErrorMessage(i=>`The global ${i.red("omit")} configuration excludes every field of the model ${i.bold(e.outputType.name)}. At least one field must be included in the result`)}function dc(e,t){let r=zo(e.selectionPath,t);if(r.parentKind!=="unknown"){r.field.markAsError();let n=r.parent;switch(r.parentKind){case"select":Go(n,e.outputType);break;case"include":Ec(n,e.outputType);break;case"omit":Tc(n,e.outputType);break}}t.addErrorMessage(n=>{let i=[`Unknown field ${n.red(`\`${r.fieldName}\``)}`];return r.parentKind!=="unknown"&&i.push(`for ${n.bold(r.parentKind)} statement`),i.push(`on model ${n.bold(`\`${e.outputType.name}\``)}.`),i.push(Gt(n)),i.join(" ")})}function mc(e,t){let r=zo(e.selectionPath,t);r.parentKind!=="unknown"&&r.field.value.markAsError(),t.addErrorMessage(n=>`Invalid value for selection field \`${n.red(r.fieldName)}\`: ${e.underlyingError}`)}function fc(e,t){let r=e.argumentPath[0],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&(n.getField(r)?.markAsError(),vc(n,e.arguments)),t.addErrorMessage(i=>Qo(i,r,e.arguments.map(o=>o.name)))}function gc(e,t){let[r,n]=wt(e.argumentPath),i=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(i){i.getDeepField(e.argumentPath)?.markAsError();let o=i.getDeepFieldValue(r)?.asObject();o&&Ho(o,e.inputType)}t.addErrorMessage(o=>Qo(o,n,e.inputType.fields.map(s=>s.name)))}function Qo(e,t,r){let n=[`Unknown argument \`${e.red(t)}\`.`],i=Ac(t,r);return i&&n.push(`Did you mean \`${e.green(i)}\`?`),r.length>0&&n.push(Gt(e)),n.join(" ")}function yc(e,t){let r;t.addErrorMessage(u=>r?.value instanceof Z&&r.value.text==="null"?`Argument \`${u.green(o)}\` must not be ${u.red("null")}.`:`Argument \`${u.green(o)}\` is missing.`);let n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(!n)return;let[i,o]=wt(e.argumentPath),s=new Jt,a=n.getDeepFieldValue(i)?.asObject();if(a){if(r=a.getField(o),r&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind==="object"){for(let u of e.inputTypes[0].fields)s.addField(u.name,u.typeNames.join(" | "));a.addSuggestion(new pe(o,s).makeRequired())}else{let u=e.inputTypes.map(Jo).join(" | ");a.addSuggestion(new pe(o,u).makeRequired())}if(e.dependentArgumentPath){n.getDeepField(e.dependentArgumentPath)?.markAsError();let[,u]=wt(e.dependentArgumentPath);t.addErrorMessage(m=>`Argument \`${m.green(o)}\` is required because argument \`${m.green(u)}\` was provided.`)}}}function Jo(e){return e.kind==="list"?`${Jo(e.elementType)}[]`:e.name}function hc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=Nr("or",e.argument.typeNames.map(s=>i.green(s)));return`Argument \`${i.bold(r)}\`: Invalid value provided. Expected ${o}, provided ${i.red(e.inferredType)}.`})}function wc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=[`Invalid value for argument \`${i.bold(r)}\``];if(e.underlyingError&&o.push(`: ${e.underlyingError}`),o.push("."),e.argument.typeNames.length>0){let s=Nr("or",e.argument.typeNames.map(a=>i.green(a)));o.push(` Expected ${s}.`)}return o.join("")})}function xc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath)?.value;s?.markAsError(),s instanceof Z&&(i=s.text)}t.addErrorMessage(o=>{let s=["Unable to fit value"];return i&&s.push(o.red(i)),s.push(`into a 64-bit signed integer for field \`${o.bold(r)}\``),s.join(" ")})}function bc(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(n){let i=n.getDeepFieldValue(e.argumentPath)?.asObject();i&&Ho(i,e.inputType)}t.addErrorMessage(i=>{let o=[`Argument \`${i.bold(r)}\` of type ${i.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?o.push(`${i.green("at least one of")} ${Nr("or",e.constraints.requiredFields.map(s=>`\`${i.bold(s)}\``))} arguments.`):o.push(`${i.green("at least one")} argument.`):o.push(`${i.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),o.push(Gt(i)),o.join(" ")})}function Pc(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i=[];if(n){let o=n.getDeepFieldValue(e.argumentPath)?.asObject();o&&(o.markAsError(),i=Object.keys(o.getFields()))}t.addErrorMessage(o=>{let s=[`Argument \`${o.bold(r)}\` of type ${o.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?s.push(`${o.green("exactly one")} argument,`):e.constraints.maxFieldCount==1?s.push(`${o.green("at most one")} argument,`):s.push(`${o.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),s.push(`but you provided ${Nr("and",i.map(a=>o.red(a)))}. Please choose`),e.constraints.maxFieldCount===1?s.push("one."):s.push(`${e.constraints.maxFieldCount}.`),s.join(" ")})}function Go(e,t){for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new pe(r.name,"true"))}function Ec(e,t){for(let r of t.fields)r.isRelation&&!e.hasField(r.name)&&e.addSuggestion(new pe(r.name,"true"))}function Tc(e,t){for(let r of t.fields)!e.hasField(r.name)&&!r.isRelation&&e.addSuggestion(new pe(r.name,"true"))}function vc(e,t){for(let r of t)e.hasField(r.name)||e.addSuggestion(new pe(r.name,r.typeNames.join(" | ")))}function zo(e,t){let[r,n]=wt(e),i=t.arguments.getDeepSubSelectionValue(r)?.asObject();if(!i)return{parentKind:"unknown",fieldName:n};let o=i.getFieldValue("select")?.asObject(),s=i.getFieldValue("include")?.asObject(),a=i.getFieldValue("omit")?.asObject(),u=o?.getField(n);return o&&u?{parentKind:"select",parent:o,field:u,fieldName:n}:(u=s?.getField(n),s&&u?{parentKind:"include",field:u,parent:s,fieldName:n}:(u=a?.getField(n),a&&u?{parentKind:"omit",field:u,parent:a,fieldName:n}:{parentKind:"unknown",fieldName:n}))}function Ho(e,t){if(t.kind==="object")for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new pe(r.name,r.typeNames.join(" | ")))}function wt(e){let t=[...e],r=t.pop();if(!r)throw new Error("unexpected empty path");return[t,r]}function Gt({green:e,enabled:t}){return"Available options are "+(t?`listed in ${e("green")}`:"marked with ?")+"."}function Nr(e,t){if(t.length===1)return t[0];let r=[...t],n=r.pop();return`${r.join(", ")} ${e} ${n}`}var Sc=3;function Ac(e,t){let r=1/0,n;for(let i of t){let o=(0,Bo.default)(e,i);o>Sc||o`}};function xt(e){return e instanceof zt}var Wo=": ",Dr=class{constructor(t,r){this.name=t;this.value=r}hasError=!1;markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+Wo.length}write(t){let r=new ke(this.name);this.hasError&&r.underline().setColor(t.context.colors.red),t.write(r).write(Wo).write(this.value)}};var jn=class{arguments;errorMessages=[];constructor(t){this.arguments=t}write(t){t.write(this.arguments)}addErrorMessage(t){this.errorMessages.push(t)}renderAllMessages(t){return this.errorMessages.map(r=>r(t)).join(` +`)}};function bt(e){return new jn(Zo(e))}function Zo(e){let t=new ht;for(let[r,n]of Object.entries(e)){let i=new Dr(r,Xo(n));t.addField(i)}return t}function Xo(e){if(typeof e=="string")return new Z(JSON.stringify(e));if(typeof e=="number"||typeof e=="boolean")return new Z(String(e));if(typeof e=="bigint")return new Z(`${e}n`);if(e===null)return new Z("null");if(e===void 0)return new Z("undefined");if(dt(e))return new Z(`new Prisma.Decimal("${e.toFixed()}")`);if(e instanceof Uint8Array)return Buffer.isBuffer(e)?new Z(`Buffer.alloc(${e.byteLength})`):new Z(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let t=pt(e)?e.toISOString():"Invalid Date";return new Z(`new Date("${t}")`)}return(0,Ko.isObjectEnumValue)(e)?new Z(`Prisma.${e._getName()}`):xt(e)?new Z(`prisma.${qe(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?Rc(e):typeof e=="object"?Zo(e):new Z(Object.prototype.toString.call(e))}function Rc(e){let t=new yt;for(let r of e)t.addItem(Xo(r));return t}function Mr(e,t){let r=t==="pretty"?jo:Or,n=e.renderAllMessages(r),i=new ft(0,{colors:r}).write(e).toString();return{message:n,args:i}}function Fr({args:e,errors:t,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o,globalOmit:s}){let a=bt(e);for(let T of t)Cr(T,a,s);let{message:u,args:m}=Mr(a,r),P=Rr({message:u,callsite:n,originalMethod:i,showColors:r==="pretty",callArguments:m});throw new Yo.PrismaClientValidationError(P,{clientVersion:o})}function Oe(e){return e.replace(/^./,t=>t.toLowerCase())}function ts(e,t,r){let n=Oe(r);return!t.result||!(t.result.$allModels||t.result[n])?e:Cc({...e,...es(t.name,e,t.result.$allModels),...es(t.name,e,t.result[n])})}function Cc(e){let t=new Ie,r=(n,i)=>t.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>r(o,i)):[n]));return vr(e,n=>({...n,needs:r(n.name,new Set)}))}function es(e,t,r){return r?vr(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:Ic(t,o,i)})):{}}function Ic(e,t,r){let n=e?.[t]?.compute;return n?(i,o)=>r({...i,[t]:n(i,o)},o):r}function rs(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(e[n.name])for(let i of n.needs)r[i]=!0;return r}function ns(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(!e[n.name])for(let i of n.needs)delete r[i];return r}var _r=class{constructor(t,r){this.extension=t;this.previous=r}computedFieldsCache=new Ie;modelExtensionsCache=new Ie;queryCallbacksCache=new Ie;clientExtensions=Nt(()=>this.extension.client?{...this.previous?.getAllClientExtensions(),...this.extension.client}:this.previous?.getAllClientExtensions());batchCallbacks=Nt(()=>{let t=this.previous?.getAllBatchQueryCallbacks()??[],r=this.extension.query?.$__internalBatch;return r?t.concat(r):t});getAllComputedFields(t){return this.computedFieldsCache.getOrCreate(t,()=>ts(this.previous?.getAllComputedFields(t),this.extension,t))}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(t){return this.modelExtensionsCache.getOrCreate(t,()=>{let r=Oe(t);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?this.previous?.getAllModelExtensions(t):{...this.previous?.getAllModelExtensions(t),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(t,r){return this.queryCallbacksCache.getOrCreate(`${t}:${r}`,()=>{let n=this.previous?.getAllQueryCallbacks(t,r)??[],i=[],o=this.extension.query;return!o||!(o[t]||o.$allModels||o[r]||o.$allOperations)?n:(o[t]!==void 0&&(o[t][r]!==void 0&&i.push(o[t][r]),o[t].$allOperations!==void 0&&i.push(o[t].$allOperations)),t!=="$none"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Pt=class e{constructor(t){this.head=t}static empty(){return new e}static single(t){return new e(new _r(t))}isEmpty(){return this.head===void 0}append(t){return new e(new _r(t,this.head))}getAllComputedFields(t){return this.head?.getAllComputedFields(t)}getAllClientExtensions(){return this.head?.getAllClientExtensions()}getAllModelExtensions(t){return this.head?.getAllModelExtensions(t)}getAllQueryCallbacks(t,r){return this.head?.getAllQueryCallbacks(t,r)??[]}getAllBatchQueryCallbacks(){return this.head?.getAllBatchQueryCallbacks()??[]}};var $r=class{constructor(t){this.name=t}};function is(e){return e instanceof $r}function os(e){return new $r(e)}var ss=Symbol(),Ht=class{constructor(t){if(t!==ss)throw new Error("Skip instance can not be constructed directly")}ifUndefined(t){return t===void 0?Lr:t}},Lr=new Ht(ss);function fe(e){return e instanceof Ht}var kc={findUnique:"findUnique",findUniqueOrThrow:"findUniqueOrThrow",findFirst:"findFirst",findFirstOrThrow:"findFirstOrThrow",findMany:"findMany",count:"aggregate",create:"createOne",createMany:"createMany",createManyAndReturn:"createManyAndReturn",update:"updateOne",updateMany:"updateMany",updateManyAndReturn:"updateManyAndReturn",upsert:"upsertOne",delete:"deleteOne",deleteMany:"deleteMany",executeRaw:"executeRaw",queryRaw:"queryRaw",aggregate:"aggregate",groupBy:"groupBy",runCommandRaw:"runCommandRaw",findRaw:"findRaw",aggregateRaw:"aggregateRaw"},ls="explicitly `undefined` values are not allowed";function Vr({modelName:e,action:t,args:r,runtimeDataModel:n,extensions:i=Pt.empty(),callsite:o,clientMethod:s,errorFormat:a,clientVersion:u,previewFeatures:m,globalOmit:P,wrapRawValues:T}){let S=new Bn({runtimeDataModel:n,modelName:e,action:t,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:u,previewFeatures:m,globalOmit:P,wrapRawValues:T});return{modelName:e,action:kc[t],query:Wt(r,S)}}function Wt({select:e,include:t,...r}={},n){let i=r.omit;return delete r.omit,{arguments:cs(r,n),selection:Oc(e,t,i,n)}}function Oc(e,t,r,n){return e?(t?n.throwValidationError({kind:"MutuallyExclusiveFields",firstField:"include",secondField:"select",selectionPath:n.getSelectionPath()}):r&&n.throwValidationError({kind:"MutuallyExclusiveFields",firstField:"omit",secondField:"select",selectionPath:n.getSelectionPath()}),Fc(e,n)):Nc(n,t,r)}function Nc(e,t,r){let n={};return e.modelOrType&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),t&&Dc(n,t,e),Mc(n,r,e),n}function Dc(e,t,r){for(let[n,i]of Object.entries(t)){if(fe(i))continue;let o=r.nestSelection(n);if(Qn(i,o),i===!1||i===void 0){e[n]=!1;continue}let s=r.findField(n);if(s&&s.kind!=="object"&&r.throwValidationError({kind:"IncludeOnScalar",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),s){e[n]=Wt(i===!0?{}:i,o);continue}if(i===!0){e[n]=!0;continue}e[n]=Wt(i,o)}}function Mc(e,t,r){let n=r.getComputedFields(),i={...r.getGlobalOmit(),...t},o=ns(i,n);for(let[s,a]of Object.entries(o)){if(fe(a))continue;Qn(a,r.nestSelection(s));let u=r.findField(s);n?.[s]&&!u||(e[s]=!a)}}function Fc(e,t){let r={},n=t.getComputedFields(),i=rs(e,n);for(let[o,s]of Object.entries(i)){if(fe(s))continue;let a=t.nestSelection(o);Qn(s,a);let u=t.findField(o);if(!(n?.[o]&&!u)){if(s===!1||s===void 0||fe(s)){r[o]=!1;continue}if(s===!0){u?.kind==="object"?r[o]=Wt({},a):r[o]=!0;continue}r[o]=Wt(s,a)}}return r}function us(e,t){if(e===null)return null;if(typeof e=="string"||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="bigint")return{$type:"BigInt",value:String(e)};if(ct(e)){if(pt(e))return{$type:"DateTime",value:e.toISOString()};t.throwValidationError({kind:"InvalidArgumentValue",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:["Date"]},underlyingError:"Provided Date object is invalid"})}if(is(e))return{$type:"Param",value:e.name};if(xt(e))return{$type:"FieldRef",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return _c(e,t);if(ArrayBuffer.isView(e)){let{buffer:r,byteOffset:n,byteLength:i}=e;return{$type:"Bytes",value:Buffer.from(r,n,i).toString("base64")}}if($c(e))return e.values;if(dt(e))return{$type:"Decimal",value:e.toFixed()};if((0,as.isObjectEnumValue)(e)){let r=e._getName();if(r!=="DbNull"&&r!=="JsonNull"&&r!=="AnyNull")throw new Error(`Invalid ObjectEnumValue: expected DbNull, JsonNull, or AnyNull, got ${r}`);return{$type:"Enum",value:r}}if(Lc(e))return e.toJSON();if(typeof e=="object")return cs(e,t);t.throwValidationError({kind:"InvalidArgumentValue",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a ".toJSON()" method on it`})}function cs(e,t){if(t.shouldWrapRawValues()&&e.$type)return{$type:"Raw",value:e};let r={};for(let n in e){let i=e[n],o=t.nestArgument(n);fe(i)||(i!==void 0?r[n]=us(i,o):t.isPreviewFeatureOn("strictUndefinedChecks")&&t.throwValidationError({kind:"InvalidArgumentValue",argumentPath:o.getArgumentPath(),selectionPath:t.getSelectionPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:ls}))}return r}function _c(e,t){let r=[];for(let n=0;n({name:t.name,typeName:"boolean",isRelation:t.kind==="object"}))}}isRawAction(){return["executeRaw","queryRaw","runCommandRaw","findRaw","aggregateRaw"].includes(this.params.action)}isPreviewFeatureOn(t){return this.params.previewFeatures.includes(t)}shouldWrapRawValues(){return this.params.wrapRawValues??!0}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(t){return this.modelOrType?.fields.find(r=>r.name===t)}nestSelection(t){let r=this.findField(t),n=r?.kind==="object"?r.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(t)})}getGlobalOmit(){return this.params.modelName&&this.shouldApplyGlobalOmit()?this.params.globalOmit?.[qe(this.params.modelName)]??{}:{}}shouldApplyGlobalOmit(){switch(this.params.action){case"findFirst":case"findFirstOrThrow":case"findUniqueOrThrow":case"findMany":case"upsert":case"findUnique":case"createManyAndReturn":case"create":case"update":case"updateManyAndReturn":case"delete":return!0;case"executeRaw":case"aggregateRaw":case"runCommandRaw":case"findRaw":case"createMany":case"deleteMany":case"groupBy":case"updateMany":case"count":case"aggregate":case"queryRaw":return!1;default:$e(this.params.action,"Unknown action")}}nestArgument(t){return new e({...this.params,argumentPath:this.params.argumentPath.concat(t)})}};function ps(e,t){let r=Nt(()=>Vc(t));Object.defineProperty(e,"dmmf",{get:()=>r.get()})}function Vc(e){return{datamodel:{models:Jn(e.models),enums:Jn(e.enums),types:Jn(e.types)}}}function Jn(e){return Object.entries(e).map(([t,r])=>({name:t,...r}))}var Gn=new WeakMap,qr="$$PrismaTypedSql",Kt=class{constructor(t,r){Gn.set(this,{sql:t,values:r}),Object.defineProperty(this,qr,{value:qr})}get sql(){return Gn.get(this).sql}get values(){return Gn.get(this).values}};function ds(e){return(...t)=>new Kt(e,t)}function Ur(e){return e!=null&&e[qr]===qr}var nu=require("@prisma/client-runtime-utils");var iu=require("node:async_hooks"),ou=require("node:events");function Zt(e){return{getKeys(){return Object.keys(e)},getPropertyValue(t){return e[t]}}}function ae(e,t){return{getKeys(){return[e]},getPropertyValue(){return t()}}}function We(e){let t=new Ie;return{getKeys(){return e.getKeys()},getPropertyValue(r){return t.getOrCreate(r,()=>e.getPropertyValue(r))},getPropertyDescriptor(r){return e.getPropertyDescriptor?.(r)}}}var jr={enumerable:!0,configurable:!0,writable:!0};function Br(e){let t=new Set(e);return{getPrototypeOf:()=>Object.prototype,getOwnPropertyDescriptor:()=>jr,has:(r,n)=>t.has(n),set:(r,n,i)=>t.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...t]}}var ms=Symbol.for("nodejs.util.inspect.custom");function ve(e,t){let r=qc(t),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){if(n.has(s))return!0;let a=r.get(s);return a?a.has?.(s)??!0:Reflect.has(o,s)},ownKeys(o){let s=fs(Reflect.ownKeys(o),r),a=fs(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){return r.get(s)?.getPropertyDescriptor?.(s)?.writable===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let u=r.get(s);return u?u.getPropertyDescriptor?{...jr,...u?.getPropertyDescriptor(s)}:jr:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)},getPrototypeOf:()=>Object.prototype});return i[ms]=function(){let o={...this};return delete o[ms],o},i}function qc(e){let t=new Map;for(let r of e){let n=r.getKeys();for(let i of n)t.set(i,r)}return t}function fs(e,t){return e.filter(r=>t.get(r)?.has?.(r)??!0)}function Et(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}function gs(e){if(e===void 0)return"";let t=bt(e);return new ft(0,{colors:Or}).write(t).toString()}var Xt="";function ys(e){var t=e.split(` +`);return t.reduce(function(r,n){var i=Bc(n)||Jc(n)||Hc(n)||Xc(n)||Kc(n);return i&&r.push(i),r},[])}var Uc=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,jc=/\((\S*)(?::(\d+))(?::(\d+))\)/;function Bc(e){var t=Uc.exec(e);if(!t)return null;var r=t[2]&&t[2].indexOf("native")===0,n=t[2]&&t[2].indexOf("eval")===0,i=jc.exec(t[2]);return n&&i!=null&&(t[2]=i[1],t[3]=i[2],t[4]=i[3]),{file:r?null:t[2],methodName:t[1]||Xt,arguments:r?[t[2]]:[],lineNumber:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}var Qc=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function Jc(e){var t=Qc.exec(e);return t?{file:t[2],methodName:t[1]||Xt,arguments:[],lineNumber:+t[3],column:t[4]?+t[4]:null}:null}var Gc=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,zc=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function Hc(e){var t=Gc.exec(e);if(!t)return null;var r=t[3]&&t[3].indexOf(" > eval")>-1,n=zc.exec(t[3]);return r&&n!=null&&(t[3]=n[1],t[4]=n[2],t[5]=null),{file:t[3],methodName:t[1]||Xt,arguments:t[2]?t[2].split(","):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}var Wc=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function Kc(e){var t=Wc.exec(e);return t?{file:t[3],methodName:t[1]||Xt,arguments:[],lineNumber:+t[4],column:t[5]?+t[5]:null}:null}var Zc=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function Xc(e){var t=Zc.exec(e);return t?{file:t[2],methodName:t[1]||Xt,arguments:[],lineNumber:+t[3],column:t[4]?+t[4]:null}:null}var zn=class{getLocation(){return null}},Hn=class{_error;constructor(){this._error=new Error}getLocation(){let t=this._error.stack;if(!t)return null;let n=ys(t).find(i=>{if(!i.file)return!1;let o=_n(i.file);return o!==""&&!o.includes("@prisma")&&!o.includes("/packages/client/src/runtime/")&&!o.endsWith("/runtime/client.js")&&!o.startsWith("internal/")&&!i.methodName.includes("new ")&&!i.methodName.includes("getCallSite")&&!i.methodName.includes("Proxy.")&&i.methodName.split(".").length<4});return!n||!n.file?null:{fileName:n.file,lineNumber:n.lineNumber,columnNumber:n.column}}};function je(e){return e==="minimal"?typeof $EnabledCallSite=="function"&&e!=="minimal"?new $EnabledCallSite:new zn:new Hn}var hs={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function Tt(e={}){let t=ep(e);return Object.entries(t).reduce((n,[i,o])=>(hs[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function ep(e={}){return typeof e._count=="boolean"?{...e,_count:{_all:e._count}}:e}function Qr(e={}){return t=>(typeof e._count=="boolean"&&(t._count=t._count._all),t)}function ws(e,t){let r=Qr(e);return t({action:"aggregate",unpacker:r,argsMapper:Tt})(e)}function tp(e={}){let{select:t,...r}=e;return typeof t=="object"?Tt({...r,_count:t}):Tt({...r,_count:{_all:!0}})}function rp(e={}){return typeof e.select=="object"?t=>Qr(e)(t)._count:t=>Qr(e)(t)._count._all}function xs(e,t){return t({action:"count",unpacker:rp(e),argsMapper:tp})(e)}function np(e={}){let t=Tt(e);if(Array.isArray(t.by))for(let r of t.by)typeof r=="string"&&(t.select[r]=!0);else typeof t.by=="string"&&(t.select[t.by]=!0);return t}function ip(e={}){return t=>(typeof e?._count=="boolean"&&t.forEach(r=>{r._count=r._count._all}),t)}function bs(e,t){return t({action:"groupBy",unpacker:ip(e),argsMapper:np})(e)}function Ps(e,t,r){if(t==="aggregate")return n=>ws(n,r);if(t==="count")return n=>xs(n,r);if(t==="groupBy")return n=>bs(n,r)}function Es(e,t){let r=t.fields.filter(i=>!i.relationName),n=oo(r,"name");return new Proxy({},{get(i,o){if(o in i||typeof o=="symbol")return i[o];let s=n[o];if(s)return new zt(e,o,s.type,s.isList,s.kind==="enum")},...Br(Object.keys(n))})}var Ts=e=>Array.isArray(e)?e:e.split("."),Wn=(e,t)=>Ts(t).reduce((r,n)=>r&&r[n],e),vs=(e,t,r)=>Ts(t).reduceRight((n,i,o,s)=>Object.assign({},Wn(e,s.slice(0,o)),{[i]:n}),r);function op(e,t){return e===void 0||t===void 0?[]:[...t,"select",e]}function sp(e,t,r){return t===void 0?e??{}:vs(t,r,e||!0)}function Kn(e,t,r,n,i,o){let s=e._runtimeDataModel.models[t],a;return u=>{let m=je(e._errorFormat),P=op(n,i),T=sp(u,o,P),S=r({dataPath:P,callsite:m})(T),I=ap(e,t);return new Proxy(S,{get(A,M){if(!I.includes(M))return A[M];a??=Object.fromEntries(s.fields.map(D=>[D.name,D]));let q=[a[M].type,r,M],E=[P,T];return Kn(e,...q,...E)},...Br([...I,...Object.getOwnPropertyNames(S)])})}}function ap(e,t){return e._runtimeDataModel.models[t].fields.filter(r=>r.kind==="object").map(r=>r.name)}var lp=["findUnique","findUniqueOrThrow","findFirst","findFirstOrThrow","create","update","upsert","delete"],up=["aggregate","count","groupBy"];function Zn(e,t){let r=e._extensions.getAllModelExtensions(t)??{},n=[cp(e,t),dp(e,t),Zt(r),ae("name",()=>t),ae("$name",()=>t),ae("$parent",()=>e._appliedParent)];return ve({},n)}function cp(e,t){let r=Oe(t),n=Object.keys(mt).concat("count");return{getKeys(){return n},getPropertyValue(i){let o=i,s=a=>u=>{let m=je(e._errorFormat);return e._createPrismaPromise(P=>{let T={args:u,dataPath:[],action:o,model:t,clientMethod:`${r}.${i}`,jsModelName:r,transaction:P,callsite:m};return e._request({...T,...a})},{action:o,args:u,model:t})};return lp.includes(o)?Kn(e,t,s):pp(i)?Ps(e,i,s):s({})}}}function pp(e){return up.includes(e)}function dp(e,t){return We(ae("fields",()=>{let r=e._runtimeDataModel.models[t];return Es(t,r)}))}function Ss(e){return e.replace(/^./,t=>t.toUpperCase())}var Xn=Symbol();function Yt(e){let t=[mp(e),fp(e),ae(Xn,()=>e),ae("$parent",()=>e._appliedParent)],r=e._extensions.getAllClientExtensions();return r&&t.push(Zt(r)),ve(e,t)}function mp(e){let t=Object.getPrototypeOf(e._originalClient),r=[...new Set(Object.getOwnPropertyNames(t))];return{getKeys(){return r},getPropertyValue(n){return e[n]}}}function fp(e){let t=Object.keys(e._runtimeDataModel.models),r=t.map(Oe),n=[...new Set(t.concat(r))];return We({getKeys(){return n},getPropertyValue(i){let o=Ss(i);if(e._runtimeDataModel.models[o]!==void 0)return Zn(e,o);if(e._runtimeDataModel.models[i]!==void 0)return Zn(e,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function As(e){return e[Xn]?e[Xn]:e}function Rs(e){if(typeof e=="function")return e(this);let t=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$on:{value:void 0}});return Yt(t)}function Cs({result:e,modelName:t,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(t);if(!o)return e;let s=[],a=[];for(let u of Object.values(o)){if(n){if(n[u.name])continue;let m=u.needs.filter(P=>n[P]);m.length>0&&a.push(Et(m))}else if(r){if(!r[u.name])continue;let m=u.needs.filter(P=>!r[P]);m.length>0&&a.push(Et(m))}gp(e,u.needs)&&s.push(yp(u,ve(e,s),t))}return s.length>0||a.length>0?ve(e,[...s,...a]):e}function gp(e,t){return t.every(r=>$n(e,r))}function yp(e,t,r){return We(ae(e.name,()=>e.compute(t,r)))}function Jr({visitor:e,result:t,args:r,runtimeDataModel:n,modelName:i}){if(Array.isArray(t)){for(let s=0;sP.name===o);if(!u||u.kind!=="object"||!u.relationName)continue;let m=typeof s=="object"?s:{};t[o]=Jr({visitor:i,result:t[o],args:m,modelName:u.type,runtimeDataModel:n})}}function ks({result:e,modelName:t,args:r,extensions:n,runtimeDataModel:i,globalOmit:o}){return n.isEmpty()||e==null||typeof e!="object"||!i.models[t]?e:Jr({result:e,args:r??{},modelName:t,runtimeDataModel:i,visitor:(a,u,m)=>{let P=Oe(u);return Cs({result:a,modelName:P,select:m.select,omit:m.select?void 0:{...o?.[P],...m.omit},extensions:n})}})}var Ke=require("@prisma/client-runtime-utils");var hp=["$connect","$disconnect","$on","$use","$extends"],Os=hp;function Ns(e){if(e instanceof Ke.Sql)return wp(e);if(Ur(e))return xp(e);if(Array.isArray(e)){let r=[e[0]];for(let n=1;n{let o=t.customDataProxyFetch;return"transaction"in t&&i!==void 0&&(t.transaction?.kind==="batch"&&t.transaction.lock.then(),t.transaction=i),n===r.length?e._executeRequest(t):r[n]({model:t.model,operation:t.model?t.action:t.clientMethod,args:Ns(t.args??{}),__internalParams:t,query:(s,a=t)=>{let u=a.customDataProxyFetch;return a.customDataProxyFetch=Ls(o,u),a.args=s,Ms(e,a,r,n+1)}})})}function Fs(e,t){let{jsModelName:r,action:n,clientMethod:i}=t,o=r?n:i;if(e._extensions.isEmpty())return e._executeRequest(t);let s=e._extensions.getAllQueryCallbacks(r??"$none",o);return Ms(e,t,s)}function _s(e){return t=>{let r={requests:t},n=t[0].extensions.getAllBatchQueryCallbacks();return n.length?$s(r,n,0,e):e(r)}}function $s(e,t,r,n){if(r===t.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return t[r]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind==="batch"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let u=a.customDataProxyFetch;return a.customDataProxyFetch=Ls(i,u),$s(a,t,r+1,n)}})}var Ds=e=>e;function Ls(e=Ds,t=Ds){return r=>e(t(r))}function qs({dataPath:e,modelName:t,args:r,runtimeDataModel:n}){let i={modelName:t,args:r??{}},o=bp(e);if(!o||o.length===0)return i;let s=t,a=r??{};for(let u of o){let m=n.models[s];if(!m)return i;let P=m.fields.find(T=>T.name===u);if(!P)throw new Error(`Could not resolve relation field "${u}" on model "${s}" from dataPath "${e.join(".")}"`);if(P.kind!=="object"||!P.relationName)return i;s=P.type,a=Pp(a,u)}return{modelName:s,args:a}}function bp(e){let t=[];for(let r=0;rei(e[r],t[r]))}function St(e,t){let r=Object.keys(e),n=Object.keys(t);return(r.length{if(typeof e[o]==typeof t[o]&&typeof e[o]!="object")return e[o]===t[o];if(tr.Decimal.isDecimal(e[o])||tr.Decimal.isDecimal(t[o])){let s=Us(e[o]),a=Us(t[o]);return s&&a&&s.equals(a)}else if(vt(e[o])||vt(t[o])){let s=js(e[o]),a=js(t[o]);return s&&a&&s.equals(a)}else{if(rr(e[o])||rr(t[o]))return Bs(e[o])?.getTime()===Bs(t[o])?.getTime();if(typeof e[o]=="bigint"||typeof t[o]=="bigint")return Qs(e[o])===Qs(t[o]);if(typeof e[o]=="number"||typeof t[o]=="number")return Js(e[o])===Js(t[o])}return ei(e[o],t[o])})}function Us(e){return tr.Decimal.isDecimal(e)?e:typeof e=="number"||typeof e=="string"?new tr.Decimal(e):void 0}function js(e){return Buffer.isBuffer(e)?e:vt(e)?Buffer.from(e.buffer,e.byteOffset,e.byteLength):typeof e=="string"?Buffer.from(e,"base64"):void 0}function Bs(e){return rr(e)?e:typeof e=="string"||typeof e=="number"?new Date(e):void 0}function Qs(e){return typeof e=="bigint"?e:typeof e=="number"||typeof e=="string"?BigInt(e):void 0}function Js(e){return typeof e=="number"?e:typeof e=="string"?Number(e):void 0}function Se(e){return JSON.stringify(e,(t,r)=>typeof r=="bigint"?r.toString():ArrayBuffer.isView(r)?Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("base64"):r)}var Yn=8192;function Gr(e,t){if(t.length<=Yn){e.push(...t);return}for(let r=0;r`\`${t}\``).join(", ")})`:e&&"index"in e?`constraint: \`${e.index}\``:e&&"foreignKey"in e?"foreign key":"(not available)"}function Ip(e){if(typeof e!="object"||e===null)return!1;let t=e;return"$type"in t&&t.$type==="Param"||"prisma__type"in t&&t.prisma__type==="param"}function kp(e){return"prisma__type"in e?e.prisma__value?.name:e.value.name}function Op(e,t){let r={};for(let[n,i]of Object.entries(e))if(r[n]=i,Ip(i)){let o=kp(i);o&&o in t&&(r[n]=t[o])}return r}function Ws(e,t,r={}){let n=e.map(o=>t.keys.reduce((s,a)=>(s[a]=Ae(o[a]),s),{})),i=new Set(t.nestedSelection);return t.arguments.map(o=>{let s=Op(o,r),a=n.findIndex(u=>St(u,s));if(a===-1)return t.expectNonEmpty?new X("An operation failed because it depends on one or more records that were required but not found","P2025"):null;{let u=Object.entries(e[a]).filter(([m])=>i.has(m));return Object.fromEntries(u)}})}var Xs=require("@prisma/client-runtime-utils");var Q=class extends X{name="DataMapperError";constructor(t,r){super(t,"P2023",r)}},Ks=new WeakMap;function Np(e){let t=Ks.get(e);return t||(t=Object.entries(e),Ks.set(e,t)),t}function ii(e,t,r){switch(t.type){case"affectedRows":if(typeof e!="number")throw new Q(`Expected an affected rows count, got: ${typeof e} (${e})`);return{count:e};case"object":return oi(e,t.fields,r,t.skipNulls);case"field":return ni(e,"",t.fieldType,r);default:V(t,`Invalid data mapping type: '${t.type}'`)}}function oi(e,t,r,n){if(e===null)return null;if(Array.isArray(e)){let i=e;return n&&(i=i.filter(o=>o!==null)),i.map(o=>Zs(o,t,r))}if(typeof e=="object")return Zs(e,t,r);if(typeof e=="string"){let i;try{i=JSON.parse(e)}catch(o){throw new Q("Expected an array or object, got a string that is not valid JSON",{cause:o})}return oi(i,t,r,n)}throw new Q(`Expected an array or an object, got: ${typeof e}`)}function Zs(e,t,r){if(typeof e!="object")throw new Q(`Expected an object, but got '${typeof e}'`);let n={};for(let[i,o]of Np(t))switch(o.type){case"affectedRows":throw new Q(`Unexpected 'AffectedRows' node in data mapping for field '${i}'`);case"object":{let{serializedName:s,fields:a,skipNulls:u}=o;if(s!==null&&!Object.hasOwn(e,s))throw new Q(`Missing data field (Object): '${i}'; node: ${JSON.stringify(o)}; data: ${JSON.stringify(e)}`);let m=s!==null?e[s]:e;n[i]=oi(m,a,r,u);break}case"field":{let s=o.dbName;if(Object.hasOwn(e,s))n[i]=Dp(e[s],s,o.fieldType,r);else throw new Q(`Missing data field (Value): '${s}'; node: ${JSON.stringify(o)}; data: ${JSON.stringify(e)}`)}break;default:V(o,`DataMapper: Invalid data mapping node type: '${o.type}'`)}return n}function Dp(e,t,r,n){return e===null?r.arity==="list"?[]:null:r.arity==="list"?e.map((o,s)=>ni(o,`${t}[${s}]`,r,n)):ni(e,t,r,n)}function ni(e,t,r,n){switch(r.type){case"unsupported":return e;case"string":{if(typeof e!="string")throw new Q(`Expected a string in column '${t}', got ${typeof e}: ${e}`);return e}case"int":switch(typeof e){case"number":return Math.trunc(e);case"string":{let i=Math.trunc(Number(e));if(Number.isNaN(i)||!Number.isFinite(i))throw new Q(`Expected an integer in column '${t}', got string: ${e}`);if(!Number.isSafeInteger(i))throw new Q(`Integer value in column '${t}' is too large to represent as a JavaScript number without loss of precision, got: ${e}. Consider using BigInt type.`);return i}default:throw new Q(`Expected an integer in column '${t}', got ${typeof e}: ${e}`)}case"bigint":{if(typeof e!="number"&&typeof e!="string")throw new Q(`Expected a bigint in column '${t}', got ${typeof e}: ${e}`);return{$type:"BigInt",value:e}}case"float":{if(typeof e=="number")return e;if(typeof e=="string"){let i=Number(e);if(Number.isNaN(i)&&!/^[-+]?nan$/.test(e.toLowerCase()))throw new Q(`Expected a float in column '${t}', got string: ${e}`);return i}throw new Q(`Expected a float in column '${t}', got ${typeof e}: ${e}`)}case"boolean":{if(typeof e=="boolean")return e;if(typeof e=="number")return e===1;if(typeof e=="string"){if(e==="true"||e==="TRUE"||e==="1")return!0;if(e==="false"||e==="FALSE"||e==="0")return!1;throw new Q(`Expected a boolean in column '${t}', got ${typeof e}: ${e}`)}if(Array.isArray(e)||vt(e)){for(let i of e)if(i!==0)return!0;return!1}throw new Q(`Expected a boolean in column '${t}', got ${typeof e}: ${e}`)}case"decimal":if(typeof e!="number"&&typeof e!="string"&&!Xs.Decimal.isDecimal(e))throw new Q(`Expected a decimal in column '${t}', got ${typeof e}: ${e}`);return{$type:"Decimal",value:e};case"datetime":{if(typeof e=="string")return{$type:"DateTime",value:Fp(e)};if(typeof e=="number"||rr(e))return{$type:"DateTime",value:e};throw new Q(`Expected a date in column '${t}', got ${typeof e}: ${e}`)}case"object":return{$type:"Json",value:Se(e)};case"json":return{$type:"Json",value:`${e}`};case"bytes":{switch(r.encoding){case"base64":if(typeof e!="string")throw new Q(`Expected a base64-encoded byte array in column '${t}', got ${typeof e}: ${e}`);return{$type:"Bytes",value:e};case"hex":if(typeof e!="string"||!e.startsWith("\\x"))throw new Q(`Expected a hex-encoded byte array in column '${t}', got ${typeof e}: ${e}`);return{$type:"Bytes",value:Buffer.from(e.slice(2),"hex").toString("base64")};case"array":if(Array.isArray(e))return{$type:"Bytes",value:Buffer.from(e).toString("base64")};if(vt(e))return{$type:"Bytes",value:Buffer.from(e).toString("base64")};throw new Q(`Expected a byte array in column '${t}', got ${typeof e}: ${e}`);default:V(r.encoding,`DataMapper: Unknown bytes encoding: ${r.encoding}`)}break}case"enum":{let i=n[r.name];if(i===void 0)throw new Q(`Unknown enum '${r.name}'`);let o=i[`${e}`];if(o===void 0)throw new Q(`Value '${e}' not found in enum '${r.name}'`);return o}default:V(r,`DataMapper: Unknown result type: ${r.type}`)}}var Mp=/\d{2}:\d{2}:\d{2}(?:\.\d+)?(Z|[+-]\d{2}(:?\d{2})?)?$/;function Fp(e){let t=Mp.exec(e);if(t===null)return`${e}T00:00:00Z`;let r=e,[n,i,o]=t;if(i!==void 0&&i!=="Z"&&o===void 0?r=`${e}:00`:i===void 0&&(r=`${e}Z`),n.length===e.length)return`1970-01-01T${r}`;let s=t.index-1;return r[s]===" "&&(r=`${r.slice(0,s)}T${r.slice(s+1)}`),r}function ge(e){if(typeof e!="object")return e;var t,r,n=Object.prototype.toString.call(e);if(n==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){r=new e.constructor;for(t in e)e.hasOwnProperty(t)&&r[t]!==e[t]&&(r[t]=ge(e[t]))}else{r={};for(t in e)t==="__proto__"?Object.defineProperty(r,t,{value:ge(e[t]),configurable:!0,enumerable:!0,writable:!0}):r[t]=ge(e[t])}return r}if(n==="[object Array]"){for(t=e.length,r=Array(t);t--;)r[t]=ge(e[t]);return r}return n==="[object Set]"?(r=new Set,e.forEach(function(i){r.add(ge(i))}),r):n==="[object Map]"?(r=new Map,e.forEach(function(i,o){r.set(ge(o),ge(i))}),r):n==="[object Date]"?new Date(+e):n==="[object RegExp]"?(r=new RegExp(e.source,e.flags),r.lastIndex=e.lastIndex,r):n==="[object DataView]"?new e.constructor(ge(e.buffer)):n==="[object ArrayBuffer]"?e.slice(0):n.slice(-6)==="Array]"?new e.constructor(e):e}function _p(e){let t=Object.entries(e);return t.length===0?"":(t.sort(([n],[i])=>n.localeCompare(i)),`/*${t.map(([n,i])=>{let o=encodeURIComponent(n),s=encodeURIComponent(i).replace(/'/g,"\\'");return`${o}='${s}'`}).join(",")}*/`)}function Hr(e,t){let r={};for(let n of e){let i=n(ge(t));for(let[o,s]of Object.entries(i))s!==void 0&&(r[o]=s)}return r}function Ys(e,t){let r=Hr(e,t);return _p(r)}function ea(e,t){return t?`${e} ${t}`:e}var nr;(function(e){e[e.INTERNAL=0]="INTERNAL",e[e.SERVER=1]="SERVER",e[e.CLIENT=2]="CLIENT",e[e.PRODUCER=3]="PRODUCER",e[e.CONSUMER=4]="CONSUMER"})(nr||(nr={}));function $p(e){switch(e){case"postgresql":case"postgres":case"prisma+postgres":return"postgresql";case"sqlserver":return"mssql";case"mysql":case"sqlite":case"cockroachdb":case"mongodb":return e;default:V(e,`Unknown provider: ${e}`)}}async function Wr({query:e,tracingHelper:t,provider:r,onQuery:n,execute:i}){let o=n===void 0?i:async()=>{let s=new Date,a=performance.now(),u=await i(),m=performance.now();return n({timestamp:s,duration:m-a,query:e.sql,params:e.args}),u};return t.isEnabled()?await t.runInChildSpan({name:"db_query",kind:nr.CLIENT,attributes:{"db.query.text":e.sql,"db.system.name":$p(r)}},o):o()}function Ze(e,t){var r="000000000"+e;return r.substr(r.length-t)}var ta=Pe(require("node:os"),1);function Lp(){try{return ta.default.hostname()}catch{return process.env._CLUSTER_NETWORK_NAME_||process.env.COMPUTERNAME||"hostname"}}var ra=2,Vp=Ze(process.pid.toString(36),ra),na=Lp(),qp=na.length,Up=Ze(na.split("").reduce(function(e,t){return+e+t.charCodeAt(0)},+qp+36).toString(36),ra);function si(){return Vp+Up}function Kr(e){return typeof e=="string"&&/^c[a-z0-9]{20,32}$/.test(e)}function ai(e){let n=Math.pow(36,4),i=0;function o(){return Ze((Math.random()*n<<0).toString(36),4)}function s(){return i=i>oa&Zr)}:{h:Number(e>>oa&Zr)|0,l:Number(e&Zr)|0}}function sa(e,t=!1){let r=e.length,n=new Uint32Array(r),i=new Uint32Array(r);for(let o=0;oe<>>32-r,la=(e,t,r)=>t<>>32-r,ua=(e,t,r)=>t<>>64-r,ca=(e,t,r)=>e<>>64-r;function Qp(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function Xr(e,t=""){if(typeof e!="number"){let r=t&&`"${t}" `;throw new TypeError(`${r}expected number, got ${typeof e}`)}if(!Number.isSafeInteger(e)||e<0){let r=t&&`"${t}" `;throw new RangeError(`${r}expected integer >= 0, got ${e}`)}}function Yr(e,t,r=""){let n=Qp(e),i=e?.length,o=t!==void 0;if(!n||o&&i!==t){let s=r&&`"${r}" `,a=o?` of length ${t}`:"",u=n?`length=${i}`:`type=${typeof e}`,m=s+"expected Uint8Array"+a+", got "+u;throw n?new RangeError(m):new TypeError(m)}return e}function li(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function pa(e,t){Yr(e,void 0,"digestInto() output");let r=t.outputLen;if(e.length='+r)}function da(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function ui(...e){for(let t=0;t>>8&65280|e>>>24&255}function zp(e){for(let t=0;te:zp;function ma(e,t={}){let r=(i,o)=>e(o).update(i).digest(),n=e(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.canXOF=n.canXOF,r.create=i=>e(i),Object.assign(r,t),Object.freeze(r)}var fa=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});var Hp=BigInt(0),ir=BigInt(1),Wp=BigInt(2),Kp=BigInt(7),Zp=BigInt(256),Xp=BigInt(113),ha=[],wa=[],xa=[];for(let e=0,t=ir,r=1,n=0;e<24;e++){[r,n]=[n,(2*r+3*n)%5],ha.push(2*(5*n+r)),wa.push((e+1)*(e+2)/2%64);let i=Hp;for(let o=0;o<7;o++)t=(t<>Kp)*Xp)%Zp,t&Wp&&(i^=ir<<(ir<r>32?ua(e,t,r):aa(e,t,r),ya=(e,t,r)=>r>32?ca(e,t,r):la(e,t,r);function td(e,t=24){if(Xr(t,"rounds"),t<1||t>24)throw new Error('"rounds" expected integer 1..24');let r=new Uint32Array(5*2);for(let n=24-t;n<24;n++){for(let s=0;s<10;s++)r[s]=e[s]^e[s+10]^e[s+20]^e[s+30]^e[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,u=(s+2)%10,m=r[u],P=r[u+1],T=ga(m,P,1)^r[a],S=ya(m,P,1)^r[a+1];for(let I=0;I<50;I+=10)e[s+I]^=T,e[s+I+1]^=S}let i=e[2],o=e[3];for(let s=0;s<24;s++){let a=wa[s],u=ga(i,o,a),m=ya(i,o,a),P=ha[s];i=e[P],o=e[P+1],e[P]=u,e[P+1]=m}for(let s=0;s<50;s+=10){let a=e[s],u=e[s+1],m=e[s+2],P=e[s+3];e[s]^=~e[s+2]&e[s+4],e[s+1]^=~e[s+3]&e[s+5],e[s+2]^=~e[s+4]&e[s+6],e[s+3]^=~e[s+5]&e[s+7],e[s+4]^=~e[s+6]&e[s+8],e[s+5]^=~e[s+7]&e[s+9],e[s+6]^=~e[s+8]&a,e[s+7]^=~e[s+9]&u,e[s+8]^=~a&m,e[s+9]^=~u&P}e[0]^=Yp[n],e[1]^=ed[n]}ui(r)}var pi=class e{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;canXOF;enableXOF=!1;rounds;constructor(t,r,n,i=!1,o=24){if(this.blockLen=t,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.canXOF=i,this.rounds=o,Xr(n,"outputLen"),!(0=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);t.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return Xr(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(pa(t,this),this.finished)throw new Error("digest() was already called");this.writeInto(t.subarray(0,this.outputLen)),this.destroy()}digest(){let t=new Uint8Array(this.outputLen);return this.digestInto(t),t}destroy(){this.destroyed=!0,ui(this.state)}_cloneInto(t){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return t||=new e(r,n,i,s,o),t.blockLen=r,t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=o,t.suffix=n,t.outputLen=i,t.enableXOF=s,t.canXOF=this.canXOF,t.destroyed=this.destroyed,t}},rd=(e,t,r,n={})=>ma(()=>new pi(t,e,r),n);var Pa=rd(6,72,64,fa(10));var nd=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,di=Math.ceil,he=Math.floor,le="[BigNumber Error] ",Ea=le+"Number primitive has more than 15 significant digits: ",Re=1e14,N=14,mi=9007199254740991,fi=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],Qe=1e7,Y=1e9;function Ta(e){var t,r,n,i=E.prototype={constructor:E,toString:null,valueOf:null},o=new E(1),s=20,a=4,u=-7,m=21,P=-1e7,T=1e7,S=!1,I=1,A=0,M={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},L="0123456789abcdefghijklmnopqrstuvwxyz",q=!0;function E(l,c){var p,h,f,y,b,d,g,x,w=this;if(!(w instanceof E))return new E(l,c);if(c==null){if(l&&l._isBigNumber===!0){w.s=l.s,!l.c||l.e>T?w.c=w.e=null:l.e=10;b/=10,y++);y>T?w.c=w.e=null:(w.e=y,w.c=[l]);return}x=String(l)}else{if(!nd.test(x=String(l)))return n(w,x,d);w.s=x.charCodeAt(0)==45?(x=x.slice(1),-1):1}(y=x.indexOf("."))>-1&&(x=x.replace(".","")),(b=x.search(/e/i))>0?(y<0&&(y=b),y+=+x.slice(b+1),x=x.substring(0,b)):y<0&&(y=x.length)}else{if(J(c,2,L.length,"Base"),c==10&&q)return w=new E(l),ie(w,s+w.e+1,a);if(x=String(l),d=typeof l=="number"){if(l*0!=0)return n(w,x,d,c);if(w.s=1/l<0?(x=x.slice(1),-1):1,E.DEBUG&&x.replace(/^0\.0*|\./,"").length>15)throw Error(Ea+l)}else w.s=x.charCodeAt(0)===45?(x=x.slice(1),-1):1;for(p=L.slice(0,c),y=b=0,g=x.length;by){y=g;continue}}else if(!f&&(x==x.toUpperCase()&&(x=x.toLowerCase())||x==x.toLowerCase()&&(x=x.toUpperCase()))){f=!0,b=-1,y=0;continue}return n(w,String(l),d,c)}d=!1,x=r(x,c,10,w.s),(y=x.indexOf("."))>-1?x=x.replace(".",""):y=x.length}for(b=0;x.charCodeAt(b)===48;b++);for(g=x.length;x.charCodeAt(--g)===48;);if(x=x.slice(b,++g)){if(g-=b,d&&E.DEBUG&&g>15&&(l>mi||l!==he(l)))throw Error(Ea+w.s*l);if((y=y-b-1)>T)w.c=w.e=null;else if(y=-Y&&f<=Y&&f===he(f)){if(h[0]===0){if(f===0&&h.length===1)return!0;break e}if(c=(f+1)%N,c<1&&(c+=N),String(h[0]).length==c){for(c=0;c=Re||p!==he(p))break e;if(p!==0)return!0}}}else if(h===null&&f===null&&(y===null||y===1||y===-1))return!0;throw Error(le+"Invalid BigNumber: "+l)},E.maximum=E.max=function(){return H(arguments,-1)},E.minimum=E.min=function(){return H(arguments,1)},E.random=function(){var l=9007199254740992,c=Math.random()*l&2097151?function(){return he(Math.random()*l)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(p){var h,f,y,b,d,g=0,x=[],w=new E(o);if(p==null?p=s:J(p,0,Y),b=di(p/N),S)if(crypto.getRandomValues){for(h=crypto.getRandomValues(new Uint32Array(b*=2));g>>11),d>=9e15?(f=crypto.getRandomValues(new Uint32Array(2)),h[g]=f[0],h[g+1]=f[1]):(x.push(d%1e14),g+=2);g=b/2}else if(crypto.randomBytes){for(h=crypto.randomBytes(b*=7);g=9e15?crypto.randomBytes(7).copy(h,g):(x.push(d%1e14),g+=7);g=b/7}else throw S=!1,Error(le+"crypto unavailable");if(!S)for(;g=10;d/=10,g++);gf-1&&(d[b+1]==null&&(d[b+1]=0),d[b+1]+=d[b]/f|0,d[b]%=f)}return d.reverse()}return function(p,h,f,y,b){var d,g,x,w,v,R,C,$,G=p.indexOf("."),W=s,F=a;for(G>=0&&(w=A,A=0,p=p.replace(".",""),$=new E(h),R=$.pow(p.length-G),A=w,$.c=c(Le(ye(R.c),R.e,"0"),10,f,l),$.e=$.c.length),C=c(p,h,f,b?(d=L,l):(d=l,L)),x=w=C.length;C[--w]==0;C.pop());if(!C[0])return d.charAt(0);if(G<0?--x:(R.c=C,R.e=x,R.s=y,R=t(R,$,W,F,f),C=R.c,v=R.r,x=R.e),g=x+W+1,G=C[g],w=f/2,v=v||g<0||C[g+1]!=null,v=F<4?(G!=null||v)&&(F==0||F==(R.s<0?3:2)):G>w||G==w&&(F==4||v||F==6&&C[g-1]&1||F==(R.s<0?8:7)),g<1||!C[0])p=v?Le(d.charAt(1),-W,d.charAt(0)):d.charAt(0);else{if(C.length=g,v)for(--f;++C[--g]>f;)C[g]=0,g||(++x,C=[1].concat(C));for(w=C.length;!C[--w];);for(G=0,p="";G<=w;p+=d.charAt(C[G++]));p=Le(p,x,d.charAt(0))}return p}}(),t=function(){function l(h,f,y){var b,d,g,x,w=0,v=h.length,R=f%Qe,C=f/Qe|0;for(h=h.slice();v--;)g=h[v]%Qe,x=h[v]/Qe|0,b=C*g+x*R,d=R*g+b%Qe*Qe+w,w=(d/y|0)+(b/Qe|0)+C*x,h[v]=d%y;return w&&(h=[w].concat(h)),h}function c(h,f,y,b){var d,g;if(y!=b)g=y>b?1:-1;else for(d=g=0;df[d]?1:-1;break}return g}function p(h,f,y,b){for(var d=0;y--;)h[y]-=d,d=h[y]1;h.splice(0,1));}return function(h,f,y,b,d){var g,x,w,v,R,C,$,G,W,F,U,oe,wr,Sn,An,Ce,Ot,me=h.s==f.s?1:-1,se=h.c,z=f.c;if(!se||!se[0]||!z||!z[0])return new E(!h.s||!f.s||(se?z&&se[0]==z[0]:!z)?NaN:se&&se[0]==0||!z?me*0:me/0);for(G=new E(me),W=G.c=[],x=h.e-f.e,me=y+x+1,d||(d=Re,x=we(h.e/N)-we(f.e/N),me=me/N|0),w=0;z[w]==(se[w]||0);w++);if(z[w]>(se[w]||0)&&x--,me<0)W.push(1),v=!0;else{for(Sn=se.length,Ce=z.length,w=0,me+=2,R=he(d/(z[0]+1)),R>1&&(z=l(z,R,d),se=l(se,R,d),Ce=z.length,Sn=se.length),wr=Ce,F=se.slice(0,Ce),U=F.length;U=d/2&&An++;do{if(R=0,g=c(z,F,Ce,U),g<0){if(oe=F[0],Ce!=U&&(oe=oe*d+(F[1]||0)),R=he(oe/An),R>1)for(R>=d&&(R=d-1),C=l(z,R,d),$=C.length,U=F.length;c(C,F,$,U)==1;)R--,p(C,Ce<$?Ot:z,$,d),$=C.length,g=1;else R==0&&(g=R=1),C=z.slice(),$=C.length;if($=10;me/=10,w++);ie(G,y+(G.e=w+x*N-1)+1,b,v)}else G.e=x,G.r=+v;return G}}();function D(l,c,p,h){var f,y,b,d,g;if(p==null?p=a:J(p,0,8),!l.c)return l.toString();if(f=l.c[0],b=l.e,c==null)g=ye(l.c),g=h==1||h==2&&(b<=u||b>=m)?tn(g,b):Le(g,b,"0");else if(l=ie(new E(l),c,p),y=l.e,g=ye(l.c),d=g.length,h==1||h==2&&(c<=y||y<=u)){for(;db),g=Le(g,y,"0"),y+1>d){if(--c>0)for(g+=".";c--;g+="0");}else if(c+=y-d,c>0)for(y+1==d&&(g+=".");c--;g+="0");return l.s<0&&f?"-"+g:g}function H(l,c){for(var p,h,f=1,y=new E(l[0]);f=10;f/=10,h++);return(p=h+p*N-1)>T?l.c=l.e=null:p=10;d/=10,f++);if(y=c-f,y<0)y+=N,b=c,g=v[x=0],w=he(g/R[f-b-1]%10);else if(x=di((y+1)/N),x>=v.length)if(h){for(;v.length<=x;v.push(0));g=w=0,f=1,y%=N,b=y-N+1}else break e;else{for(g=d=v[x],f=1;d>=10;d/=10,f++);y%=N,b=y-N+f,w=b<0?0:he(g/R[f-b-1]%10)}if(h=h||c<0||v[x+1]!=null||(b<0?g:g%R[f-b-1]),h=p<4?(w||h)&&(p==0||p==(l.s<0?3:2)):w>5||w==5&&(p==4||h||p==6&&(y>0?b>0?g/R[f-b]:0:v[x-1])%10&1||p==(l.s<0?8:7)),c<1||!v[0])return v.length=0,h?(c-=l.e+1,v[0]=R[(N-c%N)%N],l.e=-c||0):v[0]=l.e=0,l;if(y==0?(v.length=x,d=1,x--):(v.length=x+1,d=R[N-y],v[x]=b>0?he(g/R[f-b]%R[b])*d:0),h)for(;;)if(x==0){for(y=1,b=v[0];b>=10;b/=10,y++);for(b=v[0]+=d,d=1;b>=10;b/=10,d++);y!=d&&(l.e++,v[0]==Re&&(v[0]=1));break}else{if(v[x]+=d,v[x]!=Re)break;v[x--]=0,d=1}for(y=v.length;v[--y]===0;v.pop());}l.e>T?l.c=l.e=null:l.e=m?tn(c,p):Le(c,p,"0"),l.s<0?"-"+c:c)}return i.absoluteValue=i.abs=function(){var l=new E(this);return l.s<0&&(l.s=1),l},i.comparedTo=function(l,c){return Xe(this,new E(l,c))},i.decimalPlaces=i.dp=function(l,c){var p,h,f,y=this;if(l!=null)return J(l,0,Y),c==null?c=a:J(c,0,8),ie(new E(y),l+y.e+1,c);if(!(p=y.c))return null;if(h=((f=p.length-1)-we(this.e/N))*N,f=p[f])for(;f%10==0;f/=10,h--);return h<0&&(h=0),h},i.dividedBy=i.div=function(l,c){return t(this,new E(l,c),s,a)},i.dividedToIntegerBy=i.idiv=function(l,c){return t(this,new E(l,c),0,1)},i.exponentiatedBy=i.pow=function(l,c){var p,h,f,y,b,d,g,x,w,v=this;if(l=new E(l),l.c&&!l.isInteger())throw Error(le+"Exponent not an integer: "+be(l));if(c!=null&&(c=new E(c)),d=l.e>14,!v.c||!v.c[0]||v.c[0]==1&&!v.e&&v.c.length==1||!l.c||!l.c[0])return w=new E(Math.pow(+be(v),d?l.s*(2-en(l)):+be(l))),c?w.mod(c):w;if(g=l.s<0,c){if(c.c?!c.c[0]:!c.s)return new E(NaN);h=!g&&v.isInteger()&&c.isInteger(),h&&(v=v.mod(c))}else{if(l.e>9&&(v.e>0||v.e<-1||(v.e==0?v.c[0]>1||d&&v.c[1]>=24e7:v.c[0]<8e13||d&&v.c[0]<=9999975e7)))return y=v.s<0&&en(l)?-0:0,v.e>-1&&(y=1/y),new E(g?1/y:y);A&&(y=di(A/N+2))}for(d?(p=new E(.5),g&&(l.s=1),x=en(l)):(f=Math.abs(+be(l)),x=f%2),w=new E(o);;){if(x){if(w=w.times(v),!w.c)break;y?w.c.length>y&&(w.c.length=y):h&&(w=w.mod(c))}if(f){if(f=he(f/2),f===0)break;x=f%2}else if(l=l.times(p),ie(l,l.e+1,1),l.e>14)x=en(l);else{if(f=+be(l),f===0)break;x=f%2}v=v.times(v),y?v.c&&v.c.length>y&&(v.c.length=y):h&&(v=v.mod(c))}return h?w:(g&&(w=o.div(w)),c?w.mod(c):y?ie(w,A,a,b):w)},i.integerValue=function(l){var c=new E(this);return l==null?l=a:J(l,0,8),ie(c,c.e+1,l)},i.isEqualTo=i.eq=function(l,c){return Xe(this,new E(l,c))===0},i.isFinite=function(){return!!this.c},i.isGreaterThan=i.gt=function(l,c){return Xe(this,new E(l,c))>0},i.isGreaterThanOrEqualTo=i.gte=function(l,c){return(c=Xe(this,new E(l,c)))===1||c===0},i.isInteger=function(){return!!this.c&&we(this.e/N)>this.c.length-2},i.isLessThan=i.lt=function(l,c){return Xe(this,new E(l,c))<0},i.isLessThanOrEqualTo=i.lte=function(l,c){return(c=Xe(this,new E(l,c)))===-1||c===0},i.isNaN=function(){return!this.s},i.isNegative=function(){return this.s<0},i.isPositive=function(){return this.s>0},i.isZero=function(){return!!this.c&&this.c[0]==0},i.minus=function(l,c){var p,h,f,y,b=this,d=b.s;if(l=new E(l,c),c=l.s,!d||!c)return new E(NaN);if(d!=c)return l.s=-c,b.plus(l);var g=b.e/N,x=l.e/N,w=b.c,v=l.c;if(!g||!x){if(!w||!v)return w?(l.s=-c,l):new E(v?b:NaN);if(!w[0]||!v[0])return v[0]?(l.s=-c,l):new E(w[0]?b:a==3?-0:0)}if(g=we(g),x=we(x),w=w.slice(),d=g-x){for((y=d<0)?(d=-d,f=w):(x=g,f=v),f.reverse(),c=d;c--;f.push(0));f.reverse()}else for(h=(y=(d=w.length)<(c=v.length))?d:c,d=c=0;c0)for(;c--;w[p++]=0);for(c=Re-1;h>d;){if(w[--h]=0;){for(p=0,R=oe[f]%W,C=oe[f]/W|0,b=g,y=f+b;y>f;)x=U[--b]%W,w=U[b]/W|0,d=C*x+w*R,x=R*x+d%W*W+$[y]+p,p=(x/G|0)+(d/W|0)+C*w,$[y--]=x%G;$[y]=p}return p?++h:$.splice(0,1),ce(l,$,h)},i.negated=function(){var l=new E(this);return l.s=-l.s||null,l},i.plus=function(l,c){var p,h=this,f=h.s;if(l=new E(l,c),c=l.s,!f||!c)return new E(NaN);if(f!=c)return l.s=-c,h.minus(l);var y=h.e/N,b=l.e/N,d=h.c,g=l.c;if(!y||!b){if(!d||!g)return new E(f/0);if(!d[0]||!g[0])return g[0]?l:new E(d[0]?h:f*0)}if(y=we(y),b=we(b),d=d.slice(),f=y-b){for(f>0?(b=y,p=g):(f=-f,p=d),p.reverse();f--;p.push(0));p.reverse()}for(f=d.length,c=g.length,f-c<0&&(p=g,g=d,d=p,c=f),f=0;c;)f=(d[--c]=d[c]+g[c]+f)/Re|0,d[c]=Re===d[c]?0:d[c]%Re;return f&&(d=[f].concat(d),++b),ce(l,d,b)},i.precision=i.sd=function(l,c){var p,h,f,y=this;if(l!=null&&l!==!!l)return J(l,1,Y),c==null?c=a:J(c,0,8),ie(new E(y),l,c);if(!(p=y.c))return null;if(f=p.length-1,h=f*N+1,f=p[f]){for(;f%10==0;f/=10,h--);for(f=p[0];f>=10;f/=10,h++);}return l&&y.e+1>h&&(h=y.e+1),h},i.shiftedBy=function(l){return J(l,-mi,mi),this.times("1e"+l)},i.squareRoot=i.sqrt=function(){var l,c,p,h,f,y=this,b=y.c,d=y.s,g=y.e,x=s+4,w=new E("0.5");if(d!==1||!b||!b[0])return new E(!d||d<0&&(!b||b[0])?NaN:b?y:1/0);if(d=Math.sqrt(+be(y)),d==0||d==1/0?(c=ye(b),(c.length+g)%2==0&&(c+="0"),d=Math.sqrt(+c),g=we((g+1)/2)-(g<0||g%2),d==1/0?c="5e"+g:(c=d.toExponential(),c=c.slice(0,c.indexOf("e")+1)+g),p=new E(c)):p=new E(d+""),p.c[0]){for(g=p.e,d=g+x,d<3&&(d=0);;)if(f=p,p=w.times(f.plus(t(y,f,x,1))),ye(f.c).slice(0,d)===(c=ye(p.c)).slice(0,d))if(p.e0&&$>0){for(y=$%d||d,w=C.substr(0,y);y<$;y+=d)w+=x+C.substr(y,d);g>0&&(w+=x+C.slice(y)),R&&(w="-"+w)}h=v?w+(p.decimalSeparator||"")+((g=+p.fractionGroupSize)?v.replace(new RegExp("\\d{"+g+"}\\B","g"),"$&"+(p.fractionGroupSeparator||"")):v):w}return(p.prefix||"")+h+(p.suffix||"")},i.toFraction=function(l){var c,p,h,f,y,b,d,g,x,w,v,R,C=this,$=C.c;if(l!=null&&(d=new E(l),!d.isInteger()&&(d.c||d.s!==1)||d.lt(o)))throw Error(le+"Argument "+(d.isInteger()?"out of range: ":"not an integer: ")+be(d));if(!$)return new E(C);for(c=new E(o),x=p=new E(o),h=g=new E(o),R=ye($),y=c.e=R.length-C.e-1,c.c[0]=fi[(b=y%N)<0?N+b:b],l=!l||d.comparedTo(c)>0?y>0?c:x:d,b=T,T=1/0,d=new E(R),g.c[0]=0;w=t(d,c,0,1),f=p.plus(w.times(h)),f.comparedTo(l)!=1;)p=h,h=f,x=g.plus(w.times(f=x)),g=f,c=d.minus(w.times(f=c)),d=f;return f=t(l.minus(p),h,0,1),g=g.plus(f.times(x)),p=p.plus(f.times(h)),g.s=x.s=C.s,y=y*2,v=t(x,h,y,a).minus(C).abs().comparedTo(t(g,p,y,a).minus(C).abs())<1?[x,h]:[g,p],T=b,v},i.toNumber=function(){return+be(this)},i.toPrecision=function(l,c){return l!=null&&J(l,1,Y),D(this,l,c,2)},i.toString=function(l){var c,p=this,h=p.s,f=p.e;return f===null?h?(c="Infinity",h<0&&(c="-"+c)):c="NaN":(l==null?c=f<=u||f>=m?tn(ye(p.c),f):Le(ye(p.c),f,"0"):l===10&&q?(p=ie(new E(p),s+f+1,a),c=Le(ye(p.c),p.e,"0")):(J(l,2,L.length,"Base"),c=r(Le(ye(p.c),f,"0"),10,l,h,!0)),h<0&&p.c[0]&&(c="-"+c)),c},i.valueOf=i.toJSON=function(){return be(this)},i._isBigNumber=!0,i[Symbol.toStringTag]="BigNumber",i[Symbol.for("nodejs.util.inspect.custom")]=i.valueOf,e!=null&&E.set(e),E}function we(e){var t=e|0;return e>0||e===t?t:t-1}function ye(e){for(var t,r,n=1,i=e.length,o=e[0]+"";nm^r?1:-1;for(a=(u=i.length)<(m=o.length)?u:m,s=0;so[s]^r?1:-1;return u==m?0:u>m^r?1:-1}function J(e,t,r,n){if(er||e!==he(e))throw Error(le+(n||"Argument")+(typeof e=="number"?er?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function en(e){var t=e.c.length-1;return we(e.e/N)==t&&e.c[t]%2!=0}function tn(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function Le(e,t,r){var n,i;if(t<0){for(i=r+".";++t;i+=r);e=i+e}else if(n=e.length,++t>n){for(i=r,t-=n;--t;i+=r);e+=i}else ttypeof globalThis<"u"&&globalThis.crypto&&typeof globalThis.crypto.getRandomValues=="function"?()=>{let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]/4294967296}:Math.random,yi=sd(),gi=(e=4,t=yi)=>{let r="";for(;r.length{let t=new TextEncoder;return ad(Pa(t.encode(e))).toString(36).slice(1)},Sa=Array.from({length:26},(e,t)=>String.fromCharCode(t+97)),ld=e=>Sa[Math.floor(e()*Sa.length)],ud=({globalObj:e=typeof global<"u"?global:typeof window<"u"?window:{},random:t=yi}={})=>{let r=Object.keys(e).toString(),n=r.length?r+gi(or,t):gi(or,t);return Aa(n).substring(0,or)},cd=e=>()=>e++,pd=476782367,Ra=({random:e=yi,counter:t=cd(Math.floor(e()*pd)),length:r=od,fingerprint:n=ud({random:e})}={})=>{if(r>or)throw new Error(`Length must be between 2 and ${or}. Received: ${r}`);return function(){let o=ld(e),s=Date.now().toString(36),a=t().toString(36),u=gi(r,e),m=`${s+u+a+n}`;return`${o+Aa(m).substring(1,r)}`}},hi=dd(Ra);function dd(e){let t;return()=>(t||(t=e()),t())}var wi=require("node:crypto");var Ca="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var md=128,Je,At;function fd(e){if(e<0)throw new RangeError("Wrong ID size");try{!Je||Je.lengthJe.length&&(wi.webcrypto.getRandomValues(Je),At=0)}catch(t){throw Je=void 0,t}At+=e}function xi(e=21){fd(e|=0);let t="";for(let r=At-e;r{let n=new Uint8Array(1);return r.getRandomValues(n),n[0]/255};if(typeof r?.randomBytes=="function")return()=>r.randomBytes(1).readUInt8()/255;if(sr.default?.randomBytes)return()=>sr.default.randomBytes(1).readUInt8()/255;throw new et(Ye.PRNGDetectFailure,"Failed to find a reliable PRNG")}function wd(){return Pd()?self:typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:null}function xd(e,t){let r="";for(;e>0;e--)r=yd(t)+r;return r}function bd(e,t=Oa){if(isNaN(e))throw new et(Ye.EncodeTimeValueMalformed,`Time must be a number: ${e}`);if(e>Ia)throw new et(Ye.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${Ia}: ${e}`);if(e<0)throw new et(Ye.EncodeTimeNegative,`Time must be positive: ${e}`);if(Number.isInteger(e)===!1)throw new et(Ye.EncodeTimeValueMalformed,`Time must be an integer: ${e}`);let r,n="";for(let i=t;i>0;i--)r=e%ar,n=ka.charAt(r)+n,e=(e-r)/ar;return n}function Pd(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function Na(e,t){let r=t||hd(),n=!e||isNaN(e)?Date.now():e;return bd(n,Oa)+xd(gd,r)}var te=[];for(let e=0;e<256;++e)te.push((e+256).toString(16).slice(1));function rn(e,t=0){return(te[e[t+0]]+te[e[t+1]]+te[e[t+2]]+te[e[t+3]]+"-"+te[e[t+4]]+te[e[t+5]]+"-"+te[e[t+6]]+te[e[t+7]]+"-"+te[e[t+8]]+te[e[t+9]]+"-"+te[e[t+10]]+te[e[t+11]]+te[e[t+12]]+te[e[t+13]]+te[e[t+14]]+te[e[t+15]]).toLowerCase()}var Ed=new Uint8Array(16);function Rt(){return crypto.getRandomValues(Ed)}function Td(e,t,r){return!t&&!e&&crypto.randomUUID?crypto.randomUUID():vd(e,t,r)}function vd(e,t,r){e=e||{};let n=e.random??e.rng?.()??Rt();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,t){if(r=r||0,r<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)t[r+i]=n[i];return t}return rn(n)}var bi=Td;var Pi={};function Sd(e,t,r){let n;if(e)n=Da(e.random??e.rng?.()??Rt(),e.msecs,e.seq,t,r);else{let i=Date.now(),o=Rt();Ad(Pi,i,o),n=Da(o,Pi.msecs,Pi.seq,t,r)}return t??rn(n)}function Ad(e,t,r){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],e.msecs=t):(e.seq=e.seq+1|0,e.seq===0&&e.msecs++),e}function Da(e,t,r,n,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(!n)n=new Uint8Array(16),i=0;else if(i<0||i+16>n.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);return t??=Date.now(),r??=e[6]*127<<24|e[7]<<16|e[8]<<8|e[9],n[i++]=t/1099511627776&255,n[i++]=t/4294967296&255,n[i++]=t/16777216&255,n[i++]=t/65536&255,n[i++]=t/256&255,n[i++]=t&255,n[i++]=112|r>>>28&15,n[i++]=r>>>20&255,n[i++]=128|r>>>14&63,n[i++]=r>>>6&255,n[i++]=r<<2&255|e[10]&3,n[i++]=e[11],n[i++]=e[12],n[i++]=e[13],n[i++]=e[14],n[i++]=e[15],n}var Ei=Sd;var nn=class{#e={};constructor(){this.register("uuid",new vi),this.register("cuid",new Si),this.register("ulid",new Ai),this.register("nanoid",new Ri),this.register("product",new Ci)}snapshot(){return Object.create(this.#e,{now:{value:new Ti}})}register(t,r){this.#e[t]=r}},Ti=class{#e;generate(){return this.#e===void 0&&(this.#e=new Date),this.#e.toISOString()}},vi=class{generate(t){if(t===4)return bi();if(t===7)return Ei();throw new Error("Invalid UUID generator arguments")}},Si=class{generate(t){if(t===1)return ia();if(t===2)return hi();throw new Error("Invalid CUID generator arguments")}},Ai=class{generate(){return Na()}},Ri=class{generate(t){if(typeof t=="number")return xi(t);if(t===void 0)return xi();throw new Error("Invalid Nanoid generator arguments")}},Ci=class{generate(t,r){if(t===void 0||r===void 0)throw new Error("Invalid Product generator arguments");return Array.isArray(t)&&Array.isArray(r)?t.flatMap(n=>r.map(i=>[n,i])):Array.isArray(t)?t.map(n=>[n,r]):Array.isArray(r)?r.map(n=>[t,n]):[[t,r]]}};function lr(e,t){return e==null?e:typeof e=="string"?lr(JSON.parse(e),t):Array.isArray(e)?Cd(e,t):Rd(e,t)}function Rd(e,t){if(t.pagination){let{skip:r,take:n,cursor:i}=t.pagination;if(r!==null&&r>0||n===0||i!==null&&!St(e,i))return null}return Fa(e,t.nested)}function Fa(e,t){for(let[r,n]of Object.entries(t))e[r]=lr(e[r],n);return e}function Cd(e,t){if(t.distinct!==null){let r=t.linkingFields!==null?[...t.distinct,...t.linkingFields]:t.distinct;e=Id(e,r)}return t.pagination&&(e=kd(e,t.pagination,t.linkingFields)),t.reverse&&e.reverse(),Object.keys(t.nested).length===0?e:e.map(r=>Fa(r,t.nested))}function Id(e,t){let r=new Set,n=[];for(let i of e){let o=tt(i,t);r.has(o)||(r.add(o),n.push(i))}return n}function kd(e,t,r){if(r===null)return Ma(e,t);let n=new Map;for(let o of e){let s=tt(o,r);n.has(s)||n.set(s,[]),n.get(s).push(o)}let i=Array.from(n.entries());return i.sort(([o],[s])=>os?1:0),i.flatMap(([,o])=>Ma(o,t))}function Ma(e,{cursor:t,skip:r,take:n}){let i=t!==null?e.findIndex(a=>St(a,t)):0;if(i===-1)return[];let o=i+(r??0),s=n!==null?o+n:e.length;return e.slice(o,s)}function tt(e,t,r){let n=t.map((i,o)=>r?.[o]?e[i]!==null?r[o](e[i]):null:e[i]);return JSON.stringify(n)}function Ii(e){return typeof e=="object"&&e!==null&&e.prisma__type==="param"}function ki(e){return typeof e=="object"&&e!==null&&e.prisma__type==="generatorCall"}function Di(e,t,r,n){let i=e.args.map(o=>de(o,t,r));switch(e.type){case"rawSql":return[Dd(e.sql,i,e.argTypes)];case"templateSql":return(e.chunkable?Fd(e.fragments,i,n):[i]).map(s=>{let a=Od(e.fragments,e.placeholderFormat,s,e.argTypes);if(n!==void 0&&a.args.length>n)throw new X("The query parameter limit supported by your database is exceeded.","P2029");return a});default:V(e.type,"Invalid query type")}}function de(e,t,r){for(;Md(e);)if(Ii(e)){let n=t[e.prisma__value.name];if(n===void 0)throw new Error(`Missing value for query variable ${e.prisma__value.name}`);e.prisma__value.type==="DateTime"&&typeof n=="string"?e=new Date(n):e=n}else if(ki(e)){let{name:n,args:i}=e.prisma__value,o=r[n];if(!o)throw new Error(`Encountered an unknown generator '${n}'`);e=o.generate(...i.map(s=>de(s,t,r)))}else V(e,`Unexpected unevaluated value type: ${e}`);return Array.isArray(e)&&(e=e.map(n=>de(n,t,r))),e}function Od(e,t,r,n){let i="",o={placeholderNumber:1},s=[],a=[];for(let u of Ni(e,r,n)){if(i+=Nd(u,t,o),u.type==="stringChunk")continue;let m=Array.from(_a(u)),P=m.length;if(Gr(s,m),u.argType.arity==="tuple"){if(P%u.argType.elements.length!==0)throw new Error(`Malformed query template. Expected the number of parameters to match the tuple arity, but got ${P} parameters for a tuple of arity ${u.argType.elements.length}.`);for(let T=0;T

{let o=Oi(t,r.placeholderNumber++);return`${e.itemPrefix}${o}${e.itemSuffix}`}).join(e.itemSeparator)})`;case"parameterTupleList":return e.value.map(i=>{let o=i.map(()=>Oi(t,r.placeholderNumber++)).join(e.itemSeparator);return`${e.itemPrefix}${o}${e.itemSuffix}`}).join(e.groupSeparator);default:V(n,"Invalid fragment type")}}function Oi(e,t){return e.hasNumbering?`${e.prefix}${t}`:e.prefix}function Dd(e,t,r){return{sql:e,args:t,argTypes:r}}function Md(e){return Ii(e)||ki(e)}function*Ni(e,t,r){let n=0;for(let i of e)switch(i.type){case"parameter":{if(n>=t.length)throw new Error(`Malformed query template. Fragments attempt to read over ${t.length} parameters.`);yield{...i,value:t[n],argType:r?.[n]},n++;break}case"stringChunk":{yield i;break}case"parameterTuple":{if(n>=t.length)throw new Error(`Malformed query template. Fragments attempt to read over ${t.length} parameters.`);let o=t[n];yield{...i,value:Array.isArray(o)?o:[o],argType:r?.[n]},n++;break}case"parameterTupleList":{if(n>=t.length)throw new Error(`Malformed query template. Fragments attempt to read over ${t.length} parameters.`);let o=t[n];if(!Array.isArray(o))throw new Error("Malformed query template. Tuple list expected.");if(o.length===0)throw new Error("Malformed query template. Tuple list cannot be empty.");for(let s of o)if(!Array.isArray(s))throw new Error("Malformed query template. Tuple expected.");yield{...i,value:o,argType:r?.[n]},n++;break}}}function*_a(e){switch(e.type){case"parameter":yield e.value;break;case"stringChunk":break;case"parameterTuple":yield*e.value;break;case"parameterTupleList":for(let t of e.value)yield*t;break}}function Fd(e,t,r){let n=0,i=0;for(let s of Ni(e,t,void 0)){let a=0;for(let u of _a(s))a++;i=Math.max(i,a),n+=a}let o=[[]];for(let s of Ni(e,t,void 0))switch(s.type){case"parameter":{for(let a of o)a.push(s.value);break}case"stringChunk":break;case"parameterTuple":{let a=s.value.length,u=[];if(r&&o.length===1&&a===i&&n>r&&n-au.map(P=>[...m,P]));break}case"parameterTupleList":{let a=s.value.reduce((T,S)=>T+S.length,0),u=[],m=[],P=0;for(let T of s.value)r&&o.length===1&&a===i&&m.length>0&&n-a+P+T.length>r&&(u.push(m),m=[],P=0),m.push(T),P+=T.length;m.length>0&&u.push(m),o=o.flatMap(T=>u.map(S=>[...T,S]));break}}return o}function _d(e,t){let r=[];for(let n=0;nt.reduce((r,n,i)=>(r[e.columnNames[i]]=n,r),{}))}function La(e){return{columns:e.columnNames,types:e.columnTypes.map(t=>$d(t)),rows:e.rows.map(t=>t.map((r,n)=>ur(r,e.columnTypes[n])))}}function ur(e,t){if(e===null)return null;switch(t){case k.Int32:switch(typeof e){case"number":return Math.trunc(e);case"string":return Math.trunc(Number(e));default:throw new Error(`Cannot serialize value of type ${typeof e} as Int32`)}case k.Int32Array:if(!Array.isArray(e))throw new Error(`Cannot serialize value of type ${typeof e} as Int32Array`);return e.map(r=>ur(r,k.Int32));case k.Int64:switch(typeof e){case"number":return BigInt(Math.trunc(e));case"string":return e;default:throw new Error(`Cannot serialize value of type ${typeof e} as Int64`)}case k.Int64Array:if(!Array.isArray(e))throw new Error(`Cannot serialize value of type ${typeof e} as Int64Array`);return e.map(r=>ur(r,k.Int64));case k.Json:switch(typeof e){case"string":return JSON.parse(e);default:throw new Error(`Cannot serialize value of type ${typeof e} as Json`)}case k.JsonArray:if(!Array.isArray(e))throw new Error(`Cannot serialize value of type ${typeof e} as JsonArray`);return e.map(r=>ur(r,k.Json));case k.Boolean:switch(typeof e){case"boolean":return e;case"string":return e==="true"||e==="1";case"number":return e===1;default:throw new Error(`Cannot serialize value of type ${typeof e} as Boolean`)}case k.BooleanArray:if(!Array.isArray(e))throw new Error(`Cannot serialize value of type ${typeof e} as BooleanArray`);return e.map(r=>ur(r,k.Boolean));default:return e}}function $d(e){switch(e){case k.Int32:return"int";case k.Int64:return"bigint";case k.Float:return"float";case k.Double:return"double";case k.Text:return"string";case k.Enum:return"enum";case k.Bytes:return"bytes";case k.Boolean:return"bool";case k.Character:return"char";case k.Numeric:return"decimal";case k.Json:return"json";case k.Uuid:return"uuid";case k.DateTime:return"datetime";case k.Date:return"date";case k.Time:return"time";case k.Int32Array:return"int-array";case k.Int64Array:return"bigint-array";case k.FloatArray:return"float-array";case k.DoubleArray:return"double-array";case k.TextArray:return"string-array";case k.EnumArray:return"string-array";case k.BytesArray:return"bytes-array";case k.BooleanArray:return"bool-array";case k.CharacterArray:return"char-array";case k.NumericArray:return"decimal-array";case k.JsonArray:return"json-array";case k.UuidArray:return"uuid-array";case k.DateTimeArray:return"datetime-array";case k.DateArray:return"date-array";case k.TimeArray:return"time-array";case k.UnknownNumber:return"unknown";case k.Set:return"string";default:V(e,`Unexpected column type: ${e}`)}}function Mi(e,t,r){if(!t.every(n=>on(e,n))){let n=Ld(e,r),i=Vd(r);throw new X(n,i,r.context)}}function on(e,t){switch(t.type){case"rowCountEq":return Array.isArray(e)?e.length===t.args:e===null?t.args===0:t.args===1;case"rowCountNeq":return Array.isArray(e)?e.length!==t.args:e===null?t.args!==0:t.args!==1;case"affectedRowCountEq":return e===t.args;case"never":return!1;default:V(t,`Unknown rule type: ${t.type}`)}}function Ld(e,t){switch(t.errorIdentifier){case"RELATION_VIOLATION":return`The change you are trying to make would violate the required relation '${t.context.relation}' between the \`${t.context.modelA}\` and \`${t.context.modelB}\` models.`;case"MISSING_RECORD":return`An operation failed because it depends on one or more records that were required but not found. No record was found for ${t.context.operation}.`;case"MISSING_RELATED_RECORD":{let r=t.context.neededFor?` (needed to ${t.context.neededFor})`:"";return`An operation failed because it depends on one or more records that were required but not found. No '${t.context.model}' record${r} was found for ${t.context.operation} on ${t.context.relationType} relation '${t.context.relation}'.`}case"INCOMPLETE_CONNECT_INPUT":return`An operation failed because it depends on one or more records that were required but not found. Expected ${t.context.expectedRows} records to be connected, found only ${Array.isArray(e)?e.length:e}.`;case"INCOMPLETE_CONNECT_OUTPUT":return`The required connected records were not found. Expected ${t.context.expectedRows} records to be connected after connect operation on ${t.context.relationType} relation '${t.context.relation}', found ${Array.isArray(e)?e.length:e}.`;case"RECORDS_NOT_CONNECTED":return`The records for relation \`${t.context.relation}\` between the \`${t.context.parent}\` and \`${t.context.child}\` models are not connected.`;default:V(t,`Unknown error identifier: ${t}`)}}function Vd(e){switch(e.errorIdentifier){case"RELATION_VIOLATION":return"P2014";case"RECORDS_NOT_CONNECTED":return"P2017";case"INCOMPLETE_CONNECT_OUTPUT":return"P2018";case"MISSING_RECORD":case"MISSING_RELATED_RECORD":case"INCOMPLETE_CONNECT_INPUT":return"P2025";default:V(e,`Unknown error identifier: ${e}`)}}var qd=K("prisma:client:queryInterpreter"),dr=class e{#e;#t=new nn;#r;#i;#o;#s;#a;constructor({onQuery:t,tracingHelper:r,serializer:n,rawSerializer:i,provider:o,connectionInfo:s}){this.#e=t,this.#r=r,this.#i=n,this.#o=i??n,this.#s=o,this.#a=s}static forSql(t){return new e({onQuery:t.onQuery,tracingHelper:t.tracingHelper,serializer:$a,rawSerializer:La,provider:t.provider,connectionInfo:t.connectionInfo})}async run(t,r){let n=this.#t.snapshot(),i={...r,generators:n},o=jd(t,a=>this.interpretNode(a,i))?.catch(a=>Be(a));if(o)try{return this.#n(await o,i.scope,n).value}catch(a){Be(a)}let{value:s}=await this.interpretNode(t,i).catch(a=>Be(a));return s}async interpretNode(t,r){switch(t.type){case"value":return{value:de(t.args,r.scope,r.generators),lastInsertId:t.lastInsertId};case"seq":{let n;for(let i of t.args)n=await this.interpretNode(i,r);return n??{value:void 0}}case"let":{let n=Object.create(r.scope);for(let i of t.args.bindings){let{value:o}=await this.interpretNode(i.expr,{...r,scope:n});n[i.name]=o}return this.interpretNode(t.args.expr,{...r,scope:n})}case"concat":{let n=await Promise.all(t.args.map(i=>this.interpretNode(i,r).then(o=>o.value)));return{value:n.length>0?n.reduce((i,o)=>i.concat(Ct(o)),[]):[]}}case"sum":{let n=await Promise.all(t.args.map(i=>this.interpretNode(i,r).then(o=>o.value)));return{value:n.length>0?n.reduce((i,o)=>xe(i)+xe(o)):0}}case"execute":{let n=Di(t.args,r.scope,r.generators,this.#p());return this.#u(n.length,r,async i=>{let o=0;for(let s of n){let a=ja(s,i.sqlCommenter);o+=await this.#d(a,i.queryable,()=>i.queryable.executeRaw(sn(a)).catch(u=>t.args.type==="rawSql"?ri(u):Be(u)))}return{value:o}})}case"query":{let n=Di(t.args,r.scope,r.generators,this.#p());return this.#u(n.length,r,async i=>{let o;for(let s of n){let a=ja(s,i.sqlCommenter),u=await this.#d(a,i.queryable,()=>i.queryable.queryRaw(sn(a)).catch(m=>t.args.type==="rawSql"?ri(m):Be(m)));o===void 0?o=u:(Gr(o.rows,u.rows),o.lastInsertId=u.lastInsertId)}return{value:t.args.type==="rawSql"?this.#o(o):this.#i(o),lastInsertId:o?.lastInsertId}})}case"reverse":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args,r);return{value:Array.isArray(n)?n.reverse():n,lastInsertId:i}}case"unique":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args,r);if(!Array.isArray(n))return{value:n,lastInsertId:i};if(n.length>1)throw new Error(`Expected zero or one element, got ${n.length}`);return{value:n[0]??null,lastInsertId:i}}case"required":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args,r);if(Fi(n))throw new Error("Required value is empty");return{value:n,lastInsertId:i}}case"mapField":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.records,r);return{value:_i(n,t.args.field),lastInsertId:i}}case"join":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.parent,r);if(n===null)return{value:null,lastInsertId:i};let o=await Promise.all(t.args.children.map(async s=>({joinExpr:s,childRecords:(await this.interpretNode(s.child,r)).value})));return{value:Va(n,o,t.args.canAssumeStrictEquality),lastInsertId:i}}case"transaction":return this.#l(r,n=>this.interpretNode(t.args,n));case"dataMap":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.expr,r);return{value:ii(n,t.args.structure,t.args.enums),lastInsertId:i}}case"validate":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.expr,r);return Mi(n,t.args.rules,t.args),{value:n,lastInsertId:i}}case"if":{let{value:n}=await this.interpretNode(t.args.value,r);return on(n,t.args.rule)?await this.interpretNode(t.args.then,r):await this.interpretNode(t.args.else,r)}case"diff":{let{value:n}=await this.interpretNode(t.args.from,r),{value:i}=await this.interpretNode(t.args.to,r),o=a=>a!==null?tt(rt(a),t.args.fields):null,s=new Set(Ct(i).map(o));return{value:Ct(n).filter(a=>!s.has(o(a)))}}case"process":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.expr,r),o=sn(t.args.operations);return $i(o,r.scope,r.generators),{value:lr(n,o),lastInsertId:i}}case"initializeRecord":{let{lastInsertId:n}=await this.interpretNode(t.args.expr,r),i={};for(let[o,s]of Object.entries(t.args.fields))i[o]=qa(s,n,r.scope,r.generators);return{value:i,lastInsertId:n}}case"mapRecord":{let{value:n,lastInsertId:i}=await this.interpretNode(t.args.expr,r),o=n===null?{}:rt(n);for(let[s,a]of Object.entries(t.args.fields))o[s]=Ua(a,o[s],r.scope,r.generators);return{value:o,lastInsertId:i}}default:return this.#n(t,r.scope,r.generators)}}#n(t,r,n){switch(t.type){case"value":return{value:de(t.args,r,n),lastInsertId:t.lastInsertId};case"seq":{let i;for(let o of t.args)i=this.#n(o,r,n);return i??{value:void 0}}case"get":return{value:r[t.args.name]};case"let":{let i=Object.create(r);for(let o of t.args.bindings){let{value:s}=this.#n(o.expr,i,n);i[o.name]=s}return this.#n(t.args.expr,i,n)}case"getFirstNonEmpty":{for(let i of t.args.names){let o=r[i];if(!Fi(o))return{value:o}}return{value:[]}}case"concat":{let i=t.args.map(o=>this.#n(o,r,n).value);return{value:i.length>0?i.reduce((o,s)=>o.concat(Ct(s)),[]):[]}}case"sum":{let i=t.args.map(o=>this.#n(o,r,n).value);return{value:i.length>0?i.reduce((o,s)=>xe(o)+xe(s)):0}}case"reverse":{let{value:i,lastInsertId:o}=this.#n(t.args,r,n);return{value:Array.isArray(i)?i.reverse():i,lastInsertId:o}}case"unique":{let{value:i,lastInsertId:o}=this.#n(t.args,r,n);if(!Array.isArray(i))return{value:i,lastInsertId:o};if(i.length>1)throw new Error(`Expected zero or one element, got ${i.length}`);return{value:i[0]??null,lastInsertId:o}}case"required":{let{value:i,lastInsertId:o}=this.#n(t.args,r,n);if(Fi(i))throw new Error("Required value is empty");return{value:i,lastInsertId:o}}case"mapField":{let{value:i,lastInsertId:o}=this.#n(t.args.records,r,n);return{value:_i(i,t.args.field),lastInsertId:o}}case"join":{let{value:i,lastInsertId:o}=this.#n(t.args.parent,r,n);if(i===null)return{value:null,lastInsertId:o};let s=t.args.children.map(a=>({joinExpr:a,childRecords:this.#n(a.child,r,n).value}));return{value:Va(i,s,t.args.canAssumeStrictEquality),lastInsertId:o}}case"dataMap":{let{value:i,lastInsertId:o}=this.#n(t.args.expr,r,n);return{value:ii(i,t.args.structure,t.args.enums),lastInsertId:o}}case"validate":{let{value:i,lastInsertId:o}=this.#n(t.args.expr,r,n);return Mi(i,t.args.rules,t.args),{value:i,lastInsertId:o}}case"if":{let{value:i}=this.#n(t.args.value,r,n);return on(i,t.args.rule)?this.#n(t.args.then,r,n):this.#n(t.args.else,r,n)}case"unit":return{value:void 0};case"diff":{let{value:i}=this.#n(t.args.from,r,n),{value:o}=this.#n(t.args.to,r,n),s=u=>u!==null?tt(rt(u),t.args.fields):null,a=new Set(Ct(o).map(s));return{value:Ct(i).filter(u=>!a.has(s(u)))}}case"process":{let{value:i,lastInsertId:o}=this.#n(t.args.expr,r,n),s=sn(t.args.operations);return $i(s,r,n),{value:lr(i,s),lastInsertId:o}}case"initializeRecord":{let{lastInsertId:i}=this.#n(t.args.expr,r,n),o={};for(let[s,a]of Object.entries(t.args.fields))o[s]=qa(a,i,r,n);return{value:o,lastInsertId:i}}case"mapRecord":{let{value:i,lastInsertId:o}=this.#n(t.args.expr,r,n),s=i===null?{}:rt(i);for(let[a,u]of Object.entries(t.args.fields))s[a]=Ua(u,s[a],r,n);return{value:s,lastInsertId:o}}default:V(t,`Unexpected node type: ${t.type}`)}}#u(t,r,n){return t<=1?n(r):this.#l(r,n)}async#l(t,r){if(!t.transactionManager.enabled)return r(t);let n=t.transactionManager.manager,i=await n.startInternalTransaction(),o=await n.getTransaction(i,"query");try{let s=await r({...t,queryable:o,transactionManager:{enabled:!1}});return await n.commitTransaction(i.id),s}catch(s){try{await n.rollbackTransaction(i.id)}catch(a){qd("failed to roll back an internal transaction",a)}throw s}}#p(){return this.#a?.maxBindValues!==void 0?this.#a.maxBindValues:this.#c()}#c(){if(this.#s!==void 0)switch(this.#s){case"cockroachdb":case"postgres":case"postgresql":case"prisma+postgres":return 32766;case"mysql":return 65535;case"sqlite":return 999;case"sqlserver":return 2098;case"mongodb":return;default:V(this.#s,`Unexpected provider: ${this.#s}`)}}#d(t,r,n){return Wr({query:t,execute:n,provider:this.#s??r.provider,tracingHelper:this.#r,onQuery:this.#e})}};function Fi(e){return Array.isArray(e)?e.length===0:e==null}function Ct(e){return Array.isArray(e)?e:[e]}function xe(e){if(typeof e=="number")return e;if(typeof e=="string")return Number(e);throw new Error(`Expected number, got ${typeof e}`)}function rt(e){if(typeof e=="object"&&e!==null)return e;throw new Error(`Expected object, got ${typeof e}`)}function _i(e,t){return Array.isArray(e)?e.map(r=>_i(r,t)):typeof e=="object"&&e!==null?e[t]??null:e}function Va(e,t,r){for(let{joinExpr:n,childRecords:i}of t){let o=n.on.map(([P])=>P),s=n.on.map(([,P])=>P),a={},u=Array.isArray(e)?e:[e];for(let P of u){let T=rt(P),S=tt(T,o);a[S]||(a[S]=[]),a[S].push(T),n.isRelationUnique?T[n.parentField]=null:T[n.parentField]=[]}let m=r?void 0:Ud(u,o);for(let P of Array.isArray(i)?i:[i]){if(P===null)continue;let T=tt(rt(P),s,m);for(let S of a[T]??[])n.isRelationUnique?S[n.parentField]=P:S[n.parentField].push(P)}}return e}function Ud(e,t){function r(o){switch(o){case"number":return Number;case"string":return String;case"boolean":return Boolean;case"bigint":return BigInt;default:return}}let n=Array.from({length:t.length}),i=0;for(let o of e){let s=rt(o);for(let[a,u]of t.entries())if(s[u]!==null&&n[a]===void 0){let m=r(typeof s[u]);m!==void 0&&(n[a]=m),i++}if(i===t.length)break}return n}function qa(e,t,r,n){switch(e.type){case"value":return de(e.value,r,n);case"lastInsertId":return t;default:V(e,`Unexpected field initializer type: ${e.type}`)}}function Ua(e,t,r,n){switch(e.type){case"set":return de(e.value,r,n);case"add":return xe(t)+xe(de(e.value,r,n));case"subtract":return xe(t)-xe(de(e.value,r,n));case"multiply":return xe(t)*xe(de(e.value,r,n));case"divide":{let i=xe(t),o=xe(de(e.value,r,n));return o===0?null:i/o}default:V(e,`Unexpected field operation type: ${e.type}`)}}function jd(e,t){let r=pr(e);if(r)return t(r).then(n=>{let i={type:"value",args:n.value,lastInsertId:n.lastInsertId},o=cr(e,r,i);if(!o)throw new Error("Could not substitute the evaluated impure node into the query plan");return o})}function cr(e,t,r){if(e===t)return r;switch(e.type){case"seq":case"sum":case"concat":{for(let n=0;ns===n?i:o)}}return}case"dataMap":case"validate":case"initializeRecord":case"mapRecord":case"process":{let n=cr(e.args.expr,t,r);return n&&{...e,args:{...e.args,expr:n}}}case"mapField":{let n=cr(e.args.records,t,r);return n&&{...e,args:{...e.args,records:n}}}case"reverse":case"unique":case"required":{let n=cr(e.args,t,r);return n&&{...e,args:n}}default:return}}function pr(e){switch(e.type){case"query":case"execute":return e;case"seq":case"sum":case"concat":{let t;for(let r of e.args){let n=pr(r);if(n===null)return null;if(n){if(t)return null;t=n}}return t}case"dataMap":case"validate":case"initializeRecord":case"mapRecord":case"process":return pr(e.args.expr);case"mapField":return pr(e.args.records);case"reverse":case"unique":case"required":return pr(e.args);case"let":case"join":case"diff":case"if":case"transaction":return null;case"value":case"get":case"getFirstNonEmpty":case"unit":return;default:V(e,`Unexpected node type: ${e.type}`)}}function ja(e,t){if(!t||t.plugins.length===0)return e;let r=Ys(t.plugins,{query:t.queryInfo,sql:e.sql});return r?{...e,sql:ea(e.sql,r)}:e}function $i(e,t,r){let n=e.pagination?.cursor;if(n)for(let[i,o]of Object.entries(n))n[i]=de(o,t,r);for(let i of Object.values(e.nested))$i(i,t,r)}function sn(e){return ge(e)}function Ba(e){return new Li(e).deserialize()}function Bd(e){return Buffer.from(e,"base64url")}var Li=class{#e;#t;#r=0;constructor(t){this.#e=t;let r=Bd(t.graph);this.#t=new DataView(r.buffer,r.byteOffset,r.byteLength)}deserialize(){let{inputNodeCount:t,outputNodeCount:r,rootCount:n}=this.#n(),i=this.#u(t),o=this.#l(r),s=this.#p(n);return{strings:this.#e.strings,inputNodes:i,outputNodes:o,roots:s}}#i(){let t=0,r=0,n;do n=this.#t.getUint8(this.#r++),t|=(n&127)<=128);return t}#o(){let t=this.#i();return t===0?void 0:t-1}#s(){let t=this.#t.getUint8(this.#r);return this.#r+=1,t}#a(){let t=this.#t.getUint16(this.#r,!0);return this.#r+=2,t}#n(){let t=this.#i(),r=this.#i(),n=this.#i();return{inputNodeCount:t,outputNodeCount:r,rootCount:n}}#u(t){let r=[];for(let n=0;n=this.#e.inputNodes.length))return{id:t}}outputNode(t){if(!(t===void 0||t<0||t>=this.#e.outputNodes.length))return{id:t}}inputEdge(t,r){if(!t)return;let n=this.#e.inputNodes[t.id];if(!n)return;let i=this.#t.get(r);if(i===void 0)return;let o=n.edges[i];if(o)return{flags:o.flags,childNodeId:o.childNodeId,scalarMask:o.scalarMask??0,enumNameIndex:o.enumNameIndex}}outputEdge(t,r){if(!t)return;let n=this.#e.outputNodes[t.id];if(!n)return;let i=this.#t.get(r);if(i===void 0)return;let o=n.edges[i];if(o)return{argsNodeId:o.argsNodeId,outputNodeId:o.outputNodeId}}enumValues(t){if(t?.enumNameIndex===void 0)return;let r=this.#e.strings[t.enumNameIndex];if(r)return this.#r(r)}getString(t){return this.#e.strings[t]}},Ne={ParamScalar:1,ParamEnum:2,ParamListScalar:4,ParamListEnum:8,ListObject:16,Object:32},re={String:1,Int:2,BigInt:4,Float:8,Decimal:16,Boolean:32,DateTime:64,Json:128,Bytes:256};function De(e,t){return(e.flags&t)!==0}function Ge(e){return e.scalarMask}var Qd=new Set(["DateTime","Decimal","BigInt","Bytes","Json","Raw"]);function an(e){if(e==null)return{kind:"null"};if(typeof e=="string")return{kind:"primitive",value:e};if(typeof e=="number")return{kind:"primitive",value:e};if(typeof e=="boolean")return{kind:"primitive",value:e};if(Array.isArray(e))return{kind:"array",items:e};if(typeof e=="object"){let t=e;if("$type"in t&&typeof t.$type=="string"){let r=t.$type;return Qd.has(r)?{kind:"taggedScalar",tag:r,value:t.value}:{kind:"structural",value:t.value}}return{kind:"object",entries:t}}return{kind:"structural",value:e}}function Qa(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!("$type"in e)}function Ja(e){return typeof e=="object"&&e!==null&&"$type"in e&&typeof e.$type=="string"}function Vi(e,t){let r=new ln(t),n=e.modelName?`${e.modelName}.${e.action}`:e.action,i=t.root(n);return{parameterizedQuery:{...e,query:r.parameterizeFieldSelection(e.query,i?.argsNodeId,i?.outputNodeId)},placeholderValues:r.getPlaceholderValues()}}function qi(e,t){let r=new ln(t),n=[];for(let i=0;itypeof o=="string"&&Object.hasOwn(i,o))){let o={type:"List",inner:{type:"Enum"}};return this.#o(t,o)}}if(De(n,Ne.ParamListScalar)&&t.every(o=>Zd(o,n))&&t.length>0){let o=t.map(u=>Xd(u)),a={type:"List",inner:Wd(t)};return this.#o(o,a)}if(De(n,Ne.ListObject)){let i=this.#e.inputNode(n.childNodeId);if(i)return t.map(o=>Qa(o)?this.#s(o,i):o)}return r}#p(t,r){if(De(r,Ne.Object)){let i=this.#e.inputNode(r.childNodeId);if(i)return this.#s(t,i)}if(Ge(r)&re.Json){let i=Se(Ae(t)),o={type:"Json"};return this.#o(i,o)}return t}#c(t,r){if(!t||!r)return t;let n={};for(let[i,o]of Object.entries(t)){if(i==="$scalars"||i==="$composites"||typeof o=="boolean"){n[i]=o;continue}let s=this.#e.outputEdge(r,i);if(s){let a=o,u=this.#e.inputNode(s.argsNodeId),m=this.#e.outputNode(s.outputNodeId),P={selection:a.selection?this.#c(a.selection,m):{}};a.arguments&&(P.arguments=this.#s(a.arguments,u)),n[i]=P}else n[i]=o}return n}};function Ga(e,t){return{$type:"Param",value:{name:e,...t}}}function za(e){return e.type==="List"?`List<${za(e.inner)}>`:e.type}function Jd(e){return ArrayBuffer.isView(e)?Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("base64"):JSON.stringify(e)}function Gd(e,t){let r=za(t),n=Jd(e);return`${r}:${n}`}var zd=2**31-1,Hd=-(2**31);function Ui(e){switch(typeof e){case"boolean":return{type:"Boolean"};case"number":return Number.isInteger(e)?Hd<=e&&e<=zd?{type:"Int"}:{type:"BigInt"}:{type:"Float"};case"string":return{type:"String"};default:throw new Error("unreachable")}}function Ha({type:e},t){switch(e){case"Boolean":return(t&re.Boolean)!==0;case"Int":return(t&(re.Int|re.BigInt|re.Float))!==0;case"BigInt":return(t&re.BigInt)!==0;case"Float":return(t&re.Float)!==0;case"String":return(t&re.String)!==0;default:return!1}}function Wa(e){switch(e){case"BigInt":case"Bytes":case"DateTime":case"Json":return{type:e};case"Decimal":return{type:"Float"};default:return}}function Wd(e){let t={type:"Any"};for(let r of e){let n=an(r),i;switch(n.kind){case"primitive":i=Ui(n.value);break;case"taggedScalar":i=Wa(n.tag)??{type:"Any"};break;default:return{type:"Any"}}t=Kd(t,i)}return t}function Kd(e,t){if(e.type==="Any")return t;if(t.type==="Any"||e.type===t.type)return e;let r={Int:0,BigInt:1,Float:2},n=r[e.type],i=r[t.type];return n!==void 0&&i!==void 0?n>=i?e:t:{type:"Any"}}function Ka(e,t){switch(e){case"DateTime":return(t&re.DateTime)!==0;case"Decimal":return(t&re.Decimal)!==0;case"BigInt":return(t&re.BigInt)!==0;case"Bytes":return(t&re.Bytes)!==0;case"Json":return(t&re.Json)!==0;default:return!1}}function Zd(e,t){let r=an(e);switch(r.kind){case"structural":return!1;case"null":return!1;case"primitive":{let n=Ui(r.value),i=Ge(t);return i!==0&&Ha(n,i)}case"taggedScalar":{let n=Ge(t);return n!==0&&Ka(r.tag,n)}default:return!1}}function Xd(e){return Ja(e)?Za(e):e}function Za(e){return e.value}async function Yd(){return globalThis.crypto??await import("node:crypto")}async function Xa(){return(await Yd()).randomUUID()}async function Ya(e,t){return new Promise(r=>{e.addEventListener(t,r,{once:!0})})}var ue=class extends X{name="TransactionManagerError";constructor(t,r){super("Transaction API error: "+t,"P2028",r)}},nt=class extends ue{constructor(){super("Transaction not found. Transaction ID is invalid, refers to an old closed transaction Prisma doesn't have information about anymore, or was obtained before disconnecting.")}},un=class extends ue{constructor(t){super(`Transaction already closed: A ${t} cannot be executed on a committed transaction.`)}},cn=class extends ue{constructor(t){super(`Transaction already closed: A ${t} cannot be executed on a transaction that was rolled back.`)}},fr=class extends ue{constructor(){super("Unable to start a transaction in the given time.")}},pn=class extends ue{constructor(t,{timeout:r,timeTaken:n}){super(`A ${t} cannot be executed on an expired transaction. The timeout for this transaction was ${r} ms, however ${n} ms passed since the start of the transaction. Consider increasing the interactive transaction timeout or doing less work in the transaction.`,{operation:t,timeout:r,timeTaken:n})}},Me=class extends ue{constructor(t){super(`Internal Consistency Error: ${t}`)}},dn=class extends ue{constructor(t){super(`Invalid isolation level: ${t}`,{isolationLevel:t})}};var em=100,tm=2e3;function rm(){let e,t=new Promise(r=>{e=r});return{abortController:new AbortController,settled:t,markSettled:e}}var it=K("prisma:client:transactionManager"),nm=()=>({sql:"COMMIT",args:[],argTypes:[]}),el=()=>({sql:"ROLLBACK",args:[],argTypes:[]}),im=()=>({sql:'-- Implicit "COMMIT" query via underlying driver',args:[],argTypes:[]}),om=()=>({sql:'-- Implicit "ROLLBACK" query via underlying driver',args:[],argTypes:[]}),gr=class{transactions=new Map;closedTransactions=[];#e=new Set;driverAdapter;transactionOptions;tracingHelper;#t;#r;constructor({driverAdapter:t,transactionOptions:r,tracingHelper:n,onQuery:i,provider:o}){this.driverAdapter=t,this.transactionOptions=r,this.tracingHelper=n,this.#t=i,this.#r=o}async startInternalTransaction(t){let r=t!==void 0?this.#y(t):{};return await this.tracingHelper.runInChildSpan("start_transaction",()=>this.#i(r))}async startTransaction(t){let r=t!==void 0?this.#y(t):this.transactionOptions;return await this.tracingHelper.runInChildSpan("start_transaction",()=>this.#i(r))}async#i(t){if(t.newTxId)return await this.#d(t.newTxId,"start",async o=>{if(o.status!=="running")throw new Me(`Transaction in invalid state ${o.status} when starting a nested transaction.`);if(!o.transaction)throw new Me("Transaction missing underlying driver transaction when starting a nested transaction.");o.depth+=1;let s=this.#a(o);o.savepoints.push(s);try{await this.#n(o.transaction)(s)}catch(a){throw o.depth-=1,o.savepoints.pop(),a}return{id:o.id}});let r=rm(),{abortController:n}=r;this.#e.add(r);let i;try{let o={id:await Xa(),status:"waiting",timer:void 0,timeout:t.timeout,startedAt:Date.now(),transaction:void 0,operationQueue:Promise.resolve(),depth:1,savepoints:[],savepointCounter:0};if(n.signal.aborted)throw new fr;let s=tl(()=>n.abort(),t.maxWait);s?.unref?.();let a=this.driverAdapter.startTransaction(t.isolationLevel).catch(Be);switch(o.transaction=await Promise.race([a.finally(()=>clearTimeout(s)),Ya(n.signal,"abort").then(()=>{})]),this.transactions.set(o.id,o),o.status){case"waiting":if(n.signal.aborted)throw o.transaction=void 0,i=this.#o(a),await this.#f(o,"timed_out"),new fr;return o.status="running",o.startedAt=Date.now(),o.timer=this.#c(o.id,t.timeout),{id:o.id};case"timed_out":case"running":case"committed":case"rolled_back":throw new Me(`Transaction in invalid state ${o.status} although it just finished startup.`);default:return V(o.status,"Unknown transaction status.")}}finally{this.#e.delete(r),i?i.finally(r.markSettled):r.markSettled()}}async#o(t){try{let r=await t;if(r.options.usePhantomQuery)await r.rollback();else try{await r.executeRaw(el())}finally{await r.rollback()}}catch(r){it("error in discarded transaction:",r)}}async commitTransaction(t){return await this.tracingHelper.runInChildSpan("commit_transaction",async()=>{await this.#d(t,"commit",async r=>{if(r.depth>1){if(!r.transaction)throw new nt;let n=r.savepoints.at(-1);if(!n)throw new Me(`Missing savepoint for nested commit. Depth: ${r.depth}, transactionId: ${r.id}`);try{await this.#l(r.transaction,n)}finally{r.savepoints.pop(),r.depth-=1}return}await this.#f(r,"committed")})})}async rollbackTransaction(t){return await this.tracingHelper.runInChildSpan("rollback_transaction",async()=>{await this.#d(t,"rollback",async r=>{if(r.depth>1){if(!r.transaction)throw new nt;let n=r.savepoints.at(-1);if(!n)throw new Me(`Missing savepoint for nested rollback. Depth: ${r.depth}, transactionId: ${r.id}`);try{await this.#u(r.transaction)(n),await this.#l(r.transaction,n)}finally{r.savepoints.pop(),r.depth-=1}return}await this.#f(r,"rolled_back")})})}async getTransaction(t,r){let n=this.#s(t.id,r);if(n.status==="closing"&&(await n.closing,n=this.#s(t.id,r)),!n.transaction)throw new nt;return n.transaction}#s(t,r){let n=this.transactions.get(t);if(!n){let i=this.closedTransactions.find(o=>o.id===t);if(i)switch(it("Transaction already closed.",{transactionId:t,status:i.status}),i.status){case"closing":case"waiting":case"running":throw new Me("Active transaction found in closed transactions list.");case"committed":throw new un(r);case"rolled_back":throw new cn(r);case"timed_out":throw new pn(r,{timeout:i.timeout,timeTaken:Date.now()-i.startedAt})}else throw it("Transaction not found.",t),new nt}if(["committed","rolled_back","timed_out"].includes(n.status))throw new Me("Closed transaction found in active transactions map.");return n}async cancelAllTransactions(){let t=[...this.#e];for(let{abortController:r}of t)r.abort();await Promise.allSettled([...[...this.transactions.values()].map(r=>this.#m(r,async()=>{let n=this.transactions.get(r.id);n&&await this.#f(n,"rolled_back")})),...t.map(({settled:r})=>sm(r,tm))])}#a(t){return`prisma_sp_${t.savepointCounter++}`}#n(t){if(t.createSavepoint)return t.createSavepoint.bind(t);throw new ue(`Nested transactions are not supported by adapter "${t.adapterName}" (${t.provider}): createSavepoint is not implemented.`)}#u(t){if(t.rollbackToSavepoint)return t.rollbackToSavepoint.bind(t);throw new ue(`Nested transactions are not supported by adapter "${t.adapterName}" (${t.provider}): rollbackToSavepoint is not implemented.`)}async#l(t,r){t.releaseSavepoint&&await t.releaseSavepoint(r)}#p(t){it("Transaction already committed or rolled back when timeout happened.",t)}#c(t,r){let n=Date.now(),i=tl(async()=>{try{it("Transaction timed out.",{transactionId:t,timeoutStartedAt:n,timeout:r});let o=this.transactions.get(t);if(!o){this.#p(t);return}await this.#m(o,async()=>{let s=this.transactions.get(t);s&&["running","waiting"].includes(s.status)?await this.#f(s,"timed_out"):this.#p(t)})}catch(o){it("Error while closing timed-out transaction.",{transactionId:t,error:o})}},r);return i?.unref?.(),i}async#d(t,r,n){let i=this.#s(t,r);return await this.#m(i,async()=>{let o=this.#s(t,r);return await n(o)})}async#m(t,r){let n=t.operationQueue,i;t.operationQueue=new Promise(o=>{i=o}),await n;try{return await r()}finally{i()}}async#f(t,r){let n=async()=>{it("Closing transaction.",{transactionId:t.id,status:r});try{if(t.transaction&&r==="committed")if(t.transaction.options.usePhantomQuery)await this.#g(im(),t.transaction,()=>t.transaction.commit());else{let i=nm();await this.#g(i,t.transaction,()=>t.transaction.executeRaw(i)).then(()=>t.transaction.commit(),o=>{let s=()=>Promise.reject(o);return t.transaction.rollback().then(s,s)})}else if(t.transaction)if(t.transaction.options.usePhantomQuery)await this.#g(om(),t.transaction,()=>t.transaction.rollback());else{let i=el();try{await this.#g(i,t.transaction,()=>t.transaction.executeRaw(i))}finally{await t.transaction.rollback()}}}finally{t.status=r,clearTimeout(t.timer),t.timer=void 0,this.transactions.delete(t.id),this.closedTransactions.push(t),this.closedTransactions.length>em&&this.closedTransactions.shift()}};t.status==="closing"?(await t.closing,this.#s(t.id,r==="committed"?"commit":"rollback")):await Object.assign(t,{status:"closing",reason:r,closing:n()}).closing}#y(t){if(!t.timeout)throw new ue("timeout is required");if(!t.maxWait)throw new ue("maxWait is required");if(t.isolationLevel==="SNAPSHOT")throw new dn(t.isolationLevel);return{...t,timeout:t.timeout,maxWait:t.maxWait}}#g(t,r,n){return Wr({query:t,execute:n,provider:this.#r??r.provider,tracingHelper:this.tracingHelper,onQuery:this.#t})}};function tl(e,t){return t!==void 0?setTimeout(e,t):void 0}function sm(e,t){let r,n=new Promise(i=>{r=setTimeout(i,t),r?.unref?.()});return Promise.race([e,n]).finally(()=>clearTimeout(r))}var ne=require("@prisma/client-runtime-utils");var mn="7.10.0";var rl={bigint:"bigint",date:"datetime",decimal:"decimal",bytes:"bytes"};function il(e){let t;try{t=JSON.parse(e)}catch(i){throw new Error(`Received invalid serialized parameters: ${i.message}`)}if(!Array.isArray(t))throw new Error("Received invalid serialized parameters: expected an array");let r=t.map(i=>ol(i)),n=t.map(i=>lm(i));return{args:r,argTypes:n}}function ol(e){if(Array.isArray(e))return e.map(t=>ol(t));if(typeof e=="object"&&e!==null&&"prisma__value"in e){if(!("prisma__type"in e))throw new Error("Invalid serialized parameter, prisma__type should be present when prisma__value is present");return`${e.prisma__value}`}return typeof e=="object"&&e!==null?JSON.stringify(e):e}function lm(e){return Array.isArray(e)?{scalarType:e.length>0?nl(e[0]):"unknown",arity:"list"}:{scalarType:nl(e),arity:"scalar"}}function nl(e){return typeof e=="object"&&e!==null&&"prisma__type"in e&&typeof e.prisma__type=="string"&&e.prisma__type in rl?rl[e.prisma__type]:typeof e=="number"?"decimal":typeof e=="string"?"string":"unknown"}function sl(e,t){return{batch:e,transaction:t?.kind==="batch"?{isolationLevel:t.options.isolationLevel}:void 0}}function al(e){return e?e.replace(/"(?:[^"\\]|\\.)*"/g,'"X"').replace(/[\s:\[]([+-]?([0-9]*[.])?[0-9]+)/g,t=>`${t[0]}5`):""}function ll(e){return e.split(` +`).map(t=>t.replace(/^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)\s*/,"").replace(/\+\d+\s*ms$/,"")).join(` +`)}var ul=Pe(Ro());function cl({title:e,user:t="prisma",repo:r="prisma",template:n="bug_report.yml",body:i}){return(0,ul.default)({user:t,repo:r,template:n,title:e,body:i})}function pl({version:e,binaryTarget:t,title:r,description:n,engineVersion:i,database:o,query:s}){let a=go(6e3-(s?.length??0)),u=ll(ut(a)),m=n?`# Description +\`\`\` +${n} +\`\`\``:"",P=ut(`Hi Prisma Team! My Prisma Client just crashed. This is the report: +## Versions + +| Name | Version | +|-----------------|--------------------| +| Node | ${process.version?.padEnd(19)}| +| OS | ${t?.padEnd(19)}| +| Prisma Client | ${e?.padEnd(19)}| +| Query Engine | ${i?.padEnd(19)}| +| Database | ${o?.padEnd(19)}| + +${m} + +## Logs +\`\`\` +${u} +\`\`\` + +## Client Snippet +\`\`\`ts +// PLEASE FILL YOUR CODE SNIPPET HERE +\`\`\` + +## Schema +\`\`\`prisma +// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE +\`\`\` + +## Prisma Engine Query +\`\`\` +${s?al(s):""} +\`\`\` +`),T=cl({title:r,body:P});return`${r} + +This is a non-recoverable error which probably happens when the Prisma Query Engine has a panic. + +${Mt(T)} + +If you want the Prisma team to look into it, please open the link above \u{1F64F} +To increase the chance of success, please post your schema and a snippet of +how you used Prisma Client in the issue. +`}var fn=class e{#e;#t;#r;#i;#o;constructor(t,r,n){this.#e=t,this.#t=r,this.#r=n,this.#i=r.getConnectionInfo?.(),this.#o=dr.forSql({onQuery:this.#e.onQuery,tracingHelper:this.#e.tracingHelper,provider:this.#e.provider,connectionInfo:this.#i})}static async connect(t){let r,n;try{r=await t.driverAdapterFactory.connect(),n=new gr({driverAdapter:r,transactionOptions:t.transactionOptions,tracingHelper:t.tracingHelper,onQuery:t.onQuery,provider:t.provider})}catch(i){throw await r?.dispose(),i}return new e(t,r,n)}getConnectionInfo(){let t=this.#i??{supportsRelationJoins:!1};return Promise.resolve({provider:this.#t.provider,connectionInfo:t})}async execute({plan:t,placeholderValues:r,transaction:n,batchIndex:i,queryInfo:o}){let s=n?await this.#r.getTransaction(n,i!==void 0?"batch query":"query"):this.#t;return await this.#o.run(t,{queryable:s,transactionManager:n?{enabled:!1}:{enabled:!0,manager:this.#r},scope:r,sqlCommenter:this.#e.sqlCommenters&&{plugins:this.#e.sqlCommenters,queryInfo:o}})}async startTransaction(t){return{...await this.#r.startTransaction(t),payload:void 0}}async commitTransaction(t){await this.#r.commitTransaction(t.id)}async rollbackTransaction(t){await this.#r.rollbackTransaction(t.id)}async disconnect(){try{await this.#r.cancelAllTransactions()}finally{await this.#t.dispose()}}apiKey(){return null}};var gn=class{#e;#t;#r;constructor(t=1e3){this.#e=new Map,this.#t=new Map,this.#r=t}getSingle(t){let r=this.#e.get(t);return r&&(this.#e.delete(t),this.#e.set(t,r)),r}setSingle(t,r){if(this.#e.has(t)){this.#e.delete(t),this.#e.set(t,r);return}if(this.#e.size>=this.#r){let n=this.#e.keys().next().value;n!==void 0&&this.#e.delete(n)}this.#e.set(t,r)}getBatch(t){let r=this.#t.get(t);return r&&(this.#t.delete(t),this.#t.set(t,r)),r}setBatch(t,r){if(this.#t.has(t)){this.#t.delete(t),this.#t.set(t,r);return}if(this.#t.size>=this.#r){let n=this.#t.keys().next().value;n!==void 0&&this.#t.delete(n)}this.#t.set(t,r)}clear(){this.#e.clear(),this.#t.clear()}get size(){return this.#e.size+this.#t.size}get singleCacheSize(){return this.#e.size}get batchCacheSize(){return this.#t.size}};var hl=require("@prisma/client-runtime-utils");var yn=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function dl(e,t,r){let n=r||{},i=n.encode||encodeURIComponent;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!yn.test(e))throw new TypeError("argument name is invalid");let o=i(t);if(o&&!yn.test(o))throw new TypeError("argument val is invalid");let s=e+"="+o;if(n.maxAge!==void 0&&n.maxAge!==null){let a=n.maxAge-0;if(Number.isNaN(a)||!Number.isFinite(a))throw new TypeError("option maxAge is invalid");s+="; Max-Age="+Math.floor(a)}if(n.domain){if(!yn.test(n.domain))throw new TypeError("option domain is invalid");s+="; Domain="+n.domain}if(n.path){if(!yn.test(n.path))throw new TypeError("option path is invalid");s+="; Path="+n.path}if(n.expires){if(!um(n.expires)||Number.isNaN(n.expires.valueOf()))throw new TypeError("option expires is invalid");s+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(s+="; HttpOnly"),n.secure&&(s+="; Secure"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():n.priority){case"low":{s+="; Priority=Low";break}case"medium":{s+="; Priority=Medium";break}case"high":{s+="; Priority=High";break}default:throw new TypeError("option priority is invalid")}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:{s+="; SameSite=Strict";break}case"lax":{s+="; SameSite=Lax";break}case"strict":{s+="; SameSite=Strict";break}case"none":{s+="; SameSite=None";break}default:throw new TypeError("option sameSite is invalid")}return n.partitioned&&(s+="; Partitioned"),s}function um(e){return Object.prototype.toString.call(e)==="[object Date]"||e instanceof Date}function ml(e,t){let r=(e||"").split(";").filter(u=>typeof u=="string"&&!!u.trim()),n=r.shift()||"",i=cm(n),o=i.name,s=i.value;try{s=t?.decode===!1?s:(t?.decode||decodeURIComponent)(s)}catch{}let a={name:o,value:s};for(let u of r){let m=u.split("="),P=(m.shift()||"").trimStart().toLowerCase(),T=m.join("=");switch(P){case"expires":{a.expires=new Date(T);break}case"max-age":{a.maxAge=Number.parseInt(T,10);break}case"secure":{a.secure=!0;break}case"httponly":{a.httpOnly=!0;break}case"samesite":{a.sameSite=T;break}default:a[P]=T}}return a}function cm(e){let t="",r="",n=e.split("=");return n.length>1?(t=n.shift(),r=n.join("=")):r=e,{name:t,value:r}}var hn=class extends Error{clientVersion;cause;constructor(t,r){super(t),this.clientVersion=r.clientVersion,this.cause=r.cause}get[Symbol.toStringTag](){return this.name}};var wn=class extends hn{isRetryable;constructor(t,r){super(t,r),this.isRetryable=r.isRetryable??!0}};function fl(e,t){return{...e,isRetryable:t}}var ot=class extends wn{name="InvalidDatasourceError";code="P6001";constructor(t,r){super(t,fl(r,!1))}};Bt(ot,"InvalidDatasourceError");function gl(e){let t={clientVersion:e.clientVersion},r;try{r=new URL(e.accelerateUrl)}catch(u){let m=u.message;throw new ot(`Error validating \`accelerateUrl\`, the URL cannot be parsed, reason: ${m}`,t)}let{protocol:n,searchParams:i}=r;if(n!=="prisma:"&&n!==Er)throw new ot("Error validating `accelerateUrl`: the URL must start with the protocol `prisma://` or `prisma+postgres://`",t);let o=i.get("api_key");if(o===null||o.length<1)throw new ot("Error validating `accelerateUrl`: the URL must contain a valid API key",t);let s=Dn(r)?"http:":"https:";process.env.TEST_CLIENT_ENGINE_REMOTE_EXECUTOR&&r.searchParams.has("use_http")&&(s="http:");let a=new URL(r.href.replace(n,s));return{apiKey:o,url:a}}var yl=Pe(wo()),xn=class{apiKey;tracingHelper;logLevel;logQueries;engineHash;constructor({apiKey:t,tracingHelper:r,logLevel:n,logQueries:i,engineHash:o}){this.apiKey=t,this.tracingHelper=r,this.logLevel=n,this.logQueries=i,this.engineHash=o}build({traceparent:t,transactionId:r}={}){let n={Accept:"application/json",Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json","Prisma-Engine-Hash":this.engineHash,"Prisma-Engine-Version":yl.enginesVersion};this.tracingHelper.isEnabled()&&(n.traceparent=t??this.tracingHelper.getTraceParent()),r&&(n["X-Transaction-Id"]=r);let i=this.#e();return i.length>0&&(n["X-Capture-Telemetry"]=i.join(", ")),n}#e(){let t=[];return this.tracingHelper.isEnabled()&&t.push("tracing"),this.logLevel&&t.push(this.logLevel),this.logQueries&&t.push("query"),t}};function pm(e){return e[0]*1e3+e[1]/1e6}function ji(e){return new Date(pm(e))}var wl=K("prisma:client:clientEngine:remoteExecutor"),bn=class{#e;#t;#r;#i;#o;#s;constructor(t){this.#e=t.clientVersion,this.#i=t.logEmitter,this.#o=t.tracingHelper,this.#s=t.sqlCommenters;let{url:r,apiKey:n}=gl({clientVersion:t.clientVersion,accelerateUrl:t.accelerateUrl});this.#r=new Bi(r),this.#t=new xn({apiKey:n,engineHash:t.clientVersion,logLevel:t.logLevel,logQueries:t.logQueries,tracingHelper:t.tracingHelper})}async getConnectionInfo(){return await this.#a({path:"/connection-info",method:"GET"})}async execute({plan:t,placeholderValues:r,batchIndex:n,model:i,operation:o,transaction:s,customFetch:a,queryInfo:u}){let m=u&&this.#s?.length?Hr(this.#s,{query:u}):void 0;return(await this.#a({path:s?`/transaction/${s.id}/query`:"/query",method:"POST",body:{model:i,operation:o,plan:t,params:r,comments:m&&Object.keys(m).length>0?m:void 0},batchRequestIdx:n,fetch:a})).data}async startTransaction(t){return{...await this.#a({path:"/transaction/start",method:"POST",body:t}),payload:void 0}}async commitTransaction(t){await this.#a({path:`/transaction/${t.id}/commit`,method:"POST"})}async rollbackTransaction(t){await this.#a({path:`/transaction/${t.id}/rollback`,method:"POST"})}disconnect(){return Promise.resolve()}apiKey(){return this.#t.apiKey}async#a({path:t,method:r,body:n,fetch:i=globalThis.fetch,batchRequestIdx:o}){let s=await this.#r.request({method:r,path:t,headers:this.#t.build(),body:n,fetch:i});s.ok||await this.#n(s,o);let a=await s.json();return typeof a.extensions=="object"&&a.extensions!==null&&this.#u(a.extensions),a}async#n(t,r){let n=t.headers.get("Prisma-Error-Code"),i=await t.text(),o,s=i;try{o=JSON.parse(i)}catch{o={}}typeof o.code=="string"&&(n=o.code),typeof o.error=="string"?s=o.error:typeof o.message=="string"?s=o.message:typeof o.InvalidRequestError=="object"&&o.InvalidRequestError!==null&&typeof o.InvalidRequestError.reason=="string"&&(s=o.InvalidRequestError.reason),s=s||`HTTP ${t.status}: ${t.statusText}`;let a=typeof o.meta=="object"&&o.meta!==null?o.meta:o;throw new hl.PrismaClientKnownRequestError(s,{clientVersion:this.#e,code:n??"P6000",batchRequestIdx:r,meta:a})}#u(t){let r=t.logs??[];if(t.spans)this.#o.dispatchEngineSpans(t.spans,r,n=>this.#l(n));else for(let n of r)this.#l(n)}#l(t){switch(t.level){case"debug":case"trace":wl(t);break;case"error":case"warn":case"info":{this.#i.emit(t.level,{timestamp:ji(t.timestamp),message:t.attributes.message??"",target:t.target??"RemoteExecutor"});break}case"query":{this.#i.emit("query",{query:t.attributes.query??"",timestamp:ji(t.timestamp),duration:t.attributes.duration_ms??0,params:t.attributes.params??"",target:t.target??"RemoteExecutor"});break}default:throw new Error(`Unexpected log level: ${t.level}`)}}},Bi=class{#e;#t;#r;constructor(t){this.#e=t,this.#t=new Map}async request({method:t,path:r,headers:n,body:i,fetch:o}){let s=new URL(r,this.#e),a=this.#i(s);a&&(n.Cookie=a),this.#r&&(n["Accelerate-Query-Engine-Jwt"]=this.#r);let u=await o(s.href,{method:t,body:i!==void 0?JSON.stringify(i):void 0,headers:n});return wl(t,s,u.status,u.statusText),this.#r=u.headers.get("Accelerate-Query-Engine-Jwt")??void 0,this.#o(s,u),u}#i(t){let r=[],n=new Date;for(let[i,o]of this.#t){if(o.expires&&o.expires0?r.join("; "):void 0}#o(t,r){let n=r.headers.getSetCookie?.()||[];if(n.length===0){let i=r.headers.get("Set-Cookie");i&&n.push(i)}for(let i of n){let o=ml(i),s=o.domain??t.hostname,a=o.path??"/",u=`${s}:${a}:${o.name}`;this.#t.set(u,{name:o.name,value:o.value,domain:s,path:a,expires:o.expires})}}};var Ji=require("@prisma/client-runtime-utils"),Qi={},xl={async loadQueryCompiler(e){let{clientVersion:t,compilerWasm:r}=e;if(r===void 0)throw new Ji.PrismaClientInitializationError("WASM query compiler was unexpectedly `undefined`",t);let n;return e.activeProvider===void 0||Qi[e.activeProvider]===void 0?(n=(async()=>{let i=await r.getRuntime(),o=await r.getQueryCompilerWasmModule();if(o==null)throw new Ji.PrismaClientInitializationError("The loaded wasm module was unexpectedly `undefined` or `null` once loaded",t);let s={[r.importName]:i},a=new WebAssembly.Instance(o,s),u=a.exports.__wbindgen_start;return i.__wbg_set_wasm(a.exports),u(),i.QueryCompiler})(),e.activeProvider!==void 0&&(Qi[e.activeProvider]=n)):n=Qi[e.activeProvider],await n}};var dm="P2038",Ve=K("prisma:client:clientEngine"),Tl=globalThis;Tl.PRISMA_WASM_PANIC_REGISTRY={set_message(e){throw new ne.PrismaClientRustPanicError(e,mn)}};var yr=class{name="ClientEngine";#e;#t={type:"disconnected"};#r;#i;#o;#s;config;datamodel;logEmitter;logQueries;logLevel;tracingHelper;#a;constructor(t,r){if(t.accelerateUrl!==void 0)this.#i={remote:!0,accelerateUrl:t.accelerateUrl};else if(t.adapter)this.#i={remote:!1,driverAdapterFactory:t.adapter},Ve("Using driver adapter: %O",t.adapter);else throw new ne.PrismaClientInitializationError("PrismaClient requires a driver adapter to connect to your database, but none was provided. Pass one to the PrismaClient constructor, e.g. `new PrismaClient({ adapter })`. Learn more: https://pris.ly/d/driver-adapters",t.clientVersion,dm);this.#r=r??xl,this.config=t,this.logQueries=t.logQueries??!1,this.logLevel=t.logLevel??"error",this.logEmitter=t.logEmitter,this.datamodel=t.inlineSchema,this.tracingHelper=t.tracingHelper,this.#o=t.queryPlanCacheMaxSize===0?void 0:new gn(t.queryPlanCacheMaxSize),this.#s=mr.deserialize(t.parameterizationSchema,n=>{if(!Object.hasOwn(t.runtimeDataModel.enums,n))return;let i={};for(let o of t.runtimeDataModel.enums[n].values)i[o.name]=o.dbName??o.name;return i}),t.enableDebugLogs&&(this.logLevel="debug"),this.logQueries&&(this.#a=n=>{this.logEmitter.emit("query",{...n,params:Se(n.params),target:"ClientEngine"})})}async#n(){switch(this.#t.type){case"disconnected":{let t=this.tracingHelper.runInChildSpan("connect",async()=>{let r,n;try{r=await this.#u(),n=await this.#l(r)}catch(o){throw this.#t={type:"disconnected"},n?.free(),await r?.disconnect(),o}let i={executor:r,queryCompiler:n};return this.#t={type:"connected",engine:i},i});return this.#t={type:"connecting",promise:t},await t}case"connecting":return await this.#t.promise;case"connected":return this.#t.engine;case"disconnecting":return await this.#t.promise,await this.#n()}}async#u(){return this.#i.remote?new bn({clientVersion:this.config.clientVersion,accelerateUrl:this.#i.accelerateUrl,logEmitter:this.logEmitter,logLevel:this.logLevel,logQueries:this.logQueries,tracingHelper:this.tracingHelper,sqlCommenters:this.config.sqlCommenters}):await fn.connect({driverAdapterFactory:this.#i.driverAdapterFactory,tracingHelper:this.tracingHelper,transactionOptions:{...this.config.transactionOptions,isolationLevel:this.#g(this.config.transactionOptions.isolationLevel)},onQuery:this.#a,provider:this.config.activeProvider,sqlCommenters:this.config.sqlCommenters})}async#l(t){let r=this.#e;r===void 0&&(r=await this.#r.loadQueryCompiler(this.config),this.#e=r);let{provider:n,connectionInfo:i}=await t.getConnectionInfo();try{return this.#m(()=>new r({datamodel:this.datamodel,provider:n,connectionInfo:i}),void 0,!1)}catch(o){throw this.#p(o)}}#p(t){if(t instanceof ne.PrismaClientRustPanicError)return t;try{let r=JSON.parse(t.message);return new ne.PrismaClientInitializationError(r.message,this.config.clientVersion,r.error_code)}catch{return t}}#c(t,r){if(t instanceof ne.PrismaClientInitializationError)return t;if(t.code==="GenericFailure"&&t.message?.startsWith("PANIC:"))return new ne.PrismaClientRustPanicError(bl(this,t.message,r),this.config.clientVersion);if(t instanceof X)return new ne.PrismaClientKnownRequestError(t.message,{code:t.code,meta:t.meta,clientVersion:this.config.clientVersion});try{let n=JSON.parse(t);return new ne.PrismaClientUnknownRequestError(`${n.message} +${n.backtrace}`,{clientVersion:this.config.clientVersion})}catch{return t}}#d(t){return t instanceof ne.PrismaClientRustPanicError?t:typeof t.message=="string"&&typeof t.code=="string"?new ne.PrismaClientKnownRequestError(t.message,{code:t.code,meta:t.meta,clientVersion:this.config.clientVersion}):typeof t.message=="string"?new ne.PrismaClientUnknownRequestError(t.message,{clientVersion:this.config.clientVersion}):t}#m(t,r,n=!0){let i=Tl.PRISMA_WASM_PANIC_REGISTRY.set_message,o;global.PRISMA_WASM_PANIC_REGISTRY.set_message=s=>{o=s};try{return t()}finally{if(global.PRISMA_WASM_PANIC_REGISTRY.set_message=i,o)throw this.#e=void 0,n&&this.stop().catch(s=>Ve("failed to disconnect:",s)),new ne.PrismaClientRustPanicError(bl(this,o,r),this.config.clientVersion)}}onBeforeExit(){throw new Error('"beforeExit" hook is not applicable to the client engine, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.')}async start(){await this.#n()}async stop(){switch(this.#t.type){case"disconnected":return;case"connecting":return await this.#t.promise,await this.stop();case"connected":{let t=this.#t.engine,r=this.tracingHelper.runInChildSpan("disconnect",async()=>{try{await t.executor.disconnect(),t.queryCompiler.free()}finally{this.#t={type:"disconnected"}}});return this.#t={type:"disconnecting",promise:r},await r}case"disconnecting":return await this.#t.promise}}version(){return"unknown"}async transaction(t,r,n){let i,{executor:o}=await this.#n();try{if(t==="start"){let s=n;i=await o.startTransaction({...s,isolationLevel:this.#g(s.isolationLevel)})}else if(t==="commit"){let s=n;await o.commitTransaction(s)}else if(t==="rollback"){let s=n;await o.rollbackTransaction(s)}else $e(t,"Invalid transaction action.")}catch(s){throw this.#c(s)}return i?{id:i.id,payload:void 0}:void 0}async request(t,{interactiveTransaction:r,customDataProxyFetch:n}){Ve("sending request");let{executor:i,queryCompiler:o}=await this.#n().catch(m=>{throw this.#c(m,JSON.stringify(t))}),s,a={},u=t.query;if(Pl(t))s=El(t);else{let{parameterizedQuery:m,placeholderValues:P}=Vi(t,this.#s),T=JSON.stringify(m);a=P,u=m.query;let S=t.action!=="createMany"&&t.action!=="createManyAndReturn",I=S?this.#o?.getSingle(T):void 0;I?(Ve("query plan cache hit"),s=I):(Ve("query plan cache miss"),s=this.#f(m,T,o),S&&this.#o?.setSingle(T,s))}try{Ve("query plan created",s);let m=await i.execute({plan:s,model:t.modelName,operation:t.action,placeholderValues:a,transaction:r,batchIndex:void 0,customFetch:n?.(globalThis.fetch),queryInfo:{type:"single",modelName:t.modelName,action:t.action,query:u}});return Ve("query plan executed"),{data:{[t.action]:m}}}catch(m){throw this.#c(m,JSON.stringify(t))}}async requestBatch(t,{transaction:r,customDataProxyFetch:n}){if(t.length===0)return[];let i=t[0].action,o=t[0].modelName,s=sl(t,r),a=JSON.stringify(s),{executor:u,queryCompiler:m}=await this.#n().catch(A=>{throw this.#c(A,a)}),P=o===void 0,T,S={},I=t.map(A=>A.query);if(P)T=this.#y(t,a,m);else{let{parameterizedBatch:A,placeholderValues:M}=qi(s,this.#s),L=JSON.stringify(A);S=M,I=A.batch.map(E=>E.query);let q=this.#o?.getBatch(L);if(q)Ve("batch query plan cache hit"),T=q;else{Ve("batch query plan cache miss");try{T=this.#y(A.batch,L,m),this.#o?.setBatch(L,T)}catch(E){throw this.#d(E)}}}try{let A;switch(r?.kind==="itx"&&(A=r.options),T.type){case"multi":{if(r?.kind!=="itx"){let E=r?.options,D={maxWait:E?.maxWait??this.config.transactionOptions.maxWait,timeout:E?.timeout??this.config.transactionOptions.timeout,isolationLevel:E?.isolationLevel??this.config.transactionOptions.isolationLevel};A=await this.transaction("start",{},D)}let M=[],L=!1,q;for(let[E,D]of T.plans.entries())try{let H=await u.execute({plan:D,placeholderValues:S,model:t[E].modelName,operation:t[E].action,batchIndex:E,transaction:A,customFetch:n?.(globalThis.fetch),queryInfo:{type:"single",modelName:t[E].modelName,action:t[E].action,query:I[E]}});M.push({data:{[t[E].action]:H}})}catch(H){if(q??=r?.kind!=="batch"&&t.every(ce=>ce.action==="findUnique"||ce.action==="findUniqueOrThrow"),M.push(H),L=!0,!q)break}return A!==void 0&&r?.kind!=="itx"&&(L?await this.transaction("rollback",{},A):await this.transaction("commit",{},A)),M}case"compacted":{if(!t.every(q=>q.action===i&&q.modelName===o)){let q=t.map(D=>D.action).join(", "),E=t.map(D=>D.modelName).join(", ");throw new Error(`Internal error: All queries in a compacted batch must have the same action and model name, but received actions: [${q}] and model names: [${E}]. This indicates a bug in the client. Please report this issue to the Prisma team with your query details.`)}if(o===void 0)throw new Error("Internal error: A compacted batch cannot contain raw queries. This indicates a bug in the client. Please report this issue to the Prisma team with your query details.");let M=await u.execute({plan:T.plan,placeholderValues:S,model:o,operation:i,batchIndex:void 0,transaction:A,customFetch:n?.(globalThis.fetch),queryInfo:{type:"compacted",action:i,modelName:o,queries:I}});return Ws(M,T,S).map(q=>({data:{[i]:q}}))}}}catch(A){throw this.#c(A,a)}}async apiKey(){let{executor:t}=await this.#n();return t.apiKey()}#f(t,r,n){try{return this.#m(()=>this.#h({queries:[t],execute:()=>n.compile(r)}))}catch(i){throw this.#d(i)}}#y(t,r,n){if(t.every(Pl))return{type:"multi",plans:t.map(i=>El(i))};try{return this.#m(()=>this.#h({queries:t,execute:()=>n.compileBatch(r)}))}catch(i){throw this.#d(i)}}#g(t){switch(t){case void 0:return;case"ReadUncommitted":return"READ UNCOMMITTED";case"ReadCommitted":return"READ COMMITTED";case"RepeatableRead":return"REPEATABLE READ";case"Serializable":return"SERIALIZABLE";case"Snapshot":return"SNAPSHOT";default:throw new ne.PrismaClientKnownRequestError(`Inconsistent column data: Conversion failed: Invalid isolation level \`${t}\``,{code:"P2023",clientVersion:this.config.clientVersion,meta:{providedIsolationLevel:t}})}}#h({queries:t,execute:r}){return this.tracingHelper.runInChildSpan({name:"compile",attributes:{models:t.map(n=>n.modelName).filter(n=>n!==void 0),actions:t.map(n=>n.action)}},r)}};function bl(e,t,r){return pl({binaryTarget:void 0,title:t,version:e.config.clientVersion,engineVersion:"unknown",database:e.config.activeProvider,query:r})}function Pl(e){return e.action==="queryRaw"||e.action==="executeRaw"}function El(e){let t=e.query.arguments.query,{args:r,argTypes:n}=il(e.query.arguments.parameters);return{type:e.action==="queryRaw"?"query":"execute",args:{type:"rawSql",sql:t,args:r,argTypes:n}}}function vl(e){return new yr(e)}var Sl=e=>({command:e});var Nl=require("@prisma/client-runtime-utils");var Al=e=>e.strings.reduce((t,r,n)=>`${t}@P${n}${r}`);var Pn=require("@prisma/client-runtime-utils");function It(e,t){try{return Rl(e,"fast",t)}catch(r){if(r instanceof TypeError)return Rl(e,"slow",t);throw r}}function Rl(e,t,r){return JSON.stringify(e.map(n=>Il(n,t,r)))}function Il(e,t,r){if(Array.isArray(e))return e.map(n=>Il(n,t,r));if(typeof e=="bigint")return{prisma__type:"bigint",prisma__value:e.toString()};if(ct(e)){if(!pt(e))throw new Pn.PrismaClientValidationError("Provided Date object is invalid",{clientVersion:r});return{prisma__type:"date",prisma__value:e.toJSON()}}if(Pn.Decimal.isDecimal(e))return{prisma__type:"decimal",prisma__value:e.toJSON()};if(Buffer.isBuffer(e))return{prisma__type:"bytes",prisma__value:e.toString("base64")};if(mm(e))return{prisma__type:"bytes",prisma__value:Buffer.from(e).toString("base64")};if(ArrayBuffer.isView(e)){let{buffer:n,byteOffset:i,byteLength:o}=e;return{prisma__type:"bytes",prisma__value:Buffer.from(n,i,o).toString("base64")}}return typeof e=="object"&&t==="slow"?kl(e):e}function mm(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e=="object"&&e!==null?e[Symbol.toStringTag]==="ArrayBuffer"||e[Symbol.toStringTag]==="SharedArrayBuffer":!1}function kl(e){if(typeof e!="object"||e===null)return e;if(typeof e.toJSON=="function")return e.toJSON();if(Array.isArray(e))return e.map(Cl);let t={};for(let r of Object.keys(e))t[r]=Cl(e[r]);return t}function Cl(e){return typeof e=="bigint"?e.toString():kl(e)}var fm=/^(\s*alter\s)/i,Ol=K("prisma:client");function Gi(e,t,r,n){if(!(e!=="postgresql"&&e!=="cockroachdb")&&r.length>0&&fm.exec(t))throw new Error(`Running ALTER using ${n} is not supported +Using the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization. + +Example: + await prisma.$executeRawUnsafe(\`ALTER USER prisma WITH PASSWORD '\${password}'\`) + +More Information: https://pris.ly/d/execute-raw +`)}var zi=({clientMethod:e,activeProvider:t,clientVersion:r})=>n=>{let i="",o;if(Ur(n))i=n.sql,o={values:It(n.values,r),__prismaRawParameters__:!0};else if(Array.isArray(n)){let[s,...a]=n;i=s,o={values:It(a||[],r),__prismaRawParameters__:!0}}else switch(t){case"sqlite":case"mysql":{i=n.sql,o={values:It(n.values,r),__prismaRawParameters__:!0};break}case"cockroachdb":case"postgresql":case"postgres":{i=n.text,o={values:It(n.values,r),__prismaRawParameters__:!0};break}case"sqlserver":{i=Al(n),o={values:It(n.values,r),__prismaRawParameters__:!0};break}default:throw new Error(`The ${t} provider does not support ${e}`)}return o?.values?Ol(`prisma.${e}(${i}, ${o.values})`):Ol(`prisma.${e}(${i})`),{query:i,parameters:o}},Dl={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[t,...r]=e;return new Nl.Sql(t,r)}},Ml={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};function Hi(e){return function(r,n){let i,o=(s=e)=>{try{return s===void 0||s?.kind==="itx"?i??=Fl(r(s)):Fl(r(s))}catch(a){return Promise.reject(a)}};return{get spec(){return n},then(s,a){return o().then(s,a)},catch(s){return o().catch(s)},finally(s){return o().finally(s)},requestTransaction(s){let a=o(s);return a.requestTransaction?a.requestTransaction(s):a},[Symbol.toStringTag]:"PrismaPromise"}}}function Fl(e){return typeof e.then=="function"?e:Promise.resolve(e)}var _l={name:"@prisma/instrumentation-contract",version:"7.10.0",description:"Shared types and utilities for Prisma instrumentation",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{require:{types:"./dist/index.d.ts",default:"./dist/index.js"},import:{types:"./dist/index.d.mts",default:"./dist/index.mjs"}}},license:"Apache-2.0",homepage:"https://www.prisma.io",repository:{type:"git",url:"https://github.com/prisma/prisma.git",directory:"packages/instrumentation-contract"},bugs:"https://github.com/prisma/prisma/issues",scripts:{dev:"DEV=true tsx helpers/build.ts",build:"tsx helpers/build.ts",prepublishOnly:"pnpm run build",test:"vitest run"},files:["dist"],sideEffects:!1,devDependencies:{"@opentelemetry/api":"1.9.0"},peerDependencies:{"@opentelemetry/api":"^1.8"}};var ym=_l.version.split(".")[0],hm="PRISMA_INSTRUMENTATION",wm=`V${ym}_PRISMA_INSTRUMENTATION`,$l=globalThis;function Ll(){let e=$l[wm];return e?.helper?e.helper:$l[hm]?.helper}var xm={isEnabled(){return!1},getTraceParent(){return"00-10-10-00"},dispatchEngineSpans(e,t,r){for(let n of t)r(n)},getActiveContext(){},runInChildSpan(e,t){return t()}},Wi=class{isEnabled(){return this.getTracingHelper().isEnabled()}getTraceParent(t){return this.getTracingHelper().getTraceParent(t)}dispatchEngineSpans(t,r,n){return this.getTracingHelper().dispatchEngineSpans(t,r,n)}getActiveContext(){return this.getTracingHelper().getActiveContext()}runInChildSpan(t,r){return this.getTracingHelper().runInChildSpan(t,r)}getTracingHelper(){return Ll()??xm}};function Vl(){return new Wi}function ql(e,t=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--e===0&&r(t()),i?.(n)}}}function Ul(e){return typeof e=="string"?e:e.reduce((t,r)=>{let n=typeof r=="string"?r:r.level;return n==="query"?t:t&&(r==="info"||t==="info")?"info":n},void 0)}var Ql=require("@prisma/client-runtime-utils");function Zi(e){if(e.action!=="findUnique"&&e.action!=="findUniqueOrThrow")return;let t=[];return e.modelName&&t.push(e.modelName),e.query.arguments&&t.push(Ki(e.query.arguments)),t.push(Ki(e.query.selection)),t.join("")}function Ki(e){return`(${Object.keys(e).sort().map(r=>{let n=e[r];return typeof n=="object"&&n!==null?`(${r} ${Ki(n)})`:r}).join(" ")})`}var bm={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateManyAndReturn:!0,updateOne:!0,upsertOne:!0};function Xi(e){return bm[e]}var En=class{constructor(t){this.options=t;this.batches={}}batches;tickActive=!1;request(t){let r=this.options.batchBy(t);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,process.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:t,resolve:n,reject:i})})):this.options.singleLoader(t)}dispatchBatches(){for(let t in this.batches){let r=this.batches[t];delete this.batches[t],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i{for(let i=0;ist("bigint",r));case"bytes-array":return t.map(r=>st("bytes",r));case"decimal-array":return t.map(r=>st("decimal",r));case"datetime-array":return t.map(r=>st("datetime",r));case"date-array":return t.map(r=>st("date",r));case"time-array":return t.map(r=>st("time",r));default:return t}}function Tn(e){let t=[],r=Pm(e);for(let n=0;n(s.dbName??o)===n);if(i.length<=1)return i[0]?.[0];if(r!==void 0){let o=i.filter(([,s])=>s.schema===r);if(o.length===1)return o[0][0]}}function Em(e){let t=e.lastIndexOf(".");return t===-1?{schema:void 0,name:e}:{schema:e.slice(0,t),name:e.slice(t+1)}}var Tm=K("prisma:client:request_handler"),vn=class{client;dataloader;logEmitter;constructor(t,r){this.logEmitter=r,this.client=t,this.dataloader=new En({batchLoader:_s(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(T=>T.protocolQuery),u=this.client._tracingHelper.getTraceParent(s),m=n.some(T=>Xi(T.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:u,transaction:vm(o),containsWrite:m,customDataProxyFetch:i})).map((T,S)=>{if(T instanceof Error)return T;try{return this.mapQueryEngineResult(n[S],T)}catch(I){return I}})}),singleLoader:async n=>{let i=n.transaction?.kind==="itx"?Jl(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:Xi(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>{if(n.transaction?.kind==="itx"){let i=Zi(n.protocolQuery);return`itx-${n.transaction.id}${i?`-${i}`:""}`}return n.transaction?.id?`transaction-${n.transaction.id}`:Zi(n.protocolQuery)},batchOrder(n,i){return n.transaction?.kind==="batch"&&i.transaction?.kind==="batch"?n.transaction.index-i.transaction.index:0}})}async request(t){try{return await this.dataloader.request(t)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=t;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a,globalOmit:t.globalOmit})}}mapQueryEngineResult({dataPath:t,unpacker:r},n){let i=n?.data,o=this.unpack(i,t,r);return process.env.PRISMA_CLIENT_GET_TIME?{data:o}:o}handleAndLogRequestError(t){try{this.handleRequestError(t)}catch(r){throw this.logEmitter&&this.logEmitter.emit("error",{message:r.message,target:t.clientMethod,timestamp:new Date}),r}}handleRequestError({error:t,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s,globalOmit:a}){if(Tm(t),Sm(t,i))throw t;if(t instanceof _.PrismaClientKnownRequestError&&Am(t)){let m=Gl(t.meta);Fr({args:o,errors:[m],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion,globalOmit:a})}let u=t.message;if(n&&(u=Rr({callsite:n,originalMethod:r,isPanic:t.isPanic,showColors:this.client._errorFormat==="pretty",message:u})),u=this.sanitizeMessage(u),t.code){let m=this.resolveErrorMeta(t.meta,t.code,s);throw new _.PrismaClientKnownRequestError(u,{code:t.code,clientVersion:this.client._clientVersion,meta:m,batchRequestIdx:t.batchRequestIdx})}else{if(t.isPanic)throw new _.PrismaClientRustPanicError(u,this.client._clientVersion);if(t instanceof _.PrismaClientUnknownRequestError)throw new _.PrismaClientUnknownRequestError(u,{clientVersion:this.client._clientVersion,batchRequestIdx:t.batchRequestIdx});if(t instanceof _.PrismaClientInitializationError)throw new _.PrismaClientInitializationError(u,this.client._clientVersion);if(t instanceof _.PrismaClientRustPanicError)throw new _.PrismaClientRustPanicError(u,this.client._clientVersion)}throw t.clientVersion=this.client._clientVersion,t}resolveErrorMeta(t,r,n){if(r!=="P2002"||typeof t?.table!="string")return n?{modelName:n,...t}:t;let i={...t};delete i.table;let o=Bl(this.client._runtimeDataModel,t.table)??(typeof i.modelName=="string"?i.modelName:n);return o!==void 0?{...i,modelName:o}:i}sanitizeMessage(t){return this.client._errorFormat&&this.client._errorFormat!=="pretty"?ut(t):t}unpack(t,r,n){if(!t||(t.data&&(t=t.data),!t))return t;let i=Object.keys(t)[0],o=Object.values(t)[0],s=Rm(r),a=Wn(o,s),u=i==="queryRaw"?Tn(a):Ae(a);return n?n(u):u}get[Symbol.toStringTag](){return"RequestHandler"}};function vm(e){if(e){if(e.kind==="batch")return{kind:"batch",options:{isolationLevel:e.isolationLevel,maxWait:e.maxWait,timeout:e.timeout}};if(e.kind==="itx")return{kind:"itx",options:Jl(e)};$e(e,"Unknown transaction kind")}}function Jl(e){return{id:e.id,payload:e.payload}}function Sm(e,t){return(0,Ql.hasBatchIndex)(e)&&t?.kind==="batch"&&e.batchRequestIdx!==t.index}function Am(e){return e.code==="P2009"||e.code==="P2012"}function Gl(e){if(e.kind==="Union")return{kind:"Union",errors:e.errors.map(Gl)};if(Array.isArray(e.selectionPath)){let[,...t]=e.selectionPath;return{...e,selectionPath:t}}return e}function Rm(e){let t=[];for(let r=1;r{},accelerateUrl:e=>{if(e!==void 0){if(typeof e!="string")throw new j(`Invalid value ${JSON.stringify(e)} for "accelerateUrl" provided to PrismaClient constructor.`);if(e.trim().length===0)throw new j('"accelerateUrl" provided to PrismaClient constructor must be a non-empty string.')}},errorFormat:e=>{if(e){if(typeof e!="string")throw new j(`Invalid value ${JSON.stringify(e)} for "errorFormat" provided to PrismaClient constructor.`);if(!Hl.includes(e)){let t=hr(e,Hl);throw new j(`Invalid errorFormat ${e} provided to PrismaClient constructor.${t}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new j(`Invalid value ${JSON.stringify(e)} for "log" provided to PrismaClient constructor.`);function t(r){if(typeof r=="string"&&!Wl.includes(r)){let n=hr(r,Wl);throw new j(`Invalid log level "${r}" provided to PrismaClient constructor.${n}`)}}for(let r of e){t(r);let n={level:t,emit:i=>{let o=["stdout","event"];if(!o.includes(i)){let s=hr(i,o);throw new j(`Invalid value ${JSON.stringify(i)} for "emit" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r=="object")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new j(`Invalid property ${i} for "log" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let t=e.maxWait;if(t!=null&&t<=0)throw new j(`Invalid value ${t} for maxWait in "transactionOptions" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=e.timeout;if(r!=null&&r<=0)throw new j(`Invalid value ${r} for timeout in "transactionOptions" provided to PrismaClient constructor. timeout needs to be greater than 0`)},omit:(e,t)=>{if(typeof e!="object")throw new j('"omit" option is expected to be an object.');if(e===null)throw new j('"omit" option can not be `null`');let r=[];for(let[n,i]of Object.entries(e)){let o=Om(n,t.runtimeDataModel);if(!o){r.push({kind:"UnknownModel",modelKey:n});continue}for(let[s,a]of Object.entries(i)){let u=o.fields.find(m=>m.name===s);if(!u){r.push({kind:"UnknownField",modelKey:n,fieldName:s});continue}if(u.relationName){r.push({kind:"RelationInOmit",modelKey:n,fieldName:s});continue}typeof a!="boolean"&&r.push({kind:"InvalidFieldValue",modelKey:n,fieldName:s})}}if(r.length>0)throw new j(Nm(e,r))},queryPlanCacheMaxSize:e=>{if(e!==void 0){if(typeof e!="number")throw new j(`Invalid value ${JSON.stringify(e)} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Expected a number.`);if(!Number.isInteger(e))throw new j(`Invalid value ${e} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Expected an integer.`);if(e<0)throw new j(`Invalid value ${e} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Cache size needs to be greater or equal to 0.`)}},comments:e=>{if(e!==void 0){if(!Array.isArray(e))throw new j(`Invalid value ${JSON.stringify(e)} for "comments" provided to PrismaClient constructor. Expected an array of SQL commenter plugins.`);for(let t=0;t{if(!e)return;let t=["debug","engine","configOverride"];if(typeof e!="object")throw new j(`Invalid value ${JSON.stringify(e)} for "__internal" to PrismaClient constructor`);for(let[r]of Object.entries(e))if(!t.includes(r)){let n=hr(r,t);throw new j(`Invalid property ${JSON.stringify(r)} for "__internal" provided to PrismaClient constructor.${n}`)}}};function Im(e){let t=e.adapter!==void 0,r=e.accelerateUrl!==void 0;if(t&&r)throw new j('The "adapter" and "accelerateUrl" options are mutually exclusive. Please provide only one of them.');if(!t&&!r)throw new j(`PrismaClient requires a driver adapter to connect to your database, but none was provided. + +Pass a driver adapter to the PrismaClient constructor, for example: + + import { PrismaPg } from '@prisma/adapter-pg' + import { PrismaClient } from './generated/prisma/client' + + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) + const prisma = new PrismaClient({ adapter }) + +Learn more about driver adapters: https://pris.ly/d/driver-adapters + +If you use Prisma Accelerate instead of connecting to your database directly, pass \`accelerateUrl\` to the PrismaClient constructor instead of \`adapter\`.`)}function Xl(e,t){for(let[r,n]of Object.entries(e)){if(!zl.includes(r)){let i=hr(r,zl);throw new j(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}Cm[r](n,t)}Im(e)}function hr(e,t){if(t.length===0||typeof e!="string")return"";let r=km(e,t);return r?` Did you mean "${r}"?`:""}function km(e,t){if(t.length===0)return null;let r=t.map(i=>({value:i,distance:(0,Zl.default)(e,i)}));r.sort((i,o)=>i.distanceqe(n)===t);if(r)return e[r]}function Nm(e,t){let r=bt(e);for(let o of t)switch(o.kind){case"UnknownModel":r.arguments.getField(o.modelKey)?.markAsError(),r.addErrorMessage(()=>`Unknown model name: ${o.modelKey}.`);break;case"UnknownField":r.arguments.getDeepField([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>`Model "${o.modelKey}" does not have a field named "${o.fieldName}".`);break;case"RelationInOmit":r.arguments.getDeepField([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>'Relations are already excluded by default and can not be specified in "omit".');break;case"InvalidFieldValue":r.arguments.getDeepFieldValue([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>"Omit field option value must be a boolean.");break}let{message:n,args:i}=Mr(r,"colorless");return`Error validating "omit" option: + +${i} + +${n}`}var Yl=require("@prisma/client-runtime-utils");function eu(e){return e.length===0?Promise.resolve([]):new Promise((t,r)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?r(i):t(n)))},u=m=>{o||(o=!0,r(m))};for(let m=0;m{n[m]=P,a()},P=>{if(!(0,Yl.hasBatchIndex)(P)){u(P);return}P.batchRequestIdx===m?u(P):(i||(i=P),a())})})}var kt=K("prisma:client");typeof globalThis=="object"&&(globalThis.NODE_CLIENT=!0);var Dm={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},su=Symbol.for("prisma.client.transaction.scope_context");function tu(e){let r=e[su];if(r===void 0)return{kind:"top-level"};if(Mm(r))return r;throw new Error("Internal error: inconsistent transaction scope context.")}function Mm(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.kind==="nested"&&typeof t.txId=="string"&&typeof t.scopeId=="string"&&Fm(t.scopeState)}function Fm(e){return typeof e!="object"||e===null?!1:Array.isArray(e.stack)}function _m(){return typeof globalThis.crypto?.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`}var $m={id:0,nextId(){return++this.id}};function au(e){class t{_originalClient=this;_runtimeDataModel;_requestHandler;_connectionPromise;_disconnectionPromise;_engineConfig;_accelerateEngineConfig;_clientVersion;_errorFormat;_tracingHelper;_previewFeatures;_activeProvider;_globalOmit;_extensions;_engine;_appliedParent;_createPrismaPromise=Hi();constructor(n){if(!n)throw new _.PrismaClientInitializationError(`PrismaClient was instantiated without any options. A driver adapter is required to connect to your database. + +Pass a driver adapter to the PrismaClient constructor, for example: + + import { PrismaPg } from '@prisma/adapter-pg' + import { PrismaClient } from './generated/prisma/client' + + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) + const prisma = new PrismaClient({ adapter }) + +Learn more about driver adapters: https://pris.ly/d/driver-adapters + +If you use Prisma Accelerate instead of connecting to your database directly, pass \`accelerateUrl\` to the PrismaClient constructor instead of \`adapter\`.`,Yi);e=n.__internal?.configOverride?.(e)??e,Xl(n,e);let i=new ou.EventEmitter().on("error",()=>{});this._extensions=Pt.empty(),this._previewFeatures=e.previewFeatures,this._clientVersion=e.clientVersion??Yi,this._activeProvider=e.activeProvider,this._globalOmit=n?.omit,this._tracingHelper=Vl();let o;if(n.adapter){o=n.adapter;let s=e.activeProvider==="postgresql"||e.activeProvider==="cockroachdb"?"postgres":e.activeProvider;if(o.provider!==s)throw new _.PrismaClientInitializationError(`The Driver Adapter \`${o.adapterName}\`, based on \`${o.provider}\`, is not compatible with the provider \`${s}\` specified in the Prisma schema.`,this._clientVersion)}try{let s=n??{},u=(s.__internal??{}).debug===!0;if(u&&K.enable("prisma:client"),s.errorFormat?this._errorFormat=s.errorFormat:process.env.NODE_ENV==="production"?this._errorFormat="minimal":process.env.NO_COLOR?this._errorFormat="colorless":this._errorFormat="colorless",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={enableDebugLogs:u,logLevel:s.log&&Ul(s.log),logQueries:s.log&&!!(typeof s.log=="string"?s.log==="query":s.log.find(m=>typeof m=="string"?m==="query":m.level==="query")),compilerWasm:e.compilerWasm,clientVersion:e.clientVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:s.transactionOptions?.maxWait??2e3,timeout:s.transactionOptions?.timeout??5e3,isolationLevel:s.transactionOptions?.isolationLevel},logEmitter:i,adapter:o,accelerateUrl:s.accelerateUrl,sqlCommenters:s.comments,parameterizationSchema:e.parameterizationSchema,runtimeDataModel:e.runtimeDataModel,queryPlanCacheMaxSize:n.queryPlanCacheMaxSize},this._accelerateEngineConfig=Object.create(this._engineConfig),this._accelerateEngineConfig.accelerateUtils={resolveDatasourceUrl:()=>{if(s.accelerateUrl)return s.accelerateUrl;throw new _.PrismaClientInitializationError(`\`accelerateUrl\` is required when using \`@prisma/extension-accelerate\`: + +new PrismaClient({ + accelerateUrl: "prisma://...", +}).$extends(withAccelerate()) +`,e.clientVersion)}},kt("clientVersion",e.clientVersion),this._engine=vl(this._engineConfig),this._requestHandler=new vn(this,i),s.log)for(let m of s.log){let P=typeof m=="string"?m:m.emit==="stdout"?m.level:null;P&&this.$on(P,T=>{Ut.log(`${Ut.tags[P]??""}`,T.message||T.query)})}}catch(s){throw s.clientVersion=this._clientVersion,s}return this._appliedParent=Yt(this)}get[Symbol.toStringTag](){return"PrismaClient"}$on(n,i){return n==="beforeExit"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i),this}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{yo()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:"executeRaw",args:o,transaction:n,clientMethod:i,argsMapper:zi({clientMethod:i,activeProvider:a,clientVersion:this._clientVersion}),callsite:je(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=ru(n,i);return Gi(this._activeProvider,s.text,s.values,Array.isArray(n)?"prisma.$executeRaw``":"prisma.$executeRaw(sql``)"),this.$executeRawInternal(o,"$executeRaw",s,a)}throw new _.PrismaClientValidationError("`$executeRaw` is a tag function, please use it like the following:\n```\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\n```\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\n",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(Gi(this._activeProvider,n,i,"prisma.$executeRawUnsafe(, [...values])"),this.$executeRawInternal(o,"$executeRawUnsafe",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!=="mongodb")throw new _.PrismaClientValidationError(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:"$runCommandRaw",dataPath:[],action:"runCommandRaw",argsMapper:Sl,callsite:je(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:"queryRaw",args:o,transaction:n,clientMethod:i,argsMapper:zi({clientMethod:i,activeProvider:a,clientVersion:this._clientVersion}),callsite:je(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,"$queryRaw",...ru(n,i));throw new _.PrismaClientValidationError("`$queryRaw` is a tag function, please use it like the following:\n```\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\n```\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\n",{clientVersion:this._clientVersion})})}$queryRawTyped(n){return this._createPrismaPromise(i=>{if(!this._hasPreviewFlag("typedSql"))throw new _.PrismaClientValidationError("`typedSql` preview feature must be enabled in order to access $queryRawTyped API",{clientVersion:this._clientVersion});return this.$queryRawInternal(i,"$queryRawTyped",n)})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,"$queryRawUnsafe",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=$m.nextId(),s=ql(n.length),a=n.map((u,m)=>{if(u?.[Symbol.toStringTag]!=="PrismaPromise")throw new Error("All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.");let P=i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,T={kind:"batch",id:o,index:m,isolationLevel:P,maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,lock:s};return u.requestTransaction?.(T)??u});return eu(a)}async _transactionWithCallback({callback:n,options:i={}}){let o=tu(this),s=o.kind==="nested",a=s?o.scopeState:{stack:[]},u=a.stack,m=_m();if(s){if(u.at(-1)!==o.scopeId)throw new Error("Concurrent nested transactions are not supported");i.newTxId=o.txId}u.push(m);let P={traceparent:this._tracingHelper.getTraceParent()},T={maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,isolationLevel:i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,newTxId:i.newTxId},S;try{S=await this._engine.transaction("start",P,T)}catch(A){throw u.at(-1)===m&&u.pop(),A}let I;try{let A={kind:"itx",...S};if(I=await n(this._createItxClient(A,m,a)),s){if(u.at(-1)!==m)throw new Error("Nested transactions must be closed in reverse order of creation.")}else if(u.length!==1)throw new Error("Cannot close transaction while a nested transaction is still active.");await this._engine.transaction("commit",P,S)}catch(A){let L=u.at(-1)!==m?Math.max(1,u.length):1;for(let q=0;q{kt("rollback attempt %d/%d failed: %O",q+1,L,E)});throw A}finally{u.at(-1)===m?u.pop():u.length=0}return I}_createItxClient(n,i,o){let s={kind:"nested",txId:n.id,scopeId:i,scopeState:o};return ve(Yt(ve(As(this),[ae("_appliedParent",()=>this._appliedParent._createItxClient(n,i,o)),ae("_createPrismaPromise",()=>Hi(n)),ae(su,()=>s)])),[Et(Os)])}$transaction(n,i){let o;typeof n=="function"?this._engineConfig.adapter?.adapterName==="@prisma/adapter-d1"?o=()=>{throw new Error("Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.")}:e.activeProvider==="mongodb"&&tu(this).kind==="nested"?o=()=>{throw new _.PrismaClientValidationError(`The ${e.activeProvider} provider does not support nested transactions`,{clientVersion:this._clientVersion})}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:"transaction",attributes:{method:"$transaction"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){n.otelParentCtx=this._tracingHelper.getActiveContext();let i=n.middlewareArgsMapper??Dm,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={operation:{name:"operation",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=async u=>{let{runInTransaction:m,args:P,...T}=u,S={...n,...T};P&&(S.args=i.middlewareArgsToRequestArgs(P)),n.transaction!==void 0&&m===!1&&delete S.transaction;let I=await Fs(this,S);if(!S.model)return I;let A=qs({dataPath:S.dataPath,modelName:S.model,args:S.args,runtimeDataModel:this._runtimeDataModel});return ks({result:I,modelName:A.modelName,args:A.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel,globalOmit:this._globalOmit})};return this._tracingHelper.runInChildSpan(s.operation,()=>new iu.AsyncResource("prisma-client-request").runInAsyncScope(()=>a(o)))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:u,argsMapper:m,transaction:P,unpacker:T,otelParentCtx:S,customDataProxyFetch:I}){try{n=m?m(n):n;let A={name:"serialize"},M=this._tracingHelper.runInChildSpan(A,()=>Vr({modelName:u,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures,globalOmit:this._globalOmit}));return K.enabled("prisma:client")&&(kt("Prisma Client call:"),kt(`prisma.${i}(${gs(n)})`),kt("Generated request:"),kt(JSON.stringify(M,null,2)+` +`)),P?.kind==="batch"&&await P.lock,this._requestHandler.request({protocolQuery:M,modelName:u,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:P,unpacker:T,otelParentCtx:S,otelChildCtx:this._tracingHelper.getActiveContext(),globalOmit:this._globalOmit,customDataProxyFetch:I})}catch(A){throw A.clientVersion=this._clientVersion,A}}_hasPreviewFlag(n){return!!this._engineConfig.previewFeatures?.includes(n)}$extends=Rs}return t}function ru(e,t){return Lm(e)?[new nu.Sql(e,t),Dl]:[e,Ml]}function Lm(e){return Array.isArray(e)&&Array.isArray(e.raw)}var Vm=new Set(["toJSON","$$typeof","asymmetricMatch",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function lu(e){return new Proxy(e,{get(t,r){if(r in t)return t[r];if(!Vm.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}var qm=()=>globalThis.process?.release?.name==="node",Um=()=>!!globalThis.Bun||!!globalThis.process?.versions?.bun,jm=()=>!!globalThis.Deno,Bm=()=>typeof globalThis.Netlify=="object",Qm=()=>typeof globalThis.EdgeRuntime=="object",Jm=()=>globalThis.navigator?.userAgent==="Cloudflare-Workers";function Gm(){return[[Bm,"netlify"],[Qm,"edge-light"],[Jm,"workerd"],[jm,"deno"],[Um,"bun"],[qm,"node"]].flatMap(r=>r[0]()?[r[1]]:[]).at(0)??""}var zm={node:"Node.js",workerd:"Cloudflare Workers",deno:"Deno and Deno Deploy",netlify:"Netlify Edge Functions","edge-light":"Edge Runtime (Vercel Edge Functions, Vercel Edge Middleware, Next.js (Pages Router) Edge API Routes, Next.js (App Router) Edge Route Handlers or Next.js Middleware)"};function uu(){let e=Gm();return{id:e,prettyName:zm[e]||e,isEdge:["workerd","deno","netlify","edge-light"].includes(e)}}var _=require("@prisma/client-runtime-utils"),Fe=require("@prisma/client-runtime-utils"),ee=require("@prisma/client-runtime-utils"),cu=require("@prisma/client-runtime-utils");0&&(module.exports={AnyNull,DMMF,DbNull,Debug,Decimal,Extensions,JsonNull,NullTypes,ObjectEnumValue,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,createParam,defineDmmfProperty,deserializeJsonObject,deserializeRawResult,dmmfToRuntimeDataModel,empty,getPrismaClient,getRuntime,isAnyNull,isDbNull,isJsonNull,isObjectEnumValue,join,makeStrictEnum,makeTypedQueryFactory,raw,serializeJsonQuery,skip,sqltag,warnOnce}); +//# sourceMappingURL=client.js.map diff --git a/apps/api-effect/src/generated/prisma/runtime/index-browser.d.ts b/apps/api-effect/src/generated/prisma/runtime/index-browser.d.ts new file mode 100644 index 00000000..f6d26b32 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/runtime/index-browser.d.ts @@ -0,0 +1,90 @@ +import { AnyNull } from '@prisma/client-runtime-utils'; +import { DbNull } from '@prisma/client-runtime-utils'; +import { Decimal } from '@prisma/client-runtime-utils'; +import { isAnyNull } from '@prisma/client-runtime-utils'; +import { isDbNull } from '@prisma/client-runtime-utils'; +import { isJsonNull } from '@prisma/client-runtime-utils'; +import { isObjectEnumValue } from '@prisma/client-runtime-utils'; +import { JsonNull } from '@prisma/client-runtime-utils'; +import { NullTypes } from '@prisma/client-runtime-utils'; + +export { AnyNull } + +declare type Args = T extends { + [K: symbol]: { + types: { + operations: { + [K in F]: { + args: any; + }; + }; + }; + }; +} ? T[symbol]['types']['operations'][F]['args'] : any; + +export { DbNull } + +export { Decimal } + +declare type Exact = (A extends unknown ? (W extends A ? { + [K in keyof A]: Exact; +} : W) : never) | (A extends Narrowable ? A : never); + +export declare function getRuntime(): GetRuntimeOutput; + +declare type GetRuntimeOutput = { + id: RuntimeName; + prettyName: string; + isEdge: boolean; +}; + +export { isAnyNull } + +export { isDbNull } + +export { isJsonNull } + +export { isObjectEnumValue } + +export { JsonNull } + +/** + * Generates more strict variant of an enum which, unlike regular enum, + * throws on non-existing property access. This can be useful in following situations: + * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input + * - enum values are generated dynamically from DMMF. + * + * In that case, if using normal enums and no compile-time typechecking, using non-existing property + * will result in `undefined` value being used, which will be accepted. Using strict enum + * in this case will help to have a runtime exception, telling you that you are probably doing something wrong. + * + * Note: if you need to check for existence of a value in the enum you can still use either + * `in` operator or `hasOwnProperty` function. + * + * @param definition + * @returns + */ +export declare function makeStrictEnum>(definition: T): T; + +declare type Narrowable = string | number | bigint | boolean | []; + +export { NullTypes } + +declare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'updateManyAndReturn' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw'; + +declare namespace Public { + export { + validator + } +} +export { Public } + +declare type RuntimeName = 'workerd' | 'deno' | 'netlify' | 'node' | 'bun' | 'edge-light' | ''; + +declare function validator(): (select: Exact) => S; + +declare function validator, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): (select: Exact>) => S; + +declare function validator, O extends keyof C[M] & Operation, P extends keyof Args>(client: C, model: M, operation: O, prop: P): (select: Exact[P]>) => S; + +export { } diff --git a/apps/api-effect/src/generated/prisma/runtime/index-browser.js b/apps/api-effect/src/generated/prisma/runtime/index-browser.js new file mode 100644 index 00000000..38dd6bbe --- /dev/null +++ b/apps/api-effect/src/generated/prisma/runtime/index-browser.js @@ -0,0 +1,6 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +"use strict";var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var a=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})},y=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of p(t))!f.call(e,i)&&i!==n&&s(e,i,{get:()=>t[i],enumerable:!(r=g(t,i))||r.enumerable});return e};var x=e=>y(s({},"__esModule",{value:!0}),e);var M={};a(M,{AnyNull:()=>o.AnyNull,DbNull:()=>o.DbNull,Decimal:()=>m.Decimal,JsonNull:()=>o.JsonNull,NullTypes:()=>o.NullTypes,Public:()=>l,getRuntime:()=>c,isAnyNull:()=>o.isAnyNull,isDbNull:()=>o.isDbNull,isJsonNull:()=>o.isJsonNull,isObjectEnumValue:()=>o.isObjectEnumValue,makeStrictEnum:()=>u});module.exports=x(M);var l={};a(l,{validator:()=>d});function d(...e){return t=>t}var b=new Set(["toJSON","$$typeof","asymmetricMatch",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function u(e){return new Proxy(e,{get(t,n){if(n in t)return t[n];if(!b.has(n))throw new TypeError("Invalid enum value: ".concat(String(n)))}})}var N=()=>{var e,t;return((t=(e=globalThis.process)==null?void 0:e.release)==null?void 0:t.name)==="node"},E=()=>{var e,t;return!!globalThis.Bun||!!((t=(e=globalThis.process)==null?void 0:e.versions)!=null&&t.bun)},S=()=>!!globalThis.Deno,R=()=>typeof globalThis.Netlify=="object",h=()=>typeof globalThis.EdgeRuntime=="object",C=()=>{var e;return((e=globalThis.navigator)==null?void 0:e.userAgent)==="Cloudflare-Workers"};function k(){var n;return(n=[[R,"netlify"],[h,"edge-light"],[C,"workerd"],[S,"deno"],[E,"bun"],[N,"node"]].flatMap(r=>r[0]()?[r[1]]:[]).at(0))!=null?n:""}var O={node:"Node.js",workerd:"Cloudflare Workers",deno:"Deno and Deno Deploy",netlify:"Netlify Edge Functions","edge-light":"Edge Runtime (Vercel Edge Functions, Vercel Edge Middleware, Next.js (Pages Router) Edge API Routes, Next.js (App Router) Edge Route Handlers or Next.js Middleware)"};function c(){let e=k();return{id:e,prettyName:O[e]||e,isEdge:["workerd","deno","netlify","edge-light"].includes(e)}}var o=require("@prisma/client-runtime-utils"),m=require("@prisma/client-runtime-utils");0&&(module.exports={AnyNull,DbNull,Decimal,JsonNull,NullTypes,Public,getRuntime,isAnyNull,isDbNull,isJsonNull,isObjectEnumValue,makeStrictEnum}); +//# sourceMappingURL=index-browser.js.map diff --git a/apps/api-effect/src/generated/prisma/runtime/wasm-compiler-edge.js b/apps/api-effect/src/generated/prisma/runtime/wasm-compiler-edge.js new file mode 100644 index 00000000..19da6108 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/runtime/wasm-compiler-edge.js @@ -0,0 +1,100 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +"use strict";var Wl=Object.create;var Qr=Object.defineProperty;var Kl=Object.getOwnPropertyDescriptor;var Xl=Object.getOwnPropertyNames;var Zl=Object.getPrototypeOf,Yl=Object.prototype.hasOwnProperty;var We=(t,e)=>()=>(t&&(e=t(t=0)),e);var Nt=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Dt=(t,e)=>{for(var r in e)Qr(t,r,{get:e[r],enumerable:!0})},ko=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Xl(e))!Yl.call(t,i)&&i!==r&&Qr(t,i,{get:()=>e[i],enumerable:!(n=Kl(e,i))||n.enumerable});return t};var Mt=(t,e,r)=>(r=t!=null?Wl(Zl(t)):{},ko(e||!t||!t.__esModule?Qr(r,"default",{value:t,enumerable:!0}):r,t)),ec=t=>ko(Qr({},"__esModule",{value:!0}),t);function ri(t,e){if(e=e.toLowerCase(),e==="utf8"||e==="utf-8")return new x(ic.encode(t));if(e==="base64"||e==="base64url")return t=t.replace(/-/g,"+").replace(/_/g,"/"),t=t.replace(/[^A-Za-z0-9+/]/g,""),new x([...atob(t)].map(r=>r.charCodeAt(0)));if(e==="binary"||e==="ascii"||e==="latin1"||e==="latin-1")return new x([...t].map(r=>r.charCodeAt(0)));if(e==="ucs2"||e==="ucs-2"||e==="utf16le"||e==="utf-16le"){let r=new x(t.length*2),n=new DataView(r.buffer);for(let i=0;ia.startsWith("get")||a.startsWith("set")),n=r.map(a=>a.replace("get","read").replace("set","write")),i=(a,m)=>function(h=0){return de(h,"offset"),ke(h,"offset"),ge(h,"offset",this.length-1),new DataView(this.buffer)[r[a]](h,m)},o=(a,m)=>function(h,E=0){let N=r[a].match(/set(\w+\d+)/)[1].toLowerCase(),$=nc[N];return de(E,"offset"),ke(E,"offset"),ge(E,"offset",this.length-1),rc(h,"value",$[0],$[1]),new DataView(this.buffer)[r[a]](E,h,m),E+parseInt(r[a].match(/\d+/)[0])/8},s=a=>{a.forEach(m=>{m.includes("Uint")&&(t[m.replace("Uint","UInt")]=t[m]),m.includes("Float64")&&(t[m.replace("Float64","Double")]=t[m]),m.includes("Float32")&&(t[m.replace("Float32","Float")]=t[m])})};n.forEach((a,m)=>{a.startsWith("read")&&(t[a]=i(m,!1),t[a+"LE"]=i(m,!0),t[a+"BE"]=i(m,!1)),a.startsWith("write")&&(t[a]=o(m,!1),t[a+"LE"]=o(m,!0),t[a+"BE"]=o(m,!1)),s([a,a+"LE",a+"BE"])})}function No(t){throw new Error(`Buffer polyfill does not implement "${t}"`)}function Jr(t,e){if(!(t instanceof Uint8Array))throw new TypeError(`The "${e}" argument must be an instance of Buffer or Uint8Array`)}function ge(t,e,r=ac+1){if(t<0||t>r){let n=new RangeError(`The value of "${e}" is out of range. It must be >= 0 && <= ${r}. Received ${t}`);throw n.code="ERR_OUT_OF_RANGE",n}}function de(t,e){if(typeof t!="number"){let r=new TypeError(`The "${e}" argument must be of type number. Received type ${typeof t}.`);throw r.code="ERR_INVALID_ARG_TYPE",r}}function ke(t,e){if(!Number.isInteger(t)||Number.isNaN(t)){let r=new RangeError(`The value of "${e}" is out of range. It must be an integer. Received ${t}`);throw r.code="ERR_OUT_OF_RANGE",r}}function rc(t,e,r,n){if(tn){let i=new RangeError(`The value of "${e}" is out of range. It must be >= ${r} and <= ${n}. Received ${t}`);throw i.code="ERR_OUT_OF_RANGE",i}}function Oo(t,e){if(typeof t!="string"){let r=new TypeError(`The "${e}" argument must be of type string. Received type ${typeof t}`);throw r.code="ERR_INVALID_ARG_TYPE",r}}function uc(t,e="utf8"){return x.from(t,e)}var x,nc,ic,oc,sc,ac,w,ni,u=We(()=>{"use strict";x=class t extends Uint8Array{_isBuffer=!0;get offset(){return this.byteOffset}static alloc(e,r=0,n="utf8"){return Oo(n,"encoding"),t.allocUnsafe(e).fill(r,n)}static allocUnsafe(e){return t.from(e)}static allocUnsafeSlow(e){return t.from(e)}static isBuffer(e){return e&&!!e._isBuffer}static byteLength(e,r="utf8"){if(typeof e=="string")return ri(e,r).byteLength;if(e&&e.byteLength)return e.byteLength;let n=new TypeError('The "string" argument must be of type string or an instance of Buffer or ArrayBuffer.');throw n.code="ERR_INVALID_ARG_TYPE",n}static isEncoding(e){return sc.includes(e)}static compare(e,r){Jr(e,"buff1"),Jr(r,"buff2");for(let n=0;nr[n])return 1}return e.length===r.length?0:e.length>r.length?1:-1}static from(e,r="utf8"){if(e&&typeof e=="object"&&e.type==="Buffer")return new t(e.data);if(typeof e=="number")return new t(new Uint8Array(e));if(typeof e=="string")return ri(e,r);if(ArrayBuffer.isView(e)){let{byteOffset:n,byteLength:i,buffer:o}=e;return"map"in e&&typeof e.map=="function"?new t(e.map(s=>s%256),n,i):new t(o,n,i)}if(e&&typeof e=="object"&&("length"in e||"byteLength"in e||"buffer"in e))return new t(e);throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}static concat(e,r){if(e.length===0)return t.alloc(0);let n=[].concat(...e.map(o=>[...o])),i=t.alloc(r!==void 0?r:n.length);return i.set(r!==void 0?n.slice(0,r):n),i}slice(e=0,r=this.length){return this.subarray(e,r)}subarray(e=0,r=this.length){return Object.setPrototypeOf(super.subarray(e,r),t.prototype)}reverse(){return super.reverse(),this}readIntBE(e,r){de(e,"offset"),ke(e,"offset"),ge(e,"offset",this.length-1),de(r,"byteLength"),ke(r,"byteLength");let n=new DataView(this.buffer,e,r),i=0;for(let o=0;o=0;o--)i.setUint8(o,e&255),e=e/256;return r+n}writeUintBE(e,r,n){return this.writeUIntBE(e,r,n)}writeUIntLE(e,r,n){de(r,"offset"),ke(r,"offset"),ge(r,"offset",this.length-1),de(n,"byteLength"),ke(n,"byteLength");let i=new DataView(this.buffer,r,n);for(let o=0;or===e[n])}copy(e,r=0,n=0,i=this.length){ge(r,"targetStart"),ge(n,"sourceStart",this.length),ge(i,"sourceEnd"),r>>>=0,n>>>=0,i>>>=0;let o=0;for(;n=this.length?this.length-a:e.length),a);return this}includes(e,r=null,n="utf-8"){return this.indexOf(e,r,n)!==-1}lastIndexOf(e,r=null,n="utf-8"){return this.indexOf(e,r,n,!0)}indexOf(e,r=null,n="utf-8",i=!1){let o=i?this.findLastIndex.bind(this):this.findIndex.bind(this);n=typeof r=="string"?r:n;let s=t.from(typeof e=="number"?[e]:e,n),a=typeof r=="string"?0:r;return a=typeof r=="number"?a:null,a=Number.isNaN(a)?null:a,a??=i?this.length:0,a=a<0?this.length+a:a,s.length===0&&i===!1?a>=this.length?this.length:a:s.length===0&&i===!0?(a>=this.length?this.length:a)||this.length:o((m,h)=>(i?h<=a:h>=a)&&this[h]===s[0]&&s.every((N,$)=>this[h+$]===N))}toString(e="utf8",r=0,n=this.length){if(r=r<0?0:r,e=e.toString().toLowerCase(),n<=0)return"";if(e==="utf8"||e==="utf-8")return oc.decode(this.slice(r,n));if(e==="base64"||e==="base64url"){let i=btoa(this.reduce((o,s)=>o+ni(s),""));return e==="base64url"?i.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i}if(e==="binary"||e==="ascii"||e==="latin1"||e==="latin-1")return this.slice(r,n).reduce((i,o)=>i+ni(o&(e==="ascii"?127:255)),"");if(e==="ucs2"||e==="ucs-2"||e==="utf16le"||e==="utf-16le"){let i=new DataView(this.buffer.slice(r,n));return Array.from({length:i.byteLength/2},(o,s)=>s*2+1i+o.toString(16).padStart(2,"0"),"");No(`encoding "${e}"`)}toLocaleString(){return this.toString()}inspect(){return``}};nc={int8:[-128,127],int16:[-32768,32767],int32:[-2147483648,2147483647],uint8:[0,255],uint16:[0,65535],uint32:[0,4294967295],float32:[-1/0,1/0],float64:[-1/0,1/0],bigint64:[-0x8000000000000000n,0x7fffffffffffffffn],biguint64:[0n,0xffffffffffffffffn]},ic=new TextEncoder,oc=new TextDecoder,sc=["utf8","utf-8","hex","base64","ascii","binary","base64url","ucs2","ucs-2","utf16le","utf-16le","latin1","latin-1"],ac=4294967295;tc(x.prototype);w=new Proxy(uc,{construct(t,[e,r]){return x.from(e,r)},get(t,e){return x[e]}}),ni=String.fromCodePoint});var b,S,l=We(()=>{"use strict";b={nextTick:(t,...e)=>{setTimeout(()=>{t(...e)},0)},env:{},version:"",cwd:()=>"/",stderr:{},argv:["/bin/node"],pid:1e4},{cwd:S}=b});var T,c=We(()=>{"use strict";T=globalThis.performance??(()=>{let t=Date.now();return{now:()=>Date.now()-t}})()});var v,p=We(()=>{"use strict";v=()=>{};v.prototype=v});function Lo(t,e){var r,n,i,o,s,a,m,h,E=t.constructor,N=E.precision;if(!t.s||!e.s)return e.s||(e=new E(t)),se?te(e,N):e;if(m=t.d,h=e.d,s=t.e,i=e.e,m=m.slice(),o=s-i,o){for(o<0?(n=m,o=-o,a=h.length):(n=h,i=s,a=m.length),s=Math.ceil(N/ie),a=s>a?s+1:a+1,o>a&&(o=a,n.length=1),n.reverse();o--;)n.push(0);n.reverse()}for(a=m.length,o=h.length,a-o<0&&(o=a,n=h,h=m,m=n),r=0;o;)r=(m[--o]=m[o]+h[o]+r)/he|0,m[o]%=he;for(r&&(m.unshift(r),++i),a=m.length;m[--a]==0;)m.pop();return e.d=m,e.e=i,se?te(e,N):e}function Xe(t,e,r){if(t!==~~t||tr)throw Error(wt+t)}function Ke(t){var e,r,n,i=t.length-1,o="",s=t[0];if(i>0){for(o+=s,e=1;e16)throw Error(oi+me(t));if(!t.s)return new E(De);for(e==null?(se=!1,a=N):a=e,s=new E(.03125);t.abs().gte(.1);)t=t.times(s),h+=5;for(n=Math.log(yt(2,h))/Math.LN10*2+5|0,a+=n,r=i=o=new E(De),E.precision=a;;){if(i=te(i.times(t),a),r=r.times(++m),s=o.plus(ot(i,r,a)),Ke(s.d).slice(0,a)===Ke(o.d).slice(0,a)){for(;h--;)o=te(o.times(o),a);return E.precision=N,e==null?(se=!0,te(o,N)):o}o=s}}function me(t){for(var e=t.e*ie,r=t.d[0];r>=10;r/=10)e++;return e}function ii(t,e,r){if(e>t.LN10.sd())throw se=!0,r&&(t.precision=r),Error(Fe+"LN10 precision limit exceeded");return te(new t(t.LN10),e)}function lt(t){for(var e="";t--;)e+="0";return e}function ar(t,e){var r,n,i,o,s,a,m,h,E,N=1,$=10,U=t,B=U.d,q=U.constructor,J=q.precision;if(U.s<1)throw Error(Fe+(U.s?"NaN":"-Infinity"));if(U.eq(De))return new q(0);if(e==null?(se=!1,h=J):h=e,U.eq(10))return e==null&&(se=!0),ii(q,h);if(h+=$,q.precision=h,r=Ke(B),n=r.charAt(0),o=me(U),Math.abs(o)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)U=U.times(t),r=Ke(U.d),n=r.charAt(0),N++;o=me(U),n>1?(U=new q("0."+r),o++):U=new q(n+"."+r.slice(1))}else return m=ii(q,h+2,J).times(o+""),U=ar(new q(n+"."+r.slice(1)),h-$).plus(m),q.precision=J,e==null?(se=!0,te(U,J)):U;for(a=s=U=ot(U.minus(De),U.plus(De),h),E=te(U.times(U),h),i=3;;){if(s=te(s.times(E),h),m=a.plus(ot(s,new q(i),h)),Ke(m.d).slice(0,h)===Ke(a.d).slice(0,h))return a=a.times(2),o!==0&&(a=a.plus(ii(q,h+2,J).times(o+""))),a=ot(a,new q(N),h),q.precision=J,e==null?(se=!0,te(a,J)):a;a=m,i+=2}}function Do(t,e){var r,n,i;for((r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),n=0;e.charCodeAt(n)===48;)++n;for(i=e.length;e.charCodeAt(i-1)===48;)--i;if(e=e.slice(n,i),e){if(i-=n,r=r-n-1,t.e=Lt(r/ie),t.d=[],n=(r+1)%ie,r<0&&(n+=ie),nGr||t.e<-Gr))throw Error(oi+r)}else t.s=0,t.e=0,t.d=[0];return t}function te(t,e,r){var n,i,o,s,a,m,h,E,N=t.d;for(s=1,o=N[0];o>=10;o/=10)s++;if(n=e-s,n<0)n+=ie,i=e,h=N[E=0];else{if(E=Math.ceil((n+1)/ie),o=N.length,E>=o)return t;for(h=o=N[E],s=1;o>=10;o/=10)s++;n%=ie,i=n-ie+s}if(r!==void 0&&(o=yt(10,s-i-1),a=h/o%10|0,m=e<0||N[E+1]!==void 0||h%o,m=r<4?(a||m)&&(r==0||r==(t.s<0?3:2)):a>5||a==5&&(r==4||m||r==6&&(n>0?i>0?h/yt(10,s-i):0:N[E-1])%10&1||r==(t.s<0?8:7))),e<1||!N[0])return m?(o=me(t),N.length=1,e=e-o-1,N[0]=yt(10,(ie-e%ie)%ie),t.e=Lt(-e/ie)||0):(N.length=1,N[0]=t.e=t.s=0),t;if(n==0?(N.length=E,o=1,E--):(N.length=E+1,o=yt(10,ie-n),N[E]=i>0?(h/yt(10,s-i)%yt(10,i)|0)*o:0),m)for(;;)if(E==0){(N[0]+=o)==he&&(N[0]=1,++t.e);break}else{if(N[E]+=o,N[E]!=he)break;N[E--]=0,o=1}for(n=N.length;N[--n]===0;)N.pop();if(se&&(t.e>Gr||t.e<-Gr))throw Error(oi+me(t));return t}function $o(t,e){var r,n,i,o,s,a,m,h,E,N,$=t.constructor,U=$.precision;if(!t.s||!e.s)return e.s?e.s=-e.s:e=new $(t),se?te(e,U):e;if(m=t.d,N=e.d,n=e.e,h=t.e,m=m.slice(),s=h-n,s){for(E=s<0,E?(r=m,s=-s,a=N.length):(r=N,n=h,a=m.length),i=Math.max(Math.ceil(U/ie),a)+2,s>i&&(s=i,r.length=1),r.reverse(),i=s;i--;)r.push(0);r.reverse()}else{for(i=m.length,a=N.length,E=i0;--i)m[a++]=0;for(i=N.length;i>s;){if(m[--i]0?o=o.charAt(0)+"."+o.slice(1)+lt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i<0?"e":"e+")+i):i<0?(o="0."+lt(-i-1)+o,r&&(n=r-s)>0&&(o+=lt(n))):i>=s?(o+=lt(i+1-s),r&&(n=r-i-1)>0&&(o=o+"."+lt(n))):((n=i+1)0&&(i+1===s&&(o+="."),o+=lt(n))),t.s<0?"-"+o:o}function Mo(t,e){if(t.length>e)return t.length=e,!0}function Uo(t){var e,r,n;function i(o){var s=this;if(!(s instanceof i))return new i(o);if(s.constructor=i,o instanceof i){s.s=o.s,s.e=o.e,s.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(wt+o);if(o>0)s.s=1;else if(o<0)o=-o,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(o===~~o&&o<1e7){s.e=0,s.d=[o];return}return Do(s,o.toString())}else if(typeof o!="string")throw Error(wt+o);if(o.charCodeAt(0)===45?(o=o.slice(1),s.s=-1):s.s=1,cc.test(o))Do(s,o);else throw Error(wt+o)}if(i.prototype=V,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=Uo,i.config=i.set=pc,t===void 0&&(t={}),t)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],e=0;e=i[e+1]&&n<=i[e+2])this[r]=n;else throw Error(wt+r+": "+n);if((n=t[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(wt+r+": "+n);return this}var _t,lc,Vo,se,Fe,wt,oi,Lt,yt,cc,De,he,ie,_o,Gr,V,ot,Vo,qo=We(()=>{"use strict";u();l();c();p();d();_t=1e9,lc={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},se=!0,Fe="[DecimalError] ",wt=Fe+"Invalid argument: ",oi=Fe+"Exponent out of range: ",Lt=Math.floor,yt=Math.pow,cc=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,he=1e7,ie=7,_o=9007199254740991,Gr=Lt(_o/ie),V={};V.absoluteValue=V.abs=function(){var t=new this.constructor(this);return t.s&&(t.s=1),t};V.comparedTo=V.cmp=function(t){var e,r,n,i,o=this;if(t=new o.constructor(t),o.s!==t.s)return o.s||-t.s;if(o.e!==t.e)return o.e>t.e^o.s<0?1:-1;for(n=o.d.length,i=t.d.length,e=0,r=nt.d[e]^o.s<0?1:-1;return n===i?0:n>i^o.s<0?1:-1};V.decimalPlaces=V.dp=function(){var t=this,e=t.d.length-1,r=(e-t.e)*ie;if(e=t.d[e],e)for(;e%10==0;e/=10)r--;return r<0?0:r};V.dividedBy=V.div=function(t){return ot(this,new this.constructor(t))};V.dividedToIntegerBy=V.idiv=function(t){var e=this,r=e.constructor;return te(ot(e,new r(t),0,1),r.precision)};V.equals=V.eq=function(t){return!this.cmp(t)};V.exponent=function(){return me(this)};V.greaterThan=V.gt=function(t){return this.cmp(t)>0};V.greaterThanOrEqualTo=V.gte=function(t){return this.cmp(t)>=0};V.isInteger=V.isint=function(){return this.e>this.d.length-2};V.isNegative=V.isneg=function(){return this.s<0};V.isPositive=V.ispos=function(){return this.s>0};V.isZero=function(){return this.s===0};V.lessThan=V.lt=function(t){return this.cmp(t)<0};V.lessThanOrEqualTo=V.lte=function(t){return this.cmp(t)<1};V.logarithm=V.log=function(t){var e,r=this,n=r.constructor,i=n.precision,o=i+5;if(t===void 0)t=new n(10);else if(t=new n(t),t.s<1||t.eq(De))throw Error(Fe+"NaN");if(r.s<1)throw Error(Fe+(r.s?"NaN":"-Infinity"));return r.eq(De)?new n(0):(se=!1,e=ot(ar(r,o),ar(t,o),o),se=!0,te(e,i))};V.minus=V.sub=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?$o(e,t):Lo(e,(t.s=-t.s,t))};V.modulo=V.mod=function(t){var e,r=this,n=r.constructor,i=n.precision;if(t=new n(t),!t.s)throw Error(Fe+"NaN");return r.s?(se=!1,e=ot(r,t,0,1).times(t),se=!0,r.minus(e)):te(new n(r),i)};V.naturalExponential=V.exp=function(){return Fo(this)};V.naturalLogarithm=V.ln=function(){return ar(this)};V.negated=V.neg=function(){var t=new this.constructor(this);return t.s=-t.s||0,t};V.plus=V.add=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?Lo(e,t):$o(e,(t.s=-t.s,t))};V.precision=V.sd=function(t){var e,r,n,i=this;if(t!==void 0&&t!==!!t&&t!==1&&t!==0)throw Error(wt+t);if(e=me(i)+1,n=i.d.length-1,r=n*ie+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return t&&e>r?e:r};V.squareRoot=V.sqrt=function(){var t,e,r,n,i,o,s,a=this,m=a.constructor;if(a.s<1){if(!a.s)return new m(0);throw Error(Fe+"NaN")}for(t=me(a),se=!1,i=Math.sqrt(+a),i==0||i==1/0?(e=Ke(a.d),(e.length+t)%2==0&&(e+="0"),i=Math.sqrt(e),t=Lt((t+1)/2)-(t<0||t%2),i==1/0?e="5e"+t:(e=i.toExponential(),e=e.slice(0,e.indexOf("e")+1)+t),n=new m(e)):n=new m(i.toString()),r=m.precision,i=s=r+3;;)if(o=n,n=o.plus(ot(a,o,s+2)).times(.5),Ke(o.d).slice(0,s)===(e=Ke(n.d)).slice(0,s)){if(e=e.slice(s-3,s+1),i==s&&e=="4999"){if(te(o,r+1,0),o.times(o).eq(a)){n=o;break}}else if(e!="9999")break;s+=4}return se=!0,te(n,r)};V.times=V.mul=function(t){var e,r,n,i,o,s,a,m,h,E=this,N=E.constructor,$=E.d,U=(t=new N(t)).d;if(!E.s||!t.s)return new N(0);for(t.s*=E.s,r=E.e+t.e,m=$.length,h=U.length,m=0;){for(e=0,i=m+n;i>n;)a=o[i]+U[n]*$[i-n-1]+e,o[i--]=a%he|0,e=a/he|0;o[i]=(o[i]+e)%he|0}for(;!o[--s];)o.pop();return e?++r:o.shift(),t.d=o,t.e=r,se?te(t,N.precision):t};V.toDecimalPlaces=V.todp=function(t,e){var r=this,n=r.constructor;return r=new n(r),t===void 0?r:(Xe(t,0,_t),e===void 0?e=n.rounding:Xe(e,0,8),te(r,t+me(r)+1,e))};V.toExponential=function(t,e){var r,n=this,i=n.constructor;return t===void 0?r=bt(n,!0):(Xe(t,0,_t),e===void 0?e=i.rounding:Xe(e,0,8),n=te(new i(n),t+1,e),r=bt(n,!0,t+1)),r};V.toFixed=function(t,e){var r,n,i=this,o=i.constructor;return t===void 0?bt(i):(Xe(t,0,_t),e===void 0?e=o.rounding:Xe(e,0,8),n=te(new o(i),t+me(i)+1,e),r=bt(n.abs(),!1,t+me(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};V.toInteger=V.toint=function(){var t=this,e=t.constructor;return te(new e(t),me(t)+1,e.rounding)};V.toNumber=function(){return+this};V.toPower=V.pow=function(t){var e,r,n,i,o,s,a=this,m=a.constructor,h=12,E=+(t=new m(t));if(!t.s)return new m(De);if(a=new m(a),!a.s){if(t.s<1)throw Error(Fe+"Infinity");return a}if(a.eq(De))return a;if(n=m.precision,t.eq(De))return te(a,n);if(e=t.e,r=t.d.length-1,s=e>=r,o=a.s,s){if((r=E<0?-E:E)<=_o){for(i=new m(De),e=Math.ceil(n/ie+4),se=!1;r%2&&(i=i.times(a),Mo(i.d,e)),r=Lt(r/2),r!==0;)a=a.times(a),Mo(a.d,e);return se=!0,t.s<0?new m(De).div(i):te(i,n)}}else if(o<0)throw Error(Fe+"NaN");return o=o<0&&t.d[Math.max(e,r)]&1?-1:1,a.s=1,se=!1,i=t.times(ar(a,n+h)),se=!0,i=Fo(i),i.s=o,i};V.toPrecision=function(t,e){var r,n,i=this,o=i.constructor;return t===void 0?(r=me(i),n=bt(i,r<=o.toExpNeg||r>=o.toExpPos)):(Xe(t,1,_t),e===void 0?e=o.rounding:Xe(e,0,8),i=te(new o(i),t,e),r=me(i),n=bt(i,t<=r||r<=o.toExpNeg,t)),n};V.toSignificantDigits=V.tosd=function(t,e){var r=this,n=r.constructor;return t===void 0?(t=n.precision,e=n.rounding):(Xe(t,1,_t),e===void 0?e=n.rounding:Xe(e,0,8)),te(new n(r),t,e)};V.toString=V.valueOf=V.val=V.toJSON=V[Symbol.for("nodejs.util.inspect.custom")]=function(){var t=this,e=me(t),r=t.constructor;return bt(t,e<=r.toExpNeg||e>=r.toExpPos)};ot=function(){function t(n,i){var o,s=0,a=n.length;for(n=n.slice();a--;)o=n[a]*i+s,n[a]=o%he|0,s=o/he|0;return s&&n.unshift(s),n}function e(n,i,o,s){var a,m;if(o!=s)m=o>s?1:-1;else for(a=m=0;ai[a]?1:-1;break}return m}function r(n,i,o){for(var s=0;o--;)n[o]-=s,s=n[o]1;)n.shift()}return function(n,i,o,s){var a,m,h,E,N,$,U,B,q,J,Z,L,z,ce,Ie,Se,pe,f,g=n.constructor,y=n.s==i.s?1:-1,k=n.d,P=i.d;if(!n.s)return new g(n);if(!i.s)throw Error(Fe+"Division by zero");for(m=n.e-i.e,pe=P.length,Ie=k.length,U=new g(y),B=U.d=[],h=0;P[h]==(k[h]||0);)++h;if(P[h]>(k[h]||0)&&--m,o==null?L=o=g.precision:s?L=o+(me(n)-me(i))+1:L=o,L<0)return new g(0);if(L=L/ie+2|0,h=0,pe==1)for(E=0,P=P[0],L++;(h1&&(P=t(P,E),k=t(k,E),pe=P.length,Ie=k.length),ce=pe,q=k.slice(0,pe),J=q.length;J=he/2&&++Se;do E=0,a=e(P,q,pe,J),a<0?(Z=q[0],pe!=J&&(Z=Z*he+(q[1]||0)),E=Z/Se|0,E>1?(E>=he&&(E=he-1),N=t(P,E),$=N.length,J=q.length,a=e(N,q,$,J),a==1&&(E--,r(N,pe<$?f:P,$))):(E==0&&(a=E=1),N=P.slice()),$=N.length,${"use strict";qo()});var ls={};Dt(ls,{Hash:()=>pr,createHash:()=>us,default:()=>$t,randomFillSync:()=>as,randomUUID:()=>ss,webcrypto:()=>dr});function ss(){return globalThis.crypto.randomUUID()}function as(t,e,r){return e!==void 0&&(r!==void 0?t=t.subarray(e,e+r):t=t.subarray(e)),globalThis.crypto.getRandomValues(t)}function us(t){return new pr(t)}var dr,pr,$t,Kr=We(()=>{"use strict";u();l();c();p();d();dr=globalThis.crypto;pr=class{#e=[];#t;constructor(e){this.#t=e}update(e){this.#e.push(e)}async digest(){let e=new Uint8Array(this.#e.reduce((i,o)=>i+o.length,0)),r=0;for(let i of this.#e)e.set(i,r),r+=i.length;let n=await globalThis.crypto.subtle.digest(this.#t,e);return new Uint8Array(n)}},$t={webcrypto:dr,randomUUID:ss,randomFillSync:as,createHash:us,Hash:pr}});var cs=Nt(()=>{"use strict";u();l();c();p();d()});var ps=Nt((ey,yc)=>{yc.exports={name:"@prisma/engines-version",version:"7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3",main:"index.js",types:"index.d.ts",license:"Apache-2.0",author:"Tim Suchanek ",prisma:{enginesVersion:"0edf323efd1d98336f3f0a68684b56f689b900d3"},repository:{type:"git",url:"https://github.com/prisma/engines-wrapper.git",directory:"packages/engines-version"},devDependencies:{"@types/node":"18.19.76",typescript:"4.9.5"},files:["index.js","index.d.ts"],scripts:{build:"tsc -d"}}});var ds=Nt(Xr=>{"use strict";u();l();c();p();d();Object.defineProperty(Xr,"__esModule",{value:!0});Xr.enginesVersion=void 0;Xr.enginesVersion=ps().prisma.enginesVersion});var hs=Nt((my,gs)=>{"use strict";u();l();c();p();d();gs.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let n=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(n,r.indent.repeat(e))}});var ws=Nt(($y,Yr)=>{"use strict";u();l();c();p();d();Yr.exports=(t={})=>{let e;if(t.repoUrl)e=t.repoUrl;else if(t.user&&t.repo)e=`https://github.com/${t.user}/${t.repo}`;else throw new Error("You need to specify either the `repoUrl` option or both the `user` and `repo` options");let r=new URL(`${e}/issues/new`),n=["body","title","labels","template","milestone","assignee","projects"];for(let i of n){let o=t[i];if(o!==void 0){if(i==="labels"||i==="projects"){if(!Array.isArray(o))throw new TypeError(`The \`${i}\` option should be an array`);o=o.join(",")}r.searchParams.set(i,o)}}return r.toString()};Yr.exports.default=Yr.exports});var yi=Nt((Ab,Es)=>{"use strict";u();l();c();p();d();Es.exports=function(){function t(e,r,n,i,o){return en?n+1:e+1:i===o?r:r+1}return function(e,r){if(e===r)return 0;if(e.length>r.length){var n=e;e=r,r=n}for(var i=e.length,o=r.length;i>0&&e.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s{"use strict";u();l();c();p();d()});var Rs=We(()=>{"use strict";u();l();c();p();d()});var yn,Ys=We(()=>{"use strict";u();l();c();p();d();yn=class{events={};on(e,r){return this.events[e]||(this.events[e]=[]),this.events[e].push(r),this}emit(e,...r){return this.events[e]?(this.events[e].forEach(n=>{n(...r)}),!0):!1}}});var cf={};Dt(cf,{AnyNull:()=>Ee.AnyNull,DMMF:()=>yr,DbNull:()=>Ee.DbNull,Debug:()=>ye,Decimal:()=>zl.Decimal,Extensions:()=>si,JsonNull:()=>Ee.JsonNull,NullTypes:()=>Ee.NullTypes,ObjectEnumValue:()=>Ee.ObjectEnumValue,PrismaClientInitializationError:()=>K.PrismaClientInitializationError,PrismaClientKnownRequestError:()=>K.PrismaClientKnownRequestError,PrismaClientRustPanicError:()=>K.PrismaClientRustPanicError,PrismaClientUnknownRequestError:()=>K.PrismaClientUnknownRequestError,PrismaClientValidationError:()=>K.PrismaClientValidationError,Public:()=>ai,Sql:()=>it.Sql,createParam:()=>Js,defineDmmfProperty:()=>Xs,deserializeJsonObject:()=>Ge,deserializeRawResult:()=>Zn,dmmfToRuntimeDataModel:()=>Go,empty:()=>it.empty,getPrismaClient:()=>Jl,getRuntime:()=>Hl,isAnyNull:()=>Ee.isAnyNull,isDbNull:()=>Ee.isDbNull,isJsonNull:()=>Ee.isJsonNull,isObjectEnumValue:()=>Ee.isObjectEnumValue,join:()=>it.join,makeStrictEnum:()=>Gl,makeTypedQueryFactory:()=>Zs,raw:()=>it.raw,serializeJsonQuery:()=>fn,skip:()=>mn,sqltag:()=>it.sql,warnOnce:()=>hi});module.exports=ec(cf);u();l();c();p();d();var si={};Dt(si,{defineExtension:()=>Bo,getExtensionContext:()=>jo});u();l();c();p();d();u();l();c();p();d();function Bo(t){return typeof t=="function"?t:e=>e.$extends(t)}u();l();c();p();d();function jo(t){return t}var ai={};Dt(ai,{validator:()=>Qo});u();l();c();p();d();u();l();c();p();d();function Qo(...t){return e=>e}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var Ze=class{_map=new Map;get(e){return this._map.get(e)?.value}set(e,r){this._map.set(e,{value:r})}getOrCreate(e,r){let n=this._map.get(e);if(n)return n.value;let i=r();return this.set(e,i),i}};u();l();c();p();d();function ct(t){return t.substring(0,1).toLowerCase()+t.substring(1)}u();l();c();p();d();function Jo(t,e){let r={};for(let n of t){let i=n[e];r[i]=n}return r}u();l();c();p();d();function ur(t){let e;return{get(){return e||(e={value:t()}),e.value}}}u();l();c();p();d();function Go(t){return{models:ui(t.models),enums:ui(t.enums),types:ui(t.types)}}function ui(t){let e={};for(let{name:r,...n}of t)e[r]=n;return e}var Hs=require("@prisma/client-runtime-utils");u();l();c();p();d();u();l();c();p();d();var li,Ho,zo,Wo,Ko=!0;typeof b<"u"&&({FORCE_COLOR:li,NODE_DISABLE_COLORS:Ho,NO_COLOR:zo,TERM:Wo}=b.env||{},Ko=b.stdout&&b.stdout.isTTY);var dc={enabled:!Ho&&zo==null&&Wo!=="dumb"&&(li!=null&&li!=="0"||Ko)};function ne(t,e){let r=new RegExp(`\\x1b\\[${e}m`,"g"),n=`\x1B[${t}m`,i=`\x1B[${e}m`;return function(o){return!dc.enabled||o==null?o:n+(~(""+o).indexOf(i)?o.replace(r,i+n):o)+i}}var Xg=ne(0,0),Hr=ne(1,22),zr=ne(2,22),Zg=ne(3,23),Wr=ne(4,24),Yg=ne(7,27),eh=ne(8,28),th=ne(9,29),rh=ne(30,39),Ft=ne(31,39),Xo=ne(32,39),Zo=ne(33,39),Yo=ne(34,39),nh=ne(35,39),es=ne(36,39),ih=ne(37,39),ts=ne(90,39),oh=ne(90,39),sh=ne(40,49),ah=ne(41,49),uh=ne(42,49),lh=ne(43,49),ch=ne(44,49),ph=ne(45,49),dh=ne(46,49),mh=ne(47,49);u();l();c();p();d();var mc=100,rs=["green","yellow","blue","magenta","cyan","red"],lr=[],ns=Date.now(),fc=0,ci=typeof b<"u"?b.env:{};globalThis.DEBUG??=ci.DEBUG??"";globalThis.DEBUG_COLORS??=ci.DEBUG_COLORS?ci.DEBUG_COLORS==="true":!0;var cr={enable(t){typeof t=="string"&&(globalThis.DEBUG=t)},disable(){let t=globalThis.DEBUG;return globalThis.DEBUG="",t},enabled(t){let e=globalThis.DEBUG.split(",").map(i=>i.replace(/[.+?^${}()|[\]\\]/g,"\\$&")),r=e.some(i=>i===""||i[0]==="-"?!1:t.match(RegExp(i.split("*").join(".*")+"$"))),n=e.some(i=>i===""||i[0]!=="-"?!1:t.match(RegExp(i.slice(1).split("*").join(".*")+"$")));return r&&!n},log:(...t)=>{let[e,r,...n]=t;(console.warn??console.log)(`${e} ${r}`,...n)},formatters:{}};function gc(t){let e={color:rs[fc++%rs.length],enabled:cr.enabled(t),namespace:t,log:cr.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=e;if(n.length!==0&&lr.push([o,...n]),lr.length>mc&&lr.shift(),cr.enabled(o)||i){let m=n.map(E=>typeof E=="string"?E:hc(E)),h=`+${Date.now()-ns}ms`;ns=Date.now(),a(o,...m,h)}};return new Proxy(r,{get:(n,i)=>e[i],set:(n,i,o)=>e[i]=o})}var ye=new Proxy(gc,{get:(t,e)=>cr[e],set:(t,e,r)=>cr[e]=r});function hc(t,e=2){let r=new Set;return JSON.stringify(t,(n,i)=>{if(typeof i=="object"&&i!==null){if(r.has(i))return"[Circular *]";r.add(i)}else if(typeof i=="bigint")return i.toString();return i},e)}function is(t=7500){let e=lr.map(([r,...n])=>`${r} ${n.map(i=>typeof i=="string"?i:JSON.stringify(i)).join(" ")}`).join(` +`);return e.lengthxc,info:()=>bc,log:()=>wc,query:()=>Ec,should:()=>ys,tags:()=>mr,warn:()=>di});u();l();c();p();d();var mr={error:Ft("prisma:error"),warn:Zo("prisma:warn"),info:es("prisma:info"),query:Yo("prisma:query")},ys={warn:()=>!b.env.PRISMA_DISABLE_WARNINGS};function wc(...t){console.log(...t)}function di(t,...e){ys.warn()&&console.warn(`${mr.warn} ${t}`,...e)}function bc(t,...e){console.info(`${mr.info} ${t}`,...e)}function xc(t,...e){console.error(`${mr.error} ${t}`,...e)}function Ec(t,...e){console.log(`${mr.query} ${t}`,...e)}u();l();c();p();d();u();l();c();p();d();function mi({onlyFirst:t=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(r,t?void 0:"g")}var Pc=mi();function Ut(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Pc,"")}u();l();c();p();d();function fi(t,e){return Object.prototype.hasOwnProperty.call(t,e)}u();l();c();p();d();function en(t,e){let r={};for(let n of Object.keys(t))r[n]=e(t[n],n);return r}u();l();c();p();d();function gi(t,e){if(t.length===0)return;let r=t[0];for(let n=1;n{bs.has(t)||(bs.add(t),di(e,...r))};u();l();c();p();d();function Vt(t){return t instanceof Date||Object.prototype.toString.call(t)==="[object Date]"}function qt(t){return t.toString()!=="Invalid Date"}u();l();c();p();d();var xs=require("@prisma/client-runtime-utils");function Bt(t){return xs.Decimal.isDecimal(t)?!0:t!==null&&typeof t=="object"&&typeof t.s=="number"&&typeof t.e=="number"&&typeof t.toFixed=="function"&&Array.isArray(t.d)}u();l();c();p();d();var Us=require("@prisma/client-runtime-utils");u();l();c();p();d();var yr={};Dt(yr,{ModelAction:()=>hr,datamodelEnumToSchemaEnum:()=>Tc});u();l();c();p();d();u();l();c();p();d();function Tc(t){return{name:t.name,values:t.values.map(e=>e.name)}}u();l();c();p();d();var hr=(z=>(z.findUnique="findUnique",z.findUniqueOrThrow="findUniqueOrThrow",z.findFirst="findFirst",z.findFirstOrThrow="findFirstOrThrow",z.findMany="findMany",z.create="create",z.createMany="createMany",z.createManyAndReturn="createManyAndReturn",z.update="update",z.updateMany="updateMany",z.updateManyAndReturn="updateManyAndReturn",z.upsert="upsert",z.delete="delete",z.deleteMany="deleteMany",z.groupBy="groupBy",z.count="count",z.aggregate="aggregate",z.findRaw="findRaw",z.aggregateRaw="aggregateRaw",z))(hr||{});var vc=Mt(hs());var Sc={red:Ft,gray:ts,dim:zr,bold:Hr,underline:Wr,highlightSource:t=>t.highlight()},Ac={red:t=>t,gray:t=>t,dim:t=>t,bold:t=>t,underline:t=>t,highlightSource:t=>t};function Rc({message:t,originalMethod:e,isPanic:r,callArguments:n}){return{functionName:`prisma.${e}()`,message:t,isPanic:r??!1,callArguments:n}}function Cc({functionName:t,location:e,message:r,isPanic:n,contextLines:i,callArguments:o},s){let a=[""],m=e?" in":":";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold("on us")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\`${t}\``)} invocation${m}`))):a.push(s.red(`Invalid ${s.bold(`\`${t}\``)} invocation${m}`)),e&&a.push(s.underline(Ic(e))),i){a.push("");let h=[i.toString()];o&&(h.push(o),h.push(s.dim(")"))),a.push(h.join("")),o&&a.push("")}else a.push(""),o&&a.push(o),a.push("");return a.push(r),a.join(` +`)}function Ic(t){let e=[t.fileName];return t.lineNumber&&e.push(String(t.lineNumber)),t.columnNumber&&e.push(String(t.columnNumber)),e.join(":")}function tn(t){let e=t.showColors?Sc:Ac,r;return typeof $getTemplateParameters<"u"?r=$getTemplateParameters(t,e):r=Rc(t),Cc(r,e)}u();l();c();p();d();var Is=Mt(yi());u();l();c();p();d();function vs(t,e,r){let n=Ss(t),i=kc(n),o=Nc(i);o?rn(o,e,r):e.addErrorMessage(()=>"Unknown error")}function Ss(t){return t.errors.flatMap(e=>e.kind==="Union"?Ss(e):[e])}function kc(t){let e=new Map,r=[];for(let n of t){if(n.kind!=="InvalidArgumentType"){r.push(n);continue}let i=`${n.selectionPath.join(".")}:${n.argumentPath.join(".")}`,o=e.get(i);o?e.set(i,{...n,argument:{...n.argument,typeNames:Oc(o.argument.typeNames,n.argument.typeNames)}}):e.set(i,n)}return r.push(...e.values()),r}function Oc(t,e){return[...new Set(t.concat(e))]}function Nc(t){return gi(t,(e,r)=>{let n=Ps(e),i=Ps(r);return n!==i?n-i:Ts(e)-Ts(r)})}function Ps(t){let e=0;return Array.isArray(t.selectionPath)&&(e+=t.selectionPath.length),Array.isArray(t.argumentPath)&&(e+=t.argumentPath.length),e}function Ts(t){switch(t.kind){case"InvalidArgumentValue":case"ValueTooLarge":return 20;case"InvalidArgumentType":return 10;case"RequiredArgumentMissing":return-10;default:return 0}}u();l();c();p();d();var Me=class{constructor(e,r){this.name=e;this.value=r}isRequired=!1;makeRequired(){return this.isRequired=!0,this}write(e){let{colors:{green:r}}=e.context;e.addMarginSymbol(r(this.isRequired?"+":"?")),e.write(r(this.name)),this.isRequired||e.write(r("?")),e.write(r(": ")),typeof this.value=="string"?e.write(r(this.value)):e.write(this.value)}};u();l();c();p();d();u();l();c();p();d();Rs();u();l();c();p();d();var jt=class{constructor(e=0,r){this.context=r;this.currentIndent=e}lines=[];currentLine="";currentIndent=0;marginSymbol;afterNextNewLineCallback;write(e){return typeof e=="string"?this.currentLine+=e:e.write(this),this}writeJoined(e,r,n=(i,o)=>o.write(i)){let i=r.length-1;for(let o=0;o0&&this.currentIndent--,this}addMarginSymbol(e){return this.marginSymbol=e,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(` +`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let e=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+e.slice(1):e}};As();u();l();c();p();d();u();l();c();p();d();var nn=class{constructor(e){this.value=e}write(e){e.write(this.value)}markAsError(){this.value.markAsError()}};u();l();c();p();d();var on=t=>t,sn={bold:on,red:on,green:on,dim:on,enabled:!1},Cs={bold:Hr,red:Ft,green:Xo,dim:zr,enabled:!0},Qt={write(t){t.writeLine(",")}};u();l();c();p();d();var Ye=class{constructor(e){this.contents=e}isUnderlined=!1;color=e=>e;underline(){return this.isUnderlined=!0,this}setColor(e){return this.color=e,this}write(e){let r=e.getCurrentLineLength();e.write(this.color(this.contents)),this.isUnderlined&&e.afterNextNewline(()=>{e.write(" ".repeat(r)).writeLine(this.color("~".repeat(this.contents.length)))})}};u();l();c();p();d();var pt=class{hasError=!1;markAsError(){return this.hasError=!0,this}};var Jt=class extends pt{items=[];addItem(e){return this.items.push(new nn(e)),this}getField(e){return this.items[e]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(r=>r.value.getPrintWidth()))+2}write(e){if(this.items.length===0){this.writeEmpty(e);return}this.writeWithItems(e)}writeEmpty(e){let r=new Ye("[]");this.hasError&&r.setColor(e.context.colors.red).underline(),e.write(r)}writeWithItems(e){let{colors:r}=e.context;e.writeLine("[").withIndent(()=>e.writeJoined(Qt,this.items).newLine()).write("]"),this.hasError&&e.afterNextNewline(()=>{e.writeLine(r.red("~".repeat(this.getPrintWidth())))})}asObject(){}};var Gt=class t extends pt{fields={};suggestions=[];addField(e){this.fields[e.name]=e}addSuggestion(e){this.suggestions.push(e)}getField(e){return this.fields[e]}getDeepField(e){let[r,...n]=e,i=this.getField(r);if(!i)return;let o=i;for(let s of n){let a;if(o.value instanceof t?a=o.value.getField(s):o.value instanceof Jt&&(a=o.value.getField(Number(s))),!a)return;o=a}return o}getDeepFieldValue(e){return e.length===0?this:this.getDeepField(e)?.value}hasField(e){return!!this.getField(e)}removeAllFields(){this.fields={}}removeField(e){delete this.fields[e]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(e){return this.getField(e)?.value}getDeepSubSelectionValue(e){let r=this;for(let n of e){if(!(r instanceof t))return;let i=r.getSubSelectionValue(n);if(!i)return;r=i}return r}getDeepSelectionParent(e){let r=this.getSelectionParent();if(!r)return;let n=r;for(let i of e){let o=n.value.getFieldValue(i);if(!o||!(o instanceof t))return;let s=o.getSelectionParent();if(!s)return;n=s}return n}getSelectionParent(){let e=this.getField("select")?.value.asObject();if(e)return{kind:"select",value:e};let r=this.getField("include")?.value.asObject();if(r)return{kind:"include",value:r}}getSubSelectionValue(e){return this.getSelectionParent()?.value.fields[e].value}getPrintWidth(){let e=Object.values(this.fields);return e.length==0?2:Math.max(...e.map(n=>n.getPrintWidth()))+2}write(e){let r=Object.values(this.fields);if(r.length===0&&this.suggestions.length===0){this.writeEmpty(e);return}this.writeWithContents(e,r)}asObject(){return this}writeEmpty(e){let r=new Ye("{}");this.hasError&&r.setColor(e.context.colors.red).underline(),e.write(r)}writeWithContents(e,r){e.writeLine("{").withIndent(()=>{e.writeJoined(Qt,[...r,...this.suggestions]).newLine()}),e.write("}"),this.hasError&&e.afterNextNewline(()=>{e.writeLine(e.context.colors.red("~".repeat(this.getPrintWidth())))})}};u();l();c();p();d();var we=class extends pt{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new Ye(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};u();l();c();p();d();var wr=class{fields=[];addField(e,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${e}: ${r}`))).addMarginSymbol(i(o("+")))}}),this}write(e){let{colors:{green:r}}=e.context;e.writeLine(r("{")).withIndent(()=>{e.writeJoined(Qt,this.fields).newLine()}).write(r("}")).addMarginSymbol(r("+"))}};function rn(t,e,r){switch(t.kind){case"MutuallyExclusiveFields":Dc(t,e);break;case"IncludeOnScalar":Mc(t,e);break;case"EmptySelection":_c(t,e,r);break;case"UnknownSelectionField":Uc(t,e);break;case"InvalidSelectionValue":Vc(t,e);break;case"UnknownArgument":qc(t,e);break;case"UnknownInputField":Bc(t,e);break;case"RequiredArgumentMissing":jc(t,e);break;case"InvalidArgumentType":Qc(t,e);break;case"InvalidArgumentValue":Jc(t,e);break;case"ValueTooLarge":Gc(t,e);break;case"SomeFieldsMissing":Hc(t,e);break;case"TooManyFieldsGiven":zc(t,e);break;case"Union":vs(t,e,r);break;default:throw new Error("not implemented: "+t.kind)}}function Dc(t,e){let r=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();r&&(r.getField(t.firstField)?.markAsError(),r.getField(t.secondField)?.markAsError()),e.addErrorMessage(n=>`Please ${n.bold("either")} use ${n.green(`\`${t.firstField}\``)} or ${n.green(`\`${t.secondField}\``)}, but ${n.red("not both")} at the same time.`)}function Mc(t,e){let[r,n]=Ht(t.selectionPath),i=t.outputType,o=e.arguments.getDeepSelectionParent(r)?.value;if(o&&(o.getField(n)?.markAsError(),i))for(let s of i.fields)s.isRelation&&o.addSuggestion(new Me(s.name,"true"));e.addErrorMessage(s=>{let a=`Invalid scalar field ${s.red(`\`${n}\``)} for ${s.bold("include")} statement`;return i?a+=` on model ${s.bold(i.name)}. ${br(s)}`:a+=".",a+=` +Note that ${s.bold("include")} statements only accept relation fields.`,a})}function _c(t,e,r){let n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();if(n){let i=n.getField("omit")?.value.asObject();if(i){Lc(t,e,i);return}if(n.hasField("select")){Fc(t,e);return}}if(r?.[ct(t.outputType.name)]){$c(t,e);return}e.addErrorMessage(()=>`Unknown field at "${t.selectionPath.join(".")} selection"`)}function Lc(t,e,r){r.removeAllFields();for(let n of t.outputType.fields)r.addSuggestion(new Me(n.name,"false"));e.addErrorMessage(n=>`The ${n.red("omit")} statement includes every field of the model ${n.bold(t.outputType.name)}. At least one field must be included in the result`)}function Fc(t,e){let r=t.outputType,n=e.arguments.getDeepSelectionParent(t.selectionPath)?.value,i=n?.isEmpty()??!1;n&&(n.removeAllFields(),Ns(n,r)),e.addErrorMessage(o=>i?`The ${o.red("`select`")} statement for type ${o.bold(r.name)} must not be empty. ${br(o)}`:`The ${o.red("`select`")} statement for type ${o.bold(r.name)} needs ${o.bold("at least one truthy value")}.`)}function $c(t,e){let r=new wr;for(let i of t.outputType.fields)i.isRelation||r.addField(i.name,"false");let n=new Me("omit",r).makeRequired();if(t.selectionPath.length===0)e.arguments.addSuggestion(n);else{let[i,o]=Ht(t.selectionPath),a=e.arguments.getDeepSelectionParent(i)?.value.asObject()?.getField(o);if(a){let m=a?.value.asObject()??new Gt;m.addSuggestion(n),a.value=m}}e.addErrorMessage(i=>`The global ${i.red("omit")} configuration excludes every field of the model ${i.bold(t.outputType.name)}. At least one field must be included in the result`)}function Uc(t,e){let r=Ds(t.selectionPath,e);if(r.parentKind!=="unknown"){r.field.markAsError();let n=r.parent;switch(r.parentKind){case"select":Ns(n,t.outputType);break;case"include":Wc(n,t.outputType);break;case"omit":Kc(n,t.outputType);break}}e.addErrorMessage(n=>{let i=[`Unknown field ${n.red(`\`${r.fieldName}\``)}`];return r.parentKind!=="unknown"&&i.push(`for ${n.bold(r.parentKind)} statement`),i.push(`on model ${n.bold(`\`${t.outputType.name}\``)}.`),i.push(br(n)),i.join(" ")})}function Vc(t,e){let r=Ds(t.selectionPath,e);r.parentKind!=="unknown"&&r.field.value.markAsError(),e.addErrorMessage(n=>`Invalid value for selection field \`${n.red(r.fieldName)}\`: ${t.underlyingError}`)}function qc(t,e){let r=t.argumentPath[0],n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();n&&(n.getField(r)?.markAsError(),Xc(n,t.arguments)),e.addErrorMessage(i=>ks(i,r,t.arguments.map(o=>o.name)))}function Bc(t,e){let[r,n]=Ht(t.argumentPath),i=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();if(i){i.getDeepField(t.argumentPath)?.markAsError();let o=i.getDeepFieldValue(r)?.asObject();o&&Ms(o,t.inputType)}e.addErrorMessage(o=>ks(o,n,t.inputType.fields.map(s=>s.name)))}function ks(t,e,r){let n=[`Unknown argument \`${t.red(e)}\`.`],i=Yc(e,r);return i&&n.push(`Did you mean \`${t.green(i)}\`?`),r.length>0&&n.push(br(t)),n.join(" ")}function jc(t,e){let r;e.addErrorMessage(m=>r?.value instanceof we&&r.value.text==="null"?`Argument \`${m.green(o)}\` must not be ${m.red("null")}.`:`Argument \`${m.green(o)}\` is missing.`);let n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();if(!n)return;let[i,o]=Ht(t.argumentPath),s=new wr,a=n.getDeepFieldValue(i)?.asObject();if(a){if(r=a.getField(o),r&&a.removeField(o),t.inputTypes.length===1&&t.inputTypes[0].kind==="object"){for(let m of t.inputTypes[0].fields)s.addField(m.name,m.typeNames.join(" | "));a.addSuggestion(new Me(o,s).makeRequired())}else{let m=t.inputTypes.map(Os).join(" | ");a.addSuggestion(new Me(o,m).makeRequired())}if(t.dependentArgumentPath){n.getDeepField(t.dependentArgumentPath)?.markAsError();let[,m]=Ht(t.dependentArgumentPath);e.addErrorMessage(h=>`Argument \`${h.green(o)}\` is required because argument \`${h.green(m)}\` was provided.`)}}}function Os(t){return t.kind==="list"?`${Os(t.elementType)}[]`:t.name}function Qc(t,e){let r=t.argument.name,n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();n&&n.getDeepFieldValue(t.argumentPath)?.markAsError(),e.addErrorMessage(i=>{let o=an("or",t.argument.typeNames.map(s=>i.green(s)));return`Argument \`${i.bold(r)}\`: Invalid value provided. Expected ${o}, provided ${i.red(t.inferredType)}.`})}function Jc(t,e){let r=t.argument.name,n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();n&&n.getDeepFieldValue(t.argumentPath)?.markAsError(),e.addErrorMessage(i=>{let o=[`Invalid value for argument \`${i.bold(r)}\``];if(t.underlyingError&&o.push(`: ${t.underlyingError}`),o.push("."),t.argument.typeNames.length>0){let s=an("or",t.argument.typeNames.map(a=>i.green(a)));o.push(` Expected ${s}.`)}return o.join("")})}function Gc(t,e){let r=t.argument.name,n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject(),i;if(n){let s=n.getDeepField(t.argumentPath)?.value;s?.markAsError(),s instanceof we&&(i=s.text)}e.addErrorMessage(o=>{let s=["Unable to fit value"];return i&&s.push(o.red(i)),s.push(`into a 64-bit signed integer for field \`${o.bold(r)}\``),s.join(" ")})}function Hc(t,e){let r=t.argumentPath[t.argumentPath.length-1],n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject();if(n){let i=n.getDeepFieldValue(t.argumentPath)?.asObject();i&&Ms(i,t.inputType)}e.addErrorMessage(i=>{let o=[`Argument \`${i.bold(r)}\` of type ${i.bold(t.inputType.name)} needs`];return t.constraints.minFieldCount===1?t.constraints.requiredFields?o.push(`${i.green("at least one of")} ${an("or",t.constraints.requiredFields.map(s=>`\`${i.bold(s)}\``))} arguments.`):o.push(`${i.green("at least one")} argument.`):o.push(`${i.green(`at least ${t.constraints.minFieldCount}`)} arguments.`),o.push(br(i)),o.join(" ")})}function zc(t,e){let r=t.argumentPath[t.argumentPath.length-1],n=e.arguments.getDeepSubSelectionValue(t.selectionPath)?.asObject(),i=[];if(n){let o=n.getDeepFieldValue(t.argumentPath)?.asObject();o&&(o.markAsError(),i=Object.keys(o.getFields()))}e.addErrorMessage(o=>{let s=[`Argument \`${o.bold(r)}\` of type ${o.bold(t.inputType.name)} needs`];return t.constraints.minFieldCount===1&&t.constraints.maxFieldCount==1?s.push(`${o.green("exactly one")} argument,`):t.constraints.maxFieldCount==1?s.push(`${o.green("at most one")} argument,`):s.push(`${o.green(`at most ${t.constraints.maxFieldCount}`)} arguments,`),s.push(`but you provided ${an("and",i.map(a=>o.red(a)))}. Please choose`),t.constraints.maxFieldCount===1?s.push("one."):s.push(`${t.constraints.maxFieldCount}.`),s.join(" ")})}function Ns(t,e){for(let r of e.fields)t.hasField(r.name)||t.addSuggestion(new Me(r.name,"true"))}function Wc(t,e){for(let r of e.fields)r.isRelation&&!t.hasField(r.name)&&t.addSuggestion(new Me(r.name,"true"))}function Kc(t,e){for(let r of e.fields)!t.hasField(r.name)&&!r.isRelation&&t.addSuggestion(new Me(r.name,"true"))}function Xc(t,e){for(let r of e)t.hasField(r.name)||t.addSuggestion(new Me(r.name,r.typeNames.join(" | ")))}function Ds(t,e){let[r,n]=Ht(t),i=e.arguments.getDeepSubSelectionValue(r)?.asObject();if(!i)return{parentKind:"unknown",fieldName:n};let o=i.getFieldValue("select")?.asObject(),s=i.getFieldValue("include")?.asObject(),a=i.getFieldValue("omit")?.asObject(),m=o?.getField(n);return o&&m?{parentKind:"select",parent:o,field:m,fieldName:n}:(m=s?.getField(n),s&&m?{parentKind:"include",field:m,parent:s,fieldName:n}:(m=a?.getField(n),a&&m?{parentKind:"omit",field:m,parent:a,fieldName:n}:{parentKind:"unknown",fieldName:n}))}function Ms(t,e){if(e.kind==="object")for(let r of e.fields)t.hasField(r.name)||t.addSuggestion(new Me(r.name,r.typeNames.join(" | ")))}function Ht(t){let e=[...t],r=e.pop();if(!r)throw new Error("unexpected empty path");return[e,r]}function br({green:t,enabled:e}){return"Available options are "+(e?`listed in ${t("green")}`:"marked with ?")+"."}function an(t,e){if(e.length===1)return e[0];let r=[...e],n=r.pop();return`${r.join(", ")} ${t} ${n}`}var Zc=3;function Yc(t,e){let r=1/0,n;for(let i of e){let o=(0,Is.default)(t,i);o>Zc||o`}};function zt(t){return t instanceof xr}u();l();c();p();d();var _s=": ",un=class{constructor(e,r){this.name=e;this.value=r}hasError=!1;markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+_s.length}write(e){let r=new Ye(this.name);this.hasError&&r.underline().setColor(e.context.colors.red),e.write(r).write(_s).write(this.value)}};var bi=class{arguments;errorMessages=[];constructor(e){this.arguments=e}write(e){e.write(this.arguments)}addErrorMessage(e){this.errorMessages.push(e)}renderAllMessages(e){return this.errorMessages.map(r=>r(e)).join(` +`)}};function Wt(t){return new bi(Fs(t))}function Fs(t){let e=new Gt;for(let[r,n]of Object.entries(t)){let i=new un(r,$s(n));e.addField(i)}return e}function $s(t){if(typeof t=="string")return new we(JSON.stringify(t));if(typeof t=="number"||typeof t=="boolean")return new we(String(t));if(typeof t=="bigint")return new we(`${t}n`);if(t===null)return new we("null");if(t===void 0)return new we("undefined");if(Bt(t))return new we(`new Prisma.Decimal("${t.toFixed()}")`);if(t instanceof Uint8Array)return w.isBuffer(t)?new we(`Buffer.alloc(${t.byteLength})`):new we(`new Uint8Array(${t.byteLength})`);if(t instanceof Date){let e=qt(t)?t.toISOString():"Invalid Date";return new we(`new Date("${e}")`)}return(0,Ls.isObjectEnumValue)(t)?new we(`Prisma.${t._getName()}`):zt(t)?new we(`prisma.${ct(t.modelName)}.$fields.${t.name}`):Array.isArray(t)?ep(t):typeof t=="object"?Fs(t):new we(Object.prototype.toString.call(t))}function ep(t){let e=new Jt;for(let r of t)e.addItem($s(r));return e}function ln(t,e){let r=e==="pretty"?Cs:sn,n=t.renderAllMessages(r),i=new jt(0,{colors:r}).write(t).toString();return{message:n,args:i}}function cn({args:t,errors:e,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o,globalOmit:s}){let a=Wt(t);for(let N of e)rn(N,a,s);let{message:m,args:h}=ln(a,r),E=tn({message:m,callsite:n,originalMethod:i,showColors:r==="pretty",callArguments:h});throw new Us.PrismaClientValidationError(E,{clientVersion:o})}u();l();c();p();d();u();l();c();p();d();function et(t){return t.replace(/^./,e=>e.toLowerCase())}u();l();c();p();d();function qs(t,e,r){let n=et(r);return!e.result||!(e.result.$allModels||e.result[n])?t:tp({...t,...Vs(e.name,t,e.result.$allModels),...Vs(e.name,t,e.result[n])})}function tp(t){let e=new Ze,r=(n,i)=>e.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),t[n]?t[n].needs.flatMap(o=>r(o,i)):[n]));return en(t,n=>({...n,needs:r(n.name,new Set)}))}function Vs(t,e,r){return r?en(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:rp(e,o,i)})):{}}function rp(t,e,r){let n=t?.[e]?.compute;return n?(i,o)=>r({...i,[e]:n(i,o)},o):r}function Bs(t,e){if(!e)return t;let r={...t};for(let n of Object.values(e))if(t[n.name])for(let i of n.needs)r[i]=!0;return r}function js(t,e){if(!e)return t;let r={...t};for(let n of Object.values(e))if(!t[n.name])for(let i of n.needs)delete r[i];return r}var pn=class{constructor(e,r){this.extension=e;this.previous=r}computedFieldsCache=new Ze;modelExtensionsCache=new Ze;queryCallbacksCache=new Ze;clientExtensions=ur(()=>this.extension.client?{...this.previous?.getAllClientExtensions(),...this.extension.client}:this.previous?.getAllClientExtensions());batchCallbacks=ur(()=>{let e=this.previous?.getAllBatchQueryCallbacks()??[],r=this.extension.query?.$__internalBatch;return r?e.concat(r):e});getAllComputedFields(e){return this.computedFieldsCache.getOrCreate(e,()=>qs(this.previous?.getAllComputedFields(e),this.extension,e))}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(e){return this.modelExtensionsCache.getOrCreate(e,()=>{let r=et(e);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?this.previous?.getAllModelExtensions(e):{...this.previous?.getAllModelExtensions(e),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(e,r){return this.queryCallbacksCache.getOrCreate(`${e}:${r}`,()=>{let n=this.previous?.getAllQueryCallbacks(e,r)??[],i=[],o=this.extension.query;return!o||!(o[e]||o.$allModels||o[r]||o.$allOperations)?n:(o[e]!==void 0&&(o[e][r]!==void 0&&i.push(o[e][r]),o[e].$allOperations!==void 0&&i.push(o[e].$allOperations)),e!=="$none"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Kt=class t{constructor(e){this.head=e}static empty(){return new t}static single(e){return new t(new pn(e))}isEmpty(){return this.head===void 0}append(e){return new t(new pn(e,this.head))}getAllComputedFields(e){return this.head?.getAllComputedFields(e)}getAllClientExtensions(){return this.head?.getAllClientExtensions()}getAllModelExtensions(e){return this.head?.getAllModelExtensions(e)}getAllQueryCallbacks(e,r){return this.head?.getAllQueryCallbacks(e,r)??[]}getAllBatchQueryCallbacks(){return this.head?.getAllBatchQueryCallbacks()??[]}};u();l();c();p();d();var dn=class{constructor(e){this.name=e}};function Qs(t){return t instanceof dn}function Js(t){return new dn(t)}u();l();c();p();d();u();l();c();p();d();var Gs=Symbol(),Er=class{constructor(e){if(e!==Gs)throw new Error("Skip instance can not be constructed directly")}ifUndefined(e){return e===void 0?mn:e}},mn=new Er(Gs);function $e(t){return t instanceof Er}var np={findUnique:"findUnique",findUniqueOrThrow:"findUniqueOrThrow",findFirst:"findFirst",findFirstOrThrow:"findFirstOrThrow",findMany:"findMany",count:"aggregate",create:"createOne",createMany:"createMany",createManyAndReturn:"createManyAndReturn",update:"updateOne",updateMany:"updateMany",updateManyAndReturn:"updateManyAndReturn",upsert:"upsertOne",delete:"deleteOne",deleteMany:"deleteMany",executeRaw:"executeRaw",queryRaw:"queryRaw",aggregate:"aggregate",groupBy:"groupBy",runCommandRaw:"runCommandRaw",findRaw:"findRaw",aggregateRaw:"aggregateRaw"},zs="explicitly `undefined` values are not allowed";function fn({modelName:t,action:e,args:r,runtimeDataModel:n,extensions:i=Kt.empty(),callsite:o,clientMethod:s,errorFormat:a,clientVersion:m,previewFeatures:h,globalOmit:E,wrapRawValues:N}){let $=new xi({runtimeDataModel:n,modelName:t,action:e,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:m,previewFeatures:h,globalOmit:E,wrapRawValues:N});return{modelName:t,action:np[e],query:Pr(r,$)}}function Pr({select:t,include:e,...r}={},n){let i=r.omit;return delete r.omit,{arguments:Ks(r,n),selection:ip(t,e,i,n)}}function ip(t,e,r,n){return t?(e?n.throwValidationError({kind:"MutuallyExclusiveFields",firstField:"include",secondField:"select",selectionPath:n.getSelectionPath()}):r&&n.throwValidationError({kind:"MutuallyExclusiveFields",firstField:"omit",secondField:"select",selectionPath:n.getSelectionPath()}),up(t,n)):op(n,e,r)}function op(t,e,r){let n={};return t.modelOrType&&!t.isRawAction()&&(n.$composites=!0,n.$scalars=!0),e&&sp(n,e,t),ap(n,r,t),n}function sp(t,e,r){for(let[n,i]of Object.entries(e)){if($e(i))continue;let o=r.nestSelection(n);if(Ei(i,o),i===!1||i===void 0){t[n]=!1;continue}let s=r.findField(n);if(s&&s.kind!=="object"&&r.throwValidationError({kind:"IncludeOnScalar",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),s){t[n]=Pr(i===!0?{}:i,o);continue}if(i===!0){t[n]=!0;continue}t[n]=Pr(i,o)}}function ap(t,e,r){let n=r.getComputedFields(),i={...r.getGlobalOmit(),...e},o=js(i,n);for(let[s,a]of Object.entries(o)){if($e(a))continue;Ei(a,r.nestSelection(s));let m=r.findField(s);n?.[s]&&!m||(t[s]=!a)}}function up(t,e){let r={},n=e.getComputedFields(),i=Bs(t,n);for(let[o,s]of Object.entries(i)){if($e(s))continue;let a=e.nestSelection(o);Ei(s,a);let m=e.findField(o);if(!(n?.[o]&&!m)){if(s===!1||s===void 0||$e(s)){r[o]=!1;continue}if(s===!0){m?.kind==="object"?r[o]=Pr({},a):r[o]=!0;continue}r[o]=Pr(s,a)}}return r}function Ws(t,e){if(t===null)return null;if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")return t;if(typeof t=="bigint")return{$type:"BigInt",value:String(t)};if(Vt(t)){if(qt(t))return{$type:"DateTime",value:t.toISOString()};e.throwValidationError({kind:"InvalidArgumentValue",selectionPath:e.getSelectionPath(),argumentPath:e.getArgumentPath(),argument:{name:e.getArgumentName(),typeNames:["Date"]},underlyingError:"Provided Date object is invalid"})}if(Qs(t))return{$type:"Param",value:t.name};if(zt(t))return{$type:"FieldRef",value:{_ref:t.name,_container:t.modelName}};if(Array.isArray(t))return lp(t,e);if(ArrayBuffer.isView(t)){let{buffer:r,byteOffset:n,byteLength:i}=t;return{$type:"Bytes",value:w.from(r,n,i).toString("base64")}}if(cp(t))return t.values;if(Bt(t))return{$type:"Decimal",value:t.toFixed()};if((0,Hs.isObjectEnumValue)(t)){let r=t._getName();if(r!=="DbNull"&&r!=="JsonNull"&&r!=="AnyNull")throw new Error(`Invalid ObjectEnumValue: expected DbNull, JsonNull, or AnyNull, got ${r}`);return{$type:"Enum",value:r}}if(pp(t))return t.toJSON();if(typeof t=="object")return Ks(t,e);e.throwValidationError({kind:"InvalidArgumentValue",selectionPath:e.getSelectionPath(),argumentPath:e.getArgumentPath(),argument:{name:e.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(t)} value. Serialize the object to JSON or implement a ".toJSON()" method on it`})}function Ks(t,e){if(e.shouldWrapRawValues()&&t.$type)return{$type:"Raw",value:t};let r={};for(let n in t){let i=t[n],o=e.nestArgument(n);$e(i)||(i!==void 0?r[n]=Ws(i,o):e.isPreviewFeatureOn("strictUndefinedChecks")&&e.throwValidationError({kind:"InvalidArgumentValue",argumentPath:o.getArgumentPath(),selectionPath:e.getSelectionPath(),argument:{name:e.getArgumentName(),typeNames:[]},underlyingError:zs}))}return r}function lp(t,e){let r=[];for(let n=0;n({name:e.name,typeName:"boolean",isRelation:e.kind==="object"}))}}isRawAction(){return["executeRaw","queryRaw","runCommandRaw","findRaw","aggregateRaw"].includes(this.params.action)}isPreviewFeatureOn(e){return this.params.previewFeatures.includes(e)}shouldWrapRawValues(){return this.params.wrapRawValues??!0}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(e){return this.modelOrType?.fields.find(r=>r.name===e)}nestSelection(e){let r=this.findField(e),n=r?.kind==="object"?r.type:void 0;return new t({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(e)})}getGlobalOmit(){return this.params.modelName&&this.shouldApplyGlobalOmit()?this.params.globalOmit?.[ct(this.params.modelName)]??{}:{}}shouldApplyGlobalOmit(){switch(this.params.action){case"findFirst":case"findFirstOrThrow":case"findUniqueOrThrow":case"findMany":case"upsert":case"findUnique":case"createManyAndReturn":case"create":case"update":case"updateManyAndReturn":case"delete":return!0;case"executeRaw":case"aggregateRaw":case"runCommandRaw":case"findRaw":case"createMany":case"deleteMany":case"groupBy":case"updateMany":case"count":case"aggregate":case"queryRaw":return!1;default:st(this.params.action,"Unknown action")}}nestArgument(e){return new t({...this.params,argumentPath:this.params.argumentPath.concat(e)})}};u();l();c();p();d();function Xs(t,e){let r=ur(()=>dp(e));Object.defineProperty(t,"dmmf",{get:()=>r.get()})}function dp(t){throw new Error("Prisma.dmmf is not available when running in edge runtimes.")}function Pi(t){return Object.entries(t).map(([e,r])=>({name:e,...r}))}u();l();c();p();d();var Ti=new WeakMap,gn="$$PrismaTypedSql",Tr=class{constructor(e,r){Ti.set(this,{sql:e,values:r}),Object.defineProperty(this,gn,{value:gn})}get sql(){return Ti.get(this).sql}get values(){return Ti.get(this).values}};function Zs(t){return(...e)=>new Tr(t,e)}function hn(t){return t!=null&&t[gn]===gn}u();l();c();p();d();var jl=require("@prisma/client-runtime-utils");u();l();c();p();d();Ys();u();l();c();p();d();u();l();c();p();d();function vr(t){return{getKeys(){return Object.keys(t)},getPropertyValue(e){return t[e]}}}u();l();c();p();d();function Ce(t,e){return{getKeys(){return[t]},getPropertyValue(){return e()}}}u();l();c();p();d();function xt(t){let e=new Ze;return{getKeys(){return t.getKeys()},getPropertyValue(r){return e.getOrCreate(r,()=>t.getPropertyValue(r))},getPropertyDescriptor(r){return t.getPropertyDescriptor?.(r)}}}u();l();c();p();d();u();l();c();p();d();var wn={enumerable:!0,configurable:!0,writable:!0};function bn(t){let e=new Set(t);return{getPrototypeOf:()=>Object.prototype,getOwnPropertyDescriptor:()=>wn,has:(r,n)=>e.has(n),set:(r,n,i)=>e.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...e]}}var ea=Symbol.for("nodejs.util.inspect.custom");function Qe(t,e){let r=mp(e),n=new Set,i=new Proxy(t,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){if(n.has(s))return!0;let a=r.get(s);return a?a.has?.(s)??!0:Reflect.has(o,s)},ownKeys(o){let s=ta(Reflect.ownKeys(o),r),a=ta(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){return r.get(s)?.getPropertyDescriptor?.(s)?.writable===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let m=r.get(s);return m?m.getPropertyDescriptor?{...wn,...m?.getPropertyDescriptor(s)}:wn:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)},getPrototypeOf:()=>Object.prototype});return i[ea]=function(){let o={...this};return delete o[ea],o},i}function mp(t){let e=new Map;for(let r of t){let n=r.getKeys();for(let i of n)e.set(i,r)}return e}function ta(t,e){return t.filter(r=>e.get(r)?.has?.(r)??!0)}u();l();c();p();d();function Xt(t){return{getKeys(){return t},has(){return!1},getPropertyValue(){}}}u();l();c();p();d();function ra(t){if(t===void 0)return"";let e=Wt(t);return new jt(0,{colors:sn}).write(e).toString()}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var vi=class{getLocation(){return null}};function dt(t){return typeof $EnabledCallSite=="function"&&t!=="minimal"?new $EnabledCallSite:new vi}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var na={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function Zt(t={}){let e=gp(t);return Object.entries(e).reduce((n,[i,o])=>(na[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function gp(t={}){return typeof t._count=="boolean"?{...t,_count:{_all:t._count}}:t}function xn(t={}){return e=>(typeof t._count=="boolean"&&(e._count=e._count._all),e)}function ia(t,e){let r=xn(t);return e({action:"aggregate",unpacker:r,argsMapper:Zt})(t)}u();l();c();p();d();function hp(t={}){let{select:e,...r}=t;return typeof e=="object"?Zt({...r,_count:e}):Zt({...r,_count:{_all:!0}})}function yp(t={}){return typeof t.select=="object"?e=>xn(t)(e)._count:e=>xn(t)(e)._count._all}function oa(t,e){return e({action:"count",unpacker:yp(t),argsMapper:hp})(t)}u();l();c();p();d();function wp(t={}){let e=Zt(t);if(Array.isArray(e.by))for(let r of e.by)typeof r=="string"&&(e.select[r]=!0);else typeof e.by=="string"&&(e.select[e.by]=!0);return e}function bp(t={}){return e=>(typeof t?._count=="boolean"&&e.forEach(r=>{r._count=r._count._all}),e)}function sa(t,e){return e({action:"groupBy",unpacker:bp(t),argsMapper:wp})(t)}function aa(t,e,r){if(e==="aggregate")return n=>ia(n,r);if(e==="count")return n=>oa(n,r);if(e==="groupBy")return n=>sa(n,r)}u();l();c();p();d();function ua(t,e){let r=e.fields.filter(i=>!i.relationName),n=Jo(r,"name");return new Proxy({},{get(i,o){if(o in i||typeof o=="symbol")return i[o];let s=n[o];if(s)return new xr(t,o,s.type,s.isList,s.kind==="enum")},...bn(Object.keys(n))})}u();l();c();p();d();u();l();c();p();d();var la=t=>Array.isArray(t)?t:t.split("."),Si=(t,e)=>la(e).reduce((r,n)=>r&&r[n],t),ca=(t,e,r)=>la(e).reduceRight((n,i,o,s)=>Object.assign({},Si(t,s.slice(0,o)),{[i]:n}),r);function xp(t,e){return t===void 0||e===void 0?[]:[...e,"select",t]}function Ep(t,e,r){return e===void 0?t??{}:ca(e,r,t||!0)}function Ai(t,e,r,n,i,o){let s=t._runtimeDataModel.models[e],a;return m=>{let h=dt(t._errorFormat),E=xp(n,i),N=Ep(m,o,E),$=r({dataPath:E,callsite:h})(N),U=Pp(t,e);return new Proxy($,{get(B,q){if(!U.includes(q))return B[q];a??=Object.fromEntries(s.fields.map(z=>[z.name,z]));let Z=[a[q].type,r,q],L=[E,N];return Ai(t,...Z,...L)},...bn([...U,...Object.getOwnPropertyNames($)])})}}function Pp(t,e){return t._runtimeDataModel.models[e].fields.filter(r=>r.kind==="object").map(r=>r.name)}var Tp=["findUnique","findUniqueOrThrow","findFirst","findFirstOrThrow","create","update","upsert","delete"],vp=["aggregate","count","groupBy"];function Ri(t,e){let r=t._extensions.getAllModelExtensions(e)??{},n=[Sp(t,e),Rp(t,e),vr(r),Ce("name",()=>e),Ce("$name",()=>e),Ce("$parent",()=>t._appliedParent)];return Qe({},n)}function Sp(t,e){let r=et(e),n=Object.keys(hr).concat("count");return{getKeys(){return n},getPropertyValue(i){let o=i,s=a=>m=>{let h=dt(t._errorFormat);return t._createPrismaPromise(E=>{let N={args:m,dataPath:[],action:o,model:e,clientMethod:`${r}.${i}`,jsModelName:r,transaction:E,callsite:h};return t._request({...N,...a})},{action:o,args:m,model:e})};return Tp.includes(o)?Ai(t,e,s):Ap(i)?aa(t,i,s):s({})}}}function Ap(t){return vp.includes(t)}function Rp(t,e){return xt(Ce("fields",()=>{let r=t._runtimeDataModel.models[e];return ua(e,r)}))}u();l();c();p();d();function pa(t){return t.replace(/^./,e=>e.toUpperCase())}var Ci=Symbol();function Sr(t){let e=[Cp(t),Ip(t),Ce(Ci,()=>t),Ce("$parent",()=>t._appliedParent)],r=t._extensions.getAllClientExtensions();return r&&e.push(vr(r)),Qe(t,e)}function Cp(t){let e=Object.getPrototypeOf(t._originalClient),r=[...new Set(Object.getOwnPropertyNames(e))];return{getKeys(){return r},getPropertyValue(n){return t[n]}}}function Ip(t){let e=Object.keys(t._runtimeDataModel.models),r=e.map(et),n=[...new Set(e.concat(r))];return xt({getKeys(){return n},getPropertyValue(i){let o=pa(i);if(t._runtimeDataModel.models[o]!==void 0)return Ri(t,o);if(t._runtimeDataModel.models[i]!==void 0)return Ri(t,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function da(t){return t[Ci]?t[Ci]:t}function ma(t){if(typeof t=="function")return t(this);let e=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(t)},_appliedParent:{value:this,configurable:!0},$on:{value:void 0}});return Sr(e)}u();l();c();p();d();u();l();c();p();d();function fa({result:t,modelName:e,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(e);if(!o)return t;let s=[],a=[];for(let m of Object.values(o)){if(n){if(n[m.name])continue;let h=m.needs.filter(E=>n[E]);h.length>0&&a.push(Xt(h))}else if(r){if(!r[m.name])continue;let h=m.needs.filter(E=>!r[E]);h.length>0&&a.push(Xt(h))}kp(t,m.needs)&&s.push(Op(m,Qe(t,s),e))}return s.length>0||a.length>0?Qe(t,[...s,...a]):t}function kp(t,e){return e.every(r=>fi(t,r))}function Op(t,e,r){return xt(Ce(t.name,()=>t.compute(e,r)))}u();l();c();p();d();function En({visitor:t,result:e,args:r,runtimeDataModel:n,modelName:i}){if(Array.isArray(e)){for(let s=0;sE.name===o);if(!m||m.kind!=="object"||!m.relationName)continue;let h=typeof s=="object"?s:{};e[o]=En({visitor:i,result:e[o],args:h,modelName:m.type,runtimeDataModel:n})}}function ha({result:t,modelName:e,args:r,extensions:n,runtimeDataModel:i,globalOmit:o}){return n.isEmpty()||t==null||typeof t!="object"||!i.models[e]?t:En({result:t,args:r??{},modelName:e,runtimeDataModel:i,visitor:(a,m,h)=>{let E=et(m);return fa({result:a,modelName:E,select:h.select,omit:h.select?void 0:{...o?.[E],...h.omit},extensions:n})}})}u();l();c();p();d();u();l();c();p();d();var Et=require("@prisma/client-runtime-utils");u();l();c();p();d();var Np=["$connect","$disconnect","$on","$use","$extends"],ya=Np;function wa(t){if(t instanceof Et.Sql)return Dp(t);if(hn(t))return Mp(t);if(Array.isArray(t)){let r=[t[0]];for(let n=1;n{let o=e.customDataProxyFetch;return"transaction"in e&&i!==void 0&&(e.transaction?.kind==="batch"&&e.transaction.lock.then(),e.transaction=i),n===r.length?t._executeRequest(e):r[n]({model:e.model,operation:e.model?e.action:e.clientMethod,args:wa(e.args??{}),__internalParams:e,query:(s,a=e)=>{let m=a.customDataProxyFetch;return a.customDataProxyFetch=va(o,m),a.args=s,xa(t,a,r,n+1)}})})}function Ea(t,e){let{jsModelName:r,action:n,clientMethod:i}=e,o=r?n:i;if(t._extensions.isEmpty())return t._executeRequest(e);let s=t._extensions.getAllQueryCallbacks(r??"$none",o);return xa(t,e,s)}function Pa(t){return e=>{let r={requests:e},n=e[0].extensions.getAllBatchQueryCallbacks();return n.length?Ta(r,n,0,t):t(r)}}function Ta(t,e,r,n){if(r===e.length)return n(t);let i=t.customDataProxyFetch,o=t.requests[0].transaction;return e[r]({args:{queries:t.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind==="batch"?o.isolationLevel:void 0}:void 0},__internalParams:t,query(s,a=t){let m=a.customDataProxyFetch;return a.customDataProxyFetch=va(i,m),Ta(a,e,r+1,n)}})}var ba=t=>t;function va(t=ba,e=ba){return r=>t(e(r))}u();l();c();p();d();function Aa({dataPath:t,modelName:e,args:r,runtimeDataModel:n}){let i={modelName:e,args:r??{}},o=_p(t);if(!o||o.length===0)return i;let s=e,a=r??{};for(let m of o){let h=n.models[s];if(!h)return i;let E=h.fields.find(N=>N.name===m);if(!E)throw new Error(`Could not resolve relation field "${m}" on model "${s}" from dataPath "${t.join(".")}"`);if(E.kind!=="object"||!E.relationName)return i;s=E.type,a=Lp(a,m)}return{modelName:s,args:a}}function _p(t){let e=[];for(let r=0;rki(t[r],e[r]))}function er(t,e){let r=Object.keys(t),n=Object.keys(e);return(r.length{if(typeof t[o]==typeof e[o]&&typeof t[o]!="object")return t[o]===e[o];if(Rr.Decimal.isDecimal(t[o])||Rr.Decimal.isDecimal(e[o])){let s=Ra(t[o]),a=Ra(e[o]);return s&&a&&s.equals(a)}else if(Yt(t[o])||Yt(e[o])){let s=Ca(t[o]),a=Ca(e[o]);return s&&a&&s.equals(a)}else{if(Cr(t[o])||Cr(e[o]))return Ia(t[o])?.getTime()===Ia(e[o])?.getTime();if(typeof t[o]=="bigint"||typeof e[o]=="bigint")return ka(t[o])===ka(e[o]);if(typeof t[o]=="number"||typeof e[o]=="number")return Oa(t[o])===Oa(e[o])}return ki(t[o],e[o])})}function Ra(t){return Rr.Decimal.isDecimal(t)?t:typeof t=="number"||typeof t=="string"?new Rr.Decimal(t):void 0}function Ca(t){return w.isBuffer(t)?t:Yt(t)?w.from(t.buffer,t.byteOffset,t.byteLength):typeof t=="string"?w.from(t,"base64"):void 0}function Ia(t){return Cr(t)?t:typeof t=="string"||typeof t=="number"?new Date(t):void 0}function ka(t){return typeof t=="bigint"?t:typeof t=="number"||typeof t=="string"?BigInt(t):void 0}function Oa(t){return typeof t=="number"?t:typeof t=="string"?Number(t):void 0}function Je(t){return JSON.stringify(t,(e,r)=>typeof r=="bigint"?r.toString():ArrayBuffer.isView(r)?w.from(r.buffer,r.byteOffset,r.byteLength).toString("base64"):r)}var Ii=8192;function Pn(t,e){if(e.length<=Ii){t.push(...e);return}for(let r=0;r`\`${e}\``).join(", ")})`:t&&"index"in t?`constraint: \`${t.index}\``:t&&"foreignKey"in t?"foreign key":"(not available)"}function Qp(t){if(typeof t!="object"||t===null)return!1;let e=t;return"$type"in e&&e.$type==="Param"||"prisma__type"in e&&e.prisma__type==="param"}function Jp(t){return"prisma__type"in t?t.prisma__value?.name:t.value.name}function Gp(t,e){let r={};for(let[n,i]of Object.entries(t))if(r[n]=i,Qp(i)){let o=Jp(i);o&&o in e&&(r[n]=e[o])}return r}function _a(t,e,r={}){let n=t.map(o=>e.keys.reduce((s,a)=>(s[a]=Ge(o[a]),s),{})),i=new Set(e.nestedSelection);return e.arguments.map(o=>{let s=Gp(o,r),a=n.findIndex(m=>er(m,s));if(a===-1)return e.expectNonEmpty?new be("An operation failed because it depends on one or more records that were required but not found","P2025"):null;{let m=Object.entries(t[a]).filter(([h])=>i.has(h));return Object.fromEntries(m)}})}u();l();c();p();d();var $a=require("@prisma/client-runtime-utils");var oe=class extends be{name="DataMapperError";constructor(e,r){super(e,"P2023",r)}},La=new WeakMap;function Hp(t){let e=La.get(t);return e||(e=Object.entries(t),La.set(t,e)),e}function Mi(t,e,r){switch(e.type){case"affectedRows":if(typeof t!="number")throw new oe(`Expected an affected rows count, got: ${typeof t} (${t})`);return{count:t};case"object":return _i(t,e.fields,r,e.skipNulls);case"field":return Di(t,"",e.fieldType,r);default:Y(e,`Invalid data mapping type: '${e.type}'`)}}function _i(t,e,r,n){if(t===null)return null;if(Array.isArray(t)){let i=t;return n&&(i=i.filter(o=>o!==null)),i.map(o=>Fa(o,e,r))}if(typeof t=="object")return Fa(t,e,r);if(typeof t=="string"){let i;try{i=JSON.parse(t)}catch(o){throw new oe("Expected an array or object, got a string that is not valid JSON",{cause:o})}return _i(i,e,r,n)}throw new oe(`Expected an array or an object, got: ${typeof t}`)}function Fa(t,e,r){if(typeof t!="object")throw new oe(`Expected an object, but got '${typeof t}'`);let n={};for(let[i,o]of Hp(e))switch(o.type){case"affectedRows":throw new oe(`Unexpected 'AffectedRows' node in data mapping for field '${i}'`);case"object":{let{serializedName:s,fields:a,skipNulls:m}=o;if(s!==null&&!Object.hasOwn(t,s))throw new oe(`Missing data field (Object): '${i}'; node: ${JSON.stringify(o)}; data: ${JSON.stringify(t)}`);let h=s!==null?t[s]:t;n[i]=_i(h,a,r,m);break}case"field":{let s=o.dbName;if(Object.hasOwn(t,s))n[i]=zp(t[s],s,o.fieldType,r);else throw new oe(`Missing data field (Value): '${s}'; node: ${JSON.stringify(o)}; data: ${JSON.stringify(t)}`)}break;default:Y(o,`DataMapper: Invalid data mapping node type: '${o.type}'`)}return n}function zp(t,e,r,n){return t===null?r.arity==="list"?[]:null:r.arity==="list"?t.map((o,s)=>Di(o,`${e}[${s}]`,r,n)):Di(t,e,r,n)}function Di(t,e,r,n){switch(r.type){case"unsupported":return t;case"string":{if(typeof t!="string")throw new oe(`Expected a string in column '${e}', got ${typeof t}: ${t}`);return t}case"int":switch(typeof t){case"number":return Math.trunc(t);case"string":{let i=Math.trunc(Number(t));if(Number.isNaN(i)||!Number.isFinite(i))throw new oe(`Expected an integer in column '${e}', got string: ${t}`);if(!Number.isSafeInteger(i))throw new oe(`Integer value in column '${e}' is too large to represent as a JavaScript number without loss of precision, got: ${t}. Consider using BigInt type.`);return i}default:throw new oe(`Expected an integer in column '${e}', got ${typeof t}: ${t}`)}case"bigint":{if(typeof t!="number"&&typeof t!="string")throw new oe(`Expected a bigint in column '${e}', got ${typeof t}: ${t}`);return{$type:"BigInt",value:t}}case"float":{if(typeof t=="number")return t;if(typeof t=="string"){let i=Number(t);if(Number.isNaN(i)&&!/^[-+]?nan$/.test(t.toLowerCase()))throw new oe(`Expected a float in column '${e}', got string: ${t}`);return i}throw new oe(`Expected a float in column '${e}', got ${typeof t}: ${t}`)}case"boolean":{if(typeof t=="boolean")return t;if(typeof t=="number")return t===1;if(typeof t=="string"){if(t==="true"||t==="TRUE"||t==="1")return!0;if(t==="false"||t==="FALSE"||t==="0")return!1;throw new oe(`Expected a boolean in column '${e}', got ${typeof t}: ${t}`)}if(Array.isArray(t)||Yt(t)){for(let i of t)if(i!==0)return!0;return!1}throw new oe(`Expected a boolean in column '${e}', got ${typeof t}: ${t}`)}case"decimal":if(typeof t!="number"&&typeof t!="string"&&!$a.Decimal.isDecimal(t))throw new oe(`Expected a decimal in column '${e}', got ${typeof t}: ${t}`);return{$type:"Decimal",value:t};case"datetime":{if(typeof t=="string")return{$type:"DateTime",value:Kp(t)};if(typeof t=="number"||Cr(t))return{$type:"DateTime",value:t};throw new oe(`Expected a date in column '${e}', got ${typeof t}: ${t}`)}case"object":return{$type:"Json",value:Je(t)};case"json":return{$type:"Json",value:`${t}`};case"bytes":{switch(r.encoding){case"base64":if(typeof t!="string")throw new oe(`Expected a base64-encoded byte array in column '${e}', got ${typeof t}: ${t}`);return{$type:"Bytes",value:t};case"hex":if(typeof t!="string"||!t.startsWith("\\x"))throw new oe(`Expected a hex-encoded byte array in column '${e}', got ${typeof t}: ${t}`);return{$type:"Bytes",value:w.from(t.slice(2),"hex").toString("base64")};case"array":if(Array.isArray(t))return{$type:"Bytes",value:w.from(t).toString("base64")};if(Yt(t))return{$type:"Bytes",value:w.from(t).toString("base64")};throw new oe(`Expected a byte array in column '${e}', got ${typeof t}: ${t}`);default:Y(r.encoding,`DataMapper: Unknown bytes encoding: ${r.encoding}`)}break}case"enum":{let i=n[r.name];if(i===void 0)throw new oe(`Unknown enum '${r.name}'`);let o=i[`${t}`];if(o===void 0)throw new oe(`Value '${t}' not found in enum '${r.name}'`);return o}default:Y(r,`DataMapper: Unknown result type: ${r.type}`)}}var Wp=/\d{2}:\d{2}:\d{2}(?:\.\d+)?(Z|[+-]\d{2}(:?\d{2})?)?$/;function Kp(t){let e=Wp.exec(t);if(e===null)return`${t}T00:00:00Z`;let r=t,[n,i,o]=e;if(i!==void 0&&i!=="Z"&&o===void 0?r=`${t}:00`:i===void 0&&(r=`${t}Z`),n.length===t.length)return`1970-01-01T${r}`;let s=e.index-1;return r[s]===" "&&(r=`${r.slice(0,s)}T${r.slice(s+1)}`),r}u();l();c();p();d();u();l();c();p();d();function Ue(t){if(typeof t!="object")return t;var e,r,n=Object.prototype.toString.call(t);if(n==="[object Object]"){if(t.constructor!==Object&&typeof t.constructor=="function"){r=new t.constructor;for(e in t)t.hasOwnProperty(e)&&r[e]!==t[e]&&(r[e]=Ue(t[e]))}else{r={};for(e in t)e==="__proto__"?Object.defineProperty(r,e,{value:Ue(t[e]),configurable:!0,enumerable:!0,writable:!0}):r[e]=Ue(t[e])}return r}if(n==="[object Array]"){for(e=t.length,r=Array(e);e--;)r[e]=Ue(t[e]);return r}return n==="[object Set]"?(r=new Set,t.forEach(function(i){r.add(Ue(i))}),r):n==="[object Map]"?(r=new Map,t.forEach(function(i,o){r.set(Ue(o),Ue(i))}),r):n==="[object Date]"?new Date(+t):n==="[object RegExp]"?(r=new RegExp(t.source,t.flags),r.lastIndex=t.lastIndex,r):n==="[object DataView]"?new t.constructor(Ue(t.buffer)):n==="[object ArrayBuffer]"?t.slice(0):n.slice(-6)==="Array]"?new t.constructor(t):t}u();l();c();p();d();function Xp(t){let e=Object.entries(t);return e.length===0?"":(e.sort(([n],[i])=>n.localeCompare(i)),`/*${e.map(([n,i])=>{let o=encodeURIComponent(n),s=encodeURIComponent(i).replace(/'/g,"\\'");return`${o}='${s}'`}).join(",")}*/`)}function vn(t,e){let r={};for(let n of t){let i=n(Ue(e));for(let[o,s]of Object.entries(i))s!==void 0&&(r[o]=s)}return r}function Ua(t,e){let r=vn(t,e);return Xp(r)}function Va(t,e){return e?`${t} ${e}`:t}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var Ir;(function(t){t[t.INTERNAL=0]="INTERNAL",t[t.SERVER=1]="SERVER",t[t.CLIENT=2]="CLIENT",t[t.PRODUCER=3]="PRODUCER",t[t.CONSUMER=4]="CONSUMER"})(Ir||(Ir={}));function Zp(t){switch(t){case"postgresql":case"postgres":case"prisma+postgres":return"postgresql";case"sqlserver":return"mssql";case"mysql":case"sqlite":case"cockroachdb":case"mongodb":return t;default:Y(t,`Unknown provider: ${t}`)}}async function Sn({query:t,tracingHelper:e,provider:r,onQuery:n,execute:i}){let o=n===void 0?i:async()=>{let s=new Date,a=T.now(),m=await i(),h=T.now();return n({timestamp:s,duration:h-a,query:t.sql,params:t.args}),m};return e.isEnabled()?await e.runInChildSpan({name:"db_query",kind:Ir.CLIENT,attributes:{"db.query.text":t.sql,"db.system.name":Zp(r)}},o):o()}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();function Pt(t,e){var r="000000000"+t;return r.substr(r.length-e)}var qa=Mt(cs(),1);function Yp(){try{return qa.default.hostname()}catch{return b.env._CLUSTER_NETWORK_NAME_||b.env.COMPUTERNAME||"hostname"}}var Ba=2,ed=Pt(b.pid.toString(36),Ba),ja=Yp(),td=ja.length,rd=Pt(ja.split("").reduce(function(t,e){return+t+e.charCodeAt(0)},+td+36).toString(36),Ba);function Li(){return ed+rd}u();l();c();p();d();u();l();c();p();d();function An(t){return typeof t=="string"&&/^c[a-z0-9]{20,32}$/.test(t)}function Fi(t){let n=Math.pow(36,4),i=0;function o(){return Pt((Math.random()*n<<0).toString(36),4)}function s(){return i=i>Ja&Rn)}:{h:Number(t>>Ja&Rn)|0,l:Number(t&Rn)|0}}function Ga(t,e=!1){let r=t.length,n=new Uint32Array(r),i=new Uint32Array(r);for(let o=0;ot<>>32-r,za=(t,e,r)=>e<>>32-r,Wa=(t,e,r)=>e<>>64-r,Ka=(t,e,r)=>t<>>64-r;u();l();c();p();d();function od(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function Cn(t,e=""){if(typeof t!="number"){let r=e&&`"${e}" `;throw new TypeError(`${r}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){let r=e&&`"${e}" `;throw new RangeError(`${r}expected integer >= 0, got ${t}`)}}function In(t,e,r=""){let n=od(t),i=t?.length,o=e!==void 0;if(!n||o&&i!==e){let s=r&&`"${r}" `,a=o?` of length ${e}`:"",m=n?`length=${i}`:`type=${typeof t}`,h=s+"expected Uint8Array"+a+", got "+m;throw n?new RangeError(h):new TypeError(h)}return t}function $i(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Xa(t,e){In(t,void 0,"digestInto() output");let r=e.outputLen;if(t.length='+r)}function Za(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Ui(...t){for(let e=0;e>>8&65280|t>>>24&255}function ud(t){for(let e=0;et:ud;function Ya(t,e={}){let r=(i,o)=>t(o).update(i).digest(),n=t(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.canXOF=n.canXOF,r.create=i=>t(i),Object.assign(r,e),Object.freeze(r)}var eu=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});var ld=BigInt(0),kr=BigInt(1),cd=BigInt(2),pd=BigInt(7),dd=BigInt(256),md=BigInt(113),nu=[],iu=[],ou=[];for(let t=0,e=kr,r=1,n=0;t<24;t++){[r,n]=[n,(2*r+3*n)%5],nu.push(2*(5*n+r)),iu.push((t+1)*(t+2)/2%64);let i=ld;for(let o=0;o<7;o++)e=(e<>pd)*md)%dd,e&cd&&(i^=kr<<(kr<r>32?Wa(t,e,r):Ha(t,e,r),ru=(t,e,r)=>r>32?Ka(t,e,r):za(t,e,r);function hd(t,e=24){if(Cn(e,"rounds"),e<1||e>24)throw new Error('"rounds" expected integer 1..24');let r=new Uint32Array(5*2);for(let n=24-e;n<24;n++){for(let s=0;s<10;s++)r[s]=t[s]^t[s+10]^t[s+20]^t[s+30]^t[s+40];for(let s=0;s<10;s+=2){let a=(s+8)%10,m=(s+2)%10,h=r[m],E=r[m+1],N=tu(h,E,1)^r[a],$=ru(h,E,1)^r[a+1];for(let U=0;U<50;U+=10)t[s+U]^=N,t[s+U+1]^=$}let i=t[2],o=t[3];for(let s=0;s<24;s++){let a=iu[s],m=tu(i,o,a),h=ru(i,o,a),E=nu[s];i=t[E],o=t[E+1],t[E]=m,t[E+1]=h}for(let s=0;s<50;s+=10){let a=t[s],m=t[s+1],h=t[s+2],E=t[s+3];t[s]^=~t[s+2]&t[s+4],t[s+1]^=~t[s+3]&t[s+5],t[s+2]^=~t[s+4]&t[s+6],t[s+3]^=~t[s+5]&t[s+7],t[s+4]^=~t[s+6]&t[s+8],t[s+5]^=~t[s+7]&t[s+9],t[s+6]^=~t[s+8]&a,t[s+7]^=~t[s+9]&m,t[s+8]^=~a&h,t[s+9]^=~m&E}t[0]^=fd[n],t[1]^=gd[n]}Ui(r)}var qi=class t{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;canXOF;enableXOF=!1;rounds;constructor(e,r,n,i=!1,o=24){if(this.blockLen=e,this.suffix=r,this.outputLen=n,this.enableXOF=i,this.canXOF=i,this.rounds=o,Cn(n,"outputLen"),!(0=n&&this.keccak();let s=Math.min(n-this.posOut,o-i);e.set(r.subarray(this.posOut,this.posOut+s),i),this.posOut+=s,i+=s}return e}xofInto(e){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return Cn(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(Xa(e,this),this.finished)throw new Error("digest() was already called");this.writeInto(e.subarray(0,this.outputLen)),this.destroy()}digest(){let e=new Uint8Array(this.outputLen);return this.digestInto(e),e}destroy(){this.destroyed=!0,Ui(this.state)}_cloneInto(e){let{blockLen:r,suffix:n,outputLen:i,rounds:o,enableXOF:s}=this;return e||=new t(r,n,i,s,o),e.blockLen=r,e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=o,e.suffix=n,e.outputLen=i,e.enableXOF=s,e.canXOF=this.canXOF,e.destroyed=this.destroyed,e}},yd=(t,e,r,n={})=>Ya(()=>new qi(e,t,r),n);var au=yd(6,72,64,eu(10));u();l();c();p();d();var wd=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Bi=Math.ceil,qe=Math.floor,Oe="[BigNumber Error] ",uu=Oe+"Number primitive has more than 15 significant digits: ",He=1e14,H=14,ji=9007199254740991,Qi=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],ft=1e7,xe=1e9;function lu(t){var e,r,n,i=L.prototype={constructor:L,toString:null,valueOf:null},o=new L(1),s=20,a=4,m=-7,h=21,E=-1e7,N=1e7,$=!1,U=1,B=0,q={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},J="0123456789abcdefghijklmnopqrstuvwxyz",Z=!0;function L(f,g){var y,k,P,O,_,R,I,M,D=this;if(!(D instanceof L))return new L(f,g);if(g==null){if(f&&f._isBigNumber===!0){D.s=f.s,!f.c||f.e>N?D.c=D.e=null:f.e=10;_/=10,O++);O>N?D.c=D.e=null:(D.e=O,D.c=[f]);return}M=String(f)}else{if(!wd.test(M=String(f)))return n(D,M,R);D.s=M.charCodeAt(0)==45?(M=M.slice(1),-1):1}(O=M.indexOf("."))>-1&&(M=M.replace(".","")),(_=M.search(/e/i))>0?(O<0&&(O=_),O+=+M.slice(_+1),M=M.substring(0,_)):O<0&&(O=M.length)}else{if(ae(g,2,J.length,"Base"),g==10&&Z)return D=new L(f),Se(D,s+D.e+1,a);if(M=String(f),R=typeof f=="number"){if(f*0!=0)return n(D,M,R,g);if(D.s=1/f<0?(M=M.slice(1),-1):1,L.DEBUG&&M.replace(/^0\.0*|\./,"").length>15)throw Error(uu+f)}else D.s=M.charCodeAt(0)===45?(M=M.slice(1),-1):1;for(y=J.slice(0,g),O=_=0,I=M.length;_O){O=I;continue}}else if(!P&&(M==M.toUpperCase()&&(M=M.toLowerCase())||M==M.toLowerCase()&&(M=M.toUpperCase()))){P=!0,_=-1,O=0;continue}return n(D,String(f),R,g)}R=!1,M=r(M,g,10,D.s),(O=M.indexOf("."))>-1?M=M.replace(".",""):O=M.length}for(_=0;M.charCodeAt(_)===48;_++);for(I=M.length;M.charCodeAt(--I)===48;);if(M=M.slice(_,++I)){if(I-=_,R&&L.DEBUG&&I>15&&(f>ji||f!==qe(f)))throw Error(uu+D.s*f);if((O=O-_-1)>N)D.c=D.e=null;else if(O=-xe&&P<=xe&&P===qe(P)){if(k[0]===0){if(P===0&&k.length===1)return!0;break e}if(g=(P+1)%H,g<1&&(g+=H),String(k[0]).length==g){for(g=0;g=He||y!==qe(y))break e;if(y!==0)return!0}}}else if(k===null&&P===null&&(O===null||O===1||O===-1))return!0;throw Error(Oe+"Invalid BigNumber: "+f)},L.maximum=L.max=function(){return ce(arguments,-1)},L.minimum=L.min=function(){return ce(arguments,1)},L.random=function(){var f=9007199254740992,g=Math.random()*f&2097151?function(){return qe(Math.random()*f)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(y){var k,P,O,_,R,I=0,M=[],D=new L(o);if(y==null?y=s:ae(y,0,xe),_=Bi(y/H),$)if(crypto.getRandomValues){for(k=crypto.getRandomValues(new Uint32Array(_*=2));I<_;)R=k[I]*131072+(k[I+1]>>>11),R>=9e15?(P=crypto.getRandomValues(new Uint32Array(2)),k[I]=P[0],k[I+1]=P[1]):(M.push(R%1e14),I+=2);I=_/2}else if(crypto.randomBytes){for(k=crypto.randomBytes(_*=7);I<_;)R=(k[I]&31)*281474976710656+k[I+1]*1099511627776+k[I+2]*4294967296+k[I+3]*16777216+(k[I+4]<<16)+(k[I+5]<<8)+k[I+6],R>=9e15?crypto.randomBytes(7).copy(k,I):(M.push(R%1e14),I+=7);I=_/7}else throw $=!1,Error(Oe+"crypto unavailable");if(!$)for(;I<_;)R=g(),R<9e15&&(M[I++]=R%1e14);for(_=M[--I],y%=H,_&&y&&(R=Qi[H-y],M[I]=qe(_/R)*R);M[I]===0;M.pop(),I--);if(I<0)M=[O=0];else{for(O=-1;M[0]===0;M.splice(0,1),O-=H);for(I=1,R=M[0];R>=10;R/=10,I++);IP-1&&(R[_+1]==null&&(R[_+1]=0),R[_+1]+=R[_]/P|0,R[_]%=P)}return R.reverse()}return function(y,k,P,O,_){var R,I,M,D,F,j,Q,X,ue=y.indexOf("."),fe=s,W=a;for(ue>=0&&(D=B,B=0,y=y.replace(".",""),X=new L(k),j=X.pow(y.length-ue),B=D,X.c=g(at(Ve(j.c),j.e,"0"),10,P,f),X.e=X.c.length),Q=g(y,k,P,_?(R=J,f):(R=f,J)),M=D=Q.length;Q[--D]==0;Q.pop());if(!Q[0])return R.charAt(0);if(ue<0?--M:(j.c=Q,j.e=M,j.s=O,j=e(j,X,fe,W,P),Q=j.c,F=j.r,M=j.e),I=M+fe+1,ue=Q[I],D=P/2,F=F||I<0||Q[I+1]!=null,F=W<4?(ue!=null||F)&&(W==0||W==(j.s<0?3:2)):ue>D||ue==D&&(W==4||F||W==6&&Q[I-1]&1||W==(j.s<0?8:7)),I<1||!Q[0])y=F?at(R.charAt(1),-fe,R.charAt(0)):R.charAt(0);else{if(Q.length=I,F)for(--P;++Q[--I]>P;)Q[I]=0,I||(++M,Q=[1].concat(Q));for(D=Q.length;!Q[--D];);for(ue=0,y="";ue<=D;y+=R.charAt(Q[ue++]));y=at(y,M,R.charAt(0))}return y}}(),e=function(){function f(k,P,O){var _,R,I,M,D=0,F=k.length,j=P%ft,Q=P/ft|0;for(k=k.slice();F--;)I=k[F]%ft,M=k[F]/ft|0,_=Q*I+M*j,R=j*I+_%ft*ft+D,D=(R/O|0)+(_/ft|0)+Q*M,k[F]=R%O;return D&&(k=[D].concat(k)),k}function g(k,P,O,_){var R,I;if(O!=_)I=O>_?1:-1;else for(R=I=0;RP[R]?1:-1;break}return I}function y(k,P,O,_){for(var R=0;O--;)k[O]-=R,R=k[O]1;k.splice(0,1));}return function(k,P,O,_,R){var I,M,D,F,j,Q,X,ue,fe,W,ee,Ae,jr,ei,ti,ze,sr,Le=k.s==P.s?1:-1,Re=k.c,le=P.c;if(!Re||!Re[0]||!le||!le[0])return new L(!k.s||!P.s||(Re?le&&Re[0]==le[0]:!le)?NaN:Re&&Re[0]==0||!le?Le*0:Le/0);for(ue=new L(Le),fe=ue.c=[],M=k.e-P.e,Le=O+M+1,R||(R=He,M=Be(k.e/H)-Be(P.e/H),Le=Le/H|0),D=0;le[D]==(Re[D]||0);D++);if(le[D]>(Re[D]||0)&&M--,Le<0)fe.push(1),F=!0;else{for(ei=Re.length,ze=le.length,D=0,Le+=2,j=qe(R/(le[0]+1)),j>1&&(le=f(le,j,R),Re=f(Re,j,R),ze=le.length,ei=Re.length),jr=ze,W=Re.slice(0,ze),ee=W.length;ee=R/2&&ti++;do{if(j=0,I=g(le,W,ze,ee),I<0){if(Ae=W[0],ze!=ee&&(Ae=Ae*R+(W[1]||0)),j=qe(Ae/ti),j>1)for(j>=R&&(j=R-1),Q=f(le,j,R),X=Q.length,ee=W.length;g(Q,W,X,ee)==1;)j--,y(Q,ze=10;Le/=10,D++);Se(ue,O+(ue.e=D+M*H-1)+1,_,F)}else ue.e=M,ue.r=+F;return ue}}();function z(f,g,y,k){var P,O,_,R,I;if(y==null?y=a:ae(y,0,8),!f.c)return f.toString();if(P=f.c[0],_=f.e,g==null)I=Ve(f.c),I=k==1||k==2&&(_<=m||_>=h)?On(I,_):at(I,_,"0");else if(f=Se(new L(f),g,y),O=f.e,I=Ve(f.c),R=I.length,k==1||k==2&&(g<=O||O<=m)){for(;R_),I=at(I,O,"0"),O+1>R){if(--g>0)for(I+=".";g--;I+="0");}else if(g+=O-R,g>0)for(O+1==R&&(I+=".");g--;I+="0");return f.s<0&&P?"-"+I:I}function ce(f,g){for(var y,k,P=1,O=new L(f[0]);P=10;P/=10,k++);return(y=k+y*H-1)>N?f.c=f.e=null:y=10;R/=10,P++);if(O=g-P,O<0)O+=H,_=g,I=F[M=0],D=qe(I/j[P-_-1]%10);else if(M=Bi((O+1)/H),M>=F.length)if(k){for(;F.length<=M;F.push(0));I=D=0,P=1,O%=H,_=O-H+1}else break e;else{for(I=R=F[M],P=1;R>=10;R/=10,P++);O%=H,_=O-H+P,D=_<0?0:qe(I/j[P-_-1]%10)}if(k=k||g<0||F[M+1]!=null||(_<0?I:I%j[P-_-1]),k=y<4?(D||k)&&(y==0||y==(f.s<0?3:2)):D>5||D==5&&(y==4||k||y==6&&(O>0?_>0?I/j[P-_]:0:F[M-1])%10&1||y==(f.s<0?8:7)),g<1||!F[0])return F.length=0,k?(g-=f.e+1,F[0]=j[(H-g%H)%H],f.e=-g||0):F[0]=f.e=0,f;if(O==0?(F.length=M,R=1,M--):(F.length=M+1,R=j[H-O],F[M]=_>0?qe(I/j[P-_]%j[_])*R:0),k)for(;;)if(M==0){for(O=1,_=F[0];_>=10;_/=10,O++);for(_=F[0]+=R,R=1;_>=10;_/=10,R++);O!=R&&(f.e++,F[0]==He&&(F[0]=1));break}else{if(F[M]+=R,F[M]!=He)break;F[M--]=0,R=1}for(O=F.length;F[--O]===0;F.pop());}f.e>N?f.c=f.e=null:f.e=h?On(g,y):at(g,y,"0"),f.s<0?"-"+g:g)}return i.absoluteValue=i.abs=function(){var f=new L(this);return f.s<0&&(f.s=1),f},i.comparedTo=function(f,g){return Tt(this,new L(f,g))},i.decimalPlaces=i.dp=function(f,g){var y,k,P,O=this;if(f!=null)return ae(f,0,xe),g==null?g=a:ae(g,0,8),Se(new L(O),f+O.e+1,g);if(!(y=O.c))return null;if(k=((P=y.length-1)-Be(this.e/H))*H,P=y[P])for(;P%10==0;P/=10,k--);return k<0&&(k=0),k},i.dividedBy=i.div=function(f,g){return e(this,new L(f,g),s,a)},i.dividedToIntegerBy=i.idiv=function(f,g){return e(this,new L(f,g),0,1)},i.exponentiatedBy=i.pow=function(f,g){var y,k,P,O,_,R,I,M,D,F=this;if(f=new L(f),f.c&&!f.isInteger())throw Error(Oe+"Exponent not an integer: "+pe(f));if(g!=null&&(g=new L(g)),R=f.e>14,!F.c||!F.c[0]||F.c[0]==1&&!F.e&&F.c.length==1||!f.c||!f.c[0])return D=new L(Math.pow(+pe(F),R?f.s*(2-kn(f)):+pe(f))),g?D.mod(g):D;if(I=f.s<0,g){if(g.c?!g.c[0]:!g.s)return new L(NaN);k=!I&&F.isInteger()&&g.isInteger(),k&&(F=F.mod(g))}else{if(f.e>9&&(F.e>0||F.e<-1||(F.e==0?F.c[0]>1||R&&F.c[1]>=24e7:F.c[0]<8e13||R&&F.c[0]<=9999975e7)))return O=F.s<0&&kn(f)?-0:0,F.e>-1&&(O=1/O),new L(I?1/O:O);B&&(O=Bi(B/H+2))}for(R?(y=new L(.5),I&&(f.s=1),M=kn(f)):(P=Math.abs(+pe(f)),M=P%2),D=new L(o);;){if(M){if(D=D.times(F),!D.c)break;O?D.c.length>O&&(D.c.length=O):k&&(D=D.mod(g))}if(P){if(P=qe(P/2),P===0)break;M=P%2}else if(f=f.times(y),Se(f,f.e+1,1),f.e>14)M=kn(f);else{if(P=+pe(f),P===0)break;M=P%2}F=F.times(F),O?F.c&&F.c.length>O&&(F.c.length=O):k&&(F=F.mod(g))}return k?D:(I&&(D=o.div(D)),g?D.mod(g):O?Se(D,B,a,_):D)},i.integerValue=function(f){var g=new L(this);return f==null?f=a:ae(f,0,8),Se(g,g.e+1,f)},i.isEqualTo=i.eq=function(f,g){return Tt(this,new L(f,g))===0},i.isFinite=function(){return!!this.c},i.isGreaterThan=i.gt=function(f,g){return Tt(this,new L(f,g))>0},i.isGreaterThanOrEqualTo=i.gte=function(f,g){return(g=Tt(this,new L(f,g)))===1||g===0},i.isInteger=function(){return!!this.c&&Be(this.e/H)>this.c.length-2},i.isLessThan=i.lt=function(f,g){return Tt(this,new L(f,g))<0},i.isLessThanOrEqualTo=i.lte=function(f,g){return(g=Tt(this,new L(f,g)))===-1||g===0},i.isNaN=function(){return!this.s},i.isNegative=function(){return this.s<0},i.isPositive=function(){return this.s>0},i.isZero=function(){return!!this.c&&this.c[0]==0},i.minus=function(f,g){var y,k,P,O,_=this,R=_.s;if(f=new L(f,g),g=f.s,!R||!g)return new L(NaN);if(R!=g)return f.s=-g,_.plus(f);var I=_.e/H,M=f.e/H,D=_.c,F=f.c;if(!I||!M){if(!D||!F)return D?(f.s=-g,f):new L(F?_:NaN);if(!D[0]||!F[0])return F[0]?(f.s=-g,f):new L(D[0]?_:a==3?-0:0)}if(I=Be(I),M=Be(M),D=D.slice(),R=I-M){for((O=R<0)?(R=-R,P=D):(M=I,P=F),P.reverse(),g=R;g--;P.push(0));P.reverse()}else for(k=(O=(R=D.length)<(g=F.length))?R:g,R=g=0;g0)for(;g--;D[y++]=0);for(g=He-1;k>R;){if(D[--k]=0;){for(y=0,j=Ae[P]%fe,Q=Ae[P]/fe|0,_=I,O=P+_;O>P;)M=ee[--_]%fe,D=ee[_]/fe|0,R=Q*M+D*j,M=j*M+R%fe*fe+X[O]+y,y=(M/ue|0)+(R/fe|0)+Q*D,X[O--]=M%ue;X[O]=y}return y?++k:X.splice(0,1),Ie(f,X,k)},i.negated=function(){var f=new L(this);return f.s=-f.s||null,f},i.plus=function(f,g){var y,k=this,P=k.s;if(f=new L(f,g),g=f.s,!P||!g)return new L(NaN);if(P!=g)return f.s=-g,k.minus(f);var O=k.e/H,_=f.e/H,R=k.c,I=f.c;if(!O||!_){if(!R||!I)return new L(P/0);if(!R[0]||!I[0])return I[0]?f:new L(R[0]?k:P*0)}if(O=Be(O),_=Be(_),R=R.slice(),P=O-_){for(P>0?(_=O,y=I):(P=-P,y=R),y.reverse();P--;y.push(0));y.reverse()}for(P=R.length,g=I.length,P-g<0&&(y=I,I=R,R=y,g=P),P=0;g;)P=(R[--g]=R[g]+I[g]+P)/He|0,R[g]=He===R[g]?0:R[g]%He;return P&&(R=[P].concat(R),++_),Ie(f,R,_)},i.precision=i.sd=function(f,g){var y,k,P,O=this;if(f!=null&&f!==!!f)return ae(f,1,xe),g==null?g=a:ae(g,0,8),Se(new L(O),f,g);if(!(y=O.c))return null;if(P=y.length-1,k=P*H+1,P=y[P]){for(;P%10==0;P/=10,k--);for(P=y[0];P>=10;P/=10,k++);}return f&&O.e+1>k&&(k=O.e+1),k},i.shiftedBy=function(f){return ae(f,-ji,ji),this.times("1e"+f)},i.squareRoot=i.sqrt=function(){var f,g,y,k,P,O=this,_=O.c,R=O.s,I=O.e,M=s+4,D=new L("0.5");if(R!==1||!_||!_[0])return new L(!R||R<0&&(!_||_[0])?NaN:_?O:1/0);if(R=Math.sqrt(+pe(O)),R==0||R==1/0?(g=Ve(_),(g.length+I)%2==0&&(g+="0"),R=Math.sqrt(+g),I=Be((I+1)/2)-(I<0||I%2),R==1/0?g="5e"+I:(g=R.toExponential(),g=g.slice(0,g.indexOf("e")+1)+I),y=new L(g)):y=new L(R+""),y.c[0]){for(I=y.e,R=I+M,R<3&&(R=0);;)if(P=y,y=D.times(P.plus(e(O,P,M,1))),Ve(P.c).slice(0,R)===(g=Ve(y.c)).slice(0,R))if(y.e0&&X>0){for(O=X%R||R,D=Q.substr(0,O);O0&&(D+=M+Q.slice(O)),j&&(D="-"+D)}k=F?D+(y.decimalSeparator||"")+((I=+y.fractionGroupSize)?F.replace(new RegExp("\\d{"+I+"}\\B","g"),"$&"+(y.fractionGroupSeparator||"")):F):D}return(y.prefix||"")+k+(y.suffix||"")},i.toFraction=function(f){var g,y,k,P,O,_,R,I,M,D,F,j,Q=this,X=Q.c;if(f!=null&&(R=new L(f),!R.isInteger()&&(R.c||R.s!==1)||R.lt(o)))throw Error(Oe+"Argument "+(R.isInteger()?"out of range: ":"not an integer: ")+pe(R));if(!X)return new L(Q);for(g=new L(o),M=y=new L(o),k=I=new L(o),j=Ve(X),O=g.e=j.length-Q.e-1,g.c[0]=Qi[(_=O%H)<0?H+_:_],f=!f||R.comparedTo(g)>0?O>0?g:M:R,_=N,N=1/0,R=new L(j),I.c[0]=0;D=e(R,g,0,1),P=y.plus(D.times(k)),P.comparedTo(f)!=1;)y=k,k=P,M=I.plus(D.times(P=M)),I=P,g=R.minus(D.times(P=g)),R=P;return P=e(f.minus(y),k,0,1),I=I.plus(P.times(M)),y=y.plus(P.times(k)),I.s=M.s=Q.s,O=O*2,F=e(M,k,O,a).minus(Q).abs().comparedTo(e(I,y,O,a).minus(Q).abs())<1?[M,k]:[I,y],N=_,F},i.toNumber=function(){return+pe(this)},i.toPrecision=function(f,g){return f!=null&&ae(f,1,xe),z(this,f,g,2)},i.toString=function(f){var g,y=this,k=y.s,P=y.e;return P===null?k?(g="Infinity",k<0&&(g="-"+g)):g="NaN":(f==null?g=P<=m||P>=h?On(Ve(y.c),P):at(Ve(y.c),P,"0"):f===10&&Z?(y=Se(new L(y),s+P+1,a),g=at(Ve(y.c),y.e,"0")):(ae(f,2,J.length,"Base"),g=r(at(Ve(y.c),P,"0"),10,f,k,!0)),k<0&&y.c[0]&&(g="-"+g)),g},i.valueOf=i.toJSON=function(){return pe(this)},i._isBigNumber=!0,i[Symbol.toStringTag]="BigNumber",i[Symbol.for("nodejs.util.inspect.custom")]=i.valueOf,t!=null&&L.set(t),L}function Be(t){var e=t|0;return t>0||t===e?e:e-1}function Ve(t){for(var e,r,n=1,i=t.length,o=t[0]+"";nh^r?1:-1;for(a=(m=i.length)<(h=o.length)?m:h,s=0;so[s]^r?1:-1;return m==h?0:m>h^r?1:-1}function ae(t,e,r,n){if(tr||t!==qe(t))throw Error(Oe+(n||"Argument")+(typeof t=="number"?tr?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function kn(t){var e=t.c.length-1;return Be(t.e/H)==e&&t.c[e]%2!=0}function On(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function at(t,e,r){var n,i;if(e<0){for(i=r+".";++e;i+=r);t=i+t}else if(n=t.length,++e>n){for(i=r,e-=n;--e;i+=r);t+=i}else etypeof globalThis<"u"&&globalThis.crypto&&typeof globalThis.crypto.getRandomValues=="function"?()=>{let t=new Uint32Array(1);return globalThis.crypto.getRandomValues(t),t[0]/4294967296}:Math.random,Gi=Ed(),Ji=(t=4,e=Gi)=>{let r="";for(;r.length{let e=new TextEncoder;return Pd(au(e.encode(t))).toString(36).slice(1)},pu=Array.from({length:26},(t,e)=>String.fromCharCode(e+97)),Td=t=>pu[Math.floor(t()*pu.length)],vd=({globalObj:t=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},random:e=Gi}={})=>{let r=Object.keys(t).toString(),n=r.length?r+Ji(Or,e):Ji(Or,e);return du(n).substring(0,Or)},Sd=t=>()=>t++,Ad=476782367,mu=({random:t=Gi,counter:e=Sd(Math.floor(t()*Ad)),length:r=xd,fingerprint:n=vd({random:t})}={})=>{if(r>Or)throw new Error(`Length must be between 2 and ${Or}. Received: ${r}`);return function(){let o=Td(t),s=Date.now().toString(36),a=e().toString(36),m=Ji(r,t),h=`${s+m+a+n}`;return`${o+du(h).substring(1,r)}`}},Hi=Rd(mu);function Rd(t){let e;return()=>(e||(e=t()),e())}u();l();c();p();d();Kr();u();l();c();p();d();var fu="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Cd=128,gt,tr;function Id(t){if(t<0)throw new RangeError("Wrong ID size");try{!gt||gt.lengthgt.length&&(dr.getRandomValues(gt),tr=0)}catch(e){throw gt=void 0,e}tr+=t}function zi(t=21){Id(t|=0);let e="";for(let r=tr-t;r{let n=new Uint8Array(1);return r.getRandomValues(n),n[0]/255};if(typeof r?.randomBytes=="function")return()=>r.randomBytes(1).readUInt8()/255;if($t?.randomBytes)return()=>$t.randomBytes(1).readUInt8()/255;throw new St(vt.PRNGDetectFailure,"Failed to find a reliable PRNG")}function Dd(){return Ld()?self:typeof window<"u"?window:typeof globalThis<"u"||typeof globalThis<"u"?globalThis:null}function Md(t,e){let r="";for(;t>0;t--)r=Od(e)+r;return r}function _d(t,e=yu){if(isNaN(t))throw new St(vt.EncodeTimeValueMalformed,`Time must be a number: ${t}`);if(t>gu)throw new St(vt.EncodeTimeSizeExceeded,`Cannot encode a time larger than ${gu}: ${t}`);if(t<0)throw new St(vt.EncodeTimeNegative,`Time must be positive: ${t}`);if(Number.isInteger(t)===!1)throw new St(vt.EncodeTimeValueMalformed,`Time must be an integer: ${t}`);let r,n="";for(let i=e;i>0;i--)r=t%Nr,n=hu.charAt(r)+n,t=(t-r)/Nr;return n}function Ld(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}function wu(t,e){let r=e||Nd(),n=!t||isNaN(t)?Date.now():t;return _d(n,yu)+Md(kd,r)}u();l();c();p();d();u();l();c();p();d();var Pe=[];for(let t=0;t<256;++t)Pe.push((t+256).toString(16).slice(1));function Nn(t,e=0){return(Pe[t[e+0]]+Pe[t[e+1]]+Pe[t[e+2]]+Pe[t[e+3]]+"-"+Pe[t[e+4]]+Pe[t[e+5]]+"-"+Pe[t[e+6]]+Pe[t[e+7]]+"-"+Pe[t[e+8]]+Pe[t[e+9]]+"-"+Pe[t[e+10]]+Pe[t[e+11]]+Pe[t[e+12]]+Pe[t[e+13]]+Pe[t[e+14]]+Pe[t[e+15]]).toLowerCase()}u();l();c();p();d();var Fd=new Uint8Array(16);function rr(){return crypto.getRandomValues(Fd)}u();l();c();p();d();function $d(t,e,r){return!e&&!t&&crypto.randomUUID?crypto.randomUUID():Ud(t,e,r)}function Ud(t,e,r){t=t||{};let n=t.random??t.rng?.()??rr();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)e[r+i]=n[i];return e}return Nn(n)}var Wi=$d;u();l();c();p();d();var Ki={};function Vd(t,e,r){let n;if(t)n=bu(t.random??t.rng?.()??rr(),t.msecs,t.seq,e,r);else{let i=Date.now(),o=rr();qd(Ki,i,o),n=bu(o,Ki.msecs,Ki.seq,e,r)}return e??Nn(n)}function qd(t,e,r){return t.msecs??=-1/0,t.seq??=0,e>t.msecs?(t.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],t.msecs=e):(t.seq=t.seq+1|0,t.seq===0&&t.msecs++),t}function bu(t,e,r,n,i=0){if(t.length<16)throw new Error("Random bytes length must be >= 16");if(!n)n=new Uint8Array(16),i=0;else if(i<0||i+16>n.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);return e??=Date.now(),r??=t[6]*127<<24|t[7]<<16|t[8]<<8|t[9],n[i++]=e/1099511627776&255,n[i++]=e/4294967296&255,n[i++]=e/16777216&255,n[i++]=e/65536&255,n[i++]=e/256&255,n[i++]=e&255,n[i++]=112|r>>>28&15,n[i++]=r>>>20&255,n[i++]=128|r>>>14&63,n[i++]=r>>>6&255,n[i++]=r<<2&255|t[10]&3,n[i++]=t[11],n[i++]=t[12],n[i++]=t[13],n[i++]=t[14],n[i++]=t[15],n}var Xi=Vd;var Dn=class{#e={};constructor(){this.register("uuid",new Yi),this.register("cuid",new eo),this.register("ulid",new to),this.register("nanoid",new ro),this.register("product",new no)}snapshot(){return Object.create(this.#e,{now:{value:new Zi}})}register(e,r){this.#e[e]=r}},Zi=class{#e;generate(){return this.#e===void 0&&(this.#e=new Date),this.#e.toISOString()}},Yi=class{generate(e){if(e===4)return Wi();if(e===7)return Xi();throw new Error("Invalid UUID generator arguments")}},eo=class{generate(e){if(e===1)return Qa();if(e===2)return Hi();throw new Error("Invalid CUID generator arguments")}},to=class{generate(){return wu()}},ro=class{generate(e){if(typeof e=="number")return zi(e);if(e===void 0)return zi();throw new Error("Invalid Nanoid generator arguments")}},no=class{generate(e,r){if(e===void 0||r===void 0)throw new Error("Invalid Product generator arguments");return Array.isArray(e)&&Array.isArray(r)?e.flatMap(n=>r.map(i=>[n,i])):Array.isArray(e)?e.map(n=>[n,r]):Array.isArray(r)?r.map(n=>[e,n]):[[e,r]]}};u();l();c();p();d();function Dr(t,e){return t==null?t:typeof t=="string"?Dr(JSON.parse(t),e):Array.isArray(t)?jd(t,e):Bd(t,e)}function Bd(t,e){if(e.pagination){let{skip:r,take:n,cursor:i}=e.pagination;if(r!==null&&r>0||n===0||i!==null&&!er(t,i))return null}return Eu(t,e.nested)}function Eu(t,e){for(let[r,n]of Object.entries(e))t[r]=Dr(t[r],n);return t}function jd(t,e){if(e.distinct!==null){let r=e.linkingFields!==null?[...e.distinct,...e.linkingFields]:e.distinct;t=Qd(t,r)}return e.pagination&&(t=Jd(t,e.pagination,e.linkingFields)),e.reverse&&t.reverse(),Object.keys(e.nested).length===0?t:t.map(r=>Eu(r,e.nested))}function Qd(t,e){let r=new Set,n=[];for(let i of t){let o=At(i,e);r.has(o)||(r.add(o),n.push(i))}return n}function Jd(t,e,r){if(r===null)return xu(t,e);let n=new Map;for(let o of t){let s=At(o,r);n.has(s)||n.set(s,[]),n.get(s).push(o)}let i=Array.from(n.entries());return i.sort(([o],[s])=>os?1:0),i.flatMap(([,o])=>xu(o,e))}function xu(t,{cursor:e,skip:r,take:n}){let i=e!==null?t.findIndex(a=>er(a,e)):0;if(i===-1)return[];let o=i+(r??0),s=n!==null?o+n:t.length;return t.slice(o,s)}function At(t,e,r){let n=e.map((i,o)=>r?.[o]?t[i]!==null?r[o](t[i]):null:t[i]);return JSON.stringify(n)}u();l();c();p();d();u();l();c();p();d();function io(t){return typeof t=="object"&&t!==null&&t.prisma__type==="param"}function oo(t){return typeof t=="object"&&t!==null&&t.prisma__type==="generatorCall"}function uo(t,e,r,n){let i=t.args.map(o=>_e(o,e,r));switch(t.type){case"rawSql":return[zd(t.sql,i,t.argTypes)];case"templateSql":return(t.chunkable?Kd(t.fragments,i,n):[i]).map(s=>{let a=Gd(t.fragments,t.placeholderFormat,s,t.argTypes);if(n!==void 0&&a.args.length>n)throw new be("The query parameter limit supported by your database is exceeded.","P2029");return a});default:Y(t.type,"Invalid query type")}}function _e(t,e,r){for(;Wd(t);)if(io(t)){let n=e[t.prisma__value.name];if(n===void 0)throw new Error(`Missing value for query variable ${t.prisma__value.name}`);t.prisma__value.type==="DateTime"&&typeof n=="string"?t=new Date(n):t=n}else if(oo(t)){let{name:n,args:i}=t.prisma__value,o=r[n];if(!o)throw new Error(`Encountered an unknown generator '${n}'`);t=o.generate(...i.map(s=>_e(s,e,r)))}else Y(t,`Unexpected unevaluated value type: ${t}`);return Array.isArray(t)&&(t=t.map(n=>_e(n,e,r))),t}function Gd(t,e,r,n){let i="",o={placeholderNumber:1},s=[],a=[];for(let m of ao(t,r,n)){if(i+=Hd(m,e,o),m.type==="stringChunk")continue;let h=Array.from(Pu(m)),E=h.length;if(Pn(s,h),m.argType.arity==="tuple"){if(E%m.argType.elements.length!==0)throw new Error(`Malformed query template. Expected the number of parameters to match the tuple arity, but got ${E} parameters for a tuple of arity ${m.argType.elements.length}.`);for(let N=0;N{let o=so(e,r.placeholderNumber++);return`${t.itemPrefix}${o}${t.itemSuffix}`}).join(t.itemSeparator)})`;case"parameterTupleList":return t.value.map(i=>{let o=i.map(()=>so(e,r.placeholderNumber++)).join(t.itemSeparator);return`${t.itemPrefix}${o}${t.itemSuffix}`}).join(t.groupSeparator);default:Y(n,"Invalid fragment type")}}function so(t,e){return t.hasNumbering?`${t.prefix}${e}`:t.prefix}function zd(t,e,r){return{sql:t,args:e,argTypes:r}}function Wd(t){return io(t)||oo(t)}function*ao(t,e,r){let n=0;for(let i of t)switch(i.type){case"parameter":{if(n>=e.length)throw new Error(`Malformed query template. Fragments attempt to read over ${e.length} parameters.`);yield{...i,value:e[n],argType:r?.[n]},n++;break}case"stringChunk":{yield i;break}case"parameterTuple":{if(n>=e.length)throw new Error(`Malformed query template. Fragments attempt to read over ${e.length} parameters.`);let o=e[n];yield{...i,value:Array.isArray(o)?o:[o],argType:r?.[n]},n++;break}case"parameterTupleList":{if(n>=e.length)throw new Error(`Malformed query template. Fragments attempt to read over ${e.length} parameters.`);let o=e[n];if(!Array.isArray(o))throw new Error("Malformed query template. Tuple list expected.");if(o.length===0)throw new Error("Malformed query template. Tuple list cannot be empty.");for(let s of o)if(!Array.isArray(s))throw new Error("Malformed query template. Tuple expected.");yield{...i,value:o,argType:r?.[n]},n++;break}}}function*Pu(t){switch(t.type){case"parameter":yield t.value;break;case"stringChunk":break;case"parameterTuple":yield*t.value;break;case"parameterTupleList":for(let e of t.value)yield*e;break}}function Kd(t,e,r){let n=0,i=0;for(let s of ao(t,e,void 0)){let a=0;for(let m of Pu(s))a++;i=Math.max(i,a),n+=a}let o=[[]];for(let s of ao(t,e,void 0))switch(s.type){case"parameter":{for(let a of o)a.push(s.value);break}case"stringChunk":break;case"parameterTuple":{let a=s.value.length,m=[];if(r&&o.length===1&&a===i&&n>r&&n-am.map(E=>[...h,E]));break}case"parameterTupleList":{let a=s.value.reduce((N,$)=>N+$.length,0),m=[],h=[],E=0;for(let N of s.value)r&&o.length===1&&a===i&&h.length>0&&n-a+E+N.length>r&&(m.push(h),h=[],E=0),h.push(N),E+=N.length;h.length>0&&m.push(h),o=o.flatMap(N=>m.map($=>[...N,$]));break}}return o}function Xd(t,e){let r=[];for(let n=0;ne.reduce((r,n,i)=>(r[t.columnNames[i]]=n,r),{}))}function vu(t){return{columns:t.columnNames,types:t.columnTypes.map(e=>Zd(e)),rows:t.rows.map(e=>e.map((r,n)=>Mr(r,t.columnTypes[n])))}}function Mr(t,e){if(t===null)return null;switch(e){case G.Int32:switch(typeof t){case"number":return Math.trunc(t);case"string":return Math.trunc(Number(t));default:throw new Error(`Cannot serialize value of type ${typeof t} as Int32`)}case G.Int32Array:if(!Array.isArray(t))throw new Error(`Cannot serialize value of type ${typeof t} as Int32Array`);return t.map(r=>Mr(r,G.Int32));case G.Int64:switch(typeof t){case"number":return BigInt(Math.trunc(t));case"string":return t;default:throw new Error(`Cannot serialize value of type ${typeof t} as Int64`)}case G.Int64Array:if(!Array.isArray(t))throw new Error(`Cannot serialize value of type ${typeof t} as Int64Array`);return t.map(r=>Mr(r,G.Int64));case G.Json:switch(typeof t){case"string":return JSON.parse(t);default:throw new Error(`Cannot serialize value of type ${typeof t} as Json`)}case G.JsonArray:if(!Array.isArray(t))throw new Error(`Cannot serialize value of type ${typeof t} as JsonArray`);return t.map(r=>Mr(r,G.Json));case G.Boolean:switch(typeof t){case"boolean":return t;case"string":return t==="true"||t==="1";case"number":return t===1;default:throw new Error(`Cannot serialize value of type ${typeof t} as Boolean`)}case G.BooleanArray:if(!Array.isArray(t))throw new Error(`Cannot serialize value of type ${typeof t} as BooleanArray`);return t.map(r=>Mr(r,G.Boolean));default:return t}}function Zd(t){switch(t){case G.Int32:return"int";case G.Int64:return"bigint";case G.Float:return"float";case G.Double:return"double";case G.Text:return"string";case G.Enum:return"enum";case G.Bytes:return"bytes";case G.Boolean:return"bool";case G.Character:return"char";case G.Numeric:return"decimal";case G.Json:return"json";case G.Uuid:return"uuid";case G.DateTime:return"datetime";case G.Date:return"date";case G.Time:return"time";case G.Int32Array:return"int-array";case G.Int64Array:return"bigint-array";case G.FloatArray:return"float-array";case G.DoubleArray:return"double-array";case G.TextArray:return"string-array";case G.EnumArray:return"string-array";case G.BytesArray:return"bytes-array";case G.BooleanArray:return"bool-array";case G.CharacterArray:return"char-array";case G.NumericArray:return"decimal-array";case G.JsonArray:return"json-array";case G.UuidArray:return"uuid-array";case G.DateTimeArray:return"datetime-array";case G.DateArray:return"date-array";case G.TimeArray:return"time-array";case G.UnknownNumber:return"unknown";case G.Set:return"string";default:Y(t,`Unexpected column type: ${t}`)}}u();l();c();p();d();function lo(t,e,r){if(!e.every(n=>Mn(t,n))){let n=Yd(t,r),i=em(r);throw new be(n,i,r.context)}}function Mn(t,e){switch(e.type){case"rowCountEq":return Array.isArray(t)?t.length===e.args:t===null?e.args===0:e.args===1;case"rowCountNeq":return Array.isArray(t)?t.length!==e.args:t===null?e.args!==0:e.args!==1;case"affectedRowCountEq":return t===e.args;case"never":return!1;default:Y(e,`Unknown rule type: ${e.type}`)}}function Yd(t,e){switch(e.errorIdentifier){case"RELATION_VIOLATION":return`The change you are trying to make would violate the required relation '${e.context.relation}' between the \`${e.context.modelA}\` and \`${e.context.modelB}\` models.`;case"MISSING_RECORD":return`An operation failed because it depends on one or more records that were required but not found. No record was found for ${e.context.operation}.`;case"MISSING_RELATED_RECORD":{let r=e.context.neededFor?` (needed to ${e.context.neededFor})`:"";return`An operation failed because it depends on one or more records that were required but not found. No '${e.context.model}' record${r} was found for ${e.context.operation} on ${e.context.relationType} relation '${e.context.relation}'.`}case"INCOMPLETE_CONNECT_INPUT":return`An operation failed because it depends on one or more records that were required but not found. Expected ${e.context.expectedRows} records to be connected, found only ${Array.isArray(t)?t.length:t}.`;case"INCOMPLETE_CONNECT_OUTPUT":return`The required connected records were not found. Expected ${e.context.expectedRows} records to be connected after connect operation on ${e.context.relationType} relation '${e.context.relation}', found ${Array.isArray(t)?t.length:t}.`;case"RECORDS_NOT_CONNECTED":return`The records for relation \`${e.context.relation}\` between the \`${e.context.parent}\` and \`${e.context.child}\` models are not connected.`;default:Y(e,`Unknown error identifier: ${e}`)}}function em(t){switch(t.errorIdentifier){case"RELATION_VIOLATION":return"P2014";case"RECORDS_NOT_CONNECTED":return"P2017";case"INCOMPLETE_CONNECT_OUTPUT":return"P2018";case"MISSING_RECORD":case"MISSING_RELATED_RECORD":case"INCOMPLETE_CONNECT_INPUT":return"P2025";default:Y(t,`Unknown error identifier: ${t}`)}}var tm=ye("prisma:client:queryInterpreter"),Fr=class t{#e;#t=new Dn;#r;#i;#o;#s;#a;constructor({onQuery:e,tracingHelper:r,serializer:n,rawSerializer:i,provider:o,connectionInfo:s}){this.#e=e,this.#r=r,this.#i=n,this.#o=i??n,this.#s=o,this.#a=s}static forSql(e){return new t({onQuery:e.onQuery,tracingHelper:e.tracingHelper,serializer:Tu,rawSerializer:vu,provider:e.provider,connectionInfo:e.connectionInfo})}async run(e,r){let n=this.#t.snapshot(),i={...r,generators:n},o=nm(e,a=>this.interpretNode(a,i))?.catch(a=>mt(a));if(o)try{return this.#n(await o,i.scope,n).value}catch(a){mt(a)}let{value:s}=await this.interpretNode(e,i).catch(a=>mt(a));return s}async interpretNode(e,r){switch(e.type){case"value":return{value:_e(e.args,r.scope,r.generators),lastInsertId:e.lastInsertId};case"seq":{let n;for(let i of e.args)n=await this.interpretNode(i,r);return n??{value:void 0}}case"let":{let n=Object.create(r.scope);for(let i of e.args.bindings){let{value:o}=await this.interpretNode(i.expr,{...r,scope:n});n[i.name]=o}return this.interpretNode(e.args.expr,{...r,scope:n})}case"concat":{let n=await Promise.all(e.args.map(i=>this.interpretNode(i,r).then(o=>o.value)));return{value:n.length>0?n.reduce((i,o)=>i.concat(nr(o)),[]):[]}}case"sum":{let n=await Promise.all(e.args.map(i=>this.interpretNode(i,r).then(o=>o.value)));return{value:n.length>0?n.reduce((i,o)=>je(i)+je(o)):0}}case"execute":{let n=uo(e.args,r.scope,r.generators,this.#p());return this.#l(n.length,r,async i=>{let o=0;for(let s of n){let a=Cu(s,i.sqlCommenter);o+=await this.#d(a,i.queryable,()=>i.queryable.executeRaw(_n(a)).catch(m=>e.args.type==="rawSql"?Ni(m):mt(m)))}return{value:o}})}case"query":{let n=uo(e.args,r.scope,r.generators,this.#p());return this.#l(n.length,r,async i=>{let o;for(let s of n){let a=Cu(s,i.sqlCommenter),m=await this.#d(a,i.queryable,()=>i.queryable.queryRaw(_n(a)).catch(h=>e.args.type==="rawSql"?Ni(h):mt(h)));o===void 0?o=m:(Pn(o.rows,m.rows),o.lastInsertId=m.lastInsertId)}return{value:e.args.type==="rawSql"?this.#o(o):this.#i(o),lastInsertId:o?.lastInsertId}})}case"reverse":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args,r);return{value:Array.isArray(n)?n.reverse():n,lastInsertId:i}}case"unique":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args,r);if(!Array.isArray(n))return{value:n,lastInsertId:i};if(n.length>1)throw new Error(`Expected zero or one element, got ${n.length}`);return{value:n[0]??null,lastInsertId:i}}case"required":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args,r);if(co(n))throw new Error("Required value is empty");return{value:n,lastInsertId:i}}case"mapField":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.records,r);return{value:po(n,e.args.field),lastInsertId:i}}case"join":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.parent,r);if(n===null)return{value:null,lastInsertId:i};let o=await Promise.all(e.args.children.map(async s=>({joinExpr:s,childRecords:(await this.interpretNode(s.child,r)).value})));return{value:Su(n,o,e.args.canAssumeStrictEquality),lastInsertId:i}}case"transaction":return this.#u(r,n=>this.interpretNode(e.args,n));case"dataMap":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.expr,r);return{value:Mi(n,e.args.structure,e.args.enums),lastInsertId:i}}case"validate":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.expr,r);return lo(n,e.args.rules,e.args),{value:n,lastInsertId:i}}case"if":{let{value:n}=await this.interpretNode(e.args.value,r);return Mn(n,e.args.rule)?await this.interpretNode(e.args.then,r):await this.interpretNode(e.args.else,r)}case"diff":{let{value:n}=await this.interpretNode(e.args.from,r),{value:i}=await this.interpretNode(e.args.to,r),o=a=>a!==null?At(Rt(a),e.args.fields):null,s=new Set(nr(i).map(o));return{value:nr(n).filter(a=>!s.has(o(a)))}}case"process":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.expr,r),o=_n(e.args.operations);return mo(o,r.scope,r.generators),{value:Dr(n,o),lastInsertId:i}}case"initializeRecord":{let{lastInsertId:n}=await this.interpretNode(e.args.expr,r),i={};for(let[o,s]of Object.entries(e.args.fields))i[o]=Au(s,n,r.scope,r.generators);return{value:i,lastInsertId:n}}case"mapRecord":{let{value:n,lastInsertId:i}=await this.interpretNode(e.args.expr,r),o=n===null?{}:Rt(n);for(let[s,a]of Object.entries(e.args.fields))o[s]=Ru(a,o[s],r.scope,r.generators);return{value:o,lastInsertId:i}}default:return this.#n(e,r.scope,r.generators)}}#n(e,r,n){switch(e.type){case"value":return{value:_e(e.args,r,n),lastInsertId:e.lastInsertId};case"seq":{let i;for(let o of e.args)i=this.#n(o,r,n);return i??{value:void 0}}case"get":return{value:r[e.args.name]};case"let":{let i=Object.create(r);for(let o of e.args.bindings){let{value:s}=this.#n(o.expr,i,n);i[o.name]=s}return this.#n(e.args.expr,i,n)}case"getFirstNonEmpty":{for(let i of e.args.names){let o=r[i];if(!co(o))return{value:o}}return{value:[]}}case"concat":{let i=e.args.map(o=>this.#n(o,r,n).value);return{value:i.length>0?i.reduce((o,s)=>o.concat(nr(s)),[]):[]}}case"sum":{let i=e.args.map(o=>this.#n(o,r,n).value);return{value:i.length>0?i.reduce((o,s)=>je(o)+je(s)):0}}case"reverse":{let{value:i,lastInsertId:o}=this.#n(e.args,r,n);return{value:Array.isArray(i)?i.reverse():i,lastInsertId:o}}case"unique":{let{value:i,lastInsertId:o}=this.#n(e.args,r,n);if(!Array.isArray(i))return{value:i,lastInsertId:o};if(i.length>1)throw new Error(`Expected zero or one element, got ${i.length}`);return{value:i[0]??null,lastInsertId:o}}case"required":{let{value:i,lastInsertId:o}=this.#n(e.args,r,n);if(co(i))throw new Error("Required value is empty");return{value:i,lastInsertId:o}}case"mapField":{let{value:i,lastInsertId:o}=this.#n(e.args.records,r,n);return{value:po(i,e.args.field),lastInsertId:o}}case"join":{let{value:i,lastInsertId:o}=this.#n(e.args.parent,r,n);if(i===null)return{value:null,lastInsertId:o};let s=e.args.children.map(a=>({joinExpr:a,childRecords:this.#n(a.child,r,n).value}));return{value:Su(i,s,e.args.canAssumeStrictEquality),lastInsertId:o}}case"dataMap":{let{value:i,lastInsertId:o}=this.#n(e.args.expr,r,n);return{value:Mi(i,e.args.structure,e.args.enums),lastInsertId:o}}case"validate":{let{value:i,lastInsertId:o}=this.#n(e.args.expr,r,n);return lo(i,e.args.rules,e.args),{value:i,lastInsertId:o}}case"if":{let{value:i}=this.#n(e.args.value,r,n);return Mn(i,e.args.rule)?this.#n(e.args.then,r,n):this.#n(e.args.else,r,n)}case"unit":return{value:void 0};case"diff":{let{value:i}=this.#n(e.args.from,r,n),{value:o}=this.#n(e.args.to,r,n),s=m=>m!==null?At(Rt(m),e.args.fields):null,a=new Set(nr(o).map(s));return{value:nr(i).filter(m=>!a.has(s(m)))}}case"process":{let{value:i,lastInsertId:o}=this.#n(e.args.expr,r,n),s=_n(e.args.operations);return mo(s,r,n),{value:Dr(i,s),lastInsertId:o}}case"initializeRecord":{let{lastInsertId:i}=this.#n(e.args.expr,r,n),o={};for(let[s,a]of Object.entries(e.args.fields))o[s]=Au(a,i,r,n);return{value:o,lastInsertId:i}}case"mapRecord":{let{value:i,lastInsertId:o}=this.#n(e.args.expr,r,n),s=i===null?{}:Rt(i);for(let[a,m]of Object.entries(e.args.fields))s[a]=Ru(m,s[a],r,n);return{value:s,lastInsertId:o}}default:Y(e,`Unexpected node type: ${e.type}`)}}#l(e,r,n){return e<=1?n(r):this.#u(r,n)}async#u(e,r){if(!e.transactionManager.enabled)return r(e);let n=e.transactionManager.manager,i=await n.startInternalTransaction(),o=await n.getTransaction(i,"query");try{let s=await r({...e,queryable:o,transactionManager:{enabled:!1}});return await n.commitTransaction(i.id),s}catch(s){try{await n.rollbackTransaction(i.id)}catch(a){tm("failed to roll back an internal transaction",a)}throw s}}#p(){return this.#a?.maxBindValues!==void 0?this.#a.maxBindValues:this.#c()}#c(){if(this.#s!==void 0)switch(this.#s){case"cockroachdb":case"postgres":case"postgresql":case"prisma+postgres":return 32766;case"mysql":return 65535;case"sqlite":return 999;case"sqlserver":return 2098;case"mongodb":return;default:Y(this.#s,`Unexpected provider: ${this.#s}`)}}#d(e,r,n){return Sn({query:e,execute:n,provider:this.#s??r.provider,tracingHelper:this.#r,onQuery:this.#e})}};function co(t){return Array.isArray(t)?t.length===0:t==null}function nr(t){return Array.isArray(t)?t:[t]}function je(t){if(typeof t=="number")return t;if(typeof t=="string")return Number(t);throw new Error(`Expected number, got ${typeof t}`)}function Rt(t){if(typeof t=="object"&&t!==null)return t;throw new Error(`Expected object, got ${typeof t}`)}function po(t,e){return Array.isArray(t)?t.map(r=>po(r,e)):typeof t=="object"&&t!==null?t[e]??null:t}function Su(t,e,r){for(let{joinExpr:n,childRecords:i}of e){let o=n.on.map(([E])=>E),s=n.on.map(([,E])=>E),a={},m=Array.isArray(t)?t:[t];for(let E of m){let N=Rt(E),$=At(N,o);a[$]||(a[$]=[]),a[$].push(N),n.isRelationUnique?N[n.parentField]=null:N[n.parentField]=[]}let h=r?void 0:rm(m,o);for(let E of Array.isArray(i)?i:[i]){if(E===null)continue;let N=At(Rt(E),s,h);for(let $ of a[N]??[])n.isRelationUnique?$[n.parentField]=E:$[n.parentField].push(E)}}return t}function rm(t,e){function r(o){switch(o){case"number":return Number;case"string":return String;case"boolean":return Boolean;case"bigint":return BigInt;default:return}}let n=Array.from({length:e.length}),i=0;for(let o of t){let s=Rt(o);for(let[a,m]of e.entries())if(s[m]!==null&&n[a]===void 0){let h=r(typeof s[m]);h!==void 0&&(n[a]=h),i++}if(i===e.length)break}return n}function Au(t,e,r,n){switch(t.type){case"value":return _e(t.value,r,n);case"lastInsertId":return e;default:Y(t,`Unexpected field initializer type: ${t.type}`)}}function Ru(t,e,r,n){switch(t.type){case"set":return _e(t.value,r,n);case"add":return je(e)+je(_e(t.value,r,n));case"subtract":return je(e)-je(_e(t.value,r,n));case"multiply":return je(e)*je(_e(t.value,r,n));case"divide":{let i=je(e),o=je(_e(t.value,r,n));return o===0?null:i/o}default:Y(t,`Unexpected field operation type: ${t.type}`)}}function nm(t,e){let r=Lr(t);if(r)return e(r).then(n=>{let i={type:"value",args:n.value,lastInsertId:n.lastInsertId},o=_r(t,r,i);if(!o)throw new Error("Could not substitute the evaluated impure node into the query plan");return o})}function _r(t,e,r){if(t===e)return r;switch(t.type){case"seq":case"sum":case"concat":{for(let n=0;ns===n?i:o)}}return}case"dataMap":case"validate":case"initializeRecord":case"mapRecord":case"process":{let n=_r(t.args.expr,e,r);return n&&{...t,args:{...t.args,expr:n}}}case"mapField":{let n=_r(t.args.records,e,r);return n&&{...t,args:{...t.args,records:n}}}case"reverse":case"unique":case"required":{let n=_r(t.args,e,r);return n&&{...t,args:n}}default:return}}function Lr(t){switch(t.type){case"query":case"execute":return t;case"seq":case"sum":case"concat":{let e;for(let r of t.args){let n=Lr(r);if(n===null)return null;if(n){if(e)return null;e=n}}return e}case"dataMap":case"validate":case"initializeRecord":case"mapRecord":case"process":return Lr(t.args.expr);case"mapField":return Lr(t.args.records);case"reverse":case"unique":case"required":return Lr(t.args);case"let":case"join":case"diff":case"if":case"transaction":return null;case"value":case"get":case"getFirstNonEmpty":case"unit":return;default:Y(t,`Unexpected node type: ${t.type}`)}}function Cu(t,e){if(!e||e.plugins.length===0)return t;let r=Ua(e.plugins,{query:e.queryInfo,sql:t.sql});return r?{...t,sql:Va(t.sql,r)}:t}function mo(t,e,r){let n=t.pagination?.cursor;if(n)for(let[i,o]of Object.entries(n))n[i]=_e(o,e,r);for(let i of Object.values(t.nested))mo(i,e,r)}function _n(t){return Ue(t)}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();function Iu(t){return new fo(t).deserialize()}function im(t){return w.from(t,"base64url")}var fo=class{#e;#t;#r=0;constructor(e){this.#e=e;let r=im(e.graph);this.#t=new DataView(r.buffer,r.byteOffset,r.byteLength)}deserialize(){let{inputNodeCount:e,outputNodeCount:r,rootCount:n}=this.#n(),i=this.#l(e),o=this.#u(r),s=this.#p(n);return{strings:this.#e.strings,inputNodes:i,outputNodes:o,roots:s}}#i(){let e=0,r=0,n;do n=this.#t.getUint8(this.#r++),e|=(n&127)<=128);return e}#o(){let e=this.#i();return e===0?void 0:e-1}#s(){let e=this.#t.getUint8(this.#r);return this.#r+=1,e}#a(){let e=this.#t.getUint16(this.#r,!0);return this.#r+=2,e}#n(){let e=this.#i(),r=this.#i(),n=this.#i();return{inputNodeCount:e,outputNodeCount:r,rootCount:n}}#l(e){let r=[];for(let n=0;n=this.#e.inputNodes.length))return{id:e}}outputNode(e){if(!(e===void 0||e<0||e>=this.#e.outputNodes.length))return{id:e}}inputEdge(e,r){if(!e)return;let n=this.#e.inputNodes[e.id];if(!n)return;let i=this.#t.get(r);if(i===void 0)return;let o=n.edges[i];if(o)return{flags:o.flags,childNodeId:o.childNodeId,scalarMask:o.scalarMask??0,enumNameIndex:o.enumNameIndex}}outputEdge(e,r){if(!e)return;let n=this.#e.outputNodes[e.id];if(!n)return;let i=this.#t.get(r);if(i===void 0)return;let o=n.edges[i];if(o)return{argsNodeId:o.argsNodeId,outputNodeId:o.outputNodeId}}enumValues(e){if(e?.enumNameIndex===void 0)return;let r=this.#e.strings[e.enumNameIndex];if(r)return this.#r(r)}getString(e){return this.#e.strings[e]}},tt={ParamScalar:1,ParamEnum:2,ParamListScalar:4,ParamListEnum:8,ListObject:16,Object:32},Te={String:1,Int:2,BigInt:4,Float:8,Decimal:16,Boolean:32,DateTime:64,Json:128,Bytes:256};function rt(t,e){return(t.flags&e)!==0}function ht(t){return t.scalarMask}u();l();c();p();d();var om=new Set(["DateTime","Decimal","BigInt","Bytes","Json","Raw"]);function Ln(t){if(t==null)return{kind:"null"};if(typeof t=="string")return{kind:"primitive",value:t};if(typeof t=="number")return{kind:"primitive",value:t};if(typeof t=="boolean")return{kind:"primitive",value:t};if(Array.isArray(t))return{kind:"array",items:t};if(typeof t=="object"){let e=t;if("$type"in e&&typeof e.$type=="string"){let r=e.$type;return om.has(r)?{kind:"taggedScalar",tag:r,value:e.value}:{kind:"structural",value:e.value}}return{kind:"object",entries:e}}return{kind:"structural",value:t}}function ku(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&!("$type"in t)}function Ou(t){return typeof t=="object"&&t!==null&&"$type"in t&&typeof t.$type=="string"}function go(t,e){let r=new Fn(e),n=t.modelName?`${t.modelName}.${t.action}`:t.action,i=e.root(n);return{parameterizedQuery:{...t,query:r.parameterizeFieldSelection(t.query,i?.argsNodeId,i?.outputNodeId)},placeholderValues:r.getPlaceholderValues()}}function ho(t,e){let r=new Fn(e),n=[];for(let i=0;itypeof o=="string"&&Object.hasOwn(i,o))){let o={type:"List",inner:{type:"Enum"}};return this.#o(e,o)}}if(rt(n,tt.ParamListScalar)&&e.every(o=>dm(o,n))&&e.length>0){let o=e.map(m=>mm(m)),a={type:"List",inner:cm(e)};return this.#o(o,a)}if(rt(n,tt.ListObject)){let i=this.#e.inputNode(n.childNodeId);if(i)return e.map(o=>ku(o)?this.#s(o,i):o)}return r}#p(e,r){if(rt(r,tt.Object)){let i=this.#e.inputNode(r.childNodeId);if(i)return this.#s(e,i)}if(ht(r)&Te.Json){let i=Je(Ge(e)),o={type:"Json"};return this.#o(i,o)}return e}#c(e,r){if(!e||!r)return e;let n={};for(let[i,o]of Object.entries(e)){if(i==="$scalars"||i==="$composites"||typeof o=="boolean"){n[i]=o;continue}let s=this.#e.outputEdge(r,i);if(s){let a=o,m=this.#e.inputNode(s.argsNodeId),h=this.#e.outputNode(s.outputNodeId),E={selection:a.selection?this.#c(a.selection,h):{}};a.arguments&&(E.arguments=this.#s(a.arguments,m)),n[i]=E}else n[i]=o}return n}};function Nu(t,e){return{$type:"Param",value:{name:t,...e}}}function Du(t){return t.type==="List"?`List<${Du(t.inner)}>`:t.type}function sm(t){return ArrayBuffer.isView(t)?w.from(t.buffer,t.byteOffset,t.byteLength).toString("base64"):JSON.stringify(t)}function am(t,e){let r=Du(e),n=sm(t);return`${r}:${n}`}var um=2**31-1,lm=-(2**31);function yo(t){switch(typeof t){case"boolean":return{type:"Boolean"};case"number":return Number.isInteger(t)?lm<=t&&t<=um?{type:"Int"}:{type:"BigInt"}:{type:"Float"};case"string":return{type:"String"};default:throw new Error("unreachable")}}function Mu({type:t},e){switch(t){case"Boolean":return(e&Te.Boolean)!==0;case"Int":return(e&(Te.Int|Te.BigInt|Te.Float))!==0;case"BigInt":return(e&Te.BigInt)!==0;case"Float":return(e&Te.Float)!==0;case"String":return(e&Te.String)!==0;default:return!1}}function _u(t){switch(t){case"BigInt":case"Bytes":case"DateTime":case"Json":return{type:t};case"Decimal":return{type:"Float"};default:return}}function cm(t){let e={type:"Any"};for(let r of t){let n=Ln(r),i;switch(n.kind){case"primitive":i=yo(n.value);break;case"taggedScalar":i=_u(n.tag)??{type:"Any"};break;default:return{type:"Any"}}e=pm(e,i)}return e}function pm(t,e){if(t.type==="Any")return e;if(e.type==="Any"||t.type===e.type)return t;let r={Int:0,BigInt:1,Float:2},n=r[t.type],i=r[e.type];return n!==void 0&&i!==void 0?n>=i?t:e:{type:"Any"}}function Lu(t,e){switch(t){case"DateTime":return(e&Te.DateTime)!==0;case"Decimal":return(e&Te.Decimal)!==0;case"BigInt":return(e&Te.BigInt)!==0;case"Bytes":return(e&Te.Bytes)!==0;case"Json":return(e&Te.Json)!==0;default:return!1}}function dm(t,e){let r=Ln(t);switch(r.kind){case"structural":return!1;case"null":return!1;case"primitive":{let n=yo(r.value),i=ht(e);return i!==0&&Mu(n,i)}case"taggedScalar":{let n=ht(e);return n!==0&&Lu(r.tag,n)}default:return!1}}function mm(t){return Ou(t)?Fu(t):t}function Fu(t){return t.value}u();l();c();p();d();u();l();c();p();d();async function fm(){return globalThis.crypto??await Promise.resolve().then(()=>(Kr(),ls))}async function $u(){return(await fm()).randomUUID()}u();l();c();p();d();async function Uu(t,e){return new Promise(r=>{t.addEventListener(e,r,{once:!0})})}u();l();c();p();d();var Ne=class extends be{name="TransactionManagerError";constructor(e,r){super("Transaction API error: "+e,"P2028",r)}},Ct=class extends Ne{constructor(){super("Transaction not found. Transaction ID is invalid, refers to an old closed transaction Prisma doesn't have information about anymore, or was obtained before disconnecting.")}},$n=class extends Ne{constructor(e){super(`Transaction already closed: A ${e} cannot be executed on a committed transaction.`)}},Un=class extends Ne{constructor(e){super(`Transaction already closed: A ${e} cannot be executed on a transaction that was rolled back.`)}},Ur=class extends Ne{constructor(){super("Unable to start a transaction in the given time.")}},Vn=class extends Ne{constructor(e,{timeout:r,timeTaken:n}){super(`A ${e} cannot be executed on an expired transaction. The timeout for this transaction was ${r} ms, however ${n} ms passed since the start of the transaction. Consider increasing the interactive transaction timeout or doing less work in the transaction.`,{operation:e,timeout:r,timeTaken:n})}},nt=class extends Ne{constructor(e){super(`Internal Consistency Error: ${e}`)}},qn=class extends Ne{constructor(e){super(`Invalid isolation level: ${e}`,{isolationLevel:e})}};var gm=100,hm=2e3;function ym(){let t,e=new Promise(r=>{t=r});return{abortController:new AbortController,settled:e,markSettled:t}}var It=ye("prisma:client:transactionManager"),wm=()=>({sql:"COMMIT",args:[],argTypes:[]}),Vu=()=>({sql:"ROLLBACK",args:[],argTypes:[]}),bm=()=>({sql:'-- Implicit "COMMIT" query via underlying driver',args:[],argTypes:[]}),xm=()=>({sql:'-- Implicit "ROLLBACK" query via underlying driver',args:[],argTypes:[]}),Vr=class{transactions=new Map;closedTransactions=[];#e=new Set;driverAdapter;transactionOptions;tracingHelper;#t;#r;constructor({driverAdapter:e,transactionOptions:r,tracingHelper:n,onQuery:i,provider:o}){this.driverAdapter=e,this.transactionOptions=r,this.tracingHelper=n,this.#t=i,this.#r=o}async startInternalTransaction(e){let r=e!==void 0?this.#h(e):{};return await this.tracingHelper.runInChildSpan("start_transaction",()=>this.#i(r))}async startTransaction(e){let r=e!==void 0?this.#h(e):this.transactionOptions;return await this.tracingHelper.runInChildSpan("start_transaction",()=>this.#i(r))}async#i(e){if(e.newTxId)return await this.#d(e.newTxId,"start",async o=>{if(o.status!=="running")throw new nt(`Transaction in invalid state ${o.status} when starting a nested transaction.`);if(!o.transaction)throw new nt("Transaction missing underlying driver transaction when starting a nested transaction.");o.depth+=1;let s=this.#a(o);o.savepoints.push(s);try{await this.#n(o.transaction)(s)}catch(a){throw o.depth-=1,o.savepoints.pop(),a}return{id:o.id}});let r=ym(),{abortController:n}=r;this.#e.add(r);let i;try{let o={id:await $u(),status:"waiting",timer:void 0,timeout:e.timeout,startedAt:Date.now(),transaction:void 0,operationQueue:Promise.resolve(),depth:1,savepoints:[],savepointCounter:0};if(n.signal.aborted)throw new Ur;let s=qu(()=>n.abort(),e.maxWait);s?.unref?.();let a=this.driverAdapter.startTransaction(e.isolationLevel).catch(mt);switch(o.transaction=await Promise.race([a.finally(()=>clearTimeout(s)),Uu(n.signal,"abort").then(()=>{})]),this.transactions.set(o.id,o),o.status){case"waiting":if(n.signal.aborted)throw o.transaction=void 0,i=this.#o(a),await this.#f(o,"timed_out"),new Ur;return o.status="running",o.startedAt=Date.now(),o.timer=this.#c(o.id,e.timeout),{id:o.id};case"timed_out":case"running":case"committed":case"rolled_back":throw new nt(`Transaction in invalid state ${o.status} although it just finished startup.`);default:return Y(o.status,"Unknown transaction status.")}}finally{this.#e.delete(r),i?i.finally(r.markSettled):r.markSettled()}}async#o(e){try{let r=await e;if(r.options.usePhantomQuery)await r.rollback();else try{await r.executeRaw(Vu())}finally{await r.rollback()}}catch(r){It("error in discarded transaction:",r)}}async commitTransaction(e){return await this.tracingHelper.runInChildSpan("commit_transaction",async()=>{await this.#d(e,"commit",async r=>{if(r.depth>1){if(!r.transaction)throw new Ct;let n=r.savepoints.at(-1);if(!n)throw new nt(`Missing savepoint for nested commit. Depth: ${r.depth}, transactionId: ${r.id}`);try{await this.#u(r.transaction,n)}finally{r.savepoints.pop(),r.depth-=1}return}await this.#f(r,"committed")})})}async rollbackTransaction(e){return await this.tracingHelper.runInChildSpan("rollback_transaction",async()=>{await this.#d(e,"rollback",async r=>{if(r.depth>1){if(!r.transaction)throw new Ct;let n=r.savepoints.at(-1);if(!n)throw new nt(`Missing savepoint for nested rollback. Depth: ${r.depth}, transactionId: ${r.id}`);try{await this.#l(r.transaction)(n),await this.#u(r.transaction,n)}finally{r.savepoints.pop(),r.depth-=1}return}await this.#f(r,"rolled_back")})})}async getTransaction(e,r){let n=this.#s(e.id,r);if(n.status==="closing"&&(await n.closing,n=this.#s(e.id,r)),!n.transaction)throw new Ct;return n.transaction}#s(e,r){let n=this.transactions.get(e);if(!n){let i=this.closedTransactions.find(o=>o.id===e);if(i)switch(It("Transaction already closed.",{transactionId:e,status:i.status}),i.status){case"closing":case"waiting":case"running":throw new nt("Active transaction found in closed transactions list.");case"committed":throw new $n(r);case"rolled_back":throw new Un(r);case"timed_out":throw new Vn(r,{timeout:i.timeout,timeTaken:Date.now()-i.startedAt})}else throw It("Transaction not found.",e),new Ct}if(["committed","rolled_back","timed_out"].includes(n.status))throw new nt("Closed transaction found in active transactions map.");return n}async cancelAllTransactions(){let e=[...this.#e];for(let{abortController:r}of e)r.abort();await Promise.allSettled([...[...this.transactions.values()].map(r=>this.#m(r,async()=>{let n=this.transactions.get(r.id);n&&await this.#f(n,"rolled_back")})),...e.map(({settled:r})=>Em(r,hm))])}#a(e){return`prisma_sp_${e.savepointCounter++}`}#n(e){if(e.createSavepoint)return e.createSavepoint.bind(e);throw new Ne(`Nested transactions are not supported by adapter "${e.adapterName}" (${e.provider}): createSavepoint is not implemented.`)}#l(e){if(e.rollbackToSavepoint)return e.rollbackToSavepoint.bind(e);throw new Ne(`Nested transactions are not supported by adapter "${e.adapterName}" (${e.provider}): rollbackToSavepoint is not implemented.`)}async#u(e,r){e.releaseSavepoint&&await e.releaseSavepoint(r)}#p(e){It("Transaction already committed or rolled back when timeout happened.",e)}#c(e,r){let n=Date.now(),i=qu(async()=>{try{It("Transaction timed out.",{transactionId:e,timeoutStartedAt:n,timeout:r});let o=this.transactions.get(e);if(!o){this.#p(e);return}await this.#m(o,async()=>{let s=this.transactions.get(e);s&&["running","waiting"].includes(s.status)?await this.#f(s,"timed_out"):this.#p(e)})}catch(o){It("Error while closing timed-out transaction.",{transactionId:e,error:o})}},r);return i?.unref?.(),i}async#d(e,r,n){let i=this.#s(e,r);return await this.#m(i,async()=>{let o=this.#s(e,r);return await n(o)})}async#m(e,r){let n=e.operationQueue,i;e.operationQueue=new Promise(o=>{i=o}),await n;try{return await r()}finally{i()}}async#f(e,r){let n=async()=>{It("Closing transaction.",{transactionId:e.id,status:r});try{if(e.transaction&&r==="committed")if(e.transaction.options.usePhantomQuery)await this.#g(bm(),e.transaction,()=>e.transaction.commit());else{let i=wm();await this.#g(i,e.transaction,()=>e.transaction.executeRaw(i)).then(()=>e.transaction.commit(),o=>{let s=()=>Promise.reject(o);return e.transaction.rollback().then(s,s)})}else if(e.transaction)if(e.transaction.options.usePhantomQuery)await this.#g(xm(),e.transaction,()=>e.transaction.rollback());else{let i=Vu();try{await this.#g(i,e.transaction,()=>e.transaction.executeRaw(i))}finally{await e.transaction.rollback()}}}finally{e.status=r,clearTimeout(e.timer),e.timer=void 0,this.transactions.delete(e.id),this.closedTransactions.push(e),this.closedTransactions.length>gm&&this.closedTransactions.shift()}};e.status==="closing"?(await e.closing,this.#s(e.id,r==="committed"?"commit":"rollback")):await Object.assign(e,{status:"closing",reason:r,closing:n()}).closing}#h(e){if(!e.timeout)throw new Ne("timeout is required");if(!e.maxWait)throw new Ne("maxWait is required");if(e.isolationLevel==="SNAPSHOT")throw new qn(e.isolationLevel);return{...e,timeout:e.timeout,maxWait:e.maxWait}}#g(e,r,n){return Sn({query:e,execute:n,provider:this.#r??r.provider,tracingHelper:this.tracingHelper,onQuery:this.#t})}};function qu(t,e){return e!==void 0?setTimeout(t,e):void 0}function Em(t,e){let r,n=new Promise(i=>{r=setTimeout(i,e),r?.unref?.()});return Promise.race([t,n]).finally(()=>clearTimeout(r))}var ve=require("@prisma/client-runtime-utils");var Bn="7.10.0";u();l();c();p();d();var Bu={bigint:"bigint",date:"datetime",decimal:"decimal",bytes:"bytes"};function Qu(t){let e;try{e=JSON.parse(t)}catch(i){throw new Error(`Received invalid serialized parameters: ${i.message}`)}if(!Array.isArray(e))throw new Error("Received invalid serialized parameters: expected an array");let r=e.map(i=>Ju(i)),n=e.map(i=>Tm(i));return{args:r,argTypes:n}}function Ju(t){if(Array.isArray(t))return t.map(e=>Ju(e));if(typeof t=="object"&&t!==null&&"prisma__value"in t){if(!("prisma__type"in t))throw new Error("Invalid serialized parameter, prisma__type should be present when prisma__value is present");return`${t.prisma__value}`}return typeof t=="object"&&t!==null?JSON.stringify(t):t}function Tm(t){return Array.isArray(t)?{scalarType:t.length>0?ju(t[0]):"unknown",arity:"list"}:{scalarType:ju(t),arity:"scalar"}}function ju(t){return typeof t=="object"&&t!==null&&"prisma__type"in t&&typeof t.prisma__type=="string"&&t.prisma__type in Bu?Bu[t.prisma__type]:typeof t=="number"?"decimal":typeof t=="string"?"string":"unknown"}u();l();c();p();d();function Gu(t,e){return{batch:t,transaction:e?.kind==="batch"?{isolationLevel:e.options.isolationLevel}:void 0}}u();l();c();p();d();u();l();c();p();d();function Hu(t){return t?t.replace(/"(?:[^"\\]|\\.)*"/g,'"X"').replace(/[\s:\[]([+-]?([0-9]*[.])?[0-9]+)/g,e=>`${e[0]}5`):""}u();l();c();p();d();function zu(t){return t.split(` +`).map(e=>e.replace(/^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)\s*/,"").replace(/\+\d+\s*ms$/,"")).join(` +`)}u();l();c();p();d();var Wu=Mt(ws());function Ku({title:t,user:e="prisma",repo:r="prisma",template:n="bug_report.yml",body:i}){return(0,Wu.default)({user:e,repo:r,template:n,title:t,body:i})}function Xu({version:t,binaryTarget:e,title:r,description:n,engineVersion:i,database:o,query:s}){let a=is(6e3-(s?.length??0)),m=zu(Ut(a)),h=n?`# Description +\`\`\` +${n} +\`\`\``:"",E=Ut(`Hi Prisma Team! My Prisma Client just crashed. This is the report: +## Versions + +| Name | Version | +|-----------------|--------------------| +| Node | ${b.version?.padEnd(19)}| +| OS | ${e?.padEnd(19)}| +| Prisma Client | ${t?.padEnd(19)}| +| Query Engine | ${i?.padEnd(19)}| +| Database | ${o?.padEnd(19)}| + +${h} + +## Logs +\`\`\` +${m} +\`\`\` + +## Client Snippet +\`\`\`ts +// PLEASE FILL YOUR CODE SNIPPET HERE +\`\`\` + +## Schema +\`\`\`prisma +// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE +\`\`\` + +## Prisma Engine Query +\`\`\` +${s?Hu(s):""} +\`\`\` +`),N=Ku({title:r,body:E});return`${r} + +This is a non-recoverable error which probably happens when the Prisma Query Engine has a panic. + +${Wr(N)} + +If you want the Prisma team to look into it, please open the link above \u{1F64F} +To increase the chance of success, please post your schema and a snippet of +how you used Prisma Client in the issue. +`}u();l();c();p();d();var jn=class t{#e;#t;#r;#i;#o;constructor(e,r,n){this.#e=e,this.#t=r,this.#r=n,this.#i=r.getConnectionInfo?.(),this.#o=Fr.forSql({onQuery:this.#e.onQuery,tracingHelper:this.#e.tracingHelper,provider:this.#e.provider,connectionInfo:this.#i})}static async connect(e){let r,n;try{r=await e.driverAdapterFactory.connect(),n=new Vr({driverAdapter:r,transactionOptions:e.transactionOptions,tracingHelper:e.tracingHelper,onQuery:e.onQuery,provider:e.provider})}catch(i){throw await r?.dispose(),i}return new t(e,r,n)}getConnectionInfo(){let e=this.#i??{supportsRelationJoins:!1};return Promise.resolve({provider:this.#t.provider,connectionInfo:e})}async execute({plan:e,placeholderValues:r,transaction:n,batchIndex:i,queryInfo:o}){let s=n?await this.#r.getTransaction(n,i!==void 0?"batch query":"query"):this.#t;return await this.#o.run(e,{queryable:s,transactionManager:n?{enabled:!1}:{enabled:!0,manager:this.#r},scope:r,sqlCommenter:this.#e.sqlCommenters&&{plugins:this.#e.sqlCommenters,queryInfo:o}})}async startTransaction(e){return{...await this.#r.startTransaction(e),payload:void 0}}async commitTransaction(e){await this.#r.commitTransaction(e.id)}async rollbackTransaction(e){await this.#r.rollbackTransaction(e.id)}async disconnect(){try{await this.#r.cancelAllTransactions()}finally{await this.#t.dispose()}}apiKey(){return null}};u();l();c();p();d();var Qn=class{#e;#t;#r;constructor(e=1e3){this.#e=new Map,this.#t=new Map,this.#r=e}getSingle(e){let r=this.#e.get(e);return r&&(this.#e.delete(e),this.#e.set(e,r)),r}setSingle(e,r){if(this.#e.has(e)){this.#e.delete(e),this.#e.set(e,r);return}if(this.#e.size>=this.#r){let n=this.#e.keys().next().value;n!==void 0&&this.#e.delete(n)}this.#e.set(e,r)}getBatch(e){let r=this.#t.get(e);return r&&(this.#t.delete(e),this.#t.set(e,r)),r}setBatch(e,r){if(this.#t.has(e)){this.#t.delete(e),this.#t.set(e,r);return}if(this.#t.size>=this.#r){let n=this.#t.keys().next().value;n!==void 0&&this.#t.delete(n)}this.#t.set(e,r)}clear(){this.#e.clear(),this.#t.clear()}get size(){return this.#e.size+this.#t.size}get singleCacheSize(){return this.#e.size}get batchCacheSize(){return this.#t.size}};u();l();c();p();d();var nl=require("@prisma/client-runtime-utils");u();l();c();p();d();var Jn=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function Zu(t,e,r){let n=r||{},i=n.encode||encodeURIComponent;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!Jn.test(t))throw new TypeError("argument name is invalid");let o=i(e);if(o&&!Jn.test(o))throw new TypeError("argument val is invalid");let s=t+"="+o;if(n.maxAge!==void 0&&n.maxAge!==null){let a=n.maxAge-0;if(Number.isNaN(a)||!Number.isFinite(a))throw new TypeError("option maxAge is invalid");s+="; Max-Age="+Math.floor(a)}if(n.domain){if(!Jn.test(n.domain))throw new TypeError("option domain is invalid");s+="; Domain="+n.domain}if(n.path){if(!Jn.test(n.path))throw new TypeError("option path is invalid");s+="; Path="+n.path}if(n.expires){if(!vm(n.expires)||Number.isNaN(n.expires.valueOf()))throw new TypeError("option expires is invalid");s+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(s+="; HttpOnly"),n.secure&&(s+="; Secure"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():n.priority){case"low":{s+="; Priority=Low";break}case"medium":{s+="; Priority=Medium";break}case"high":{s+="; Priority=High";break}default:throw new TypeError("option priority is invalid")}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:{s+="; SameSite=Strict";break}case"lax":{s+="; SameSite=Lax";break}case"strict":{s+="; SameSite=Strict";break}case"none":{s+="; SameSite=None";break}default:throw new TypeError("option sameSite is invalid")}return n.partitioned&&(s+="; Partitioned"),s}function vm(t){return Object.prototype.toString.call(t)==="[object Date]"||t instanceof Date}function Yu(t,e){let r=(t||"").split(";").filter(m=>typeof m=="string"&&!!m.trim()),n=r.shift()||"",i=Sm(n),o=i.name,s=i.value;try{s=e?.decode===!1?s:(e?.decode||decodeURIComponent)(s)}catch{}let a={name:o,value:s};for(let m of r){let h=m.split("="),E=(h.shift()||"").trimStart().toLowerCase(),N=h.join("=");switch(E){case"expires":{a.expires=new Date(N);break}case"max-age":{a.maxAge=Number.parseInt(N,10);break}case"secure":{a.secure=!0;break}case"httponly":{a.httpOnly=!0;break}case"samesite":{a.sameSite=N;break}default:a[E]=N}}return a}function Sm(t){let e="",r="",n=t.split("=");return n.length>1?(e=n.shift(),r=n.join("=")):r=t,{name:e,value:r}}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var Gn=class extends Error{clientVersion;cause;constructor(e,r){super(e),this.clientVersion=r.clientVersion,this.cause=r.cause}get[Symbol.toStringTag](){return this.name}};var Hn=class extends Gn{isRetryable;constructor(e,r){super(e,r),this.isRetryable=r.isRetryable??!0}};u();l();c();p();d();function el(t,e){return{...t,isRetryable:e}}var kt=class extends Hn{name="InvalidDatasourceError";code="P6001";constructor(e,r){super(e,el(r,!1))}};gr(kt,"InvalidDatasourceError");function tl(t){let e={clientVersion:t.clientVersion},r;try{r=new URL(t.accelerateUrl)}catch(m){let h=m.message;throw new kt(`Error validating \`accelerateUrl\`, the URL cannot be parsed, reason: ${h}`,e)}let{protocol:n,searchParams:i}=r;if(n!=="prisma:"&&n!==Zr)throw new kt("Error validating `accelerateUrl`: the URL must start with the protocol `prisma://` or `prisma+postgres://`",e);let o=i.get("api_key");if(o===null||o.length<1)throw new kt("Error validating `accelerateUrl`: the URL must contain a valid API key",e);let s=pi(r)?"http:":"https:";b.env.TEST_CLIENT_ENGINE_REMOTE_EXECUTOR&&r.searchParams.has("use_http")&&(s="http:");let a=new URL(r.href.replace(n,s));return{apiKey:o,url:a}}u();l();c();p();d();var rl=Mt(ds()),zn=class{apiKey;tracingHelper;logLevel;logQueries;engineHash;constructor({apiKey:e,tracingHelper:r,logLevel:n,logQueries:i,engineHash:o}){this.apiKey=e,this.tracingHelper=r,this.logLevel=n,this.logQueries=i,this.engineHash=o}build({traceparent:e,transactionId:r}={}){let n={Accept:"application/json",Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json","Prisma-Engine-Hash":this.engineHash,"Prisma-Engine-Version":rl.enginesVersion};this.tracingHelper.isEnabled()&&(n.traceparent=e??this.tracingHelper.getTraceParent()),r&&(n["X-Transaction-Id"]=r);let i=this.#e();return i.length>0&&(n["X-Capture-Telemetry"]=i.join(", ")),n}#e(){let e=[];return this.tracingHelper.isEnabled()&&e.push("tracing"),this.logLevel&&e.push(this.logLevel),this.logQueries&&e.push("query"),e}};u();l();c();p();d();function Am(t){return t[0]*1e3+t[1]/1e6}function wo(t){return new Date(Am(t))}var il=ye("prisma:client:clientEngine:remoteExecutor"),Wn=class{#e;#t;#r;#i;#o;#s;constructor(e){this.#e=e.clientVersion,this.#i=e.logEmitter,this.#o=e.tracingHelper,this.#s=e.sqlCommenters;let{url:r,apiKey:n}=tl({clientVersion:e.clientVersion,accelerateUrl:e.accelerateUrl});this.#r=new bo(r),this.#t=new zn({apiKey:n,engineHash:e.clientVersion,logLevel:e.logLevel,logQueries:e.logQueries,tracingHelper:e.tracingHelper})}async getConnectionInfo(){return await this.#a({path:"/connection-info",method:"GET"})}async execute({plan:e,placeholderValues:r,batchIndex:n,model:i,operation:o,transaction:s,customFetch:a,queryInfo:m}){let h=m&&this.#s?.length?vn(this.#s,{query:m}):void 0;return(await this.#a({path:s?`/transaction/${s.id}/query`:"/query",method:"POST",body:{model:i,operation:o,plan:e,params:r,comments:h&&Object.keys(h).length>0?h:void 0},batchRequestIdx:n,fetch:a})).data}async startTransaction(e){return{...await this.#a({path:"/transaction/start",method:"POST",body:e}),payload:void 0}}async commitTransaction(e){await this.#a({path:`/transaction/${e.id}/commit`,method:"POST"})}async rollbackTransaction(e){await this.#a({path:`/transaction/${e.id}/rollback`,method:"POST"})}disconnect(){return Promise.resolve()}apiKey(){return this.#t.apiKey}async#a({path:e,method:r,body:n,fetch:i=globalThis.fetch,batchRequestIdx:o}){let s=await this.#r.request({method:r,path:e,headers:this.#t.build(),body:n,fetch:i});s.ok||await this.#n(s,o);let a=await s.json();return typeof a.extensions=="object"&&a.extensions!==null&&this.#l(a.extensions),a}async#n(e,r){let n=e.headers.get("Prisma-Error-Code"),i=await e.text(),o,s=i;try{o=JSON.parse(i)}catch{o={}}typeof o.code=="string"&&(n=o.code),typeof o.error=="string"?s=o.error:typeof o.message=="string"?s=o.message:typeof o.InvalidRequestError=="object"&&o.InvalidRequestError!==null&&typeof o.InvalidRequestError.reason=="string"&&(s=o.InvalidRequestError.reason),s=s||`HTTP ${e.status}: ${e.statusText}`;let a=typeof o.meta=="object"&&o.meta!==null?o.meta:o;throw new nl.PrismaClientKnownRequestError(s,{clientVersion:this.#e,code:n??"P6000",batchRequestIdx:r,meta:a})}#l(e){let r=e.logs??[];if(e.spans)this.#o.dispatchEngineSpans(e.spans,r,n=>this.#u(n));else for(let n of r)this.#u(n)}#u(e){switch(e.level){case"debug":case"trace":il(e);break;case"error":case"warn":case"info":{this.#i.emit(e.level,{timestamp:wo(e.timestamp),message:e.attributes.message??"",target:e.target??"RemoteExecutor"});break}case"query":{this.#i.emit("query",{query:e.attributes.query??"",timestamp:wo(e.timestamp),duration:e.attributes.duration_ms??0,params:e.attributes.params??"",target:e.target??"RemoteExecutor"});break}default:throw new Error(`Unexpected log level: ${e.level}`)}}},bo=class{#e;#t;#r;constructor(e){this.#e=e,this.#t=new Map}async request({method:e,path:r,headers:n,body:i,fetch:o}){let s=new URL(r,this.#e),a=this.#i(s);a&&(n.Cookie=a),this.#r&&(n["Accelerate-Query-Engine-Jwt"]=this.#r);let m=await o(s.href,{method:e,body:i!==void 0?JSON.stringify(i):void 0,headers:n});return il(e,s,m.status,m.statusText),this.#r=m.headers.get("Accelerate-Query-Engine-Jwt")??void 0,this.#o(s,m),m}#i(e){let r=[],n=new Date;for(let[i,o]of this.#t){if(o.expires&&o.expires0?r.join("; "):void 0}#o(e,r){let n=r.headers.getSetCookie?.()||[];if(n.length===0){let i=r.headers.get("Set-Cookie");i&&n.push(i)}for(let i of n){let o=Yu(i),s=o.domain??e.hostname,a=o.path??"/",m=`${s}:${a}:${o.name}`;this.#t.set(m,{name:o.name,value:o.value,domain:s,path:a,expires:o.expires})}}};u();l();c();p();d();var Eo=require("@prisma/client-runtime-utils"),xo={},ol={async loadQueryCompiler(t){let{clientVersion:e,compilerWasm:r}=t;if(r===void 0)throw new Eo.PrismaClientInitializationError("WASM query compiler was unexpectedly `undefined`",e);let n;return t.activeProvider===void 0||xo[t.activeProvider]===void 0?(n=(async()=>{let i=await r.getRuntime(),o=await r.getQueryCompilerWasmModule();if(o==null)throw new Eo.PrismaClientInitializationError("The loaded wasm module was unexpectedly `undefined` or `null` once loaded",e);let s={[r.importName]:i},a=new WebAssembly.Instance(o,s),m=a.exports.__wbindgen_start;return i.__wbg_set_wasm(a.exports),m(),i.QueryCompiler})(),t.activeProvider!==void 0&&(xo[t.activeProvider]=n)):n=xo[t.activeProvider],await n}};var Rm="P2038",ut=ye("prisma:client:clientEngine"),ll=globalThis;ll.PRISMA_WASM_PANIC_REGISTRY={set_message(t){throw new ve.PrismaClientRustPanicError(t,Bn)}};var qr=class{name="ClientEngine";#e;#t={type:"disconnected"};#r;#i;#o;#s;config;datamodel;logEmitter;logQueries;logLevel;tracingHelper;#a;constructor(e,r){if(e.accelerateUrl!==void 0)this.#i={remote:!0,accelerateUrl:e.accelerateUrl};else if(e.adapter)this.#i={remote:!1,driverAdapterFactory:e.adapter},ut("Using driver adapter: %O",e.adapter);else throw new ve.PrismaClientInitializationError("PrismaClient requires a driver adapter to connect to your database, but none was provided. Pass one to the PrismaClient constructor, e.g. `new PrismaClient({ adapter })`. Learn more: https://pris.ly/d/driver-adapters",e.clientVersion,Rm);this.#r=r??ol,this.config=e,this.logQueries=e.logQueries??!1,this.logLevel=e.logLevel??"error",this.logEmitter=e.logEmitter,this.datamodel=e.inlineSchema,this.tracingHelper=e.tracingHelper,this.#o=e.queryPlanCacheMaxSize===0?void 0:new Qn(e.queryPlanCacheMaxSize),this.#s=$r.deserialize(e.parameterizationSchema,n=>{if(!Object.hasOwn(e.runtimeDataModel.enums,n))return;let i={};for(let o of e.runtimeDataModel.enums[n].values)i[o.name]=o.dbName??o.name;return i}),e.enableDebugLogs&&(this.logLevel="debug"),this.logQueries&&(this.#a=n=>{this.logEmitter.emit("query",{...n,params:Je(n.params),target:"ClientEngine"})})}async#n(){switch(this.#t.type){case"disconnected":{let e=this.tracingHelper.runInChildSpan("connect",async()=>{let r,n;try{r=await this.#l(),n=await this.#u(r)}catch(o){throw this.#t={type:"disconnected"},n?.free(),await r?.disconnect(),o}let i={executor:r,queryCompiler:n};return this.#t={type:"connected",engine:i},i});return this.#t={type:"connecting",promise:e},await e}case"connecting":return await this.#t.promise;case"connected":return this.#t.engine;case"disconnecting":return await this.#t.promise,await this.#n()}}async#l(){return this.#i.remote?new Wn({clientVersion:this.config.clientVersion,accelerateUrl:this.#i.accelerateUrl,logEmitter:this.logEmitter,logLevel:this.logLevel,logQueries:this.logQueries,tracingHelper:this.tracingHelper,sqlCommenters:this.config.sqlCommenters}):await jn.connect({driverAdapterFactory:this.#i.driverAdapterFactory,tracingHelper:this.tracingHelper,transactionOptions:{...this.config.transactionOptions,isolationLevel:this.#g(this.config.transactionOptions.isolationLevel)},onQuery:this.#a,provider:this.config.activeProvider,sqlCommenters:this.config.sqlCommenters})}async#u(e){let r=this.#e;r===void 0&&(r=await this.#r.loadQueryCompiler(this.config),this.#e=r);let{provider:n,connectionInfo:i}=await e.getConnectionInfo();try{return this.#m(()=>new r({datamodel:this.datamodel,provider:n,connectionInfo:i}),void 0,!1)}catch(o){throw this.#p(o)}}#p(e){if(e instanceof ve.PrismaClientRustPanicError)return e;try{let r=JSON.parse(e.message);return new ve.PrismaClientInitializationError(r.message,this.config.clientVersion,r.error_code)}catch{return e}}#c(e,r){if(e instanceof ve.PrismaClientInitializationError)return e;if(e.code==="GenericFailure"&&e.message?.startsWith("PANIC:"))return new ve.PrismaClientRustPanicError(sl(this,e.message,r),this.config.clientVersion);if(e instanceof be)return new ve.PrismaClientKnownRequestError(e.message,{code:e.code,meta:e.meta,clientVersion:this.config.clientVersion});try{let n=JSON.parse(e);return new ve.PrismaClientUnknownRequestError(`${n.message} +${n.backtrace}`,{clientVersion:this.config.clientVersion})}catch{return e}}#d(e){return e instanceof ve.PrismaClientRustPanicError?e:typeof e.message=="string"&&typeof e.code=="string"?new ve.PrismaClientKnownRequestError(e.message,{code:e.code,meta:e.meta,clientVersion:this.config.clientVersion}):typeof e.message=="string"?new ve.PrismaClientUnknownRequestError(e.message,{clientVersion:this.config.clientVersion}):e}#m(e,r,n=!0){let i=ll.PRISMA_WASM_PANIC_REGISTRY.set_message,o;globalThis.PRISMA_WASM_PANIC_REGISTRY.set_message=s=>{o=s};try{return e()}finally{if(globalThis.PRISMA_WASM_PANIC_REGISTRY.set_message=i,o)throw this.#e=void 0,n&&this.stop().catch(s=>ut("failed to disconnect:",s)),new ve.PrismaClientRustPanicError(sl(this,o,r),this.config.clientVersion)}}onBeforeExit(){throw new Error('"beforeExit" hook is not applicable to the client engine, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.')}async start(){await this.#n()}async stop(){switch(this.#t.type){case"disconnected":return;case"connecting":return await this.#t.promise,await this.stop();case"connected":{let e=this.#t.engine,r=this.tracingHelper.runInChildSpan("disconnect",async()=>{try{await e.executor.disconnect(),e.queryCompiler.free()}finally{this.#t={type:"disconnected"}}});return this.#t={type:"disconnecting",promise:r},await r}case"disconnecting":return await this.#t.promise}}version(){return"unknown"}async transaction(e,r,n){let i,{executor:o}=await this.#n();try{if(e==="start"){let s=n;i=await o.startTransaction({...s,isolationLevel:this.#g(s.isolationLevel)})}else if(e==="commit"){let s=n;await o.commitTransaction(s)}else if(e==="rollback"){let s=n;await o.rollbackTransaction(s)}else st(e,"Invalid transaction action.")}catch(s){throw this.#c(s)}return i?{id:i.id,payload:void 0}:void 0}async request(e,{interactiveTransaction:r,customDataProxyFetch:n}){ut("sending request");let{executor:i,queryCompiler:o}=await this.#n().catch(h=>{throw this.#c(h,JSON.stringify(e))}),s,a={},m=e.query;if(al(e))s=ul(e);else{let{parameterizedQuery:h,placeholderValues:E}=go(e,this.#s),N=JSON.stringify(h);a=E,m=h.query;let $=e.action!=="createMany"&&e.action!=="createManyAndReturn",U=$?this.#o?.getSingle(N):void 0;U?(ut("query plan cache hit"),s=U):(ut("query plan cache miss"),s=this.#f(h,N,o),$&&this.#o?.setSingle(N,s))}try{ut("query plan created",s);let h=await i.execute({plan:s,model:e.modelName,operation:e.action,placeholderValues:a,transaction:r,batchIndex:void 0,customFetch:n?.(globalThis.fetch),queryInfo:{type:"single",modelName:e.modelName,action:e.action,query:m}});return ut("query plan executed"),{data:{[e.action]:h}}}catch(h){throw this.#c(h,JSON.stringify(e))}}async requestBatch(e,{transaction:r,customDataProxyFetch:n}){if(e.length===0)return[];let i=e[0].action,o=e[0].modelName,s=Gu(e,r),a=JSON.stringify(s),{executor:m,queryCompiler:h}=await this.#n().catch(B=>{throw this.#c(B,a)}),E=o===void 0,N,$={},U=e.map(B=>B.query);if(E)N=this.#h(e,a,h);else{let{parameterizedBatch:B,placeholderValues:q}=ho(s,this.#s),J=JSON.stringify(B);$=q,U=B.batch.map(L=>L.query);let Z=this.#o?.getBatch(J);if(Z)ut("batch query plan cache hit"),N=Z;else{ut("batch query plan cache miss");try{N=this.#h(B.batch,J,h),this.#o?.setBatch(J,N)}catch(L){throw this.#d(L)}}}try{let B;switch(r?.kind==="itx"&&(B=r.options),N.type){case"multi":{if(r?.kind!=="itx"){let L=r?.options,z={maxWait:L?.maxWait??this.config.transactionOptions.maxWait,timeout:L?.timeout??this.config.transactionOptions.timeout,isolationLevel:L?.isolationLevel??this.config.transactionOptions.isolationLevel};B=await this.transaction("start",{},z)}let q=[],J=!1,Z;for(let[L,z]of N.plans.entries())try{let ce=await m.execute({plan:z,placeholderValues:$,model:e[L].modelName,operation:e[L].action,batchIndex:L,transaction:B,customFetch:n?.(globalThis.fetch),queryInfo:{type:"single",modelName:e[L].modelName,action:e[L].action,query:U[L]}});q.push({data:{[e[L].action]:ce}})}catch(ce){if(Z??=r?.kind!=="batch"&&e.every(Ie=>Ie.action==="findUnique"||Ie.action==="findUniqueOrThrow"),q.push(ce),J=!0,!Z)break}return B!==void 0&&r?.kind!=="itx"&&(J?await this.transaction("rollback",{},B):await this.transaction("commit",{},B)),q}case"compacted":{if(!e.every(Z=>Z.action===i&&Z.modelName===o)){let Z=e.map(z=>z.action).join(", "),L=e.map(z=>z.modelName).join(", ");throw new Error(`Internal error: All queries in a compacted batch must have the same action and model name, but received actions: [${Z}] and model names: [${L}]. This indicates a bug in the client. Please report this issue to the Prisma team with your query details.`)}if(o===void 0)throw new Error("Internal error: A compacted batch cannot contain raw queries. This indicates a bug in the client. Please report this issue to the Prisma team with your query details.");let q=await m.execute({plan:N.plan,placeholderValues:$,model:o,operation:i,batchIndex:void 0,transaction:B,customFetch:n?.(globalThis.fetch),queryInfo:{type:"compacted",action:i,modelName:o,queries:U}});return _a(q,N,$).map(Z=>({data:{[i]:Z}}))}}}catch(B){throw this.#c(B,a)}}async apiKey(){let{executor:e}=await this.#n();return e.apiKey()}#f(e,r,n){try{return this.#m(()=>this.#y({queries:[e],execute:()=>n.compile(r)}))}catch(i){throw this.#d(i)}}#h(e,r,n){if(e.every(al))return{type:"multi",plans:e.map(i=>ul(i))};try{return this.#m(()=>this.#y({queries:e,execute:()=>n.compileBatch(r)}))}catch(i){throw this.#d(i)}}#g(e){switch(e){case void 0:return;case"ReadUncommitted":return"READ UNCOMMITTED";case"ReadCommitted":return"READ COMMITTED";case"RepeatableRead":return"REPEATABLE READ";case"Serializable":return"SERIALIZABLE";case"Snapshot":return"SNAPSHOT";default:throw new ve.PrismaClientKnownRequestError(`Inconsistent column data: Conversion failed: Invalid isolation level \`${e}\``,{code:"P2023",clientVersion:this.config.clientVersion,meta:{providedIsolationLevel:e}})}}#y({queries:e,execute:r}){return this.tracingHelper.runInChildSpan({name:"compile",attributes:{models:e.map(n=>n.modelName).filter(n=>n!==void 0),actions:e.map(n=>n.action)}},r)}};function sl(t,e,r){return Xu({binaryTarget:void 0,title:e,version:t.config.clientVersion,engineVersion:"unknown",database:t.config.activeProvider,query:r})}function al(t){return t.action==="queryRaw"||t.action==="executeRaw"}function ul(t){let e=t.query.arguments.query,{args:r,argTypes:n}=Qu(t.query.arguments.parameters);return{type:t.action==="queryRaw"?"query":"execute",args:{type:"rawSql",sql:e,args:r,argTypes:n}}}function cl(t){return new qr(t)}u();l();c();p();d();var pl=t=>({command:t});u();l();c();p();d();var wl=require("@prisma/client-runtime-utils");u();l();c();p();d();var dl=t=>t.strings.reduce((e,r,n)=>`${e}@P${n}${r}`);u();l();c();p();d();var Kn=require("@prisma/client-runtime-utils");function ir(t,e){try{return ml(t,"fast",e)}catch(r){if(r instanceof TypeError)return ml(t,"slow",e);throw r}}function ml(t,e,r){return JSON.stringify(t.map(n=>gl(n,e,r)))}function gl(t,e,r){if(Array.isArray(t))return t.map(n=>gl(n,e,r));if(typeof t=="bigint")return{prisma__type:"bigint",prisma__value:t.toString()};if(Vt(t)){if(!qt(t))throw new Kn.PrismaClientValidationError("Provided Date object is invalid",{clientVersion:r});return{prisma__type:"date",prisma__value:t.toJSON()}}if(Kn.Decimal.isDecimal(t))return{prisma__type:"decimal",prisma__value:t.toJSON()};if(w.isBuffer(t))return{prisma__type:"bytes",prisma__value:t.toString("base64")};if(Cm(t))return{prisma__type:"bytes",prisma__value:w.from(t).toString("base64")};if(ArrayBuffer.isView(t)){let{buffer:n,byteOffset:i,byteLength:o}=t;return{prisma__type:"bytes",prisma__value:w.from(n,i,o).toString("base64")}}return typeof t=="object"&&e==="slow"?hl(t):t}function Cm(t){return t instanceof ArrayBuffer||t instanceof SharedArrayBuffer?!0:typeof t=="object"&&t!==null?t[Symbol.toStringTag]==="ArrayBuffer"||t[Symbol.toStringTag]==="SharedArrayBuffer":!1}function hl(t){if(typeof t!="object"||t===null)return t;if(typeof t.toJSON=="function")return t.toJSON();if(Array.isArray(t))return t.map(fl);let e={};for(let r of Object.keys(t))e[r]=fl(t[r]);return e}function fl(t){return typeof t=="bigint"?t.toString():hl(t)}var Im=/^(\s*alter\s)/i,yl=ye("prisma:client");function Po(t,e,r,n){if(!(t!=="postgresql"&&t!=="cockroachdb")&&r.length>0&&Im.exec(e))throw new Error(`Running ALTER using ${n} is not supported +Using the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization. + +Example: + await prisma.$executeRawUnsafe(\`ALTER USER prisma WITH PASSWORD '\${password}'\`) + +More Information: https://pris.ly/d/execute-raw +`)}var To=({clientMethod:t,activeProvider:e,clientVersion:r})=>n=>{let i="",o;if(hn(n))i=n.sql,o={values:ir(n.values,r),__prismaRawParameters__:!0};else if(Array.isArray(n)){let[s,...a]=n;i=s,o={values:ir(a||[],r),__prismaRawParameters__:!0}}else switch(e){case"sqlite":case"mysql":{i=n.sql,o={values:ir(n.values,r),__prismaRawParameters__:!0};break}case"cockroachdb":case"postgresql":case"postgres":{i=n.text,o={values:ir(n.values,r),__prismaRawParameters__:!0};break}case"sqlserver":{i=dl(n),o={values:ir(n.values,r),__prismaRawParameters__:!0};break}default:throw new Error(`The ${e} provider does not support ${t}`)}return o?.values?yl(`prisma.${t}(${i}, ${o.values})`):yl(`prisma.${t}(${i})`),{query:i,parameters:o}},bl={requestArgsToMiddlewareArgs(t){return[t.strings,...t.values]},middlewareArgsToRequestArgs(t){let[e,...r]=t;return new wl.Sql(e,r)}},xl={requestArgsToMiddlewareArgs(t){return[t]},middlewareArgsToRequestArgs(t){return t[0]}};u();l();c();p();d();function vo(t){return function(r,n){let i,o=(s=t)=>{try{return s===void 0||s?.kind==="itx"?i??=El(r(s)):El(r(s))}catch(a){return Promise.reject(a)}};return{get spec(){return n},then(s,a){return o().then(s,a)},catch(s){return o().catch(s)},finally(s){return o().finally(s)},requestTransaction(s){let a=o(s);return a.requestTransaction?a.requestTransaction(s):a},[Symbol.toStringTag]:"PrismaPromise"}}}function El(t){return typeof t.then=="function"?t:Promise.resolve(t)}u();l();c();p();d();u();l();c();p();d();u();l();c();p();d();var Pl={name:"@prisma/instrumentation-contract",version:"7.10.0",description:"Shared types and utilities for Prisma instrumentation",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{require:{types:"./dist/index.d.ts",default:"./dist/index.js"},import:{types:"./dist/index.d.mts",default:"./dist/index.mjs"}}},license:"Apache-2.0",homepage:"https://www.prisma.io",repository:{type:"git",url:"https://github.com/prisma/prisma.git",directory:"packages/instrumentation-contract"},bugs:"https://github.com/prisma/prisma/issues",scripts:{dev:"DEV=true tsx helpers/build.ts",build:"tsx helpers/build.ts",prepublishOnly:"pnpm run build",test:"vitest run"},files:["dist"],sideEffects:!1,devDependencies:{"@opentelemetry/api":"1.9.0"},peerDependencies:{"@opentelemetry/api":"^1.8"}};var Om=Pl.version.split(".")[0],Nm="PRISMA_INSTRUMENTATION",Dm=`V${Om}_PRISMA_INSTRUMENTATION`,Tl=globalThis;function vl(){let t=Tl[Dm];return t?.helper?t.helper:Tl[Nm]?.helper}var Mm={isEnabled(){return!1},getTraceParent(){return"00-10-10-00"},dispatchEngineSpans(t,e,r){for(let n of e)r(n)},getActiveContext(){},runInChildSpan(t,e){return e()}},So=class{isEnabled(){return this.getTracingHelper().isEnabled()}getTraceParent(e){return this.getTracingHelper().getTraceParent(e)}dispatchEngineSpans(e,r,n){return this.getTracingHelper().dispatchEngineSpans(e,r,n)}getActiveContext(){return this.getTracingHelper().getActiveContext()}runInChildSpan(e,r){return this.getTracingHelper().runInChildSpan(e,r)}getTracingHelper(){return vl()??Mm}};function Sl(){return new So}u();l();c();p();d();function Al(t,e=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--t===0&&r(e()),i?.(n)}}}u();l();c();p();d();function Rl(t){return typeof t=="string"?t:t.reduce((e,r)=>{let n=typeof r=="string"?r:r.level;return n==="query"?e:e&&(r==="info"||e==="info")?"info":n},void 0)}u();l();c();p();d();var kl=require("@prisma/client-runtime-utils");u();l();c();p();d();function Ro(t){if(t.action!=="findUnique"&&t.action!=="findUniqueOrThrow")return;let e=[];return t.modelName&&e.push(t.modelName),t.query.arguments&&e.push(Ao(t.query.arguments)),e.push(Ao(t.query.selection)),e.join("")}function Ao(t){return`(${Object.keys(t).sort().map(r=>{let n=t[r];return typeof n=="object"&&n!==null?`(${r} ${Ao(n)})`:r}).join(" ")})`}u();l();c();p();d();var _m={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateManyAndReturn:!0,updateOne:!0,upsertOne:!0};function Co(t){return _m[t]}u();l();c();p();d();var Xn=class{constructor(e){this.options=e;this.batches={}}batches;tickActive=!1;request(e){let r=this.options.batchBy(e);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,b.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:e,resolve:n,reject:i})})):this.options.singleLoader(e)}dispatchBatches(){for(let e in this.batches){let r=this.batches[e];delete this.batches[e],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i{for(let i=0;iOt("bigint",r));case"bytes-array":return e.map(r=>Ot("bytes",r));case"decimal-array":return e.map(r=>Ot("decimal",r));case"datetime-array":return e.map(r=>Ot("datetime",r));case"date-array":return e.map(r=>Ot("date",r));case"time-array":return e.map(r=>Ot("time",r));default:return e}}function Zn(t){let e=[],r=Lm(t);for(let n=0;n(s.dbName??o)===n);if(i.length<=1)return i[0]?.[0];if(r!==void 0){let o=i.filter(([,s])=>s.schema===r);if(o.length===1)return o[0][0]}}function Fm(t){let e=t.lastIndexOf(".");return e===-1?{schema:void 0,name:t}:{schema:t.slice(0,e),name:t.slice(e+1)}}var $m=ye("prisma:client:request_handler"),Yn=class{client;dataloader;logEmitter;constructor(e,r){this.logEmitter=r,this.client=e,this.dataloader=new Xn({batchLoader:Pa(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(N=>N.protocolQuery),m=this.client._tracingHelper.getTraceParent(s),h=n.some(N=>Co(N.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:m,transaction:Um(o),containsWrite:h,customDataProxyFetch:i})).map((N,$)=>{if(N instanceof Error)return N;try{return this.mapQueryEngineResult(n[$],N)}catch(U){return U}})}),singleLoader:async n=>{let i=n.transaction?.kind==="itx"?Ol(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:Co(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>{if(n.transaction?.kind==="itx"){let i=Ro(n.protocolQuery);return`itx-${n.transaction.id}${i?`-${i}`:""}`}return n.transaction?.id?`transaction-${n.transaction.id}`:Ro(n.protocolQuery)},batchOrder(n,i){return n.transaction?.kind==="batch"&&i.transaction?.kind==="batch"?n.transaction.index-i.transaction.index:0}})}async request(e){try{return await this.dataloader.request(e)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=e;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a,globalOmit:e.globalOmit})}}mapQueryEngineResult({dataPath:e,unpacker:r},n){let i=n?.data,o=this.unpack(i,e,r);return b.env.PRISMA_CLIENT_GET_TIME?{data:o}:o}handleAndLogRequestError(e){try{this.handleRequestError(e)}catch(r){throw this.logEmitter&&this.logEmitter.emit("error",{message:r.message,target:e.clientMethod,timestamp:new Date}),r}}handleRequestError({error:e,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s,globalOmit:a}){if($m(e),Vm(e,i))throw e;if(e instanceof K.PrismaClientKnownRequestError&&qm(e)){let h=Nl(e.meta);cn({args:o,errors:[h],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion,globalOmit:a})}let m=e.message;if(n&&(m=tn({callsite:n,originalMethod:r,isPanic:e.isPanic,showColors:this.client._errorFormat==="pretty",message:m})),m=this.sanitizeMessage(m),e.code){let h=this.resolveErrorMeta(e.meta,e.code,s);throw new K.PrismaClientKnownRequestError(m,{code:e.code,clientVersion:this.client._clientVersion,meta:h,batchRequestIdx:e.batchRequestIdx})}else{if(e.isPanic)throw new K.PrismaClientRustPanicError(m,this.client._clientVersion);if(e instanceof K.PrismaClientUnknownRequestError)throw new K.PrismaClientUnknownRequestError(m,{clientVersion:this.client._clientVersion,batchRequestIdx:e.batchRequestIdx});if(e instanceof K.PrismaClientInitializationError)throw new K.PrismaClientInitializationError(m,this.client._clientVersion);if(e instanceof K.PrismaClientRustPanicError)throw new K.PrismaClientRustPanicError(m,this.client._clientVersion)}throw e.clientVersion=this.client._clientVersion,e}resolveErrorMeta(e,r,n){if(r!=="P2002"||typeof e?.table!="string")return n?{modelName:n,...e}:e;let i={...e};delete i.table;let o=Il(this.client._runtimeDataModel,e.table)??(typeof i.modelName=="string"?i.modelName:n);return o!==void 0?{...i,modelName:o}:i}sanitizeMessage(e){return this.client._errorFormat&&this.client._errorFormat!=="pretty"?Ut(e):e}unpack(e,r,n){if(!e||(e.data&&(e=e.data),!e))return e;let i=Object.keys(e)[0],o=Object.values(e)[0],s=Bm(r),a=Si(o,s),m=i==="queryRaw"?Zn(a):Ge(a);return n?n(m):m}get[Symbol.toStringTag](){return"RequestHandler"}};function Um(t){if(t){if(t.kind==="batch")return{kind:"batch",options:{isolationLevel:t.isolationLevel,maxWait:t.maxWait,timeout:t.timeout}};if(t.kind==="itx")return{kind:"itx",options:Ol(t)};st(t,"Unknown transaction kind")}}function Ol(t){return{id:t.id,payload:t.payload}}function Vm(t,e){return(0,kl.hasBatchIndex)(t)&&e?.kind==="batch"&&t.batchRequestIdx!==e.index}function qm(t){return t.code==="P2009"||t.code==="P2012"}function Nl(t){if(t.kind==="Union")return{kind:"Union",errors:t.errors.map(Nl)};if(Array.isArray(t.selectionPath)){let[,...e]=t.selectionPath;return{...t,selectionPath:e}}return t}function Bm(t){let e=[];for(let r=1;r{},accelerateUrl:t=>{if(t!==void 0){if(typeof t!="string")throw new re(`Invalid value ${JSON.stringify(t)} for "accelerateUrl" provided to PrismaClient constructor.`);if(t.trim().length===0)throw new re('"accelerateUrl" provided to PrismaClient constructor must be a non-empty string.')}},errorFormat:t=>{if(t){if(typeof t!="string")throw new re(`Invalid value ${JSON.stringify(t)} for "errorFormat" provided to PrismaClient constructor.`);if(!Ml.includes(t)){let e=Br(t,Ml);throw new re(`Invalid errorFormat ${t} provided to PrismaClient constructor.${e}`)}}},log:t=>{if(!t)return;if(!Array.isArray(t))throw new re(`Invalid value ${JSON.stringify(t)} for "log" provided to PrismaClient constructor.`);function e(r){if(typeof r=="string"&&!_l.includes(r)){let n=Br(r,_l);throw new re(`Invalid log level "${r}" provided to PrismaClient constructor.${n}`)}}for(let r of t){e(r);let n={level:e,emit:i=>{let o=["stdout","event"];if(!o.includes(i)){let s=Br(i,o);throw new re(`Invalid value ${JSON.stringify(i)} for "emit" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r=="object")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new re(`Invalid property ${i} for "log" provided to PrismaClient constructor`)}},transactionOptions:t=>{if(!t)return;let e=t.maxWait;if(e!=null&&e<=0)throw new re(`Invalid value ${e} for maxWait in "transactionOptions" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=t.timeout;if(r!=null&&r<=0)throw new re(`Invalid value ${r} for timeout in "transactionOptions" provided to PrismaClient constructor. timeout needs to be greater than 0`)},omit:(t,e)=>{if(typeof t!="object")throw new re('"omit" option is expected to be an object.');if(t===null)throw new re('"omit" option can not be `null`');let r=[];for(let[n,i]of Object.entries(t)){let o=Gm(n,e.runtimeDataModel);if(!o){r.push({kind:"UnknownModel",modelKey:n});continue}for(let[s,a]of Object.entries(i)){let m=o.fields.find(h=>h.name===s);if(!m){r.push({kind:"UnknownField",modelKey:n,fieldName:s});continue}if(m.relationName){r.push({kind:"RelationInOmit",modelKey:n,fieldName:s});continue}typeof a!="boolean"&&r.push({kind:"InvalidFieldValue",modelKey:n,fieldName:s})}}if(r.length>0)throw new re(Hm(t,r))},queryPlanCacheMaxSize:t=>{if(t!==void 0){if(typeof t!="number")throw new re(`Invalid value ${JSON.stringify(t)} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Expected a number.`);if(!Number.isInteger(t))throw new re(`Invalid value ${t} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Expected an integer.`);if(t<0)throw new re(`Invalid value ${t} for "queryPlanCacheMaxSize" provided to PrismaClient constructor. Cache size needs to be greater or equal to 0.`)}},comments:t=>{if(t!==void 0){if(!Array.isArray(t))throw new re(`Invalid value ${JSON.stringify(t)} for "comments" provided to PrismaClient constructor. Expected an array of SQL commenter plugins.`);for(let e=0;e{if(!t)return;let e=["debug","engine","configOverride"];if(typeof t!="object")throw new re(`Invalid value ${JSON.stringify(t)} for "__internal" to PrismaClient constructor`);for(let[r]of Object.entries(t))if(!e.includes(r)){let n=Br(r,e);throw new re(`Invalid property ${JSON.stringify(r)} for "__internal" provided to PrismaClient constructor.${n}`)}}};function Qm(t){let e=t.adapter!==void 0,r=t.accelerateUrl!==void 0;if(e&&r)throw new re('The "adapter" and "accelerateUrl" options are mutually exclusive. Please provide only one of them.');if(!e&&!r)throw new re(`PrismaClient requires a driver adapter to connect to your database, but none was provided. + +Pass a driver adapter to the PrismaClient constructor, for example: + + import { PrismaPg } from '@prisma/adapter-pg' + import { PrismaClient } from './generated/prisma/client' + + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) + const prisma = new PrismaClient({ adapter }) + +Learn more about driver adapters: https://pris.ly/d/driver-adapters + +If you use Prisma Accelerate instead of connecting to your database directly, pass \`accelerateUrl\` to the PrismaClient constructor instead of \`adapter\`.`)}function $l(t,e){for(let[r,n]of Object.entries(t)){if(!Dl.includes(r)){let i=Br(r,Dl);throw new re(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}jm[r](n,e)}Qm(t)}function Br(t,e){if(e.length===0||typeof t!="string")return"";let r=Jm(t,e);return r?` Did you mean "${r}"?`:""}function Jm(t,e){if(e.length===0)return null;let r=e.map(i=>({value:i,distance:(0,Fl.default)(t,i)}));r.sort((i,o)=>i.distancect(n)===e);if(r)return t[r]}function Hm(t,e){let r=Wt(t);for(let o of e)switch(o.kind){case"UnknownModel":r.arguments.getField(o.modelKey)?.markAsError(),r.addErrorMessage(()=>`Unknown model name: ${o.modelKey}.`);break;case"UnknownField":r.arguments.getDeepField([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>`Model "${o.modelKey}" does not have a field named "${o.fieldName}".`);break;case"RelationInOmit":r.arguments.getDeepField([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>'Relations are already excluded by default and can not be specified in "omit".');break;case"InvalidFieldValue":r.arguments.getDeepFieldValue([o.modelKey,o.fieldName])?.markAsError(),r.addErrorMessage(()=>"Omit field option value must be a boolean.");break}let{message:n,args:i}=ln(r,"colorless");return`Error validating "omit" option: + +${i} + +${n}`}u();l();c();p();d();var Ul=require("@prisma/client-runtime-utils");function Vl(t){return t.length===0?Promise.resolve([]):new Promise((e,r)=>{let n=new Array(t.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===t.length&&(o=!0,i?r(i):e(n)))},m=h=>{o||(o=!0,r(h))};for(let h=0;h{n[h]=E,a()},E=>{if(!(0,Ul.hasBatchIndex)(E)){m(E);return}E.batchRequestIdx===h?m(E):(i||(i=E),a())})})}var or=ye("prisma:client");typeof globalThis=="object"&&(globalThis.NODE_CLIENT=!0);var zm={requestArgsToMiddlewareArgs:t=>t,middlewareArgsToRequestArgs:t=>t},Ql=Symbol.for("prisma.client.transaction.scope_context");function ql(t){let r=t[Ql];if(r===void 0)return{kind:"top-level"};if(Wm(r))return r;throw new Error("Internal error: inconsistent transaction scope context.")}function Wm(t){if(typeof t!="object"||t===null)return!1;let e=t;return e.kind==="nested"&&typeof e.txId=="string"&&typeof e.scopeId=="string"&&Km(e.scopeState)}function Km(t){return typeof t!="object"||t===null?!1:Array.isArray(t.stack)}function Xm(){return typeof globalThis.crypto?.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`}var Zm={id:0,nextId(){return++this.id}};function Jl(t){class e{_originalClient=this;_runtimeDataModel;_requestHandler;_connectionPromise;_disconnectionPromise;_engineConfig;_accelerateEngineConfig;_clientVersion;_errorFormat;_tracingHelper;_previewFeatures;_activeProvider;_globalOmit;_extensions;_engine;_appliedParent;_createPrismaPromise=vo();constructor(n){if(!n)throw new K.PrismaClientInitializationError(`PrismaClient was instantiated without any options. A driver adapter is required to connect to your database. + +Pass a driver adapter to the PrismaClient constructor, for example: + + import { PrismaPg } from '@prisma/adapter-pg' + import { PrismaClient } from './generated/prisma/client' + + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) + const prisma = new PrismaClient({ adapter }) + +Learn more about driver adapters: https://pris.ly/d/driver-adapters + +If you use Prisma Accelerate instead of connecting to your database directly, pass \`accelerateUrl\` to the PrismaClient constructor instead of \`adapter\`.`,Io);t=n.__internal?.configOverride?.(t)??t,$l(n,t);let i=new yn().on("error",()=>{});this._extensions=Kt.empty(),this._previewFeatures=t.previewFeatures,this._clientVersion=t.clientVersion??Io,this._activeProvider=t.activeProvider,this._globalOmit=n?.omit,this._tracingHelper=Sl();let o;if(n.adapter){o=n.adapter;let s=t.activeProvider==="postgresql"||t.activeProvider==="cockroachdb"?"postgres":t.activeProvider;if(o.provider!==s)throw new K.PrismaClientInitializationError(`The Driver Adapter \`${o.adapterName}\`, based on \`${o.provider}\`, is not compatible with the provider \`${s}\` specified in the Prisma schema.`,this._clientVersion)}try{let s=n??{},m=(s.__internal??{}).debug===!0;if(m&&ye.enable("prisma:client"),s.errorFormat?this._errorFormat=s.errorFormat:b.env.NODE_ENV==="production"?this._errorFormat="minimal":b.env.NO_COLOR?this._errorFormat="colorless":this._errorFormat="colorless",this._runtimeDataModel=t.runtimeDataModel,this._engineConfig={enableDebugLogs:m,logLevel:s.log&&Rl(s.log),logQueries:s.log&&!!(typeof s.log=="string"?s.log==="query":s.log.find(h=>typeof h=="string"?h==="query":h.level==="query")),compilerWasm:t.compilerWasm,clientVersion:t.clientVersion,previewFeatures:this._previewFeatures,activeProvider:t.activeProvider,inlineSchema:t.inlineSchema,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:s.transactionOptions?.maxWait??2e3,timeout:s.transactionOptions?.timeout??5e3,isolationLevel:s.transactionOptions?.isolationLevel},logEmitter:i,adapter:o,accelerateUrl:s.accelerateUrl,sqlCommenters:s.comments,parameterizationSchema:t.parameterizationSchema,runtimeDataModel:t.runtimeDataModel,queryPlanCacheMaxSize:n.queryPlanCacheMaxSize},this._accelerateEngineConfig=Object.create(this._engineConfig),this._accelerateEngineConfig.accelerateUtils={resolveDatasourceUrl:()=>{if(s.accelerateUrl)return s.accelerateUrl;throw new K.PrismaClientInitializationError(`\`accelerateUrl\` is required when using \`@prisma/extension-accelerate\`: + +new PrismaClient({ + accelerateUrl: "prisma://...", +}).$extends(withAccelerate()) +`,t.clientVersion)}},or("clientVersion",t.clientVersion),this._engine=cl(this._engineConfig),this._requestHandler=new Yn(this,i),s.log)for(let h of s.log){let E=typeof h=="string"?h:h.emit==="stdout"?h.level:null;E&&this.$on(E,N=>{fr.log(`${fr.tags[E]??""}`,N.message||N.query)})}}catch(s){throw s.clientVersion=this._clientVersion,s}return this._appliedParent=Sr(this)}get[Symbol.toStringTag](){return"PrismaClient"}$on(n,i){return n==="beforeExit"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i),this}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{os()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:"executeRaw",args:o,transaction:n,clientMethod:i,argsMapper:To({clientMethod:i,activeProvider:a,clientVersion:this._clientVersion}),callsite:dt(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=Bl(n,i);return Po(this._activeProvider,s.text,s.values,Array.isArray(n)?"prisma.$executeRaw``":"prisma.$executeRaw(sql``)"),this.$executeRawInternal(o,"$executeRaw",s,a)}throw new K.PrismaClientValidationError("`$executeRaw` is a tag function, please use it like the following:\n```\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\n```\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\n",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(Po(this._activeProvider,n,i,"prisma.$executeRawUnsafe(, [...values])"),this.$executeRawInternal(o,"$executeRawUnsafe",[n,...i])))}$runCommandRaw(n){if(t.activeProvider!=="mongodb")throw new K.PrismaClientValidationError(`The ${t.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:"$runCommandRaw",dataPath:[],action:"runCommandRaw",argsMapper:pl,callsite:dt(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:"queryRaw",args:o,transaction:n,clientMethod:i,argsMapper:To({clientMethod:i,activeProvider:a,clientVersion:this._clientVersion}),callsite:dt(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,"$queryRaw",...Bl(n,i));throw new K.PrismaClientValidationError("`$queryRaw` is a tag function, please use it like the following:\n```\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\n```\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\n",{clientVersion:this._clientVersion})})}$queryRawTyped(n){return this._createPrismaPromise(i=>{if(!this._hasPreviewFlag("typedSql"))throw new K.PrismaClientValidationError("`typedSql` preview feature must be enabled in order to access $queryRawTyped API",{clientVersion:this._clientVersion});return this.$queryRawInternal(i,"$queryRawTyped",n)})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,"$queryRawUnsafe",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=Zm.nextId(),s=Al(n.length),a=n.map((m,h)=>{if(m?.[Symbol.toStringTag]!=="PrismaPromise")throw new Error("All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.");let E=i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,N={kind:"batch",id:o,index:h,isolationLevel:E,maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,lock:s};return m.requestTransaction?.(N)??m});return Vl(a)}async _transactionWithCallback({callback:n,options:i={}}){let o=ql(this),s=o.kind==="nested",a=s?o.scopeState:{stack:[]},m=a.stack,h=Xm();if(s){if(m.at(-1)!==o.scopeId)throw new Error("Concurrent nested transactions are not supported");i.newTxId=o.txId}m.push(h);let E={traceparent:this._tracingHelper.getTraceParent()},N={maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,isolationLevel:i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,newTxId:i.newTxId},$;try{$=await this._engine.transaction("start",E,N)}catch(B){throw m.at(-1)===h&&m.pop(),B}let U;try{let B={kind:"itx",...$};if(U=await n(this._createItxClient(B,h,a)),s){if(m.at(-1)!==h)throw new Error("Nested transactions must be closed in reverse order of creation.")}else if(m.length!==1)throw new Error("Cannot close transaction while a nested transaction is still active.");await this._engine.transaction("commit",E,$)}catch(B){let J=m.at(-1)!==h?Math.max(1,m.length):1;for(let Z=0;Z{or("rollback attempt %d/%d failed: %O",Z+1,J,L)});throw B}finally{m.at(-1)===h?m.pop():m.length=0}return U}_createItxClient(n,i,o){let s={kind:"nested",txId:n.id,scopeId:i,scopeState:o};return Qe(Sr(Qe(da(this),[Ce("_appliedParent",()=>this._appliedParent._createItxClient(n,i,o)),Ce("_createPrismaPromise",()=>vo(n)),Ce(Ql,()=>s)])),[Xt(ya)])}$transaction(n,i){let o;typeof n=="function"?this._engineConfig.adapter?.adapterName==="@prisma/adapter-d1"?o=()=>{throw new Error("Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.")}:t.activeProvider==="mongodb"&&ql(this).kind==="nested"?o=()=>{throw new K.PrismaClientValidationError(`The ${t.activeProvider} provider does not support nested transactions`,{clientVersion:this._clientVersion})}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:"transaction",attributes:{method:"$transaction"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){n.otelParentCtx=this._tracingHelper.getActiveContext();let i=n.middlewareArgsMapper??zm,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={operation:{name:"operation",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=async m=>{let{runInTransaction:h,args:E,...N}=m,$={...n,...N};E&&($.args=i.middlewareArgsToRequestArgs(E)),n.transaction!==void 0&&h===!1&&delete $.transaction;let U=await Ea(this,$);if(!$.model)return U;let B=Aa({dataPath:$.dataPath,modelName:$.model,args:$.args,runtimeDataModel:this._runtimeDataModel});return ha({result:U,modelName:B.modelName,args:B.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel,globalOmit:this._globalOmit})};return this._tracingHelper.runInChildSpan(s.operation,()=>a(o))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:m,argsMapper:h,transaction:E,unpacker:N,otelParentCtx:$,customDataProxyFetch:U}){try{n=h?h(n):n;let B={name:"serialize"},q=this._tracingHelper.runInChildSpan(B,()=>fn({modelName:m,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures,globalOmit:this._globalOmit}));return ye.enabled("prisma:client")&&(or("Prisma Client call:"),or(`prisma.${i}(${ra(n)})`),or("Generated request:"),or(JSON.stringify(q,null,2)+` +`)),E?.kind==="batch"&&await E.lock,this._requestHandler.request({protocolQuery:q,modelName:m,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:E,unpacker:N,otelParentCtx:$,otelChildCtx:this._tracingHelper.getActiveContext(),globalOmit:this._globalOmit,customDataProxyFetch:U})}catch(B){throw B.clientVersion=this._clientVersion,B}}_hasPreviewFlag(n){return!!this._engineConfig.previewFeatures?.includes(n)}$extends=ma}return e}function Bl(t,e){return Ym(t)?[new jl.Sql(t,e),bl]:[t,xl]}function Ym(t){return Array.isArray(t)&&Array.isArray(t.raw)}u();l();c();p();d();var ef=new Set(["toJSON","$$typeof","asymmetricMatch",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Gl(t){return new Proxy(t,{get(e,r){if(r in e)return e[r];if(!ef.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}u();l();c();p();d();var tf=()=>globalThis.process?.release?.name==="node",rf=()=>!!globalThis.Bun||!!globalThis.process?.versions?.bun,nf=()=>!!globalThis.Deno,of=()=>typeof globalThis.Netlify=="object",sf=()=>typeof globalThis.EdgeRuntime=="object",af=()=>globalThis.navigator?.userAgent==="Cloudflare-Workers";function uf(){return[[of,"netlify"],[sf,"edge-light"],[af,"workerd"],[nf,"deno"],[rf,"bun"],[tf,"node"]].flatMap(r=>r[0]()?[r[1]]:[]).at(0)??""}var lf={node:"Node.js",workerd:"Cloudflare Workers",deno:"Deno and Deno Deploy",netlify:"Netlify Edge Functions","edge-light":"Edge Runtime (Vercel Edge Functions, Vercel Edge Middleware, Next.js (Pages Router) Edge API Routes, Next.js (App Router) Edge Route Handlers or Next.js Middleware)"};function Hl(){let t=uf();return{id:t,prettyName:lf[t]||t,isEdge:["workerd","deno","netlify","edge-light"].includes(t)}}var K=require("@prisma/client-runtime-utils"),it=require("@prisma/client-runtime-utils"),Ee=require("@prisma/client-runtime-utils"),zl=require("@prisma/client-runtime-utils");0&&(module.exports={AnyNull,DMMF,DbNull,Debug,Decimal,Extensions,JsonNull,NullTypes,ObjectEnumValue,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,createParam,defineDmmfProperty,deserializeJsonObject,deserializeRawResult,dmmfToRuntimeDataModel,empty,getPrismaClient,getRuntime,isAnyNull,isDbNull,isJsonNull,isObjectEnumValue,join,makeStrictEnum,makeTypedQueryFactory,raw,serializeJsonQuery,skip,sqltag,warnOnce}); +//# sourceMappingURL=wasm-compiler-edge.js.map diff --git a/apps/api-effect/src/generated/prisma/schema.prisma b/apps/api-effect/src/generated/prisma/schema.prisma new file mode 100644 index 00000000..8a44c596 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/schema.prisma @@ -0,0 +1,849 @@ +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// OAUTH & AUTHENTICATION +// ========================================= + +// Store OAuth login information (Google, Facebook, etc.) +model ExternalAccount { + id String @id @default(cuid()) + provider OAuthProvider + providerId String @db.VarChar(255) // ID from provider (e.g.: Google user ID) + providerEmail String? @db.VarChar(255) // Email from provider + accessToken String? @db.Text // Encrypted access token + refreshToken String? @db.Text // Encrypted refresh token + expiresAt DateTime? // Token expiration + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Unique constraint: a provider can only be linked once with a user + @@unique([provider, providerId]) + @@unique([provider, userId]) + @@index([userId]) + @@index([provider, providerId]) + @@map("external_accounts") +} + +// Manage user MFA methods +model UserMFAMethod { + id String @id @default(cuid()) + methodType MFAMethod // TOTP, SMS, EMAIL, BACKUP_CODE + secret String? @db.Text // Encrypted secret (for TOTP) + phone String? @db.VarChar(15) // For SMS + isActive Boolean @default(true) + isVerified Boolean @default(false) // Whether verified + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + lastUsedAt DateTime? // Last time used + + @@index([userId]) + @@map("mfa_methods") +} + +// Backup codes for MFA (single use) +model MFABackupCode { + id String @id @default(cuid()) + code String @db.VarChar(20) // Hashed backup code + isUsed Boolean @default(false) + usedAt DateTime? + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + + @@index([userId]) + @@map("mfa_backup_codes") +} + +// Log login devices +model Device { + id String @id @default(cuid()) + name String? @db.VarChar(255) // Device name (e.g.: "iPhone 14 Pro") + type DeviceType @default(UNKNOWN) + userAgent String? @db.Text // User agent string + ipAddress String? @db.VarChar(45) // IPv4 or IPv6 + fingerprint String? @db.VarChar(255) // Device fingerprint + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + isTrusted Boolean @default(false) // User has trusted this device + lastSeenAt DateTime @default(now()) + createdAt DateTime @default(now()) + + // Relations + session Session? // Current session of this device (one-to-one) + + @@index([userId]) + @@index([fingerprint]) + @@map("devices") +} + +// Manage login sessions +model Session { + id String @id @default(cuid()) + token String @unique @db.Text // Session token (JWT or random string) + refreshToken String? @unique @db.Text // Refresh token + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + deviceId String? @unique // Link to Device (unique: one device has only one session) + device Device? @relation(fields: [deviceId], references: [id], onDelete: SetNull) + + ipAddress String? @db.VarChar(45) + userAgent String? @db.Text + + status SessionStatus @default(ACTIVE) + expiresAt DateTime // Expiration time + revokedAt DateTime? // Revocation time + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([userId]) + @@index([token]) + @@index([status]) + @@index([expiresAt]) + @@map("sessions") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema +// +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" + output = "../../src/generated/prisma" + binaryTargets = ["native", "linux-musl-openssl-3.0.x"] + previewFeatures = ["postgresqlExtensions", "views", "fullTextSearchPostgres"] +} + +datasource db { + provider = "postgresql" +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// BLOG MANAGEMENT (Hybrid Storage: PostgreSQL + R2) +// ========================================= + +model BlogPost { + id String @id @default(cuid()) + slug String @unique + title String @db.VarChar(255) + + // Content stored in R2 + contentKey String // R2 object key for the markdown file (e.g., "blog/posts/{id}/content.md") + contentSize Int? // File size in bytes (for monitoring) + + // Searchable excerpt (stored in DB for full-text search) + excerpt String? @db.VarChar(500) + + // Cover image (also in R2) + coverImage String? // R2 object key to cover image + + authorId String + author User @relation(fields: [authorId], references: [id]) + + // Metadata + isPublished Boolean @default(false) + publishedAt DateTime? + viewCount Int @default(0) + + // SEO + metaTitle String? @db.VarChar(255) + metaDescription String? @db.VarChar(500) + + // Relations + tags BlogTag[] + comments BlogComment[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([slug]) + @@index([isPublished, publishedAt]) + @@index([authorId]) + @@index([title]) // Index for title search + @@index([excerpt]) // Index for excerpt search + @@map("blog_posts") +} + +model BlogTag { + id String @id @default(cuid()) + name String @unique @db.VarChar(50) + slug String @unique @db.VarChar(50) + + posts BlogPost[] + + @@map("blog_tags") +} + +model BlogComment { + id String @id @default(cuid()) + content String @db.Text + postId String + post BlogPost @relation(fields: [postId], references: [id], onDelete: Cascade) + authorId String + author User @relation(fields: [authorId], references: [id]) + + parentId String? // For nested comments + parent BlogComment? @relation("CommentReplies", fields: [parentId], references: [id]) + replies BlogComment[] @relation("CommentReplies") + + isApproved Boolean @default(false) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([postId]) + @@index([authorId]) + @@map("blog_comments") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// ENUMS (Define fixed value sets) +// ========================================= + +enum UserRole { + ADMIN // Shop owner + CUSTOMER // Customer +} + +enum OrderStatus { + PENDING // Awaiting payment + CONFIRMED // Confirmed + PROCESSING // Packaging + SHIPPING // Shipping + DELIVERED // Delivered successfully + CANCELLED // Cancelled + RETURNED // Returned +} + +enum PaymentStatus { + PENDING + PAID + FAILED + REFUNDED +} + +enum DiscountType { + PERCENTAGE // Discount by percentage + FIXED_AMOUNT // Fixed amount discount +} + +enum OAuthProvider { + GOOGLE + FACEBOOK + GITHUB + APPLE +} + +enum MFAMethod { + TOTP // Time-based One-Time Password (Google Authenticator, Authy) + SMS // SMS OTP + EMAIL // Email OTP + BACKUP_CODE // Backup codes +} + +enum DeviceType { + DESKTOP + MOBILE + TABLET + UNKNOWN +} + +enum SessionStatus { + ACTIVE + EXPIRED + REVOKED +} + +// ========================================= +// PRODUCT ENUMS +// ========================================= + +enum ProductSlug { + AO_THUN // T-shirt WebDev Studios + PAD_CHUOT // Mouse pad WebDev Studios + DAY_DEO // Lanyard WebDev Studios + MOC_KHOA // Keychain WebDev Studios +} + +/** + * Product size (only t-shirt has sizes) + */ +enum ProductSize { + S + M + L + XL +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// EVENTS (Club event calendar) +// ========================================= + +enum EventType { + MEETING // Meeting + WORKSHOP // Workshop + SOCIAL // Social event + COMPETITION // Competition + SURVEY // Survey + OTHER // Other +} + +model Event { + id String @id @default(cuid()) + title String @db.VarChar(255) + description String? @db.Text + startDate DateTime @db.Timestamptz(6) + endDate DateTime @db.Timestamptz(6) + location String? @db.VarChar(255) + type EventType + organizer String? @db.VarChar(100) + attendees Int? // Number of attendees (optional) + surveyLink String? @db.Text // Google Form link for SURVEY events + + // Audit fields + createdBy String? // User ID of admin who created event + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([startDate]) + @@index([endDate]) + @@index([type]) + @@map("events") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// MARKETING & SOCIAL +// ========================================= + +model Voucher { + id String @id @default(cuid()) + code String @unique @db.VarChar(20) + type DiscountType + value Decimal @db.Money // Discount value (amount or %) + + minSpend Decimal? @db.Money // Minimum order + maxDiscount Decimal? @db.Money // Maximum discount (for % type) + + usageLimit Int @default(100) // Total usage count + usedCount Int @default(0) // Used count + + startDate DateTime + endDate DateTime + isActive Boolean @default(true) + + @@map("vouchers") +} + +model Review { + id String @id @default(cuid()) + rating Int @default(5) // 1-5 stars + comment String? @db.Text + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + productId String + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([productId]) + @@index([userId]) + @@map("reviews") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// CART & ORDER SYSTEM +// ========================================= + +model Cart { + id String @id @default(cuid()) + userId String @unique + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + items CartItem[] + updatedAt DateTime @updatedAt + + @@map("carts") +} + +model CartItem { + id String @id @default(cuid()) + cartId String + cart Cart @relation(fields: [cartId], references: [id], onDelete: Cascade) + + productId String + product Product @relation(fields: [productId], references: [id]) + + size ProductSize? // Product size (only t-shirt has, nullable) + quantity Int @default(1) + + @@unique([cartId, productId, size]) // A product + size can only appear once in a cart + @@index([cartId]) + @@map("cart_items") +} + +model Order { + id String @id @default(cuid()) + code String @unique // Short order code for customer (e.g.: #ORD-1234) + + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + status OrderStatus @default(PENDING) + paymentStatus PaymentStatus @default(PENDING) + + totalAmount Decimal @db.Money // Final total amount + shippingFee Decimal @default(0) @db.Money + discountValue Decimal @default(0) @db.Money + + // Shipping address snapshot (Store text data to prevent changes when user edits profile) + shippingAddressId String @unique + shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + items OrderItem[] + paymentTransaction PaymentTransaction? + + @@map("orders") +} + +/** + * Shipping address (Snapshot at order time) + */ +model ShippingAddress { + id String @id @default(cuid()) + fullName String @db.VarChar(255) + phone String @db.VarChar(20) + addressLine1 String @db.VarChar(255) + addressLine2 String? @db.VarChar(255) + city String @db.VarChar(100) + district String @db.VarChar(100) + ward String @db.VarChar(100) + postalCode String @db.VarChar(20) + + order Order? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("shipping_addresses") +} + +// Store product state AT TIME OF PURCHASE (Snapshot) +model OrderItem { + id String @id @default(cuid()) + orderId String + order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) + + productId String? // Can be null if product is deleted later + product Product? @relation(fields: [productId], references: [id]) + + // Snapshot data (stored to prevent changes when product is updated) + productSlug ProductSlug // Store slug for easy lookup + productName String @db.VarChar(255) // Store product name + size ProductSize? // Product size (if available) + price Decimal @db.Money // Store price at time of purchase + quantity Int + + @@index([orderId]) + @@map("order_items") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// PAYMENT SYSTEM +// ========================================= + +model PaymentTransaction { + id String @id @default(cuid()) + orderId String @unique + order Order @relation(fields: [orderId], references: [id], onDelete: Cascade) + transactionCode String @unique // PayOS transaction code + amount Decimal @db.Money + status PaymentTransactionStatus @default(PENDING) + paymentUrl String? // URL for redirect + payosData Json? // Store raw data from PayOS + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("payment_transactions") +} + +enum PaymentTransactionStatus { + PENDING + PAID + CANCELLED + EXPIRED + FAILED +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// PRODUCT MANAGEMENT (Simplified for 4 fixed products) +// ========================================= + +model Product { + id String @id @default(cuid()) + slug ProductSlug @unique // Enum ensures only 4 products + name String @db.VarChar(255) + description String @db.Text + + // Product pricing + priceCurrent Decimal @db.Money // Current price + priceOriginal Decimal? @db.Money // Original price (if discounted) + priceDiscount Decimal? @db.Money // Discount amount + + // Product information + stock Int @default(0) // Total stock quantity + hasSizes Boolean @default(false) // Whether size selection is supported (only t-shirt) + badge String? @db.VarChar(50) // Display badge (Limited Edition, Official Merch) + + // Product ratings + ratingValue Decimal @default(0) @db.Decimal(3, 2) // Rating score (0-5) + ratingCount Int @default(0) // Number of ratings + + // Metadata + isPublished Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Relations + sizeStocks ProductSizeStock[] // Manage stock by size (only t-shirt) + cartItems CartItem[] + orderItems OrderItem[] + reviews Review[] + + @@index([slug]) + @@map("products") +} + +/** + * Manage stock by size (only for t-shirt) + * If product doesn't have sizes, stock is stored directly in Product.stock + */ +model ProductSizeStock { + id String @id @default(cuid()) + size ProductSize // S, M, L, XL + stock Int @default(0) + + productId String + product Product @relation(fields: [productId], references: [id], onDelete: Cascade) + + @@unique([productId, size]) // Each size of a product has only 1 record + @@index([productId]) + @@map("product_size_stocks") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +model SecurityLog { + id String @id @default(cuid()) + type String // SecurityEventType enum + severity String // low, medium, high, critical + message String @db.Text + userId String? + ipAddress String? + userAgent String? + path String? + method String? + metadata Json? + timestamp DateTime @default(now()) + + // Indexes for efficient querying + @@index([type]) + @@index([severity]) + @@index([timestamp]) + @@index([userId]) + @@index([ipAddress]) + @@map("security_logs") +} + +// Copyright (c) 2026 Xiro The Dev +// +// Source Available License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to: +// - View and study the Software for educational purposes +// - Fork this repository on GitHub for personal reference +// - Share links to this repository +// +// THE FOLLOWING ARE PROHIBITED: +// - Using the Software in production or commercial applications +// - Copying substantial portions of the Software into other projects +// - Distributing modified versions of the Software +// - Removing or altering copyright notices +// +// For commercial licensing or usage permissions, contact: lethanhtrung.trungle@gmail.com +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. +// +// ========================================= +// USER & AUTHENTICATION +// ========================================= + +model User { + id String @id @default(uuid()) + email String @unique @db.VarChar(255) + password String? @db.Text // Nullable because OAuth users don't have password + fullName String? @db.VarChar(100) + phone String? @db.VarChar(15) + avatar String? @db.Text + role UserRole @default(CUSTOMER) + + // MFA fields + mfaEnabled Boolean @default(false) + mfaSecret String? @db.Text // TOTP secret (encrypted) + + emailVerified Boolean @default(false) + phoneVerified Boolean @default(false) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + // Relations + addresses Address[] + orders Order[] + reviews Review[] + cart Cart? // 1 User has only 1 active cart + externalAccounts ExternalAccount[] // OAuth accounts + mfaMethods UserMFAMethod[] // MFA methods + mfaBackupCodes MFABackupCode[] // MFA backup codes + devices Device[] // Logged devices + sessions Session[] // Active sessions + blogPosts BlogPost[] // Blog posts authored by user + blogComments BlogComment[] // Blog comments by user + + @@map("users") +} + +model Address { + id String @id @default(cuid()) + userId String + recipient String @db.VarChar(100) // Recipient name + phone String @db.VarChar(15) + street String @db.Text + city String @db.VarChar(50) + district String @db.VarChar(50) + ward String @db.VarChar(50) + isDefault Boolean @default(false) + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@index([userId]) + @@map("addresses") +} diff --git a/apps/api-effect/src/generated/prisma/wasm-edge-light-loader.mjs b/apps/api-effect/src/generated/prisma/wasm-edge-light-loader.mjs new file mode 100644 index 00000000..92a1b14e --- /dev/null +++ b/apps/api-effect/src/generated/prisma/wasm-edge-light-loader.mjs @@ -0,0 +1,5 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +export default import('./query_compiler_fast_bg.wasm?module') \ No newline at end of file diff --git a/apps/api-effect/src/generated/prisma/wasm-worker-loader.mjs b/apps/api-effect/src/generated/prisma/wasm-worker-loader.mjs new file mode 100644 index 00000000..9759c366 --- /dev/null +++ b/apps/api-effect/src/generated/prisma/wasm-worker-loader.mjs @@ -0,0 +1,5 @@ + +/* !!! This is code generated by Prisma. Do not edit directly. !!! +/* eslint-disable */ +// biome-ignore-all lint: generated file +export default import('./query_compiler_fast_bg.wasm') \ No newline at end of file diff --git a/apps/api-effect/src/index.test.ts b/apps/api-effect/src/index.test.ts new file mode 100644 index 00000000..668f0de8 --- /dev/null +++ b/apps/api-effect/src/index.test.ts @@ -0,0 +1,282 @@ +import { afterAll, beforeAll, describe, expect, it } from 'bun:test'; +import speakeasy from 'speakeasy'; +import { HttpRouter } from 'effect/unstable/http'; + +// Fail fast on the closed port so getRedis() resolves null instead of hanging. +process.env.REDIS_PORT = '6399'; +process.env.PAYOS_CHECKSUM_KEY = 'testsecret'; + +import { appLayer } from './index'; +import { generateCsrfToken, validCsrfToken } from './lib/csrf'; +import { signAccess, verifyToken } from './lib/jwt'; +import { hashPassword, verifyPassword } from './lib/password'; +import { generateBackupCodes, generateTotpSecret, verifyTotp } from './lib/totp'; +import { buildCanonicalString, verifyWebhookSignature } from './lib/payos'; +import { bindBody } from './lib/validate'; +import { goTime } from './lib/util'; + +let server: { handler: (request: Request) => Promise; dispose: () => Promise }; + +beforeAll(() => { + server = HttpRouter.toWebHandler(appLayer('http://localhost:3000')); +}); + +afterAll(() => server.dispose()); + +const handle = (request: Request): Promise => server.handler(request); + +describe('payos webhook signature', () => { + it('verifies the Go test vector', () => { + const raw = + '{"code":"00","desc":"success","success":true,"data":{"accountNumber":"1","amount":130000,"code":"00","currency":"VND","description":"pay","desc":"ok","orderCode":29974,"paymentLinkId":"TESTLINK123","reference":"r1","transactionDateTime":"2026-08-24T00:00:00+07:00"},"signature":"e19b5c66d0cfe86a542ecfb0db96cb238d301b914bcaef78bd90d54d0d03fd07"}'; + expect(verifyWebhookSignature(JSON.parse(raw))).toBe(true); + }); + + it('rejects a tampered signature', () => { + const envelope: Record = { + success: true, + data: { amount: 1 }, + signature: '0'.repeat(64), + }; + expect(verifyWebhookSignature(envelope)).toBe(false); + }); + + it('canonical string is sorted key=value pairs over the data object (signature lives on the envelope)', () => { + const data = { a: 1, b: 'two', c: [3, 4], d: { e: false }, signature: 'drop-me' }; + expect(buildCanonicalString(data)).toBe('a=1&b=two&c=[3,4]&d={"e":false}&signature=drop-me'); + }); +}); + +describe('csrf', () => { + it('round-trips issued tokens', () => { + const token = generateCsrfToken(); + expect(validCsrfToken(token)).toBe(true); + }); + + it('rejects tampered and malformed tokens', () => { + const token = generateCsrfToken(); + const dot = token.indexOf('.'); + const random = token.slice(dot + 1); + expect(validCsrfToken(`deadbeef${'0'.repeat(28)}.${random}`)).toBe(false); + expect(validCsrfToken('nodot')).toBe(false); + expect(validCsrfToken('')).toBe(false); + }); +}); + +describe('jwt', () => { + const secret = 'unit-test-secret'; + + it('round-trips access claims', async () => { + const token = await signAccess(secret, 'user-1', 'a@b.c', 'ADMIN', 'sess-1', 900); + const claims = await verifyToken(secret, token); + expect(claims).toEqual({ sub: 'user-1', jti: 'sess-1', email: 'a@b.c', role: 'ADMIN' }); + }); + + it('rejects a wrong secret', async () => { + const token = await signAccess(secret, 'user-1', '', '', '', 900); + expect(await verifyToken('other-secret', token)).toBeNull(); + }); +}); + +describe('password', () => { + it('hashes with Go-compatible argon2id layout', async () => { + const hash = await hashPassword('correct-horse'); + expect(hash.startsWith('$argon2id$v=19$m=19456,t=2,p=1$')).toBe(true); + expect(await verifyPassword(hash, 'correct-horse')).toBe(true); + expect(await verifyPassword(hash, 'wrong')).toBe(false); + }); +}); + +describe('totp', () => { + it('verifies a freshly generated code and rejects a wrong one', () => { + const secret = generateTotpSecret(); + const code = speakeasy.totp({ + secret, + encoding: 'base32', + counter: Math.floor(Date.now() / 30_000), + }); + expect(verifyTotp(secret, code)).toBe(true); + expect(verifyTotp(secret, '000000')).toBe(false); + }); + + it('generates eight-digit backup codes', () => { + expect(generateBackupCodes(10)).toHaveLength(10); + expect(generateBackupCodes(1)[0]).toMatch(/^\d{8}$/); + }); +}); + +describe('validate.bindBody', () => { + it('rejects unknown keys with the raw JSON key', () => { + expect(() => bindBody({ bogus: 1 }, { A: { type: 'string' } })).toThrow( + 'property bogus should not exist', + ); + }); + + it('reports a zero-value nested struct once, without inner fields', () => { + const err = (() => { + try { + bindBody( + { user: {} }, + { + User: { + type: 'object', + required: true, + fields: { + FullName: { type: 'string', required: true }, + Email: { type: 'string', email: true }, + }, + }, + }, + ); + } catch (e) { + return e as { messageValue?: unknown }; + } + })(); + expect(err?.messageValue).toEqual(['user should not be empty']); + }); + + it('uses leaf Go field names for nested failures', () => { + const err = (() => { + try { + bindBody( + { user: { fullName: '' } }, + { + User: { + type: 'object', + fields: { + FullName: { type: 'string', required: true }, + Email: { type: 'string', email: true }, + }, + }, + }, + ); + } catch (e) { + return e as { messageValue?: unknown }; + } + })(); + expect(err?.messageValue).toEqual(['fullName should not be empty']); + }); + + it('reports unknown nested keys', () => { + expect(() => + bindBody( + { user: { bogus: 1 } }, + { User: { type: 'object', fields: { FullName: { type: 'string' } } } }, + ), + ).toThrow('property bogus should not exist'); + }); + + it('rejects fractional numbers on integer fields', () => { + expect(() => bindBody({ rating: 1.5 }, { Rating: { type: 'number', integer: true } })).toThrow( + 'property rating must be a number', + ); + }); + + it('skips omitempty fields on zero values', () => { + expect( + bindBody<{ fullName?: string }>( + { fullName: '' }, + { FullName: { type: 'string', omitempty: true, minLen: 1 } }, + ), + ).toEqual({ + fullName: '', + }); + expect(() => + bindBody<{ x?: number }>({ x: 1.5 }, { X: { type: 'number', omitempty: true } }), + ).not.toThrow(); + }); +}); + +describe('goTime', () => { + it('formats Go-style RFC3339 without milliseconds when zero', () => { + expect(goTime(new Date('2026-01-01T00:00:00.000Z'))).toBe('2026-01-01T00:00:00Z'); + expect(goTime(new Date('2026-01-01T00:00:00.123Z'))).toBe('2026-01-01T00:00:00.123Z'); + expect(goTime(null)).toBeNull(); + }); +}); + +describe('app smoke (no DB)', () => { + it('answers /v1/ping', async () => { + const res = await handle(new Request('http://localhost/v1/ping')); + expect(res.status).toBe(200); + expect(await res.json()).toEqual({ message: 'pong from effect' }); + }); + + it('maps unknown routes to the Nest-style 404 body', async () => { + const res = await handle(new Request('http://localhost/v1/nope')); + expect(res.status).toBe(404); + expect(await res.json()).toEqual({ + statusCode: 404, + message: 'Cannot GET /v1/nope', + error: 'Not Found', + }); + }); + + it('blocks a state-changing request without a CSRF token', async () => { + const res = await handle( + new Request('http://localhost/v1/orders', { + method: 'POST', + body: '{}', + headers: { 'content-type': 'application/json' }, + }), + ); + expect(res.status).toBe(403); + expect((await res.json()).message).toBe('Invalid CSRF token'); + }); + + it('issues a CSRF token plus cookie', async () => { + const res = await handle(new Request('http://localhost/v1/csrf-token')); + expect(res.status).toBe(200); + const body = await res.json(); + expect(typeof body.csrfToken).toBe('string'); + const cookieHeader = res.headers.get('set-cookie') ?? ''; + expect(cookieHeader).toContain('_csrf='); + expect(cookieHeader).toContain('HttpOnly'); + }); + + it('refresh rejects an empty token', async () => { + const res = await handle( + new Request('http://localhost/v1/auth/refresh', { + method: 'POST', + body: '{}', + headers: { 'content-type': 'application/json' }, + }), + ); + expect(res.status).toBe(401); + expect((await res.json()).message).toBe('Invalid refresh token'); + }); + + it('refresh rejects an unparseable refresh token', async () => { + const res = await handle( + new Request('http://localhost/v1/auth/refresh', { + method: 'POST', + body: JSON.stringify({ refreshToken: 'garbage' }), + headers: { 'content-type': 'application/json' }, + }), + ); + expect(res.status).toBe(401); + expect((await res.json()).message).toBe('Invalid or expired session'); + }); + + it('login reports class-validator style messages', async () => { + // CSRF applies to login (mirrors Go middleware exemptions). + const tokenRes = await handle(new Request('http://localhost/v1/csrf-token')); + const { csrfToken } = await tokenRes.json(); + const res = await handle( + new Request('http://localhost/v1/auth/login', { + method: 'POST', + body: '{}', + headers: { + 'content-type': 'application/json', + 'x-csrf-token': csrfToken, + cookie: `_csrf=${csrfToken}`, + }, + }), + ); + expect(res.status).toBe(400); + expect((await res.json()).message).toEqual([ + 'email should not be empty', + 'password should not be empty', + ]); + }); +}); diff --git a/apps/api-effect/src/index.ts b/apps/api-effect/src/index.ts new file mode 100644 index 00000000..2d226caf --- /dev/null +++ b/apps/api-effect/src/index.ts @@ -0,0 +1,113 @@ +import { Config, Effect, Layer } from 'effect'; +import * as BunHttpServer from '@effect/platform-bun/BunHttpServer'; +import { HttpMiddleware, HttpRouter } from 'effect/unstable/http'; + +import { nestBody } from './lib/errors'; +import { generateCsrfToken, issueCsrfToken } from './lib/csrf'; +import { route } from './lib/http'; +import { db } from './lib/prisma'; +import { sweepExpiredOrders as sweep } from './lib/orders'; +import { blogRoutes } from './routes/blog'; +import { productsRoutes } from './routes/products'; +import { cartRoutes } from './routes/cart'; +import { ordersRoutes } from './routes/orders'; +import { paymentsRoutes } from './routes/payments'; +import { reviewsRoutes } from './routes/reviews'; +import { usersRoutes } from './routes/users'; +import { authRoutes } from './routes/auth'; +import { eventsRoutes } from './routes/events'; + +const ping = route('GET', '/ping', async () => ({ message: 'pong from effect' })); + +const csrfToken = route('GET', '/csrf-token', async (ctx) => { + const token = generateCsrfToken(); + issueCsrfToken(ctx, token); + return { csrfToken: token }; +}); + +// ponytail: wildcard catch-alls beat fighting the router's 404 — serve's +// middleware cannot rewrite the response (documented), so we own the 404 route. +// Guarded like Elysia's NOT_FOUND: no CSRF check, no throttle quota. +// OPTIONS excluded: the CORS middleware answers all OPTIONS before routing (as in Elysia). +const notFoundRoutes = (['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] as const).map( + (method) => + route( + method, + '/*', + async (ctx) => { + ctx.status = 404; + return nestBody( + 404, + `Cannot ${method} ${new URL(ctx.request.url, 'http://localhost').pathname}`, + ); + }, + false, + ), +); + +// @elysiajs/cors accepted a single origin, a comma-list, or '*'. The predicate +// mirrors that, and echoes the requesting origin (credentials-safe). +function originAllowed(allowList: string, origin: string): boolean { + return allowList === '*' || allowList.split(',').some((o) => o.trim() === origin); +} + +export function appLayer(corsOrigin: string) { + return Layer.mergeAll( + ping, + csrfToken, + ...blogRoutes, + ...productsRoutes, + ...cartRoutes, + ...ordersRoutes, + ...paymentsRoutes, + ...reviewsRoutes, + ...usersRoutes, + ...authRoutes, + ...eventsRoutes, + ...notFoundRoutes, + HttpRouter.middleware( + HttpMiddleware.cors({ + allowedOrigins: (o) => originAllowed(corsOrigin, o), + credentials: true, + }), + { global: true }, + ), + ); +} + +const program = Effect.gen(function* () { + const port = yield* Config.int('PORT').pipe(Config.withDefault(4003)); + const corsOrigin = yield* Config.string('CORS_ORIGIN').pipe( + Config.withDefault('http://localhost:3000'), + ); + + const served = Layer.provide( + HttpRouter.serve(appLayer(corsOrigin)), + BunHttpServer.layer({ port }), + ); + + yield* Effect.tryPromise(() => sweep(db())).pipe( + Effect.catchDefect((e) => Effect.sync(() => console.error('sweep failed:', e))), + ); + yield* Effect.sync(() => { + setInterval( + () => { + sweep(db()).catch((e: unknown) => + console.error('sweep failed:', e instanceof Error ? e.message : String(e)), + ); + }, + 5 * 60 * 1000, + ); + }); + + // Effect.never holds the scope open; without it the server layer is disposed + // the moment the layer build resolves. + yield* Effect.scoped(Effect.ignore(Layer.build(served)).pipe(Effect.andThen(Effect.never))); +}); + +if (import.meta.main) { + Effect.runPromise(program).catch((e: unknown) => { + console.error(e); + process.exit(1); + }); +} diff --git a/apps/api-effect/src/lib/auth-logic.ts b/apps/api-effect/src/lib/auth-logic.ts new file mode 100644 index 00000000..a2dff829 --- /dev/null +++ b/apps/api-effect/src/lib/auth-logic.ts @@ -0,0 +1,379 @@ +import type { DeviceType, User } from '../generated/prisma/client'; +import { ApiError } from './errors'; +import { getRedis } from './redis'; +import { hashPassword, verifyPassword } from './password'; +import { signAccess, signRefresh, verifyToken } from './jwt'; +import { mailEnabled, sendPasswordResetEmail, sendVerificationEmail } from './mailer'; +import { + generateBackupCodes, + generateTotpSecret, + otpauthUrl, + toQrDataUrl, + verifyTotp, +} from './totp'; +import { goTime, newId, newUuid, randomHex, safeEqual, sha256Hex } from './util'; +import type { DatabaseClient } from './prisma'; + +const JWT_SECRET = () => process.env.JWT_SECRET_KEY ?? ''; + +const DAY_SECONDS = 86_400; +const ACCESS_TTL_SECONDS = 900; +const REFRESH_TTL_DAYS = 7; + +export function brief(u: User) { + return { + id: u.id, + email: u.email, + fullName: u.fullName, + emailVerified: u.emailVerified, + mfaEnabled: u.mfaEnabled, + }; +} + +export type UserBrief = ReturnType; + +async function redisSet(key: string, value: string, ttlSeconds: number): Promise { + const rdb = await getRedis(); + if (rdb === null) return; + await rdb.set(key, value, 'EX', ttlSeconds).catch((e: unknown) => { + console.error('redis set failed:', e instanceof Error ? e.message : String(e)); + }); +} + +// ponytail: mirrors Go provisionDevice; ContainsAny(char-set) quirk = /Mobile/ substring test. +async function provisionDevice( + db: DatabaseClient, + userId: string, + ip: string, + userAgent: string, +): Promise { + if (userAgent === '') return null; + let kind: DeviceType = 'DESKTOP'; + if (userAgent.includes('iPad') || userAgent.includes('Tablet')) kind = 'TABLET'; + else if (/Mobile/.test(userAgent)) kind = 'MOBILE'; + const name = userAgent.slice(0, 255); + const fingerprint = sha256Hex(`${userAgent}|${ip}`).slice(0, 32); + try { + const device = await db.device.create({ + data: { + id: newId(), + userId, + name, + type: kind, + userAgent, + ipAddress: ip || null, + fingerprint, + }, + }); + return device.id; + } catch { + return null; + } +} + +export interface RegisterInput { + email: string; + password: string; + fullName: string; + phone?: string | null; +} + +export async function registerUser(db: DatabaseClient, in1: RegisterInput) { + const existing = await db.user.findUnique({ where: { email: in1.email } }); + if (existing !== null) { + throw new ApiError(409, 'User with this email already exists'); + } + const password = await hashPassword(in1.password); + const user = await db.user.create({ + data: { + id: newUuid(), + email: in1.email, + password, + fullName: in1.fullName, + phone: in1.phone ?? null, + role: 'CUSTOMER', + emailVerified: false, + }, + }); + const token = randomHex(32); + if (mailEnabled()) { + await sendVerificationEmail(user.email, token).catch((e: Error) => { + console.error(`auth: verification mail failed for ${user.email}: ${e.message}`); + }); + } else if (process.env.NODE_ENV !== 'production') { + console.warn( + `[dev] mailer disabled; verification link for ${user.email}: /v1/auth/verify-email?token=${token}`, + ); + } + await redisSet(`emailverify:${token}`, user.id, DAY_SECONDS); + return { userId: user.id }; +} + +export interface LoginInput { + email: string; + password: string; + rememberMe?: boolean; +} + +export interface LoginMeta { + userAgent: string; + ip: string; +} + +export type LoginResult = + | { user: UserBrief; requires2FA: true } + | { + user: UserBrief; + requires2FA: false; + accessToken: string; + refreshToken: string; + ttlSeconds: number; + }; + +export async function loginUser( + db: DatabaseClient, + in1: LoginInput, + meta: LoginMeta, +): Promise { + const user = await db.user.findUnique({ where: { email: in1.email } }); + if (user === null || user.password === null) { + throw new ApiError(401, 'Invalid credentials'); + } + if (!(await verifyPassword(user.password, in1.password))) { + throw new ApiError(401, 'Invalid credentials'); + } + if (!user.emailVerified) { + throw new ApiError(400, 'Please verify your email before logging in'); + } + if (user.mfaEnabled) { + return { user: brief(user), requires2FA: true }; + } + const ttlSeconds = in1.rememberMe ? 30 * DAY_SECONDS : REFRESH_TTL_DAYS * DAY_SECONDS; + const sessionId = newUuid(); + const accessToken = await signAccess( + JWT_SECRET(), + user.id, + user.email, + user.role, + sessionId, + ACCESS_TTL_SECONDS, + ); + const refreshToken = await signRefresh(JWT_SECRET(), user.id, ttlSeconds); + const deviceId = await provisionDevice(db, user.id, meta.ip, meta.userAgent); + await db.session.create({ + data: { + id: sessionId, + token: accessToken, + refreshToken, + userId: user.id, + deviceId, + ipAddress: meta.ip || null, + userAgent: meta.userAgent || null, + status: 'ACTIVE', + expiresAt: new Date(Date.now() + ttlSeconds * 1000), + }, + }); + return { + accessToken, + refreshToken, + ttlSeconds, + user: brief(user), + requires2FA: false, + }; +} + +export async function refreshSession(db: DatabaseClient, refreshToken: string) { + if (refreshToken === '') throw new ApiError(401, 'Invalid refresh token'); + const claims = await verifyToken(JWT_SECRET(), refreshToken); + if (claims === null) throw new ApiError(401, 'Invalid or expired session'); + const session = await db.session.findUnique({ where: { refreshToken } }); + if (session === null || session.status !== 'ACTIVE') { + throw new ApiError(401, 'Invalid or expired session'); + } + if (new Date() > session.expiresAt) { + throw new ApiError(401, 'Session expired'); + } + const user = await db.user.findUnique({ where: { id: session.userId } }); + if (user === null) throw new ApiError(401, 'User not found'); + + const ttlSeconds = Math.max(0, Math.trunc((session.expiresAt.getTime() - Date.now()) / 1000)); + const newAccess = await signAccess( + JWT_SECRET(), + claims.sub, + user.email, + user.role, + session.id, + ACCESS_TTL_SECONDS, + ); + const newRefresh = await signRefresh(JWT_SECRET(), claims.sub, REFRESH_TTL_DAYS * DAY_SECONDS); + await db.session.update({ where: { id: session.id }, data: { refreshToken: newRefresh } }); + return { accessToken: newAccess, refreshToken: newRefresh, ttlSeconds }; +} + +export async function logoutUser( + db: DatabaseClient, + userId: string, + sessionId: string | null, +): Promise { + const now = new Date(); + if (sessionId !== null) { + await db.session.updateMany({ + where: { id: sessionId }, + data: { status: 'REVOKED', revokedAt: now, updatedAt: now }, + }); + } else { + await db.session.updateMany({ + where: { userId }, + data: { status: 'REVOKED', revokedAt: now, updatedAt: now }, + }); + } +} + +export async function listSessions(db: DatabaseClient, userId: string) { + const rows = await db.session.findMany({ + where: { userId }, + orderBy: { createdAt: 'desc' }, + include: { device: true }, + }); + return rows.map((r) => ({ + id: r.id, + device: + r.device === null + ? null + : { + id: r.device.id, + name: r.device.name, + type: r.device.type, + lastSeenAt: goTime(r.device.lastSeenAt), + }, + ipAddress: r.ipAddress, + userAgent: r.userAgent, + status: r.status, + createdAt: goTime(r.createdAt), + expiresAt: goTime(r.expiresAt), + })); +} + +export async function verifyEmail(db: DatabaseClient, token: string): Promise { + try { + const rdb = await getRedis(); + if (rdb === null) throw new ApiError(400, 'Invalid or expired verification token'); + const val = await rdb.get(`emailverify:${token}`); + if (val === null) throw new ApiError(400, 'Invalid or expired verification token'); + await rdb.del(`emailverify:${token}`); + await db.user.update({ where: { id: val }, data: { emailVerified: true } }); + } catch (e) { + if (e instanceof ApiError) throw e; + throw new ApiError(400, 'Invalid or expired verification token'); + } +} + +export async function requestPasswordReset(db: DatabaseClient, email: string): Promise { + const user = await db.user.findUnique({ where: { email } }); + if (user === null) return; + const token = randomHex(32); + await redisSet(`passwordreset:${token}`, user.id, DAY_SECONDS); + if (mailEnabled()) { + await sendPasswordResetEmail(user.email, token); + } else if (process.env.NODE_ENV !== 'production') { + console.warn( + `[dev] password reset token for ${user.email}: /v1/auth/password/reset?token=${token}`, + ); + } +} + +export async function resetPassword( + db: DatabaseClient, + token: string, + newPassword: string, +): Promise { + try { + const rdb = await getRedis(); + if (rdb === null) throw new ApiError(404, 'Invalid or expired reset token'); + const userId = await rdb.get(`passwordreset:${token}`); + if (userId === null) throw new ApiError(404, 'Invalid or expired reset token'); + const hashed = await hashPassword(newPassword); + const now = new Date(); + await db.$transaction(async (tx) => { + await tx.user.update({ where: { id: userId }, data: { password: hashed } }); + await tx.session.updateMany({ + where: { userId }, + data: { status: 'REVOKED', revokedAt: now, updatedAt: now }, + }); + }); + await rdb.del(`passwordreset:${token}`); + } catch (e) { + if (e instanceof ApiError) throw e; + throw new ApiError(404, 'Invalid or expired reset token'); + } +} + +export async function enable2fa(db: DatabaseClient, user: User) { + if (user.mfaEnabled) { + throw new ApiError(400, '2FA is already enabled'); + } + const secret = generateTotpSecret(); + const backupCodes = generateBackupCodes(10); + const qrCode = await toQrDataUrl(otpauthUrl(user.email, secret)); + await db.$transaction(async (tx) => { + await tx.userMFAMethod.create({ + data: { + id: newId(), + userId: user.id, + methodType: 'TOTP', + secret, + isActive: false, + isVerified: false, + }, + }); + await tx.mFABackupCode.createMany({ + data: backupCodes.map((code) => ({ + id: newId(), + userId: user.id, + code, + })), + }); + }); + return { qrCode, secret, backupCodes }; +} + +export async function verify2fa( + db: DatabaseClient, + userId: string, + sessionId: string | null, + code: string, +): Promise { + const normalized = code.trim().toUpperCase().replaceAll('-', ''); + const method = await db.userMFAMethod.findFirst({ + where: { userId, methodType: 'TOTP' }, + orderBy: { createdAt: 'desc' }, + }); + let valid = false; + if (method !== null && method.secret !== null) { + valid = verifyTotp(method.secret, normalized); + } + if (!valid) { + const rows = await db.mFABackupCode.findMany({ + where: { userId, isUsed: false }, + }); + for (const row of rows) { + if (safeEqual(row.code, normalized)) { + await db.mFABackupCode.update({ + where: { id: row.id }, + data: { isUsed: true }, + }); + valid = true; + break; + } + } + } + if (!valid) throw new ApiError(401, 'Invalid 2FA code'); + await db.userMFAMethod.updateMany({ + where: { userId, methodType: 'TOTP' }, + data: { isActive: true, isVerified: true }, + }); + await db.user.update({ where: { id: userId }, data: { mfaEnabled: true } }); + if (sessionId !== null) { + await redisSet(`mfaverified:${sessionId}`, '1', 7 * DAY_SECONDS); + } +} diff --git a/apps/api-effect/src/lib/auth.ts b/apps/api-effect/src/lib/auth.ts new file mode 100644 index 00000000..bb8544a2 --- /dev/null +++ b/apps/api-effect/src/lib/auth.ts @@ -0,0 +1,79 @@ +import type { User } from '../generated/prisma/client'; +import { ApiError } from './errors'; +import { verifyToken } from './jwt'; +import { db } from './prisma'; +import type { Ctx } from './http'; + +export interface AuthResult { + user: User; + sessionId: string | null; +} + +export function extractToken(ctx: Ctx): string | null { + const cookieToken = ctx.cookies.access_token; + if (typeof cookieToken === 'string' && cookieToken !== '') { + return cookieToken; + } + const authorization = ctx.http.headers.get('authorization'); + if (authorization !== null && authorization.startsWith('Bearer ')) { + return authorization.slice('Bearer '.length); + } + return null; +} + +async function authenticate(ctx: Ctx): Promise { + const token = extractToken(ctx); + if (token === null) throw new ApiError(401, 'Unauthorized'); + const claims = await verifyToken(process.env.JWT_SECRET_KEY ?? '', token); + if (claims === null) throw new ApiError(401, 'Unauthorized'); + const user = await db().user.findUnique({ where: { id: claims.sub } }); + if (user === null) throw new ApiError(401, 'User not found'); + return { user, sessionId: claims.jti ?? null }; +} + +export function requireAuth(ctx: Ctx): Promise { + return authenticate(ctx); +} + +export async function optionalAuth(ctx: Ctx): Promise { + try { + return await authenticate(ctx); + } catch { + return null; + } +} + +export async function requireAdmin(ctx: Ctx): Promise { + const auth = await authenticate(ctx); + if (auth.user.role !== 'ADMIN') { + throw new ApiError(403, 'Forbidden resource'); + } + return auth; +} + +const AUTH_COOKIE_BASE = { httpOnly: true, path: '/', sameSite: 'lax' } as const; + +export function setAuthCookies( + ctx: Ctx, + accessToken: string, + refreshToken: string, + refreshTtlSeconds: number, +): void { + const secure = process.env.NODE_ENV === 'production'; + ctx.setCookie('access_token', accessToken, { + ...AUTH_COOKIE_BASE, + maxAge: 900, + secure, + }); + ctx.setCookie('refresh_token', refreshToken, { + ...AUTH_COOKIE_BASE, + maxAge: refreshTtlSeconds, + secure, + }); +} + +export function clearAuthCookies(ctx: Ctx): void { + for (const name of ['access_token', 'refresh_token']) { + ctx.setCookie(name, '', { ...AUTH_COOKIE_BASE, maxAge: 0 }); + } +} diff --git a/apps/api-effect/src/lib/cart.ts b/apps/api-effect/src/lib/cart.ts new file mode 100644 index 00000000..2d07ee94 --- /dev/null +++ b/apps/api-effect/src/lib/cart.ts @@ -0,0 +1,166 @@ +import type { + Cart, + CartItem, + Product, + ProductSize, + ProductSizeStock, +} from '../generated/prisma/client'; +import { ApiError } from './errors'; +import type { DatabaseClient } from './prisma'; +import { goTime, newId } from './util'; + +const IMAGE_MAP: Record = { + AO_THUN: '/shop/ao-thun.webp', + PAD_CHUOT: '/shop/pad-chuot.webp', + DAY_DEO: '/shop/day-deo.webp', + MOC_KHOA: '/shop/moc-khoa.webp', +}; + +export function productImage(slug: string): string { + return IMAGE_MAP[slug] ?? '/shop/default.webp'; +} + +export type ProductWithSizes = Product & { sizeStocks: ProductSizeStock[] }; +export type CartItemRow = CartItem & { product: ProductWithSizes }; + +export function availableStock( + p: ProductWithSizes, + size: ProductSize | null, +): { stock: number; ok: boolean } { + if (!p.hasSizes) return { stock: p.stock, ok: true }; + if (size === null) return { stock: 0, ok: false }; + const hit = p.sizeStocks.find((s) => s.size === size); + return hit !== undefined ? { stock: hit.stock, ok: true } : { stock: 0, ok: false }; +} + +export async function getOrCreateCart(db: DatabaseClient, userId: string): Promise { + const existing = await db.cart.findFirst({ where: { userId } }); + if (existing !== null) return existing; + return db.cart.create({ data: { id: newId(), userId } }); +} + +export async function clearCart(db: DatabaseClient, userId: string): Promise { + const cart = await getOrCreateCart(db, userId); + await db.cartItem.deleteMany({ where: { cartId: cart.id } }); + return cart; +} + +async function ownedItem(db: DatabaseClient, userId: string, itemID: string): Promise { + const item = await db.cartItem.findUnique({ + where: { id: itemID }, + include: { product: { include: { sizeStocks: true } } }, + }); + if (item === null) throw new ApiError(404, `Cart item with id ${itemID} not found`); + const cart = await getOrCreateCart(db, userId); + if (item.cartId !== cart.id) { + throw new ApiError(403, 'Cart item does not belong to user'); + } + return item; +} + +export async function mapToCartDTO(db: DatabaseClient, cartID: string) { + const items = await db.cartItem.findMany({ + where: { cartId: cartID }, + include: { product: { include: { sizeStocks: true } } }, + }); + const dtoItems = items.map((it) => { + const { stock: available } = availableStock(it.product, it.size); + const price = Number(it.product.priceCurrent); + return { + id: it.id, + productId: it.productId, + productName: it.product.name, + productSlug: it.product.slug, + productPrice: price, + productImage: productImage(it.product.slug), + size: it.size, + quantity: it.quantity, + subtotal: price * it.quantity, + stockAvailable: available, + }; + }); + const cart = await db.cart.findUnique({ where: { id: cartID } }); + return { + id: cartID, + items: dtoItems, + totalItems: dtoItems.reduce((sum, i) => sum + i.quantity, 0), + totalAmount: dtoItems.reduce((sum, i) => sum + i.subtotal, 0), + updatedAt: goTime(cart?.updatedAt ?? null), + }; +} + +export async function addToCart( + db: DatabaseClient, + userId: string, + productID: string, + size: string | null, + quantity: number, +) { + if (quantity <= 0) throw new ApiError(400, 'Quantity must be greater than 0'); + const p = await db.product.findUnique({ + where: { id: productID }, + include: { sizeStocks: true }, + }); + if (p === null) throw new ApiError(404, `Product with id ${productID} not found`); + if (p.hasSizes && size === null) { + throw new ApiError(400, 'Size is required for products with sizes'); + } + if (!p.hasSizes && size !== null) { + throw new ApiError(400, 'Size is not supported for this product'); + } + const { stock: available, ok } = availableStock(p, (size ?? null) as ProductSize | null); + if (!ok) throw new ApiError(404, `Size ${size} not found for product ${productID}`); + const c = await getOrCreateCart(db, userId); + const existing = await db.cartItem.findFirst({ + where: { cartId: c.id, productId: productID, size: (size ?? null) as ProductSize | null }, + }); + const current = existing?.quantity ?? 0; + if (current + quantity > available) { + throw new ApiError( + 409, + `Insufficient stock. Available: ${available}, Requested: ${current + quantity}`, + ); + } + if (existing !== null) { + await db.cartItem.update({ + where: { id: existing.id }, + data: { quantity: { increment: quantity } }, + }); + } else { + await db.cartItem.create({ + data: { + id: newId(), + cartId: c.id, + productId: productID, + size: (size ?? null) as ProductSize | null, + quantity, + }, + }); + } + return mapToCartDTO(db, c.id); +} + +export async function updateCartItem( + db: DatabaseClient, + userId: string, + itemID: string, + quantity: number, +) { + if (quantity <= 0) throw new ApiError(400, 'Quantity must be greater than 0'); + const item = await ownedItem(db, userId, itemID); + const { stock: available, ok } = availableStock(item.product, item.size); + if (!ok) { + throw new ApiError(404, `Size ${item.size} not found for product ${item.productId}`); + } + if (quantity > available) { + throw new ApiError(409, `Insufficient stock. Available: ${available}, Requested: ${quantity}`); + } + await db.cartItem.update({ where: { id: itemID }, data: { quantity } }); + return mapToCartDTO(db, item.cartId); +} + +export async function removeFromCart(db: DatabaseClient, userId: string, itemID: string) { + const item = await ownedItem(db, userId, itemID); + await db.cartItem.delete({ where: { id: itemID } }); + return mapToCartDTO(db, item.cartId); +} diff --git a/apps/api-effect/src/lib/csrf.ts b/apps/api-effect/src/lib/csrf.ts new file mode 100644 index 00000000..7d5c261f --- /dev/null +++ b/apps/api-effect/src/lib/csrf.ts @@ -0,0 +1,59 @@ +import { createHmac } from 'node:crypto'; + +import { ApiError } from './errors'; +import { randomHex, safeEqual } from './util'; +import type { Ctx } from './http'; + +export type GuardContext = { + request: Request; + path: string; + cookies: Record; +}; + +const EXEMPT_PREFIXES = ['/v1/auth/oauth', '/v1/payments/webhook']; +const EXEMPT_EXACT = '/v1/auth/refresh'; + +const CSRF_COOKIE = { httpOnly: true, path: '/', sameSite: 'lax', maxAge: 3600 } as const; + +function secret(): string { + return process.env.CSRF_SECRET || `derived-${process.env.JWT_SECRET_KEY ?? ''}`; +} + +function hmacHex(key: string, data: string): string { + return createHmac('sha256', key).update(data).digest('hex'); +} + +export function generateCsrfToken(): string { + const random = randomHex(32); + return `${hmacHex(secret(), random)}.${random}`; +} + +export function validCsrfToken(token: string): boolean { + const dot = token.indexOf('.'); + if (dot <= 0 || dot === token.length - 1) { + return false; + } + return safeEqual(hmacHex(secret(), token.slice(dot + 1)), token.slice(0, dot)); +} + +export function issueCsrfToken(ctx: Ctx, value: string): void { + ctx.setCookie('_csrf', value, CSRF_COOKIE); +} + +export function csrfGuard(ctx: GuardContext): void { + if ( + ctx.request.method === 'GET' || + ctx.request.method === 'HEAD' || + ctx.request.method === 'OPTIONS' + ) { + return; + } + if (EXEMPT_PREFIXES.some((prefix) => ctx.path.startsWith(prefix))) return; + if (ctx.path === EXEMPT_EXACT) return; + + const header = ctx.request.headers.get('X-CSRF-Token'); + const cookieValue = ctx.cookies._csrf; + if (header === null || header === '' || header !== cookieValue || !validCsrfToken(header)) { + throw new ApiError(403, 'Invalid CSRF token'); + } +} diff --git a/apps/api-effect/src/lib/errors.ts b/apps/api-effect/src/lib/errors.ts new file mode 100644 index 00000000..5cfd6739 --- /dev/null +++ b/apps/api-effect/src/lib/errors.ts @@ -0,0 +1,37 @@ +export class ApiError extends Error { + status: number; + messageValue: string | string[]; + + constructor(status: number, message: string | string[]) { + super(Array.isArray(message) ? message.join('; ') : message); + this.name = 'ApiError'; + this.status = status; + this.messageValue = message; + } +} + +// ponytail: Bun/Node client-side Response.statusText is always ''; Go http.StatusText map. +const STATUS_TEXT: Record = { + 200: 'OK', + 201: 'Created', + 204: 'No Content', + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 409: 'Conflict', + 422: 'Unprocessable Entity', + 429: 'Too Many Requests', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 503: 'Service Unavailable', +}; + +export function statusText(status: number): string { + return STATUS_TEXT[status] ?? ''; +} + +export function nestBody(status: number, message: string | string[]) { + return { statusCode: status, message, error: statusText(status) }; +} diff --git a/apps/api-effect/src/lib/http.ts b/apps/api-effect/src/lib/http.ts new file mode 100644 index 00000000..0c77fc96 --- /dev/null +++ b/apps/api-effect/src/lib/http.ts @@ -0,0 +1,163 @@ +import { Duration, Effect, Layer } from 'effect'; +import { type Cookies, HttpRouter, HttpServerRequest, HttpServerResponse } from 'effect/unstable/http'; + +import { ApiError, nestBody } from './errors'; +import { csrfGuard } from './csrf'; +import { getThrottler } from './throttle'; +import { readJsonObject } from './validate'; + +export type CookieOptions = { + httpOnly?: boolean; + path?: string; + sameSite?: 'strict' | 'lax' | 'none'; + // Seconds; converted to Duration at render (cookie libs read bare numbers as millis). + maxAge?: number; + secure?: boolean; +}; + +export type SetCookie = { name: string; value: string; options?: CookieOptions }; + +export type Ctx = { + // Web Request behind the Bun adapter: method, headers, body. + http: Request; + request: HttpServerRequest.HttpServerRequest; + // Route pattern (e.g. /v1/blog/posts/:slug), same role as Elysia's `route`. + path: string; + params: Record; + query: Record; + cookies: Record; + status: number; + setCookie(name: string, value: string, options?: CookieOptions): void; +}; + +// Go main.go: strictThrottle (10/min) on auth + payment-critical paths, +// defaultThrottle (100/min) on the rest. +const STRICT_PATHS = new Set([ + '/v1/auth/register', + '/v1/auth/login', + '/v1/auth/2fa/enable', + '/v1/auth/2fa/verify', + '/v1/auth/password/reset-request', + '/v1/auth/password/reset', + '/v1/payments/create-link', + '/v1/payments/verify/:transactionCode', +]); + +export const PREFIX = '/v1'; + +function apiErrorBody(e: ApiError): HttpServerResponse.HttpServerResponse { + return HttpServerResponse.jsonUnsafe(nestBody(e.status, e.messageValue), { status: e.status }); +} + +function errorBody( + e: unknown, + where: string, +): Effect.Effect { + if (e instanceof ApiError) { + return Effect.succeed(apiErrorBody(e)); + } + const message = e instanceof Error ? e.message : String(e); + console.error('[error]', where, message); + return Effect.succeed(HttpServerResponse.jsonUnsafe(nestBody(500, message), { status: 500 })); +} + +function renderCookies( + res: HttpServerResponse.HttpServerResponse, + setCookies: readonly SetCookie[], +): HttpServerResponse.HttpServerResponse { + for (const c of setCookies) { + const maxAge = + typeof c.options?.maxAge === 'number' + ? Duration.seconds(c.options.maxAge) + : c.options?.maxAge; + const options: Cookies.Cookie['options'] = { + ...c.options, + ...(maxAge !== undefined ? { maxAge } : {}), + }; + res = HttpServerResponse.setCookiesUnsafe(res, [[c.name, c.value, options]]); + } + return res; +} + +function handle( + pattern: string, + guarded: boolean, + handler: (ctx: Ctx) => Promise, +): ( + request: HttpServerRequest.HttpServerRequest, +) => Effect.Effect { + return (request) => + Effect.gen(function* () { + const params = yield* HttpRouter.params; + const web = yield* HttpServerRequest.toWeb(request); + const url = new URL(request.url, 'http://localhost'); + const setCookies: SetCookie[] = []; + const ctx: Ctx = { + http: web, + request, + path: pattern, + params, + query: Object.fromEntries(url.searchParams), + cookies: request.cookies, + status: 200, + setCookie: (name, value, options) => { + setCookies.push({ name, value, options }); + }, + }; + + // ponytail: csrf + throttle keyed on the declared pattern, so route-level + // guards live in one place instead of a global middleware that lacks the + // pattern. Unguarded = the 404 catch-alls, mirroring Elysia where NOT_FOUND + // short-circuited before onBeforeHandle (no guards, no quota). + // ApiError is rendered right here (Effect.tryPromise would squash its message); + // anything else stays a defect for errorBody. + return yield* Effect.tryPromise(async () => { + try { + // OPTIONS never reaches here: the global CORS middleware answers every + // OPTIONS with a 204 preflight response before routing (as in Elysia), + // so preflights can't burn strict-path quota (10/min). + if (guarded) { + csrfGuard({ request: web, path: pattern, cookies: ctx.cookies }); + const throttler = await getThrottler(); + if (throttler !== null) { + await throttler(STRICT_PATHS.has(pattern) ? 10 : 100)({ + path: pattern, + request: web, + }); + } + } + + const result = await handler(ctx); + const res = + ctx.status === 204 + ? HttpServerResponse.empty({ status: 204 }) + : HttpServerResponse.jsonUnsafe(result, { status: ctx.status }); + return renderCookies(res, setCookies); + } catch (e) { + if (e instanceof ApiError) return apiErrorBody(e); + throw e; + } + }); + }).pipe( + Effect.orDie, + Effect.catchDefect((e) => errorBody(e, `${request.method} ${pathname(request)}`)), + ); +} + +function pathname(request: HttpServerRequest.HttpServerRequest): string { + return new URL(request.url, 'http://localhost').pathname; +} + +export function route( + method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS', + path: string, + handler: (ctx: Ctx) => Promise, + guarded = true, +): Layer.Layer { + // HttpRouter.add is itself a Layer that registers on the ambient router. + return HttpRouter.add(method, `${PREFIX}${path}`, handle(`${PREFIX}${path}`, guarded, handler)); +} + +export function bodyOf(ctx: Ctx): Promise> { + return readJsonObject(ctx.http); +} diff --git a/apps/api-effect/src/lib/jwt.ts b/apps/api-effect/src/lib/jwt.ts new file mode 100644 index 00000000..c11b4970 --- /dev/null +++ b/apps/api-effect/src/lib/jwt.ts @@ -0,0 +1,53 @@ +import { SignJWT, jwtVerify, type JWTPayload } from 'jose'; + +function toSecret(secret: string): Uint8Array { + return new TextEncoder().encode(secret); +} + +export interface VerifiedClaims { + sub: string; + jti?: string; + email?: string; + role?: string; +} + +export async function signAccess( + secret: string, + sub: string, + email: string, + role: string, + jti: string, + ttlSeconds: number, +): Promise { + const now = Math.floor(Date.now() / 1000); + const payload: JWTPayload = { sub, iat: now, exp: now + ttlSeconds }; + if (email !== '') payload.email = email; + if (role !== '') payload.role = role; + if (jti !== '') payload.jti = jti; + return new SignJWT(payload).setProtectedHeader({ alg: 'HS256' }).sign(toSecret(secret)); +} + +export async function signRefresh( + secret: string, + sub: string, + ttlSeconds: number, +): Promise { + const now = Math.floor(Date.now() / 1000); + const payload: JWTPayload = { sub, iat: now, exp: now + ttlSeconds }; + return new SignJWT(payload).setProtectedHeader({ alg: 'HS256' }).sign(toSecret(secret)); +} + +export async function verifyToken(secret: string, token: string): Promise { + if (secret === '') return null; + try { + const { payload } = await jwtVerify(token, toSecret(secret), { algorithms: ['HS256'] }); + if (typeof payload.sub !== 'string' || payload.sub === '') return null; + const claims: VerifiedClaims = { sub: payload.sub }; + if (typeof payload.jti === 'string') claims.jti = payload.jti; + if (typeof payload.email === 'string') claims.email = payload.email; + if (typeof payload.role === 'string') claims.role = payload.role; + return claims; + } catch { + return null; + } +} diff --git a/apps/api-effect/src/lib/mailer.ts b/apps/api-effect/src/lib/mailer.ts new file mode 100644 index 00000000..2da469a6 --- /dev/null +++ b/apps/api-effect/src/lib/mailer.ts @@ -0,0 +1,59 @@ +import nodemailer from 'nodemailer'; + +// Gmail STARTTLS with app password, mirrors api-go mailer.go. +// null = not configured; callers degrade (register logs, reset throws 500). + +let transport: nodemailer.Transporter | null | undefined; + +function getTransport(): nodemailer.Transporter | null { + if (transport === undefined) { + transport = null; + const user = process.env.MAIL_USER; + const pass = process.env.MAIL_PASS; + if (user !== undefined && user !== '' && pass !== undefined && pass !== '') { + transport = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 587, + secure: false, + auth: { user, pass }, + }); + } + } + + return transport; +} + +export function frontendUrl(): string { + return process.env.FRONTEND_URL ?? ''; +} + +export function mailEnabled(): boolean { + return getTransport() !== null; +} + +export async function send(to: string, subject: string, html: string): Promise { + const t = getTransport(); + if (t === null) { + throw new Error('mailer: MAIL_USER/MAIL_PASS not configured'); + } + + await t.sendMail({ from: `WebDev Studios <${process.env.MAIL_USER}>`, to, subject, html }); +} + +export async function sendVerificationEmail(to: string, token: string): Promise { + const link = `${frontendUrl()}/auth/verify-email?token=${token}`; + const body = + `

Welcome to WebDev Studios!

` + + `

Click here to verify your email

` + + '

This link expires in 24 hours.

'; + await send(to, 'Verify your email', body); +} + +export async function sendPasswordResetEmail(to: string, token: string): Promise { + const link = `${frontendUrl()}/auth/reset-password?token=${token}`; + const body = + '

Reset your password:

' + + `

${link}

` + + '

Expires in 24 hours.

'; + await send(to, 'Password reset', body); +} diff --git a/apps/api-effect/src/lib/orders.test.ts b/apps/api-effect/src/lib/orders.test.ts new file mode 100644 index 00000000..36154350 --- /dev/null +++ b/apps/api-effect/src/lib/orders.test.ts @@ -0,0 +1,96 @@ +import { describe, expect, test } from 'bun:test'; +import { Prisma } from '../generated/prisma/client'; + +import { ApiError } from './errors'; +import { createOrder, type CreateOrderInput } from './orders'; +import { makePrismaFake } from '../test/prisma-fake'; + +const addr = { + fullName: 'Nguyen Van A', + phone: '0900000000', + addressLine1: '1 Nguyen Hue', + city: 'Ho Chi Minh City', + district: 'D1', + ward: 'W1', + postalCode: '700000', +}; + +function directInput(overrides: Partial = {}): CreateOrderInput { + return { + orderType: 'DIRECT_PURCHASE', + productId: 'p1', + productSlug: 'AO_THUN', + quantity: 1, + shippingAddress: addr, + ...overrides, + }; +} + +function seedProduct(price: number, stock = 10) { + return { + id: 'p1', + slug: 'AO_THUN', + name: 'Áo thun', + stock, + priceCurrent: new Prisma.Decimal(price), + hasSizes: false, + }; +} + +describe('createOrder', () => { + test('adds 30000 shipping fee when total < 500000 and reserves stock', async () => { + const db = makePrismaFake({ product: [seedProduct(200000)] }); + + const dto = await createOrder(db, 'u1', directInput({ quantity: 2 })); + + expect(dto.status).toBe('PENDING'); + expect(dto.paymentStatus).toBe('PENDING'); + expect(dto.shippingFee).toBe(30000); + expect(dto.totalAmount).toBe(430000); + expect(dto.items).toHaveLength(1); + const p = await db.product.findUnique({ where: { id: 'p1' } }); + expect(p!.stock).toBe(8); + }); + + test('has no shipping fee when total >= 500000', async () => { + const db = makePrismaFake({ product: [seedProduct(300000)] }); + + const dto = await createOrder(db, 'u1', directInput({ quantity: 2 })); + + expect(dto.shippingFee).toBe(0); + expect(dto.totalAmount).toBe(600000); + }); + + test('rejects when requested quantity exceeds stock', async () => { + const db = makePrismaFake({ product: [seedProduct(100000, 1)] }); + + const err = await createOrder(db, 'u1', directInput({ quantity: 2 })).catch((e) => e); + expect(err).toBeInstanceOf(ApiError); + expect(err).toMatchObject({ status: 409 }); + }); + + test('rejects with 409 while the user has a PENDING order', async () => { + const now = new Date('2026-08-31T00:00:00Z'); + const db = makePrismaFake({ + product: [seedProduct(100000)], + order: [ + { + id: 'o1', + code: '#ORD-0001', + userId: 'u1', + status: 'PENDING', + paymentStatus: 'PENDING', + totalAmount: new Prisma.Decimal(130000), + shippingFee: new Prisma.Decimal(30000), + discountValue: new Prisma.Decimal(0), + createdAt: now, + updatedAt: now, + }, + ], + }); + + const err = await createOrder(db, 'u1', directInput()).catch((e) => e); + expect(err).toBeInstanceOf(ApiError); + expect(err).toMatchObject({ status: 409 }); + }); +}); diff --git a/apps/api-effect/src/lib/orders.ts b/apps/api-effect/src/lib/orders.ts new file mode 100644 index 00000000..d16976c9 --- /dev/null +++ b/apps/api-effect/src/lib/orders.ts @@ -0,0 +1,416 @@ +import { + Prisma, + type Order, + type OrderItem, + type ProductSlug, + type ProductSize, + type ShippingAddress, +} from '../generated/prisma/client'; +import { ApiError } from './errors'; +import type { DatabaseClient } from './prisma'; +import { goTime, newId } from './util'; +import { availableStock, clearCart, getOrCreateCart, type ProductWithSizes } from './cart'; +import { ORDER_EXPIRY_MS, releaseStock, reserveStock, settleOrder, type StockItem } from './settle'; + +// ponytail: mirrors apps/web/src/lib/shipping.ts — keep in sync +const FREE_SHIPPING_THRESHOLD = 500000; +const SHIPPING_FEE = 30000; + +export const VALID_ORDER_STATUSES = [ + 'PENDING', + 'CONFIRMED', + 'PROCESSING', + 'SHIPPING', + 'DELIVERED', + 'CANCELLED', + 'RETURNED', +] as const; + +export function assertValidStatus(status: string | undefined): void { + if (status && !(VALID_ORDER_STATUSES as readonly string[]).includes(status)) { + throw new ApiError( + 400, + 'status must be one of PENDING, CONFIRMED, PROCESSING, SHIPPING, DELIVERED, CANCELLED, RETURNED', + ); + } +} + +export type OrderWithRelations = Order & { + shippingAddress: ShippingAddress; + items: OrderItem[]; +}; + +export type CreateOrderInput = { + shippingAddress: { + fullName: string; + phone: string; + addressLine1: string; + addressLine2?: string | null; + city: string; + district: string; + ward: string; + postalCode: string; + }; + orderType: string; + productId?: string | null; + productSlug?: string | null; + size?: string | null; + quantity?: number | null; +}; + +export async function orderById(db: DatabaseClient, id: string) { + return db.order.findUnique({ + where: { id }, + include: { shippingAddress: true, items: true }, + }); +} + +export function toDTO(o: OrderWithRelations) { + return { + id: o.id, + code: o.code, + status: o.status, + paymentStatus: o.paymentStatus, + totalAmount: Number(o.totalAmount), + shippingFee: Number(o.shippingFee), + discountValue: Number(o.discountValue), + shippingAddress: { + fullName: o.shippingAddress.fullName, + phone: o.shippingAddress.phone, + addressLine1: o.shippingAddress.addressLine1, + addressLine2: o.shippingAddress.addressLine2, + city: o.shippingAddress.city, + district: o.shippingAddress.district, + ward: o.shippingAddress.ward, + postalCode: o.shippingAddress.postalCode, + }, + items: o.items.map((it) => ({ + id: it.id, + productId: it.productId, + productSlug: it.productSlug, + productName: it.productName, + size: it.size, + price: Number(it.price), + quantity: it.quantity, + subtotal: Number(it.price) * it.quantity, + })), + createdAt: goTime(o.createdAt), + updatedAt: goTime(o.updatedAt), + }; +} + +function sizeSuffix(size: string | null | undefined): string { + return size ? ` (${size})` : ''; +} + +// ponytail: random #ORD-NNNN with collision retry, mirrors Go generateOrderCode. +async function generateOrderCode(db: DatabaseClient): Promise { + for (let i = 0; i < 10; i++) { + const code = `#ORD-${String(Math.floor(Math.random() * 65536)).padStart(4, '0')}`; + const existing = await db.order.findFirst({ where: { code } }); + if (existing === null) return code; + } + throw new Error('could not generate unique order code'); +} + +export async function createOrder(db: DatabaseClient, userId: string, in1: CreateOrderInput) { + const pending = await db.order.count({ + where: { userId, status: 'PENDING', paymentStatus: 'PENDING' }, + }); + if (pending > 0) { + const first = await db.order.findFirst({ + where: { userId, status: 'PENDING', paymentStatus: 'PENDING' }, + }); + throw new ApiError( + 409, + `You have a pending order. Please complete or cancel it before creating a new one. Order ID: ${first!.id}`, + ); + } + + let total = 0; + const orderItems: Array<{ + id: string; + productId: string | null; + productSlug: ProductSlug; + productName: string; + size: ProductSize | null; + price: Prisma.Decimal; + quantity: number; + }> = []; + const stockItems: StockItem[] = []; + + if (in1.orderType === 'FROM_CART') { + const c = await getOrCreateCart(db, userId); + const items = await db.cartItem.findMany({ + where: { cartId: c.id }, + include: { product: { include: { sizeStocks: true } } }, + }); + if (items.length === 0) throw new ApiError(400, 'Cart is empty'); + for (const ci of items) { + const { stock: available, ok } = availableStock(ci.product, ci.size); + if (!ok || available < ci.quantity) { + throw new ApiError( + 409, + `Insufficient stock for ${ci.product.name}${sizeSuffix(ci.size)}. Available: ${Math.max(0, available)}, Requested: ${ci.quantity}`, + ); + } + total += Number(ci.product.priceCurrent) * ci.quantity; + orderItems.push({ + id: newId(), + productId: ci.productId, + productSlug: ci.product.slug, + productName: ci.product.name, + size: ci.size, + price: new Prisma.Decimal(Number(ci.product.priceCurrent)), + quantity: ci.quantity, + }); + stockItems.push({ + productId: ci.productId, + size: ci.size, + quantity: ci.quantity, + }); + } + } else if (in1.orderType === 'DIRECT_PURCHASE') { + if ( + !in1.productId || + !in1.productSlug || + in1.quantity === undefined || + in1.quantity === null || + in1.quantity <= 0 + ) { + throw new ApiError( + 400, + 'productId, productSlug and quantity are required for direct purchase', + ); + } + const p = await db.product.findUnique({ + where: { id: in1.productId }, + include: { sizeStocks: true }, + }); + if (p === null) { + throw new ApiError(404, `Product with id ${in1.productId} not found`); + } + const { stock: available, ok } = availableStock( + p as unknown as ProductWithSizes, + (in1.size ?? null) as ProductSize | null, + ); + if (!ok || available < in1.quantity) { + throw new ApiError( + 409, + `Insufficient stock for ${p.name}${sizeSuffix(in1.size)}. Available: ${Math.max(0, available)}, Requested: ${in1.quantity}`, + ); + } + total = Number(p.priceCurrent) * in1.quantity; + orderItems.push({ + id: newId(), + productId: in1.productId, + productSlug: in1.productSlug as ProductSlug, + productName: p.name, + size: (in1.size ?? null) as ProductSize | null, + price: new Prisma.Decimal(Number(p.priceCurrent)), + quantity: in1.quantity, + }); + stockItems.push({ + productId: in1.productId, + size: (in1.size ?? null) as ProductSize | null, + quantity: in1.quantity, + }); + } else { + throw new ApiError(400, `Invalid order type: ${in1.orderType}`); + } + + const shippingFee = total >= FREE_SHIPPING_THRESHOLD ? 0 : SHIPPING_FEE; + const finalAmount = total + shippingFee; + const code = await generateOrderCode(db); + const addrId = newId(); + const orderId = newId(); + + await db.$transaction(async (tx) => { + await tx.shippingAddress.create({ + data: { + id: addrId, + fullName: in1.shippingAddress.fullName, + phone: in1.shippingAddress.phone, + addressLine1: in1.shippingAddress.addressLine1, + addressLine2: in1.shippingAddress.addressLine2 ?? null, + city: in1.shippingAddress.city, + district: in1.shippingAddress.district, + ward: in1.shippingAddress.ward, + postalCode: in1.shippingAddress.postalCode, + }, + }); + await tx.order.create({ + data: { + id: orderId, + userId, + code, + totalAmount: new Prisma.Decimal(finalAmount), + shippingFee: new Prisma.Decimal(shippingFee), + discountValue: new Prisma.Decimal(0), + shippingAddressId: addrId, + items: { create: orderItems }, + }, + }); + await reserveStock(tx, stockItems); + }); + + if (in1.orderType === 'FROM_CART') { + try { + await clearCart(db, userId); + } catch (e) { + console.error(`orders: order ${orderId} created but cart clear failed:`, e); + } + } + + const created = await orderById(db, orderId); + if (created === null) throw new Error('order create verify failed'); + return toDTO(created); +} + +export async function listOrders( + db: DatabaseClient, + userId: string, + page: number, + limit: number, + status?: string, +) { + const where = { + userId, + ...(status ? { status: status as Order['status'] } : {}), + }; + const total = await db.order.count({ where }); + const rows = await db.order.findMany({ + where, + orderBy: { createdAt: 'desc' }, + skip: (page - 1) * limit, + take: limit, + include: { shippingAddress: true, items: true }, + }); + return { orders: rows.map(toDTO), total }; +} + +export async function listAllOrders( + db: DatabaseClient, + page: number, + limit: number, + status?: string, +) { + assertValidStatus(status); + const where = status ? { status: status as Order['status'] } : {}; + const total = await db.order.count({ where }); + const rows = await db.order.findMany({ + where, + orderBy: { createdAt: 'desc' }, + skip: (page - 1) * limit, + take: limit, + include: { shippingAddress: true, items: true }, + }); + return { orders: rows.map(toDTO), total }; +} + +export async function getOrder(db: DatabaseClient, orderID: string, userId: string, role: string) { + const o = await orderById(db, orderID); + if (o === null) throw new ApiError(404, `Order with id ${orderID} not found`); + if (o.userId !== userId && role !== 'ADMIN') { + throw new ApiError(403, 'Order does not belong to user'); + } + return toDTO(o); +} + +export async function cancelOrder(db: DatabaseClient, orderID: string, userId: string) { + const o = await orderById(db, orderID); + if (o === null) throw new ApiError(404, `Order with id ${orderID} not found`); + if (o.userId !== userId) { + throw new ApiError(403, 'Order does not belong to user'); + } + if (o.status !== 'PENDING') { + throw new ApiError( + 400, + `Cannot cancel order with status ${o.status}. Only PENDING orders can be cancelled.`, + ); + } + const items: StockItem[] = o.items + .filter((it) => it.productId !== null) + .map((it) => ({ + productId: it.productId!, + size: it.size, + quantity: it.quantity, + })); + try { + await db.$transaction(async (tx) => { + const claimed = await tx.order.updateMany({ + where: { id: orderID, status: 'PENDING' }, + data: { status: 'CANCELLED', updatedAt: new Date() }, + }); + if (claimed.count === 0) throw new Error('not-claimed'); + await releaseStock(tx, items); + }); + } catch (e) { + if (e instanceof Error && e.message === 'not-claimed') { + throw new ApiError( + 400, + 'Cannot cancel order with status PENDING. Only PENDING orders can be cancelled.', + ); + } + throw e; + } + const fresh = await orderById(db, orderID); + if (fresh === null) throw new Error('order cancel verify failed'); + return toDTO(fresh); +} + +export async function adminUpdateStatus(db: DatabaseClient, orderID: string, status: string) { + if (!(VALID_ORDER_STATUSES as readonly string[]).includes(status)) { + throw new ApiError( + 400, + 'status must be one of PENDING, CONFIRMED, PROCESSING, SHIPPING, DELIVERED, CANCELLED, RETURNED', + ); + } + const res = await db.order.updateMany({ + where: { id: orderID }, + data: { status: status as Order['status'], updatedAt: new Date() }, + }); + if (res.count === 0) throw new ApiError(404, `Order with id ${orderID} not found`); + const o = await orderById(db, orderID); + if (o === null) throw new Error('order status verify failed'); + return toDTO(o); +} + +export async function markPaidOrder(db: DatabaseClient, orderID: string) { + const order = await db.order.findUnique({ where: { id: orderID } }); + if (order === null) throw new ApiError(404, `Order with id ${orderID} not found`); + if (order.paymentStatus === 'PAID') { + throw new ApiError(409, 'Order is already paid'); + } + const claimed = await settleOrder(db, { orderId: orderID, paid: true, txStatus: 'PAID' }); + if (!claimed) { + throw new ApiError( + 409, + `Cannot mark paid order with status ${order.status}. Only PENDING orders can be marked paid.`, + ); + } +} + +// NestJS OrderExpirationScheduler equivalent: PENDING+PENDING older than ORDER_EXPIRY_MS -> CANCELLED/FAILED + release stock. +export async function sweepExpiredOrders(db: DatabaseClient): Promise { + const cutoff = new Date(Date.now() - ORDER_EXPIRY_MS); + const rows = await db.order.findMany({ + where: { + status: 'PENDING', + paymentStatus: 'PENDING', + createdAt: { lt: cutoff }, + }, + }); + let n = 0; + for (const o of rows) { + try { + if (await settleOrder(db, { orderId: o.id, paid: false })) { + n += 1; + console.warn(`orders: expired ${o.id} (${o.code}), stock restored`); + } + } catch (e) { + console.error(`orders: expire ${o.id} failed:`, e); + } + } + return n; +} diff --git a/apps/api-effect/src/lib/password.ts b/apps/api-effect/src/lib/password.ts new file mode 100644 index 00000000..231a1f1e --- /dev/null +++ b/apps/api-effect/src/lib/password.ts @@ -0,0 +1,20 @@ +import { hash, verify } from 'argon2'; + +export async function hashPassword(password: string): Promise { + // ponytail: node emits m=,p=,t= but Go's strict Sscanf wants m=,t=,p=; reorder post-hash. + const raw = await hash(password, { + memoryCost: 19456, + timeCost: 2, + parallelism: 1, + hashLength: 32, + }); + return raw.replace(/(m=\d+,)p=(\d+),t=(\d+)/, '$1t=$3,p=$2'); +} + +export async function verifyPassword(hashed: string, password: string): Promise { + try { + return await verify(hashed, password); + } catch { + return false; + } +} diff --git a/apps/api-effect/src/lib/payments.test.ts b/apps/api-effect/src/lib/payments.test.ts new file mode 100644 index 00000000..511c3a1f --- /dev/null +++ b/apps/api-effect/src/lib/payments.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, test } from 'bun:test'; +import { Prisma } from '../generated/prisma/client'; + +import { ApiError } from './errors'; +import { createLinkForOrder } from './payments'; +import { makePrismaFake } from '../test/prisma-fake'; + +function seedOrder(overrides: Record = {}) { + const now = new Date('2026-08-31T00:00:00Z'); + return { + id: 'o1', + code: '#ORD-0001', + userId: 'u1', + status: 'PENDING', + paymentStatus: 'PENDING', + totalAmount: new Prisma.Decimal(230000), + shippingFee: new Prisma.Decimal(30000), + discountValue: new Prisma.Decimal(0), + createdAt: now, + updatedAt: now, + ...overrides, + }; +} + +describe('createLinkForOrder', () => { + test('rejects with 404 for an unknown order', async () => { + const db = makePrismaFake({}); + + const err = await createLinkForOrder(db, 'nope').catch((e) => e); + expect(err).toBeInstanceOf(ApiError); + expect(err).toMatchObject({ status: 404 }); + }); + + test('rejects with 409 when the order is already paid', async () => { + const db = makePrismaFake({ + order: [seedOrder({ paymentStatus: 'PAID' })], + }); + + const err = await createLinkForOrder(db, 'o1').catch((e) => e); + expect(err).toBeInstanceOf(ApiError); + expect(err).toMatchObject({ status: 409 }); + }); + + test('returns the existing PENDING link without calling PayOS', async () => { + const now = new Date('2026-08-31T00:00:00Z'); + const db = makePrismaFake({ + order: [seedOrder()], + paymentTransaction: [ + { + id: 'ptx1', + orderId: 'o1', + transactionCode: 'pay-link-1', + amount: new Prisma.Decimal(230000), + status: 'PENDING', + paymentUrl: 'https://pay.example/1', + createdAt: now, + updatedAt: now, + }, + ], + }); + + const link = await createLinkForOrder(db, 'o1'); + + expect(link).toEqual({ + paymentUrl: 'https://pay.example/1', + transactionCode: 'pay-link-1', + }); + }); + + test('rejects with 409 when a PENDING transaction has no payment URL', async () => { + const now = new Date('2026-08-31T00:00:00Z'); + const db = makePrismaFake({ + order: [seedOrder()], + paymentTransaction: [ + { + id: 'ptx1', + orderId: 'o1', + transactionCode: 'pay-link-1', + amount: new Prisma.Decimal(230000), + status: 'PENDING', + paymentUrl: null, + createdAt: now, + updatedAt: now, + }, + ], + }); + + const err = await createLinkForOrder(db, 'o1').catch((e) => e); + expect(err).toBeInstanceOf(ApiError); + expect(err).toMatchObject({ status: 409 }); + }); +}); diff --git a/apps/api-effect/src/lib/payments.ts b/apps/api-effect/src/lib/payments.ts new file mode 100644 index 00000000..7a1bd8d2 --- /dev/null +++ b/apps/api-effect/src/lib/payments.ts @@ -0,0 +1,124 @@ +import { Prisma, type Order } from '../generated/prisma/client'; + +import { ApiError } from './errors'; +import { PayosNotConfiguredError, createPaymentLink, verifyWebhookSignature } from './payos'; +import type { DatabaseClient } from './prisma'; +import { settleOrder } from './settle'; +import { newId } from './util'; + +export async function createLinkForOrder(db: DatabaseClient, orderID: string) { + const order = await db.order.findUnique({ + where: { id: orderID }, + include: { items: true }, + }); + if (order === null) throw new ApiError(404, `Order with id ${orderID} not found`); + if (order.paymentStatus === 'PAID') { + throw new ApiError(409, 'Order is already paid'); + } + const existing = await db.paymentTransaction.findFirst({ + where: { orderId: order.id }, + }); + if (existing !== null) { + if ( + existing.status === 'PENDING' && + existing.paymentUrl !== null && + existing.paymentUrl !== '' + ) { + return { + paymentUrl: existing.paymentUrl, + transactionCode: existing.transactionCode, + }; + } + throw new ApiError(409, 'Payment transaction already exists for this order'); + } + const returnUrl = process.env.PAYOS_RETURN_URL ?? ''; + const cancelUrl = process.env.PAYOS_CANCEL_URL ?? ''; + if (returnUrl === '' || cancelUrl === '') { + throw new ApiError(400, 'PAYOS_RETURN_URL and PAYOS_CANCEL_URL must be configured'); + } + const items = order.items.map((it) => ({ + name: it.productName, + quantity: it.quantity, + price: Number(it.price), + })); + // ponytail: Go does ParseInt(code without '#') — "#ORD-0299" fails and yields 0. + const orderCodeNum = Number.parseInt(order.code.replace('#', ''), 10) || 0; + let result: Awaited>; + try { + result = await createPaymentLink( + orderCodeNum, + Number(order.totalAmount), + `Thanh toan ${order.code}`, + returnUrl, + cancelUrl, + items, + ); + } catch (e) { + if (e instanceof PayosNotConfiguredError) throw new ApiError(501, e.message); + throw new ApiError( + 500, + `Failed to create payment link: ${e instanceof Error ? e.message : String(e)}`, + ); + } + await db.paymentTransaction.create({ + data: { + id: newId(), + orderId: order.id, + transactionCode: result.paymentLinkId, + amount: new Prisma.Decimal(Number(order.totalAmount)), + status: 'PENDING', + paymentUrl: result.checkoutUrl, + payosData: result.raw as Prisma.InputJsonValue, + }, + }); + return { paymentUrl: result.checkoutUrl, transactionCode: result.paymentLinkId }; +} + +// Signature gate -> amount gate -> single conditional settle claim. +export async function processWebhook( + db: DatabaseClient, + envelope: Record, +): Promise { + if (!verifyWebhookSignature(envelope)) { + console.error('[SECURITY] invalid webhook signature'); + throw new ApiError(400, 'Invalid webhook signature'); + } + const data: Record = + typeof envelope.data === 'object' && envelope.data !== null + ? (envelope.data as Record) + : {}; + const success = envelope.success === true; + const code = typeof data.code === 'string' ? data.code : ''; + const paymentLinkId = typeof data.paymentLinkId === 'string' ? data.paymentLinkId : ''; + const amount = typeof data.amount === 'number' ? data.amount : 0; + + const tx = await db.paymentTransaction.findFirst({ + where: { transactionCode: paymentLinkId }, + }); + if (tx === null) { + console.warn(`payments: webhook for unknown paymentLinkId ${paymentLinkId} — ignoring`); + return false; + } + const order: Order | null = await db.order.findUnique({ + where: { id: tx.orderId }, + }); + if (order === null) { + // mirrors Go: unknown order row is a hard error (500), not a silent skip + throw new Error(`order ${tx.orderId} not found`); + } + if (amount !== Number(order.totalAmount)) { + // CONTEXT.md invariant: amount mismatch logs and never settles. + console.error( + `[SECURITY] webhook amount ${amount} != order total ${Number(order.totalAmount)} for ${order.code}`, + ); + return false; + } + const claimed = await settleOrder(db, { + orderId: order.id, + paid: success, + txStatus: success ? (code === '00' ? 'PAID' : 'FAILED') : 'CANCELLED', + txId: tx.id, + lostTxStatus: success ? 'FAILED' : 'CANCELLED', + }); + return success && claimed; +} diff --git a/apps/api-effect/src/lib/payos.ts b/apps/api-effect/src/lib/payos.ts new file mode 100644 index 00000000..2f8d5fc6 --- /dev/null +++ b/apps/api-effect/src/lib/payos.ts @@ -0,0 +1,115 @@ +import { createHmac } from 'node:crypto'; + +import { safeEqual } from './util'; + +// PayOS REST client, mirrors api-go payments/payos.go. +// Ponytail: no official PayOS SDK, so call api-merchant.payos.vn directly. + +export type PaymentItem = { name: string; quantity: number; price: number }; + +export class PayosNotConfiguredError extends Error { + constructor() { + super('payments: PAYOS_* env vars not configured'); + this.name = 'PayosNotConfiguredError'; + } +} + +let cfg: { clientId: string; apiKey: string; checksumKey: string } | null | undefined; + +function getConfig() { + if (cfg === undefined) { + cfg = { + clientId: process.env.PAYOS_CLIENT_ID ?? '', + apiKey: process.env.PAYOS_API_KEY ?? '', + checksumKey: process.env.PAYOS_CHECKSUM_KEY ?? '', + }; + } + + return cfg; +} + +export function payosEnabled(): boolean { + const c = getConfig(); + return c !== null && c.clientId !== ''; +} + +export type CreateLinkResult = { + checkoutUrl: string; + paymentLinkId: string; + raw: Record; +}; + +// Mirrors payOS.paymentRequests.create. +export async function createPaymentLink( + orderCodeNum: number, + amount: number, + description: string, + returnUrl: string, + cancelUrl: string, + items: PaymentItem[], +): Promise { + const c = getConfig(); + if (c === null || c.clientId === '') throw new PayosNotConfiguredError(); + + const payload = { + orderCode: orderCodeNum, + amount: Math.trunc(amount), + description, + returnUrl, + cancelUrl, + items, + }; + const resp = await fetch('https://api-merchant.payos.vn/v2/payment-requests', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-client-id': c.clientId, + 'x-api-key': c.apiKey, + }, + body: JSON.stringify(payload), + }); + const out = (await resp.json()) as { code?: string; desc?: string; data?: unknown }; + if (out.code !== '00') { + throw new Error(`payos: ${out.code} ${out.desc ?? ''}`.trimEnd()); + } + + const data = out.data as + | { checkoutUrl?: string; paymentLinkId?: string; orderCode?: number } + | undefined; + let code = data?.paymentLinkId ?? ''; + if (code === '') { + code = String(data?.orderCode ?? ''); + } + return { + checkoutUrl: data?.checkoutUrl ?? '', + paymentLinkId: code, + raw: (out.data as Record) ?? {}, + }; +} + +// Sorts data keys alphabetically and joins key=value pairs. +export function buildCanonicalString(data: Record): string { + return Object.keys(data) + .sort() + .map((k) => `${k}=${jsonValueString(data[k])}`) + .join('&'); +} + +export function verifyWebhookSignature(envelope: Record): boolean { + const c = getConfig(); + if (c === null || c.checksumKey === '') return false; + const sig = typeof envelope.signature === 'string' ? envelope.signature : ''; + const data = envelope.data; + if (sig === '' || typeof data !== 'object' || data === null || Array.isArray(data)) return false; + + const expected = createHmac('sha256', c.checksumKey) + .update(buildCanonicalString(data as Record)) + .digest('hex'); + return safeEqual(expected, sig); +} + +function jsonValueString(v: unknown): string { + if (typeof v === 'string') return v; + if (typeof v === 'number' || typeof v === 'boolean') return String(v); + return JSON.stringify(v) ?? 'null'; +} diff --git a/apps/api-effect/src/lib/prisma.ts b/apps/api-effect/src/lib/prisma.ts new file mode 100644 index 00000000..e665aa32 --- /dev/null +++ b/apps/api-effect/src/lib/prisma.ts @@ -0,0 +1,23 @@ +import { PrismaPg } from '@prisma/adapter-pg'; +import { PrismaClient } from '../generated/prisma/client'; + +// ponytail: Prisma 7's constructor returns a narrower type than the default +// PrismaClient generic; ReturnType keeps the exact instantiated type. +function createClient() { + return new PrismaClient({ + adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL ?? '' }), + log: ['query', 'warn', 'error'], + }); +} + +export type DatabaseClient = ReturnType; + +let client: DatabaseClient | null = null; + +export function db(): DatabaseClient { + if (client === null) { + client = createClient(); + } + + return client; +} diff --git a/apps/api-effect/src/lib/redis.ts b/apps/api-effect/src/lib/redis.ts new file mode 100644 index 00000000..4ac80721 --- /dev/null +++ b/apps/api-effect/src/lib/redis.ts @@ -0,0 +1,51 @@ +import Redis from 'ioredis'; + +export type RedisClient = Redis; + +let ready: Promise | null = null; + +export function getRedis(): Promise { + if (ready === null) { + ready = initRedis(); + } + + return ready; +} + +async function initRedis(): Promise { + const client = new Redis({ + host: process.env.REDIS_HOST ?? 'localhost', + port: Number(process.env.REDIS_PORT ?? 6379), + lazyConnect: true, + maxRetriesPerRequest: 1, + }); + + client.on('error', (error: Error) => { + console.error(`redis: ${error.message}`); + }); + + try { + await race(client.ping(), 2000); + return client; + } catch { + client.disconnect(); + + return null; + } +} + +async function race(promise: Promise, ms: number): Promise { + let timer: ReturnType | undefined; + + const timeout = new Promise((_resolve, reject) => { + timer = setTimeout(() => reject(new Error('timeout')), ms); + }); + + try { + return await Promise.race([promise, timeout]); + } finally { + if (timer !== undefined) { + clearTimeout(timer); + } + } +} diff --git a/apps/api-effect/src/lib/settle.test.ts b/apps/api-effect/src/lib/settle.test.ts new file mode 100644 index 00000000..cfa6ab4c --- /dev/null +++ b/apps/api-effect/src/lib/settle.test.ts @@ -0,0 +1,235 @@ +import { describe, expect, test } from 'bun:test'; +import { Prisma } from '../generated/prisma/client'; + +import { ApiError } from '../lib/errors'; +import { settleOrder } from '../lib/settle'; +import { makePrismaFake } from '../test/prisma-fake'; + +function seedPaidFlow() { + const now = new Date('2026-08-31T00:00:00Z'); + const db = makePrismaFake({ + order: [ + { + id: 'o1', + code: '#ORD-0001', + userId: 'u1', + status: 'PENDING', + paymentStatus: 'PENDING', + totalAmount: new Prisma.Decimal(329000), + shippingFee: new Prisma.Decimal(30000), + discountValue: new Prisma.Decimal(0), + createdAt: now, + updatedAt: now, + }, + ], + orderItem: [ + { + id: 'oi1', + orderId: 'o1', + productId: 'p1', + productSlug: 'AO_THUN', + productName: 'Áo thun', + size: null, + price: new Prisma.Decimal(299000), + quantity: 2, + }, + ], + paymentTransaction: [ + { + id: 'ptx1', + orderId: 'o1', + transactionCode: 'pay-link-1', + amount: new Prisma.Decimal(329000), + status: 'PENDING', + paymentUrl: null, + createdAt: now, + updatedAt: now, + }, + ], + product: [ + { + id: 'p1', + slug: 'AO_THUN', + name: 'Áo thun', + stock: 5, + priceCurrent: new Prisma.Decimal(299000), + hasSizes: false, + }, + ], + }); + return db; +} + +const stateSnapshot = async (db: ReturnType) => + JSON.stringify([ + await db.order.findUnique({ where: { id: 'o1' } }), + await db.paymentTransaction.findUnique({ where: { id: 'ptx1' } }), + await db.product.findUnique({ where: { id: 'p1' } }), + await db.productSizeStock.findFirst({ where: { productId: 'p1' } }), + ]); + +describe('settleOrder', () => { + test('paid: claims the order, marks tx PAID, keeps stock', async () => { + const db = seedPaidFlow(); + + const claimed = await settleOrder(db, { orderId: 'o1', paid: true, txStatus: 'PAID' }); + + expect(claimed).toBe(true); + const order = await db.order.findUnique({ where: { id: 'o1' } }); + expect(order).toMatchObject({ status: 'CONFIRMED', paymentStatus: 'PAID' }); + const tx = await db.paymentTransaction.findUnique({ where: { id: 'ptx1' } }); + expect(tx).toMatchObject({ status: 'PAID' }); + const product = await db.product.findUnique({ where: { id: 'p1' } }); + expect(product?.stock).toBe(5); + }); + + test('second settle loses and writes nothing extra', async () => { + const db = seedPaidFlow(); + await settleOrder(db, { orderId: 'o1', paid: true, txStatus: 'PAID' }); + const afterFirst = await stateSnapshot(db); + + const claimed = await settleOrder(db, { orderId: 'o1', paid: false, txStatus: 'FAILED' }); + + expect(claimed).toBe(false); + expect(await stateSnapshot(db)).toBe(afterFirst); + }); + + test('unpaid: claims, marks tx with given status, releases stock', async () => { + const db = seedPaidFlow(); + + const claimed = await settleOrder(db, { orderId: 'o1', paid: false, txStatus: 'CANCELLED' }); + + expect(claimed).toBe(true); + const order = await db.order.findUnique({ where: { id: 'o1' } }); + expect(order).toMatchObject({ status: 'CANCELLED', paymentStatus: 'FAILED' }); + const tx = await db.paymentTransaction.findUnique({ where: { id: 'ptx1' } }); + expect(tx).toMatchObject({ status: 'CANCELLED' }); + const product = await db.product.findUnique({ where: { id: 'p1' } }); + expect(product?.stock).toBe(7); + }); + + test('unpaid with sized item: releases size row and product total', async () => { + const now = new Date('2026-08-31T00:00:00Z'); + const db = makePrismaFake({ + order: [ + { + id: 'o1', + code: '#ORD-0002', + userId: 'u1', + status: 'PENDING', + paymentStatus: 'PENDING', + totalAmount: new Prisma.Decimal(400000), + shippingFee: new Prisma.Decimal(0), + discountValue: new Prisma.Decimal(0), + createdAt: now, + updatedAt: now, + }, + ], + orderItem: [ + { + id: 'oi1', + orderId: 'o1', + productId: 'p1', + productSlug: 'AO_THUN', + productName: 'Áo thun', + size: 'M', + price: new Prisma.Decimal(200000), + quantity: 2, + }, + ], + paymentTransaction: [ + { + id: 'ptx1', + orderId: 'o1', + transactionCode: 'pay-link-2', + amount: new Prisma.Decimal(400000), + status: 'PENDING', + paymentUrl: null, + createdAt: now, + updatedAt: now, + }, + ], + product: [ + { + id: 'p1', + slug: 'AO_THUN', + name: 'Áo thun', + stock: 10, + priceCurrent: new Prisma.Decimal(200000), + hasSizes: true, + }, + ], + productSizeStock: [{ id: 'pss1', productId: 'p1', size: 'M', stock: 3 }], + }); + + const claimed = await settleOrder(db, { orderId: 'o1', paid: false, txStatus: 'FAILED' }); + + expect(claimed).toBe(true); + const size = await db.productSizeStock.findUnique({ + where: { productId_size: { productId: 'p1', size: 'M' } }, + }); + expect(size?.stock).toBe(5); + const product = await db.product.findUnique({ where: { id: 'p1' } }); + expect(product?.stock).toBe(12); + }); + + test('txId: marks only the matched tx row, leaves older rows', async () => { + const db = seedPaidFlow(); + (db.paymentTransaction as { createMany: (a: unknown) => Promise }).createMany({ + data: [ + { + id: 'ptx0', + orderId: 'o1', + transactionCode: 'pay-link-0', + amount: new Prisma.Decimal(329000), + status: 'CANCELLED', + paymentUrl: null, + }, + ], + }); + + const claimed = await settleOrder(db, { + orderId: 'o1', + paid: true, + txStatus: 'PAID', + txId: 'ptx1', + }); + + expect(claimed).toBe(true); + const target = await db.paymentTransaction.findUnique({ where: { id: 'ptx1' } }); + expect(target).toMatchObject({ status: 'PAID' }); + const older = await db.paymentTransaction.findUnique({ where: { id: 'ptx0' } }); + expect(older).toMatchObject({ status: 'CANCELLED' }); + }); + + test('lost claim: marks tx with lostTxStatus, leaves order and stock untouched', async () => { + const db = seedPaidFlow(); + await settleOrder(db, { orderId: 'o1', paid: true, txStatus: 'PAID' }); + const orderAfter = JSON.stringify(await db.order.findUnique({ where: { id: 'o1' } })); + const stockAfter = JSON.stringify(await db.product.findUnique({ where: { id: 'p1' } })); + + const claimed = await settleOrder(db, { + orderId: 'o1', + paid: false, + txStatus: 'CANCELLED', + txId: 'ptx1', + lostTxStatus: 'CANCELLED', + }); + + expect(claimed).toBe(false); + expect(JSON.stringify(await db.order.findUnique({ where: { id: 'o1' } }))).toBe(orderAfter); + expect(JSON.stringify(await db.product.findUnique({ where: { id: 'p1' } }))).toBe(stockAfter); + const tx = await db.paymentTransaction.findUnique({ where: { id: 'ptx1' } }); + expect(tx).toMatchObject({ status: 'CANCELLED' }); + }); + + test('unknown order: rejects with 404', async () => { + const db = seedPaidFlow(); + + const err = await settleOrder(db, { orderId: 'nope', paid: true, txStatus: 'PAID' }).catch( + (e: unknown) => e, + ); + expect(err).toBeInstanceOf(ApiError); + expect((err as ApiError).status).toBe(404); + }); +}); diff --git a/apps/api-effect/src/lib/settle.ts b/apps/api-effect/src/lib/settle.ts new file mode 100644 index 00000000..f1dbfd6f --- /dev/null +++ b/apps/api-effect/src/lib/settle.ts @@ -0,0 +1,124 @@ +import { Prisma, type ProductSize } from '../generated/prisma/client'; + +import { ApiError } from './errors'; +import type { DatabaseClient } from './prisma'; + +// PENDING orders auto-cancel after this; sweep runs every 5 min (index.ts). +export const ORDER_EXPIRY_MS = 15 * 60 * 1000; + +export type StockItem = { + productId: string; + size: ProductSize | null; + quantity: number; +}; + +export type TxStatus = 'PAID' | 'FAILED' | 'CANCELLED'; + +// Conditional decrement — WHERE stock >= qty makes oversell impossible. +export async function reserveStock( + tx: Prisma.TransactionClient, + items: StockItem[], +): Promise { + for (const it of items) { + if (it.size === null) { + const res = await tx.product.updateMany({ + where: { id: it.productId, stock: { gte: it.quantity } }, + data: { stock: { decrement: it.quantity }, updatedAt: new Date() }, + }); + if (res.count === 0) { + throw new ApiError(409, `Insufficient stock for product ${it.productId}`); + } + continue; + } + const res = await tx.productSizeStock.updateMany({ + where: { productId: it.productId, size: it.size }, + data: { stock: { decrement: it.quantity }, updatedAt: new Date() }, + }); + if (res.count === 0) { + throw new ApiError(409, `Insufficient stock for size ${it.size} of product ${it.productId}`); + } + await tx.product.update({ + where: { id: it.productId }, + data: { stock: { decrement: it.quantity }, updatedAt: new Date() }, + }); + } +} + +export async function releaseStock( + tx: Prisma.TransactionClient, + items: StockItem[], +): Promise { + for (const it of items) { + if (it.size === null) { + await tx.product.update({ + where: { id: it.productId }, + data: { stock: { increment: it.quantity }, updatedAt: new Date() }, + }); + continue; + } + await tx.productSizeStock.update({ + where: { productId_size: { productId: it.productId, size: it.size } }, + data: { stock: { increment: it.quantity }, updatedAt: new Date() }, + }); + await tx.product.update({ + where: { id: it.productId }, + data: { stock: { increment: it.quantity }, updatedAt: new Date() }, + }); + } +} + +// Settle-once: claims PENDING -> CONFIRMED/PAID or CANCELLED/FAILED atomically, +// marks the payment transaction, releases reserved stock when not paid. +// Returns false when another settle already claimed the order; when the claim +// is lost and txId+lostTxStatus are given, the tx row is still marked +// lostTxStatus so it never stays PENDING (webhook bookkeeping). +export async function settleOrder( + db: DatabaseClient, + opts: { + orderId: string; + paid: boolean; + txStatus?: TxStatus; + txId?: string; + lostTxStatus?: TxStatus; + }, +): Promise { + const order = await db.order.findUnique({ + where: { id: opts.orderId }, + include: { items: true }, + }); + if (order === null) { + throw new ApiError(404, `Order with id ${opts.orderId} not found`); + } + const items: StockItem[] = order.items + .filter((it) => it.productId !== null) + .map((it) => ({ + productId: it.productId!, + size: it.size, + quantity: it.quantity, + })); + return db.$transaction(async (tx) => { + const claimed = await tx.order.updateMany({ + where: { id: opts.orderId, status: 'PENDING' }, + data: opts.paid + ? { status: 'CONFIRMED', paymentStatus: 'PAID', updatedAt: new Date() } + : { status: 'CANCELLED', paymentStatus: 'FAILED', updatedAt: new Date() }, + }); + if (claimed.count === 0) { + if (opts.txId !== undefined && opts.lostTxStatus !== undefined) { + await tx.paymentTransaction.updateMany({ + where: { id: opts.txId }, + data: { status: opts.lostTxStatus, updatedAt: new Date() }, + }); + } + return false; + } + if (opts.txStatus !== undefined) { + await tx.paymentTransaction.updateMany({ + where: opts.txId !== undefined ? { id: opts.txId } : { orderId: opts.orderId }, + data: { status: opts.txStatus, updatedAt: new Date() }, + }); + } + if (!opts.paid) await releaseStock(tx, items); + return true; + }); +} diff --git a/apps/api-effect/src/lib/storage.ts b/apps/api-effect/src/lib/storage.ts new file mode 100644 index 00000000..2e64c5e0 --- /dev/null +++ b/apps/api-effect/src/lib/storage.ts @@ -0,0 +1,83 @@ +import { + DeleteObjectCommand, + GetObjectCommand, + PutObjectCommand, + S3Client, +} from '@aws-sdk/client-s3'; + +// Cloudflare R2 via S3, mirrors api-go storage.go. +// null = not configured; ErrUnavailable-style errors make callers degrade. + +export class StorageUnavailableError extends Error { + constructor() { + super('storage: R2_* env vars not configured'); + this.name = 'StorageUnavailableError'; + } +} + +type ClientOptions = { + client: S3Client; + bucket: string; + publicUrl: string; +}; + +let state: ClientOptions | null | undefined; + +function getClient(): ClientOptions | null { + if (state === undefined) { + state = null; + const key = process.env.R2_ACCESS_KEY_ID; + if (key !== undefined && key !== '') { + const bucket = process.env.R2_BUCKET_NAME ?? ''; + state = { + client: new S3Client({ + region: 'auto', + endpoint: process.env.R2_ENDPOINT, + credentials: { + accessKeyId: key, + secretAccessKey: process.env.R2_SECRET_ACCESS_KEY ?? '', + }, + }), + bucket, + publicUrl: (process.env.R2_PUBLIC_URL ?? '').replace(/\/+$/, ''), + }; + } + } + + return state; +} + +export function storageEnabled(): boolean { + return getClient() !== null; +} + +// Absolute URLs pass through; bare R2 keys get the public base prepended. +export function resolveMediaUrl(ref: string): string { + if (ref === '') return ''; + const cfg = getClient(); + if (ref.includes('://') || cfg === null || cfg.publicUrl === '') return ref; + return `${cfg.publicUrl}/${ref}`; +} + +export async function getObject(key: string): Promise { + const cfg = getClient(); + if (cfg === null) throw new StorageUnavailableError(); + const res = await cfg.client.send(new GetObjectCommand({ Bucket: cfg.bucket, Key: key })); + if (res.Body === undefined) throw new Error('storage: empty object body'); + const bytes = new Uint8Array(await res.Body.transformToByteArray()); + return bytes; +} + +export async function putObject(key: string, body: Uint8Array, contentType: string): Promise { + const cfg = getClient(); + if (cfg === null) throw new StorageUnavailableError(); + await cfg.client.send( + new PutObjectCommand({ Bucket: cfg.bucket, Key: key, Body: body, ContentType: contentType }), + ); +} + +export async function deleteObject(key: string): Promise { + const cfg = getClient(); + if (cfg === null) throw new StorageUnavailableError(); + await cfg.client.send(new DeleteObjectCommand({ Bucket: cfg.bucket, Key: key })); +} diff --git a/apps/api-effect/src/lib/throttle.ts b/apps/api-effect/src/lib/throttle.ts new file mode 100644 index 00000000..7747c5d0 --- /dev/null +++ b/apps/api-effect/src/lib/throttle.ts @@ -0,0 +1,51 @@ +import { ApiError } from './errors'; +import { getRedis } from './redis'; + +// Fixed-window counter per key, mirrors api-go throttle.go. +// ponytail: global fixed window per path+ip, not a per-route config tree. +// key uses the route pattern (Go c.FullPath()), not the concrete path. + +type Throttleable = { + path: string; + request: Request; +}; + +export type Throttler = (limit: number) => (ctx: Throttleable) => Promise; + +let ready: Promise | null = null; + +export function getThrottler(): Promise { + if (ready === null) { + ready = initThrottler(); + } + + return ready; +} + +async function initThrottler(): Promise { + const redis = await getRedis(); + + if (redis === null) { + return null; + } + + return (limit: number) => async (ctx: Throttleable) => { + const key = `throttle:${ctx.path}:${clientIp(ctx.request)}:${Math.floor(Date.now() / 60000)}`; + const n = await redis.incr(key); + if (n === 1) { + await redis.expire(key, 60); + } + if (n > limit) { + throw new ApiError(429, 'ThrottlerException: Too Many Requests'); + } + }; +} + +export function clientIp(request: Request): string { + const forwarded = request.headers.get('x-forwarded-for'); + if (forwarded !== null && forwarded !== '') { + return forwarded.split(',')[0]!.trim(); + } + + return 'unknown'; +} diff --git a/apps/api-effect/src/lib/totp.ts b/apps/api-effect/src/lib/totp.ts new file mode 100644 index 00000000..c378e657 --- /dev/null +++ b/apps/api-effect/src/lib/totp.ts @@ -0,0 +1,35 @@ +import { randomInt } from 'node:crypto'; + +import { toDataURL } from 'qrcode'; +// ponytail: named imports break at runtime — speakeasy's CJS functions use `this`, +// so call through the module namespace (Bun default import = module.exports). +import speakeasy from 'speakeasy'; + +export function generateTotpSecret(): string { + return speakeasy.generateSecret({ length: 32 }).base32; +} + +export function verifyTotp(secret: string, code: string): boolean { + return speakeasy.totp.verify({ secret, token: code, encoding: 'base32', window: 2 }); +} + +export function generateBackupCodes(count: number): string[] { + const codes: string[] = []; + for (let i = 0; i < count; i += 1) { + codes.push(String(10000000 + randomInt(0, 90000000)).padStart(8, '0')); + } + return codes; +} + +// ponytail: mirrors Go's urlEscape (ReplaceAll of : @ and space). +function urlEscape(value: string): string { + return value.replaceAll(':', '%3A').replaceAll('@', '%40').replaceAll(' ', '%20'); +} + +export function otpauthUrl(email: string, secret: string): string { + return `otpauth://totp/WebDev%20Studios:${urlEscape(email)}?secret=${secret}&issuer=WebDev%20Studios&period=30&digits=6`; +} + +export function toQrDataUrl(text: string): Promise { + return toDataURL(text, { width: 256, margin: 1 }); +} diff --git a/apps/api-effect/src/lib/util.ts b/apps/api-effect/src/lib/util.ts new file mode 100644 index 00000000..260a6569 --- /dev/null +++ b/apps/api-effect/src/lib/util.ts @@ -0,0 +1,75 @@ +import { createHash, randomBytes, randomUUID, timingSafeEqual } from 'node:crypto'; + +export function newId(): string { + return randomBytes(12).toString('hex'); +} + +export function newUuid(): string { + return randomUUID(); +} + +export function randomHex(byteLength: number): string { + return randomBytes(byteLength).toString('hex'); +} + +export function sha256Hex(value: string): string { + return createHash('sha256').update(value).digest('hex'); +} + +export function safeEqual(a: string, b: string): boolean { + const bufferA = Buffer.from(a, 'utf8'); + const bufferB = Buffer.from(b, 'utf8'); + + if (bufferA.length !== bufferB.length) { + return false; + } + + return timingSafeEqual(bufferA, bufferB); +} + +export function goTime(value: Date | null): string | null { + if (value === null) { + return null; + } + + const base = value.toISOString().slice(0, 19); + const milliseconds = value.getMilliseconds(); + + if (milliseconds === 0) { + return `${base}Z`; + } + + const fraction = String(milliseconds).padStart(3, '0').replace(/0+$/, ''); + + return `${base}.${fraction}Z`; +} + +export function parseIntDef(value: string | undefined, fallback: number): number { + if (value === undefined) { + return fallback; + } + + const trimmed = value.trim(); + + if (!/^[+-]?\d+$/.test(trimmed)) { + return fallback; + } + + const parsed = Number(trimmed); + + return Number.isSafeInteger(parsed) ? parsed : fallback; +} + +export function paging( + page: string | undefined, + limit: string | undefined, + maxLimit = 100, +): { page: number; limit: number } { + const parsedPage = parseIntDef(page, 1); + const parsedLimit = parseIntDef(limit, 10); + + return { + page: parsedPage >= 1 ? parsedPage : 1, + limit: parsedLimit >= 1 && parsedLimit <= maxLimit ? parsedLimit : 10, + }; +} diff --git a/apps/api-effect/src/lib/validate.ts b/apps/api-effect/src/lib/validate.ts new file mode 100644 index 00000000..aed1a2bc --- /dev/null +++ b/apps/api-effect/src/lib/validate.ts @@ -0,0 +1,236 @@ +import { ApiError } from './errors'; + +export interface FieldDef { + type: 'string' | 'number' | 'boolean' | 'object' | 'array'; + // Go int field: fractional numbers fail decode like Go's "cannot unmarshal number 1.5 into ... int". + integer?: boolean; + required?: boolean; + email?: boolean; + min?: number; + max?: number; + minLen?: number; + maxLen?: number; + oneOf?: readonly string[]; + // Go binding:"omitempty,..." — zero values ("" 0 false) skip the other constraints. + omitempty?: boolean; + // Nested object; keys are Go field names (FullName -> JSON key fullName). + fields?: Record; + items?: FieldDef; +} + +// ponytail: pragmatic email check; Go uses go-playground's longer RFC-ish regex. +const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + +export async function readJsonBody(request: Request): Promise> { + const text = await request.text(); + if (text.trim() === '') { + // ponytail: mirrors Go json.Decoder returning EOF on an empty body. + throw new ApiError(400, ['EOF']); + } + + let parsed: unknown; + try { + parsed = JSON.parse(text); + } catch { + throw new ApiError(400, ['Malformed JSON body']); + } + + if (parsed === null) return {}; + + if (typeof parsed !== 'object' || Array.isArray(parsed)) { + // ponytail: Go's web.Bind panics here (empty field path) and gin recovery 500s; 400 is saner. + throw new ApiError(400, [`property must be a ${jsonKind(parsed)}`]); + } + + return parsed as Record; +} + +export function bindBody(raw: Record, fields: Record): T { + checkDecode(raw, fields); + + const messages: string[] = []; + for (const [name, def] of Object.entries(fields)) { + collect(name, def, raw[jsonKey(name)], messages); + } + + if (messages.length > 0) throw new ApiError(400, messages); + return raw as T; +} + +export async function bindJson( + ctx: { request: Request }, + fields: Record, +): Promise { + const raw = await readJsonBody(ctx.request); + return bindBody(raw, fields); +} + +// Mirrors Go json.Decode with DisallowUnknownFields: the first decode error in +// document order wins, unknown keys reported by raw JSON key. +function checkDecode(object: Record, fields: Record): void { + for (const [key, value] of Object.entries(object)) { + const def = findField(fields, key); + if (def === undefined) { + throw new ApiError(400, [`property ${key} should not exist`]); + } + if (value !== null && value !== undefined) { + const mismatch = typeMismatchMessage(key, def, value); + if (mismatch !== null) throw new ApiError(400, [mismatch]); + if ( + def.type === 'object' && + def.fields !== undefined && + typeof value === 'object' && + !Array.isArray(value) + ) { + checkDecode(value as Record, def.fields); + } + } + } +} + +function findField(fields: Record, key: string): FieldDef | undefined { + for (const [name, def] of Object.entries(fields)) { + if (jsonKey(name) === key) return def; + } + return undefined; +} + +// Constraint pass, declaration order. Go's FieldError.Field() is the leaf name +// only, so nested failures read "phone should not be empty" without a prefix. +function collect(name: string, def: FieldDef, value: unknown, out: string[]): void { + if (value === null || value === undefined) { + if (def.required) out.push(`${jsonKey(name)} should not be empty`); + // Go validates inner fields even when the nested struct is absent/zero + // (unless the struct itself is required and zero, which reports once). + if (def.type === 'object' && def.fields !== undefined && !def.required) { + for (const [subName, subDef] of Object.entries(def.fields)) { + collect(subName, subDef, undefined, out); + } + } + return; + } + if (def.omitempty && (value === '' || value === 0 || value === false)) return; + + if ( + def.type === 'object' && + def.fields !== undefined && + typeof value === 'object' && + !Array.isArray(value) + ) { + const obj = value as Record; + // Go WithRequiredStructEnabled: a `required` zero struct fails once with + // "should not be empty" and its inner fields are skipped; a zero struct + // without `required` still validates its inner fields. + if (isZeroStruct(obj, def.fields) && def.required) { + out.push(`${jsonKey(name)} should not be empty`); + return; + } + for (const [subName, subDef] of Object.entries(def.fields)) { + collect(subName, subDef, obj[jsonKey(subName)], out); + } + return; + } + + // Go `required` fails on any zero value; the first failing tag per field wins. + if (def.required) { + const zero = + value === '' || + value === 0 || + value === false || + (Array.isArray(value) && value.length === 0); + if (zero) { + out.push(`${jsonKey(name)} should not be empty`); + return; + } + } + + if (def.type === 'string' && typeof value === 'string') { + if (def.email && !EMAIL_RE.test(value)) { + out.push(`${jsonKey(name)} must be an email`); + return; + } + if (def.minLen !== undefined && value.length < def.minLen) { + out.push(`${jsonKey(name)} must be longer than or equal to ${def.minLen} characters`); + return; + } + if (def.maxLen !== undefined && value.length > def.maxLen) { + out.push(`${jsonKey(name)} must be shorter than or equal to ${def.maxLen} characters`); + return; + } + if (def.oneOf !== undefined && !def.oneOf.includes(value)) { + out.push(`${jsonKey(name)} must be one of the following values: ${def.oneOf.join(' ')}`); + } + } else if (def.type === 'number' && typeof value === 'number') { + if (def.min !== undefined && value < def.min) { + out.push(`${jsonKey(name)} must not be less than ${def.min}`); + return; + } + if (def.max !== undefined && value > def.max) { + out.push(`${jsonKey(name)} must not be greater than ${def.max}`); + } + } +} + +function isZeroStruct(obj: Record, fields: Record): boolean { + for (const name of Object.keys(fields)) { + const v = obj[jsonKey(name)]; + if (v !== undefined && v !== null && v !== '' && v !== 0 && v !== false) return false; + } + return true; +} + +function typeMismatchMessage(key: string, def: FieldDef, value: unknown): string | null { + switch (def.type) { + case 'string': + if (typeof value === 'string') return null; + break; + case 'number': + if (typeof value !== 'number') break; + if (def.integer && !Number.isInteger(value)) + return `property ${jsonKey(key)} must be a number`; + return null; + case 'boolean': + if (typeof value === 'boolean') return null; + break; + case 'object': + if (typeof value === 'object' && !Array.isArray(value)) return null; + break; + case 'array': + if (Array.isArray(value)) return null; + break; + } + return `property ${jsonKey(key)} must be a ${jsonKind(value)}`; +} + +// Mirrors Go web.Bind into map[string]any — Go emits []string for bind errors. +export async function readJsonObject(request: Request): Promise> { + const text = await request.text(); + if (text.trim() === '') { + throw new ApiError(400, ['EOF']); + } + let parsed: unknown; + try { + parsed = JSON.parse(text); + } catch { + throw new ApiError(400, ['Malformed JSON body']); + } + if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) { + throw new ApiError(400, [ + `json: cannot unmarshal ${Array.isArray(parsed) ? 'array' : typeof parsed} into Go value of type map[string]interface {}`, + ]); + } + return parsed as Record; +} + +export function jsonKey(goFieldName: string): string { + return goFieldName === '' ? goFieldName : goFieldName[0]!.toLowerCase() + goFieldName.slice(1); +} + +function jsonKind(value: unknown): string { + if (typeof value === 'string') return 'string'; + if (typeof value === 'number') return 'number'; + if (typeof value === 'boolean') return 'boolean'; + if (Array.isArray(value)) return 'array'; + if (value === null) return 'null'; + return 'object'; +} diff --git a/apps/api-effect/src/routes/auth.ts b/apps/api-effect/src/routes/auth.ts new file mode 100644 index 00000000..ccd18502 --- /dev/null +++ b/apps/api-effect/src/routes/auth.ts @@ -0,0 +1,147 @@ +import { + enable2fa, + loginUser, + logoutUser, + listSessions, + registerUser, + refreshSession, + requestPasswordReset, + resetPassword, + verify2fa, + verifyEmail, + type LoginInput, + type RegisterInput, +} from '../lib/auth-logic'; +import { db } from '../lib/prisma'; +import { ApiError } from '../lib/errors'; +import { clientIp } from '../lib/throttle'; +import { bindBody, bindJson } from '../lib/validate'; +import { clearAuthCookies, requireAuth, setAuthCookies } from '../lib/auth'; +import { route, bodyOf } from '../lib/http'; + +const OAUTH_DEFERRED = (provider: 'google' | 'github') => + new ApiError( + 501, + `OAuth ${provider} requires ${provider.toUpperCase()}_CLIENT_ID / ${provider.toUpperCase()}_CLIENT_SECRET and callback wiring (deferred)`, + ); + +export const authRoutes = [ + route('POST', '/auth/register', async (ctx) => { + const in1 = await bindJson( + { request: ctx.http }, + { + Email: { type: 'string', required: true, email: true }, + Password: { type: 'string', required: true, minLen: 8 }, + FullName: { type: 'string', required: true }, + Phone: { type: 'string' }, + }, + ); + const res = await registerUser(db(), in1); + ctx.status = 201; + return res; + }), + route('POST', '/auth/login', async (ctx) => { + const in1 = await bindJson( + { request: ctx.http }, + { + Email: { type: 'string', required: true, email: true }, + Password: { type: 'string', required: true }, + RememberMe: { type: 'boolean' }, + }, + ); + const result = await loginUser(db(), in1, { + userAgent: ctx.http.headers.get('user-agent') ?? '', + ip: clientIp(ctx.http), + }); + if (result.requires2FA) { + return { user: result.user, requires2FA: true }; + } + setAuthCookies(ctx, result.accessToken, result.refreshToken, result.ttlSeconds); + return { + accessToken: result.accessToken, + refreshToken: result.refreshToken, + ttlSeconds: result.ttlSeconds, + user: result.user, + }; + }), + route('POST', '/auth/refresh', async (ctx) => { + let refreshToken = ''; + const rawText = await ctx.http.text(); + if (rawText.trim() !== '') { + try { + const parsed = JSON.parse(rawText) as { refreshToken?: unknown }; + if (typeof parsed.refreshToken === 'string') refreshToken = parsed.refreshToken; + } catch { + // mirrors Go: ShouldBindJSON errors ignored + } + } + if (refreshToken === '') { + const cookieValue = ctx.cookies.refresh_token; + if (typeof cookieValue === 'string' && cookieValue !== '') refreshToken = cookieValue; + } + const res = await refreshSession(db(), refreshToken); + setAuthCookies(ctx, res.accessToken, res.refreshToken, res.ttlSeconds); + return res; + }), + route('POST', '/auth/logout', async (ctx) => { + const authResult = await requireAuth(ctx); + await logoutUser(db(), authResult.user.id, authResult.sessionId); + clearAuthCookies(ctx); + return { success: true }; + }), + route('GET', '/auth/sessions', async (ctx) => { + const authResult = await requireAuth(ctx); + return listSessions(db(), authResult.user.id); + }), + route('GET', '/auth/verify-email', async (ctx) => { + const token = ctx.query.token; + if (!token) throw new ApiError(400, 'token is required'); + await verifyEmail(db(), token); + return { success: true }; + }), + route('POST', '/auth/password/reset-request', async (ctx) => { + const in1 = await bindJson<{ email?: string }>( + { request: ctx.http }, + { + Email: { type: 'string', required: true, email: true }, + }, + ); + await requestPasswordReset(db(), in1.email!); + return { success: true }; + }), + route('POST', '/auth/password/reset', async (ctx) => { + const in1 = await bindJson<{ token?: string; newPassword?: string }>( + { request: ctx.http }, + { + Token: { type: 'string', required: true }, + NewPassword: { type: 'string', required: true, minLen: 8 }, + }, + ); + await resetPassword(db(), in1.token!, in1.newPassword!); + return { success: true }; + }), + route('POST', '/auth/2fa/enable', async (ctx) => { + const authResult = await requireAuth(ctx); + return enable2fa(db(), authResult.user); + }), + route('POST', '/auth/2fa/verify', async (ctx) => { + const authResult = await requireAuth(ctx); + const in1 = bindBody<{ code?: string }>(await bodyOf(ctx), { + Code: { type: 'string', required: true }, + }); + await verify2fa(db(), authResult.user.id, authResult.sessionId, in1.code!); + return { success: true }; + }), + route('GET', '/auth/oauth/google', async () => { + throw OAUTH_DEFERRED('google'); + }), + route('GET', '/auth/oauth/google/callback', async () => { + throw OAUTH_DEFERRED('google'); + }), + route('GET', '/auth/oauth/github', async () => { + throw OAUTH_DEFERRED('github'); + }), + route('GET', '/auth/oauth/github/callback', async () => { + throw OAUTH_DEFERRED('github'); + }), +]; diff --git a/apps/api-effect/src/routes/blog.ts b/apps/api-effect/src/routes/blog.ts new file mode 100644 index 00000000..b1cf0504 --- /dev/null +++ b/apps/api-effect/src/routes/blog.ts @@ -0,0 +1,246 @@ +import type { BlogPost, User } from '../generated/prisma/client'; +import { ApiError } from '../lib/errors'; +import { db } from '../lib/prisma'; +import { bindBody } from '../lib/validate'; +import { requireAdmin } from '../lib/auth'; +import { goTime, newId, paging } from '../lib/util'; +import { getObject, putObject, deleteObject, StorageUnavailableError } from '../lib/storage'; +import { route } from '../lib/http'; + +type PostRow = BlogPost & { author: User }; + +function toDTO(p: PostRow, content?: string) { + return { + id: p.id, + slug: p.slug, + title: p.title, + contentKey: p.contentKey, + ...(content !== undefined ? { content } : {}), + contentSize: p.contentSize, + excerpt: p.excerpt, + coverImage: p.coverImage, + author: { id: p.author.id, fullName: p.author.fullName, avatar: p.author.avatar }, + isPublished: p.isPublished, + publishedAt: goTime(p.publishedAt), + viewCount: p.viewCount, + metaTitle: p.metaTitle, + metaDescription: p.metaDescription, + createdAt: goTime(p.createdAt), + updatedAt: goTime(p.updatedAt), + }; +} + +// ponytail: mirrors Go extractExcerpt loosely — first ~200 chars, markdown stripped. +function autoExcerpt(content: string): string { + let s = content.replace(/[#*`]/g, '').replace(/\n/g, ' '); + while (s.length > 3 && s[0] === ' ') s = s.slice(1); + if (s.length > 200) s = s.slice(0, 200); + return s; +} + +// Go uses plain `publishedAt DESC` — Postgres nulls-first, so draft posts sort first. +const ORDER = { publishedAt: 'desc' as const }; + +async function fetchPost(idOrSlug: 'id' | 'slug', value: string): Promise { + const p = await db().blogPost.findFirst({ + where: idOrSlug === 'id' ? { id: value } : { slug: value }, + include: { author: true }, + }); + if (p === null) { + throw new ApiError( + 404, + idOrSlug === 'slug' ? `Blog post with slug "${value}" not found` : 'Blog post not found', + ); + } + return p; +} + +async function bodyOf(ctx: { http: Request }): Promise> { + return (await ctx.http.json()) as Record; +} + +export const blogRoutes = [ + route('GET', '/blog/posts', async (ctx) => { + // ponytail: Go blog paging reads `pageSize`, not `limit`. + const { page, limit } = paging(ctx.query.page, ctx.query.pageSize, 100); + const where = { isPublished: true }; + const total = await db().blogPost.count({ where }); + const rows = await db().blogPost.findMany({ + where, + include: { author: true }, + orderBy: ORDER, + skip: (page - 1) * limit, + take: limit, + }); + return { posts: rows.map((r) => toDTO(r)), total }; + }), + route('GET', '/blog/posts/search', async (ctx) => { + const q = ctx.query.q; + if (!q) throw new ApiError(400, 'q is required'); + const { page, limit } = paging(ctx.query.page, ctx.query.pageSize, 100); + const where = { + isPublished: true, + OR: [ + { title: { mode: 'insensitive' as const, contains: q } }, + { excerpt: { mode: 'insensitive' as const, contains: q } }, + ], + }; + const total = await db().blogPost.count({ where }); + const rows = await db().blogPost.findMany({ + where, + include: { author: true }, + orderBy: ORDER, + skip: (page - 1) * limit, + take: limit, + }); + return { posts: rows.map((r) => toDTO(r)), total }; + }), + route('GET', '/blog/posts/admin/all', async (ctx) => { + await requireAdmin(ctx); + const { page, limit } = paging(ctx.query.page, ctx.query.pageSize, 100); + const total = await db().blogPost.count({}); + const rows = await db().blogPost.findMany({ + include: { author: true }, + orderBy: ORDER, + skip: (page - 1) * limit, + take: limit, + }); + return { posts: rows.map((r) => toDTO(r)), total }; + }), + route('POST', '/blog/posts', async (ctx) => { + const auth = await requireAdmin(ctx); + const in1 = bindBody<{ + slug?: string; + title?: string; + content?: string; + excerpt?: string | null; + coverImage?: string | null; + isPublished?: boolean | null; + metaTitle?: string | null; + metaDescription?: string | null; + }>(await bodyOf(ctx), { + Slug: { type: 'string', required: true }, + Title: { type: 'string', required: true, maxLen: 255 }, + Content: { type: 'string', required: true }, + Excerpt: { type: 'string' }, + CoverImage: { type: 'string' }, + IsPublished: { type: 'boolean' }, + MetaTitle: { type: 'string' }, + MetaDescription: { type: 'string' }, + }); + const slug = in1.slug!; + const dup = await db().blogPost.count({ where: { slug } }); + if (dup > 0) { + throw new ApiError(409, `Blog post with slug "${slug}" already exists`); + } + let excerpt = autoExcerpt(in1.content!); + if (typeof in1.excerpt === 'string') excerpt = in1.excerpt; + const published = in1.isPublished === true; + const id = newId(); + const created = await db().blogPost.create({ + data: { + id, + slug, + title: in1.title!, + contentKey: '', + contentSize: in1.content!.length, + excerpt, + coverImage: in1.coverImage ?? null, + authorId: auth.user.id, + isPublished: published, + publishedAt: published ? new Date() : null, + metaTitle: in1.metaTitle ?? null, + metaDescription: in1.metaDescription ?? null, + }, + include: { author: true }, + }); + const key = `blog/posts/${id}/content.md`; + try { + await putObject(key, new TextEncoder().encode(in1.content!), 'text/markdown'); + } catch (e) { + await db() + .blogPost.delete({ where: { id } }) + .catch(() => {}); + throw e instanceof StorageUnavailableError + ? new ApiError(501, e.message) + : new ApiError(500, e instanceof Error ? e.message : String(e)); + } + await db().blogPost.update({ where: { id }, data: { contentKey: key } }); + ctx.status = 201; + return toDTO({ ...created, contentKey: key }); + }), + route('PATCH', '/blog/posts/:id', async (ctx) => { + await requireAdmin(ctx); + const p = await fetchPost('id', ctx.params.id!); + const in1 = bindBody<{ + title?: string | null; + content?: string | null; + excerpt?: string | null; + coverImage?: string | null; + isPublished?: boolean | null; + metaTitle?: string | null; + metaDescription?: string | null; + }>(await bodyOf(ctx), { + Title: { type: 'string' }, + Content: { type: 'string' }, + Excerpt: { type: 'string' }, + CoverImage: { type: 'string' }, + IsPublished: { type: 'boolean' }, + MetaTitle: { type: 'string' }, + MetaDescription: { type: 'string' }, + }); + // Go: all pointer fields; null keys are skipped like missing ones. + const data: Record = {}; + if (typeof in1.title === 'string') data.title = in1.title; + if (typeof in1.excerpt === 'string') data.excerpt = in1.excerpt; + if (typeof in1.coverImage === 'string') data.coverImage = in1.coverImage; + if (typeof in1.metaTitle === 'string') data.metaTitle = in1.metaTitle; + if (typeof in1.metaDescription === 'string') data.metaDescription = in1.metaDescription; + if (in1.isPublished === true && p.publishedAt === null) data.publishedAt = new Date(); + if (typeof in1.isPublished === 'boolean') data.isPublished = in1.isPublished; + if (Object.keys(data).length > 0) { + await db().blogPost.update({ where: { id: p.id }, data }); + } + if (typeof in1.content === 'string') { + try { + await putObject(p.contentKey, new TextEncoder().encode(in1.content), 'text/markdown'); + } catch (e) { + throw e instanceof StorageUnavailableError + ? new ApiError(501, e.message) + : new ApiError(500, e instanceof Error ? e.message : String(e)); + } + await db().blogPost.update({ + where: { id: p.id }, + data: { contentSize: in1.content.length }, + }); + } + const fresh = await fetchPost('id', p.id); + return toDTO(fresh); + }), + route('DELETE', '/blog/posts/:id', async (ctx) => { + await requireAdmin(ctx); + const p = await fetchPost('id', ctx.params.id!); + await db().blogPost.delete({ where: { id: p.id } }); + void deleteObject(p.contentKey).catch(() => {}); + return { success: true }; + }), + route('GET', '/blog/posts/:slug', async (ctx) => { + const p = await fetchPost('slug', ctx.params.slug!); + if (ctx.query.includeContent === 'true') { + let content: string; + try { + content = new TextDecoder().decode(await getObject(p.contentKey)); + } catch (e) { + throw e instanceof StorageUnavailableError + ? new ApiError(501, 'includeContent requires R2_* env vars') + : new ApiError(500, e instanceof Error ? e.message : String(e)); + } + return toDTO(p, content); + } + if (p.isPublished) { + await db() + .$queryRaw`UPDATE "blog_posts" SET "viewCount" = "viewCount" + 1 WHERE "id" = ${p.id}`; + } + return toDTO(p); + }), +]; diff --git a/apps/api-effect/src/routes/cart.ts b/apps/api-effect/src/routes/cart.ts new file mode 100644 index 00000000..c3aa0121 --- /dev/null +++ b/apps/api-effect/src/routes/cart.ts @@ -0,0 +1,56 @@ +import { db } from '../lib/prisma'; +import { + addToCart, + clearCart, + getOrCreateCart, + mapToCartDTO, + removeFromCart, + updateCartItem, +} from '../lib/cart'; +import { bindBody } from '../lib/validate'; +import { requireAuth } from '../lib/auth'; +import { route, bodyOf } from '../lib/http'; + +export const cartRoutes = [ + route('GET', '/cart', async (ctx) => { + const auth = await requireAuth(ctx); + const c = await getOrCreateCart(db(), auth.user.id); + return mapToCartDTO(db(), c.id); + }), + route('POST', '/cart/items', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody<{ productId: string; size?: string; quantity?: number }>( + await bodyOf(ctx), + { + productId: { type: 'string', required: true }, + size: { type: 'string' }, + quantity: { type: 'number', integer: true }, + }, + ); + const dto = await addToCart( + db(), + auth.user.id, + in1.productId, + in1.size ?? null, + in1.quantity ?? 0, + ); + ctx.status = 201; + return dto; + }), + route('PATCH', '/cart/items/:id', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody<{ quantity?: number }>(await bodyOf(ctx), { + quantity: { type: 'number', integer: true }, + }); + return updateCartItem(db(), auth.user.id, ctx.params.id!, in1.quantity ?? 0); + }), + route('DELETE', '/cart/items/:id', async (ctx) => { + const auth = await requireAuth(ctx); + return removeFromCart(db(), auth.user.id, ctx.params.id!); + }), + route('DELETE', '/cart', async (ctx) => { + const auth = await requireAuth(ctx); + const c = await clearCart(db(), auth.user.id); + return mapToCartDTO(db(), c.id); + }), +]; diff --git a/apps/api-effect/src/routes/events.ts b/apps/api-effect/src/routes/events.ts new file mode 100644 index 00000000..ef740f84 --- /dev/null +++ b/apps/api-effect/src/routes/events.ts @@ -0,0 +1,152 @@ +import type { Event, EventType } from '../generated/prisma/client'; +import { ApiError } from '../lib/errors'; +import { db } from '../lib/prisma'; +import { bindBody, readJsonObject } from '../lib/validate'; +import { requireAdmin } from '../lib/auth'; +import { goTime, newId } from '../lib/util'; +import { route, bodyOf } from '../lib/http'; + +// Mirrors events.validTypes +const VALID_TYPES = ['MEETING', 'WORKSHOP', 'SOCIAL', 'COMPETITION', 'SURVEY', 'OTHER']; + +const ISO_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})$/; + +// ponytail: Go's time.Parse(time.RFC3339) is strict; regex + Date.parse is a close approximation. +function parseIso(v: unknown): Date | null { + if (typeof v !== 'string' || !ISO_RE.test(v)) return null; + const t = Date.parse(v); + return Number.isNaN(t) ? null : new Date(t); +} + +function toDTO(e: Event) { + const out: Record = { + id: e.id, + title: e.title, + description: e.description, + startDate: goTime(e.startDate), + endDate: goTime(e.endDate), + location: e.location, + type: e.type, + organizer: e.organizer, + attendees: e.attendees, + surveyLink: e.surveyLink, + createdAt: goTime(e.createdAt), + updatedAt: goTime(e.updatedAt), + }; + if (e.createdBy !== null) out.createdBy = e.createdBy; + return out; +} + +export const eventsRoutes = [ + route('GET', '/events', async (ctx) => { + const where: Record = {}; + const start = parseIso(ctx.query.startDate); + if (start) where.startDate = { gte: start }; + const end = parseIso(ctx.query.endDate); + if (end) where.endDate = { lte: end }; + if (ctx.query.types) { + const types = String(ctx.query.types) + .split(',') + .filter((t) => t !== ''); + if (types.length > 0) where.type = { in: types }; + } + const rows = await db().event.findMany({ where, orderBy: { startDate: 'asc' } }); + return rows.map(toDTO); + }), + route('GET', '/events/:id', async (ctx) => { + const e = await db().event.findUnique({ where: { id: ctx.params.id! } }); + if (e === null) throw new ApiError(404, `Event with ID ${ctx.params.id} not found`); + return toDTO(e); + }), + route('POST', '/events', async (ctx) => { + await requireAdmin(ctx); + const in1 = bindBody<{ + title?: string; + description?: string | null; + startDate?: string; + endDate?: string; + location?: string | null; + type?: string; + organizer?: string | null; + attendees?: number | null; + surveyLink?: string | null; + }>(await bodyOf(ctx), { + Title: { type: 'string', required: true, maxLen: 255 }, + StartDate: { type: 'string', required: true }, + EndDate: { type: 'string', required: true }, + Type: { type: 'string', required: true }, + Description: { type: 'string' }, + Location: { type: 'string' }, + Organizer: { type: 'string' }, + Attendees: { type: 'number', integer: true }, + SurveyLink: { type: 'string' }, + }); + if (!VALID_TYPES.includes(in1.type ?? '')) { + throw new ApiError( + 400, + 'type must be one of MEETING, WORKSHOP, SOCIAL, COMPETITION, SURVEY, OTHER', + ); + } + const sd = parseIso(in1.startDate); + const ed = parseIso(in1.endDate); + if (sd === null || ed === null) { + throw new ApiError(400, 'startDate/endDate must be ISO date strings'); + } + const e = await db().event.create({ + data: { + id: newId(), + title: in1.title!, + description: in1.description ?? null, + startDate: sd, + endDate: ed, + location: in1.location ?? null, + type: in1.type! as EventType, + organizer: in1.organizer ?? null, + attendees: in1.attendees ?? null, + surveyLink: in1.surveyLink ?? null, + }, + }); + ctx.status = 201; + return toDTO(e); + }), + route('PATCH', '/events/:id', async (ctx) => { + await requireAdmin(ctx); + const in1 = await readJsonObject(ctx.http); + const e = await db().event.findUnique({ where: { id: ctx.params.id! } }); + if (e === null) throw new ApiError(404, `Event with ID ${ctx.params.id} not found`); + const updates: Record = {}; + for (const k of ['title', 'description', 'location', 'organizer', 'surveyLink']) { + const v = in1[k]; + if (typeof v === 'string') updates[k] = v; + } + if ('type' in in1) { + const s = typeof in1.type === 'string' ? in1.type : ''; + if (!VALID_TYPES.includes(s)) throw new ApiError(400, 'invalid event type'); + updates.type = s; + } + if ('attendees' in in1) { + // ponytail: mirrors Go `f, _ := v.(float64); int(f)` — non-number zero-fills. + const f = typeof in1.attendees === 'number' ? in1.attendees : 0; + updates.attendees = Math.trunc(f); + } + for (const k of ['startDate', 'endDate']) { + if (k in in1) { + const t = parseIso(in1[k]); + if (t === null) throw new ApiError(400, `${k} must be an ISO date string`); + updates[k] = t; + } + } + if (Object.keys(updates).length > 0) { + updates.updatedAt = new Date(); + const updated = await db().event.update({ where: { id: e.id }, data: updates }); + return toDTO(updated); + } + return toDTO(e); + }), + route('DELETE', '/events/:id', async (ctx) => { + await requireAdmin(ctx); + const res = await db().event.deleteMany({ where: { id: ctx.params.id! } }); + if (res.count === 0) throw new ApiError(404, `Event with ID ${ctx.params.id} not found`); + return { success: true }; + }), +]; diff --git a/apps/api-effect/src/routes/orders.ts b/apps/api-effect/src/routes/orders.ts new file mode 100644 index 00000000..af2ff689 --- /dev/null +++ b/apps/api-effect/src/routes/orders.ts @@ -0,0 +1,86 @@ +import { + adminUpdateStatus, + assertValidStatus, + cancelOrder, + createOrder, + getOrder, + listAllOrders, + listOrders, + markPaidOrder, + type CreateOrderInput, +} from '../lib/orders'; +import { db } from '../lib/prisma'; +import { requireAdmin, requireAuth } from '../lib/auth'; +import { bindBody } from '../lib/validate'; +import { paging } from '../lib/util'; +import { route, bodyOf } from '../lib/http'; + +export const ordersRoutes = [ + route('POST', '/orders', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody(await bodyOf(ctx), { + shippingAddress: { + type: 'object', + required: true, + fields: { + FullName: { type: 'string', required: true, maxLen: 100 }, + Phone: { type: 'string', required: true }, + AddressLine1: { type: 'string', required: true, maxLen: 200 }, + AddressLine2: { type: 'string' }, + City: { type: 'string', required: true, maxLen: 100 }, + District: { type: 'string', required: true, maxLen: 100 }, + Ward: { type: 'string', required: true, maxLen: 100 }, + PostalCode: { type: 'string', required: true }, + }, + }, + orderType: { + type: 'string', + required: true, + oneOf: ['FROM_CART', 'DIRECT_PURCHASE'], + }, + productId: { type: 'string' }, + productSlug: { type: 'string' }, + size: { type: 'string' }, + quantity: { type: 'number', integer: true }, + }); + const dto = await createOrder(db(), auth.user.id, in1); + ctx.status = 201; + return dto; + }), + route('GET', '/orders', async (ctx) => { + const auth = await requireAuth(ctx); + const { page, limit } = paging(ctx.query.page, ctx.query.limit); + assertValidStatus(ctx.query.status); + return listOrders(db(), auth.user.id, page, limit, ctx.query.status); + }), + route('GET', '/orders/:id', async (ctx) => { + const auth = await requireAuth(ctx); + return getOrder(db(), ctx.params.id!, auth.user.id, auth.user.role); + }), + route('PATCH', '/orders/:id/cancel', async (ctx) => { + const auth = await requireAuth(ctx); + return cancelOrder(db(), ctx.params.id!, auth.user.id); + }), + route('GET', '/admin/orders/all', async (ctx) => { + await requireAdmin(ctx); + const { page, limit } = paging(ctx.query.page, ctx.query.limit); + assertValidStatus(ctx.query.status); + return listAllOrders(db(), page, limit, ctx.query.status); + }), + route('GET', '/admin/orders/:id', async (ctx) => { + await requireAdmin(ctx); + return getOrder(db(), ctx.params.id!, '', 'ADMIN'); + }), + route('PATCH', '/admin/orders/:id/status', async (ctx) => { + await requireAdmin(ctx); + const in1 = bindBody<{ status?: string }>(await bodyOf(ctx), { + status: { type: 'string', required: true }, + }); + return adminUpdateStatus(db(), ctx.params.id!, in1.status!); + }), + route('POST', '/admin/orders/:id/mark-paid', async (ctx) => { + await requireAdmin(ctx); + await markPaidOrder(db(), ctx.params.id!); + return { success: true }; + }), +]; diff --git a/apps/api-effect/src/routes/payments.ts b/apps/api-effect/src/routes/payments.ts new file mode 100644 index 00000000..4363d53b --- /dev/null +++ b/apps/api-effect/src/routes/payments.ts @@ -0,0 +1,44 @@ +import { goTime } from '../lib/util'; +import { db } from '../lib/prisma'; +import { createLinkForOrder, processWebhook } from '../lib/payments'; +import { bindBody, readJsonObject } from '../lib/validate'; +import { requireAuth } from '../lib/auth'; +import { route, bodyOf } from '../lib/http'; + +export const paymentsRoutes = [ + route('POST', '/payments/create-link', async (ctx) => { + await requireAuth(ctx); + const in1 = bindBody<{ orderId?: string }>(await bodyOf(ctx), { + OrderID: { type: 'string', required: true }, + }); + const res = await createLinkForOrder(db(), in1.orderId!); + ctx.status = 201; + return res; + }), + route('POST', '/payments/webhook', async (ctx) => { + const envelope = await readJsonObject(ctx.http); + await processWebhook(db(), envelope); + return { success: true }; + }), + route('GET', '/payments/verify/:transactionCode', async (ctx) => ({ + transactionCode: ctx.params.transactionCode, + message: 'Use order endpoint to check status', + })), + route('GET', '/payments/transactions', async (ctx) => { + await requireAuth(ctx); + const rows = await db().paymentTransaction.findMany({ + orderBy: { createdAt: 'desc' }, + take: 100, + }); + return rows.map((t) => ({ + id: t.id, + orderId: t.orderId, + transactionCode: t.transactionCode, + amount: Number(t.amount), + status: t.status, + paymentUrl: t.paymentUrl, + createdAt: goTime(t.createdAt), + updatedAt: goTime(t.updatedAt), + })); + }), +]; diff --git a/apps/api-effect/src/routes/products.ts b/apps/api-effect/src/routes/products.ts new file mode 100644 index 00000000..3fdee0d0 --- /dev/null +++ b/apps/api-effect/src/routes/products.ts @@ -0,0 +1,80 @@ +import type { Product, ProductSizeStock, ProductSlug } from '../generated/prisma/client'; +import { ApiError } from '../lib/errors'; +import { db } from '../lib/prisma'; +import { goTime } from '../lib/util'; +import { route } from '../lib/http'; + +export const VALID_SLUGS = ['AO_THUN', 'PAD_CHUOT', 'DAY_DEO', 'MOC_KHOA'] as const; + +function statusOf(stock: number): string { + if (stock === 0) return 'out_of_stock'; + if (stock < 5) return 'low_stock'; + return 'in_stock'; +} + +type ProductRow = Product & { sizeStocks: ProductSizeStock[] }; + +function toDTO(p: ProductRow) { + let stock = p.stock; + if (p.hasSizes && p.sizeStocks.length > 0) { + stock = p.sizeStocks.reduce((sum, s) => sum + s.stock, 0); + } + return { + id: p.id, + slug: p.slug, + name: p.name, + description: p.description, + priceCurrent: Number(p.priceCurrent), + priceOriginal: p.priceOriginal === null ? null : Number(p.priceOriginal), + priceDiscount: p.priceDiscount === null ? null : Number(p.priceDiscount), + stock: p.stock, + hasSizes: p.hasSizes, + badge: p.badge, + ratingValue: Number(p.ratingValue), + ratingCount: p.ratingCount, + sizeStocks: p.sizeStocks.map((s) => ({ size: s.size, stock: s.stock })), + stockStatus: statusOf(stock), + isPublished: p.isPublished, + createdAt: goTime(p.createdAt), + updatedAt: goTime(p.updatedAt), + }; +} + +async function productBySlug(slug: string): Promise { + if (!(VALID_SLUGS as readonly string[]).includes(slug)) { + throw new ApiError(404, `Product with slug ${slug} not found`); + } + const p = await db().product.findFirst({ + where: { slug: slug as ProductSlug }, + include: { sizeStocks: true }, + }); + if (p === null) throw new ApiError(404, `Product with slug ${slug} not found`); + return p; +} + +export const productsRoutes = [ + route('GET', '/products', async () => { + const rows = await db().product.findMany({ + where: { isPublished: true }, + include: { sizeStocks: true }, + }); + return { products: rows.map(toDTO), total: rows.length }; + }), + route('GET', '/products/:slug', async (ctx) => toDTO(await productBySlug(ctx.params.slug!))), + route('GET', '/products/:slug/stock', async (ctx) => { + const slug = ctx.params.slug!; + const p = await productBySlug(slug); + const size = ctx.query.size ?? ''; + if (!p.hasSizes) { + return { stock: p.stock, stockStatus: statusOf(p.stock), sizeStocks: null }; + } + const sizes = p.sizeStocks.map((s) => ({ size: s.size, stock: s.stock })); + if (size !== '') { + const hit = p.sizeStocks.find((s) => s.size === size); + if (hit === undefined) throw new ApiError(404, `Size ${size} not found for product ${slug}`); + return { stock: hit.stock, stockStatus: statusOf(hit.stock), sizeStocks: sizes }; + } + const total = p.sizeStocks.reduce((sum, s) => sum + s.stock, 0); + return { stock: total, stockStatus: statusOf(total), sizeStocks: sizes }; + }), +]; diff --git a/apps/api-effect/src/routes/reviews.ts b/apps/api-effect/src/routes/reviews.ts new file mode 100644 index 00000000..101ffa95 --- /dev/null +++ b/apps/api-effect/src/routes/reviews.ts @@ -0,0 +1,171 @@ +import { Prisma, type Review, type ProductSlug, type User } from '../generated/prisma/client'; +import { ApiError } from '../lib/errors'; +import { db } from '../lib/prisma'; +import { bindBody } from '../lib/validate'; +import { requireAuth } from '../lib/auth'; +import { goTime, newId, paging } from '../lib/util'; +import { VALID_SLUGS } from './products'; +import { route, bodyOf } from '../lib/http'; + +type ReviewRow = Review & { user: User; product?: { slug: string } }; + +function toDTO(r: ReviewRow, productSlug: ProductSlug | string) { + return { + id: r.id, + rating: r.rating, + comment: r.comment, + userId: r.userId, + userFullName: r.user.fullName ?? 'Anonymous', + userAvatar: r.user.avatar, + productSlug, + createdAt: goTime(r.createdAt), + updatedAt: goTime(r.updatedAt), + }; +} + +async function recomputeRating(productID: string): Promise { + const rows = await db().review.findMany({ + where: { productId: productID }, + select: { rating: true }, + }); + const count = rows.length; + const value = count > 0 ? rows.reduce((sum, r) => sum + r.rating, 0) / count : 0; + await db().product.update({ + where: { id: productID }, + data: { + ratingValue: new Prisma.Decimal(value), + ratingCount: count, + }, + }); +} + +async function ownedReview(reviewID: string, userID: string): Promise { + const review = await db().review.findUnique({ + where: { id: reviewID }, + include: { user: true, product: true }, + }); + if (review === null) { + throw new ApiError(404, `Review with id ${reviewID} not found`); + } + if (review.userId !== userID) { + throw new ApiError(403, 'Review does not belong to user'); + } + return review; +} + +async function createReview(userID: string, slug: string, rating: number, comment: string | null) { + if (!(VALID_SLUGS as readonly string[]).includes(slug)) { + throw new ApiError(404, `Product with slug ${slug} not found`); + } + if (rating < 1 || rating > 5) { + throw new ApiError(400, 'Rating must be between 1 and 5'); + } + const p = await db().product.findFirst({ + where: { slug: slug as ProductSlug }, + }); + if (p === null) throw new ApiError(404, `Product with slug ${slug} not found`); + const existing = await db().review.count({ + where: { userId: userID, productId: p.id }, + }); + if (existing > 0) { + throw new ApiError(409, 'User has already reviewed this product'); + } + // Has-purchase gate: an order item for this slug on a paid, non-cancelled order. + const purchased = await db().orderItem.count({ + where: { + productSlug: slug as ProductSlug, + order: { userId: userID, status: { not: 'CANCELLED' }, paymentStatus: 'PAID' }, + }, + }); + if (purchased === 0) { + throw new ApiError(400, 'You must purchase this product before reviewing'); + } + const review = await db().review.create({ + data: { + id: newId(), + userId: userID, + productId: p.id, + rating, + comment, + }, + include: { user: true }, + }); + await recomputeRating(p.id); + return toDTO(review, p.slug); +} + +export const reviewsRoutes = [ + route('POST', '/products/:slug/reviews', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody<{ rating?: number; comment?: string | null }>(await bodyOf(ctx), { + Rating: { type: 'number', integer: true }, + Comment: { type: 'string' }, + }); + const dto = await createReview( + auth.user.id, + ctx.params.slug!, + in1.rating ?? 0, + in1.comment ?? null, + ); + ctx.status = 201; + return dto; + }), + route('GET', '/products/:slug/reviews', async (ctx) => { + const slug = ctx.params.slug!; + if (!(VALID_SLUGS as readonly string[]).includes(slug)) { + throw new ApiError(404, `Product with slug ${slug} not found`); + } + const { page, limit } = paging(ctx.query.page, ctx.query.limit, 50); + const p = await db().product.findFirst({ where: { slug: slug as ProductSlug } }); + if (p === null) throw new ApiError(404, `Product with slug ${slug} not found`); + const where = { productId: p.id }; + const total = await db().review.count({ where }); + const rows = await db().review.findMany({ + where, + orderBy: { createdAt: 'desc' }, + skip: (page - 1) * limit, + take: limit, + include: { user: true }, + }); + return { + reviews: rows.map((r) => toDTO(r, p.slug)), + total, + page, + limit, + totalPages: Math.ceil(total / limit), + }; + }), + route('PATCH', '/reviews/:id', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody<{ rating?: number; comment?: string | null }>(await bodyOf(ctx), { + Rating: { type: 'number', integer: true }, + Comment: { type: 'string' }, + }); + const review = await ownedReview(ctx.params.id!, auth.user.id); + if (in1.rating !== undefined && (in1.rating < 1 || in1.rating > 5)) { + throw new ApiError(400, 'Rating must be between 1 and 5'); + } + // ponytail: Go treats a null comment as absent (nil pointer → hasComment false). + const data: Record = {}; + if (in1.rating !== undefined) data.rating = in1.rating; + if (typeof in1.comment === 'string') data.comment = in1.comment; + if (Object.keys(data).length > 0) { + await db().review.update({ where: { id: review.id }, data }); + } + await recomputeRating(review.productId); + const fresh = await db().review.findUnique({ + where: { id: review.id }, + include: { user: true, product: true }, + }); + if (fresh === null) throw new Error('review verify failed'); + return toDTO(fresh, fresh.product.slug); + }), + route('DELETE', '/reviews/:id', async (ctx) => { + const auth = await requireAuth(ctx); + const review = await ownedReview(ctx.params.id!, auth.user.id); + const productID = review.productId; + await db().review.delete({ where: { id: review.id } }); + await recomputeRating(productID); + return { success: true }; + }), +]; diff --git a/apps/api-effect/src/routes/users.ts b/apps/api-effect/src/routes/users.ts new file mode 100644 index 00000000..0b58091a --- /dev/null +++ b/apps/api-effect/src/routes/users.ts @@ -0,0 +1,124 @@ +import type { User } from '../generated/prisma/client'; +import { ApiError } from '../lib/errors'; +import { db } from '../lib/prisma'; +import { bindBody } from '../lib/validate'; +import { requireAuth, optionalAuth } from '../lib/auth'; +import { goTime, paging } from '../lib/util'; +import { putObject, resolveMediaUrl, storageEnabled } from '../lib/storage'; +import { route, bodyOf } from '../lib/http'; + +const VALID_ROLES = ['ADMIN', 'CUSTOMER'] as const; + +function privateDTO(u: User) { + return { + id: u.id, + email: u.email, + fullName: u.fullName, + phone: u.phone, + avatar: u.avatar, + role: u.role, + emailVerified: u.emailVerified, + phoneVerified: u.phoneVerified, + mfaEnabled: u.mfaEnabled, + createdAt: goTime(u.createdAt), + updatedAt: goTime(u.updatedAt), + }; +} + +// mirrors users.replyErr: a missing principal is 401 (not 404). +async function byID(id: string): Promise { + const u = await db().user.findUnique({ where: { id } }); + if (u === null) throw new ApiError(401, 'User not found'); + return u; +} + +export const usersRoutes = [ + route('GET', '/users/me', async (ctx) => { + const auth = await requireAuth(ctx); + return privateDTO(auth.user); + }), + route('PATCH', '/users/profile', async (ctx) => { + const auth = await requireAuth(ctx); + const in1 = bindBody<{ fullName?: string; phone?: string }>(await bodyOf(ctx), { + FullName: { type: 'string', omitempty: true, minLen: 1, maxLen: 100 }, + Phone: { type: 'string', omitempty: true, maxLen: 15 }, + }); + const data: Record = {}; + if (in1.fullName !== undefined && in1.fullName !== null) data.fullName = in1.fullName; + if (in1.phone !== undefined && in1.phone !== null) data.phone = in1.phone; + if (Object.keys(data).length > 0) { + await db().user.update({ where: { id: auth.user.id }, data }); + } + const u = await byID(auth.user.id); + return privateDTO(u); + }), + route('PATCH', '/users/avatar', async (ctx) => { + const auth = await requireAuth(ctx); + if (!storageEnabled()) { + throw new ApiError(501, 'avatar upload requires R2_* env vars (storage)'); + } + const form = await ctx.http.formData(); + const file = form.get('file'); + if (!(file instanceof File) || file.size === 0) { + throw new ApiError(400, 'file is required'); + } + if (file.size > 5 * 1024 * 1024) { + throw new ApiError(400, 'File too large. Max 5MB'); + } + let ext: string; + switch (file.type) { + case 'image/jpeg': + ext = 'jpg'; + break; + case 'image/png': + ext = 'png'; + break; + case 'image/webp': + ext = 'webp'; + break; + default: + throw new ApiError(400, 'Only jpg, png, webp images are allowed'); + } + const buf = new Uint8Array(await file.arrayBuffer()); + const key = `avatars/${auth.user.id}/${Math.floor(Date.now() / 1000)}.${ext}`; + await putObject(key, buf, file.type).catch((e: Error) => { + throw new ApiError(500, e.message); + }); + const u = await db().user.update({ where: { id: auth.user.id }, data: { avatar: key } }); + return { ...privateDTO(u), avatar: resolveMediaUrl(u.avatar ?? '') }; + }), + // ponytail: mirrors Go — the list route is auth-only with no admin check. + route('GET', '/users', async (ctx) => { + await requireAuth(ctx); + const { page, limit } = paging(ctx.query.page, ctx.query.limit, 100); + let where: Record = {}; + if (ctx.query.role && ctx.query.role !== '') { + if (!(VALID_ROLES as readonly string[]).includes(ctx.query.role)) { + throw new ApiError(400, 'role must be one of ADMIN, CUSTOMER'); + } + where = { role: ctx.query.role }; + } + const total = await db().user.count({ where }); + const rows = await db().user.findMany({ + where, + orderBy: { createdAt: 'desc' }, + skip: (page - 1) * limit, + take: limit, + }); + return { + users: rows.map(privateDTO), + pagination: { page, limit, total, totalPages: Math.ceil(total / limit) }, + }; + }), + route('GET', '/users/:id', async (ctx) => { + const viewer = await optionalAuth(ctx); + const u = await db().user.findUnique({ where: { id: ctx.params.id! } }); + if (u === null) { + throw new ApiError(404, `User with id ${ctx.params.id} not found`); + } + if (viewer !== null && (viewer.user.id === u.id || viewer.user.role === 'ADMIN')) { + return privateDTO(u); + } + return { id: u.id, fullName: u.fullName, avatar: u.avatar }; + }), +]; diff --git a/apps/api-effect/src/test/prisma-fake.ts b/apps/api-effect/src/test/prisma-fake.ts new file mode 100644 index 00000000..5666c23e --- /dev/null +++ b/apps/api-effect/src/test/prisma-fake.ts @@ -0,0 +1,265 @@ +import type { DatabaseClient } from '../lib/prisma'; + +// ponytail: minimal Prisma-shaped fake — implements only the query shapes the +// domain modules use. Not a general Prisma mock. +export type Row = Record; + +type Where = Record; +type Operators = { gte?: number; gt?: number; lte?: number; lt?: number; in?: unknown[] }; +type CreateData = Record & { items?: Array> }; + +// ponytail: Prisma @default(...) per model, so rows created without a field +// still behave like real Prisma rows. +const MODEL_DEFAULTS: Record> = { + order: { status: 'PENDING', paymentStatus: 'PENDING' }, + paymentTransaction: { status: 'PENDING' }, +}; + +const RELATIONS: Record = { + items: { table: 'orderItem', local: 'orderId', foreign: 'id' }, + product: { table: 'product', local: 'productId', foreign: 'id' }, + sizeStocks: { table: 'productSizeStock', local: 'id', foreign: 'productId' }, + shippingAddress: { table: 'shippingAddress', local: 'id', foreign: 'shippingAddressId' }, + device: { table: 'device', local: 'id', foreign: 'deviceId' }, +}; + +function isOperatorObject(v: unknown): v is Operators { + return ( + v !== null && + typeof v === 'object' && + !Array.isArray(v) && + !(v instanceof Date) && + ['gte', 'gt', 'lte', 'lt', 'in'].some((k) => k in v) + ); +} + +function matches(row: Row, where: Where | undefined): boolean { + if (where === undefined) return true; + for (const [key, cond] of Object.entries(where)) { + const value = row[key]; + if (cond === null) { + if (value !== null && value !== undefined) return false; + continue; + } + if (isOperatorObject(cond)) { + if (typeof value !== 'number') return false; + if (cond.gte !== undefined && value < cond.gte) return false; + if (cond.gt !== undefined && value <= cond.gt) return false; + if (cond.lte !== undefined && value > cond.lte) return false; + if (cond.lt !== undefined && value >= cond.lt) return false; + if (cond.in !== undefined && !cond.in.includes(value)) return false; + continue; + } + if (cond instanceof Date) { + if (!(value instanceof Date) || (value as Date).getTime() !== cond.getTime()) return false; + continue; + } + if (cond !== null && typeof cond === 'object' && !Array.isArray(cond)) { + // composite key lookup, e.g. { productId_size: { productId, size } } + const nested = cond as Record; + for (const [nk, nv] of Object.entries(nested)) { + if (row[nk] !== nv) return false; + } + continue; + } + if (value !== cond) return false; + } + return true; +} + +function applyData(row: Row, data: CreateData): void { + for (const [key, value] of Object.entries(data)) { + if ( + value !== null && + typeof value === 'object' && + !Array.isArray(value) && + ('increment' in value || 'decrement' in value) + ) { + const op = value as { increment?: number; decrement?: number }; + if (op.increment !== undefined || op.decrement !== undefined) { + row[key] = + ((row[key] as number | undefined) ?? 0) + (op.increment ?? 0) - (op.decrement ?? 0); + continue; + } + } + row[key] = value; + } +} + +export function makePrismaFake(seed: Record = {}): DatabaseClient { + const tables: Record = {}; + for (const [name, rows] of Object.entries(seed)) tables[name] = rows.map((r) => ({ ...r })); + + const table = (name: string): Row[] => { + if (tables[name] === undefined) tables[name] = []; + return tables[name]; + }; + + const withInclude = ( + rows: T[], + include: Record | undefined, + ): T[] => { + if (include === undefined) return rows; + for (const [rel, spec] of Object.entries(include)) { + const relDef = RELATIONS[rel]; + if (relDef === undefined) continue; + const nestedInclude = + spec !== null && typeof spec === 'object' + ? (spec as { include?: Record }).include + : undefined; + for (const row of rows) { + const related = table(relDef.table).filter((r) => r[relDef.local] === row[relDef.foreign]); + (row as Record)[rel] = withInclude(related, nestedInclude); + } + } + return rows; + }; + + const filter = (name: string, where?: Where) => table(name).filter((r) => matches(r, where)); + + const orderByRows = (rows: Row[], orderBy: Record | undefined): Row[] => { + if (orderBy === undefined) return rows; + const [[key, dir]] = Object.entries(orderBy); + return [...rows].sort((a, b) => { + const av = a[key] as Date | number | string; + const bv = b[key] as Date | number | string; + const cmp = av < bv ? -1 : av > bv ? 1 : 0; + return dir === 'desc' ? -cmp : cmp; + }); + }; + + const snapshot = () => JSON.parse(JSON.stringify(tables, replacer)) as Record; + function replacer(_k: string, v: unknown): unknown { + if (typeof v === 'object' && v !== null && 'isNaN' in (v as object)) return v.toString(); + return v; + } + const restore = (snap: Record) => { + for (const key of Object.keys(tables)) delete tables[key]; + Object.assign(tables, snap); + }; + + const makeModel = (name: string) => ({ + findUnique: async ({ + where, + include, + }: { + where?: Where; + include?: Record; + }) => { + const rows = withInclude(filter(name, where), include); + return rows[0] ?? null; + }, + findFirst: async ({ + where, + orderBy, + include, + }: { + where?: Where; + orderBy?: Record; + include?: Record; + }) => { + return withInclude(orderByRows(filter(name, where), orderBy), include)[0] ?? null; + }, + findMany: async ({ + where, + orderBy, + skip, + take, + include, + }: { + where?: Where; + orderBy?: Record; + skip?: number; + take?: number; + include?: Record; + }) => { + let rows = orderByRows(filter(name, where), orderBy); + if (skip !== undefined) rows = rows.slice(skip); + if (take !== undefined) rows = rows.slice(0, take); + return withInclude(rows, include); + }, + count: async ({ where }: { where?: Where }) => filter(name, where).length, + create: async ({ data }: { data: CreateData }) => { + // ponytail: mimic Prisma @default(now()) for createdAt/updatedAt + const row: Row = { + createdAt: new Date(), + updatedAt: new Date(), + ...(MODEL_DEFAULTS[name] ?? {}), + id: `auto-${Math.random().toString(36).slice(2)}`, + ...data, + }; + let nestedItems: Row[] | undefined; + if (Array.isArray(row.items)) nestedItems = row.items; + else if (row.items && typeof row.items === 'object') { + nestedItems = (row.items as { create?: Row[] }).create; + } + delete row.items; + table(name).push(row); + if (nestedItems) { + for (const item of nestedItems) table('orderItem').push({ ...item, orderId: data.id }); + } + return { ...row }; + }, + update: async ({ where, data }: { where: Where; data: CreateData }) => { + const row = filter(name, where)[0]; + if (row === undefined) throw new Error(`update: no row found in ${name}`); + applyData(row, data); + return { ...row }; + }, + updateMany: async ({ where, data }: { where: Where; data: CreateData }) => { + const rows = filter(name, where); + for (const row of rows) applyData(row, data); + return { count: rows.length }; + }, + delete: async ({ where }: { where: Where }) => { + const row = filter(name, where)[0]; + if (row === undefined) throw new Error(`delete: no row found in ${name}`); + table(name).splice(table(name).indexOf(row), 1); + return { ...row }; + }, + deleteMany: async ({ where }: { where?: Where }) => { + const kept = table(name).filter((r) => !matches(r, where)); + const count = table(name).length - kept.length; + tables[name] = kept; + return { count }; + }, + createMany: async ({ data }: { data: Row[] }) => { + for (const row of data) table(name).push({ ...row }); + return { count: data.length }; + }, + }); + + const fake: Record = { + $transaction: async (fn: (tx: DatabaseClient) => Promise) => { + const snap = snapshot(); + try { + return await fn(fake as unknown as DatabaseClient); + } finally { + // ponytail: fake "transaction" — always commit; rollback never exercised. + // Good enough: tests assert on committed state after the call. + void snap; + } + }, + }; + + for (const name of [ + 'user', + 'userMFAMethod', + 'mFABackupCode', + 'device', + 'session', + 'product', + 'productSizeStock', + 'cart', + 'cartItem', + 'order', + 'orderItem', + 'paymentTransaction', + 'shippingAddress', + ]) { + fake[name] = makeModel(name); + } + void restore; + + return fake as unknown as DatabaseClient; +} diff --git a/apps/api-effect/tsconfig.json b/apps/api-effect/tsconfig.json new file mode 100644 index 00000000..03e431f8 --- /dev/null +++ b/apps/api-effect/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["bun"], + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "noEmit": true + }, + "include": ["src"] +} diff --git a/bun.lock b/bun.lock index 8fa94adb..89c1021d 100644 --- a/bun.lock +++ b/bun.lock @@ -92,6 +92,32 @@ "name": "api-axum", "version": "1.0.0", }, + "apps/api-effect": { + "name": "api-effect", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-s3": "^3.1120.0", + "@effect/platform-bun": "4.0.0-rc.112", + "@prisma/adapter-pg": "^7.10.0", + "@prisma/client": "^7.10.0", + "@prisma/client-runtime-utils": "^7.10.0", + "argon2": "^0.45.1", + "effect": "4.0.0-rc.112", + "ioredis": "^6.0.0", + "jose": "^6.2.10", + "nodemailer": "^9.0.6", + "qrcode": "^1.5.4", + "speakeasy": "^2.0.0", + }, + "devDependencies": { + "@types/bun": "^1.4.0", + "@types/nodemailer": "^8.0.1", + "@types/qrcode": "^1.5.6", + "@types/speakeasy": "^2.0.10", + "dotenv": "^17.4.2", + "prisma": "^7.8.0", + }, + }, "apps/api-elysia": { "name": "api-elysia", "version": "1.0.0", @@ -379,6 +405,10 @@ "@dabh/diagnostics": ["@dabh/diagnostics@2.0.8", "", { "dependencies": { "@so-ric/colorspace": "1.1.6", "enabled": "2.0.0", "kuler": "2.0.0" } }, "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q=="], + "@effect/platform-bun": ["@effect/platform-bun@4.0.0-rc.112", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-rc.112" }, "peerDependencies": { "effect": "^4.0.0-rc.112" } }, "sha512-Y5n2HhV/vsbrJls9ukX42RL7zqXQxISHegWFsP9njsCyDmGTnq7QYSO82rglwrLPwtTrv5dkSRTuGw4+oXxgMg=="], + + "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-rc.112", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.21.3" }, "peerDependencies": { "effect": "^4.0.0-rc.112" } }, "sha512-ttjz0xKamFN7vL8pNDYVwddJLjZvqKePc05djlz2VcdaKbLsnYbtMnL1rbOfHgEnIUSHGh7FkjaN4DM1Ov81sQ=="], + "@electric-sql/pglite": ["@electric-sql/pglite@0.4.1", "", {}, "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q=="], "@electric-sql/pglite-socket": ["@electric-sql/pglite-socket@0.1.1", "", { "peerDependencies": { "@electric-sql/pglite": "0.4.1" }, "bin": { "pglite-server": "dist/scripts/server.js" } }, "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw=="], @@ -613,6 +643,18 @@ "@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], + "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ=="], + + "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w=="], + + "@msgpackr-extract/msgpackr-extract-linux-arm": ["@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4", "", { "os": "linux", "cpu": "arm" }, "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw=="], + + "@msgpackr-extract/msgpackr-extract-linux-arm64": ["@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw=="], + + "@msgpackr-extract/msgpackr-extract-linux-x64": ["@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ=="], + + "@msgpackr-extract/msgpackr-extract-win32-x64": ["@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4", "", { "os": "win32", "cpu": "x64" }, "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "0.10.2" }, "peerDependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], "@nestjs-modules/mailer": ["@nestjs-modules/mailer@2.3.5", "", { "dependencies": { "@css-inline/css-inline": "0.20.0", "glob": "13.0.6", "tslib": "2.8.1" }, "optionalDependencies": { "@types/ejs": "3.1.5", "@types/mjml": "4.7.4", "@types/pug": "2.0.10", "ejs": "5.0.2", "handlebars": "4.7.9", "liquidjs": "10.27.0", "mjml": "5.2.2", "nunjucks": "3.2.4", "preview-email": "3.1.3", "pug": "3.0.4" }, "peerDependencies": { "@nestjs/common": "11.1.21", "@nestjs/core": "11.1.21", "nodemailer": "8.0.7" } }, "sha512-Jm+SH0uqTKeGxX7JWnzYrTnmNcdthEmniqsJdYCVrOmEj4dfrCxupQ6ra9NF4tfeqUuQVLyQb4VjSU7Q35mrPw=="], @@ -1181,6 +1223,8 @@ "@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="], + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.4", "", { "dependencies": { "@eslint-community/regexpp": "4.12.2", "@typescript-eslint/scope-manager": "8.59.4", "@typescript-eslint/type-utils": "8.59.4", "@typescript-eslint/utils": "8.59.4", "@typescript-eslint/visitor-keys": "8.59.4", "ignore": "7.0.5", "natural-compare": "1.4.0", "ts-api-utils": "2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "8.59.4", "eslint": "10.4.0", "typescript": "6.0.3" } }, "sha512-PegsU+XfyJJNjd4+u/k6f9yTyp0lEXXiPopUNobZcIAUJFGICFLN+sP0Rb3JehVmiij1Ph0dFGYqODoRo/2+6A=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.4", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.4", "@typescript-eslint/types": "8.59.4", "@typescript-eslint/typescript-estree": "8.59.4", "@typescript-eslint/visitor-keys": "8.59.4", "debug": "4.4.3" }, "peerDependencies": { "eslint": "10.4.0", "typescript": "6.0.3" } }, "sha512-zORHqO/tuhxY1zWuTvMUqddRxpiFJ72xVfcNoWpqdLjs6lfPbuQBJuW4pk+49/uBMy7Ssr4bzgjiKmmDB1UbZQ=="], @@ -1373,6 +1417,8 @@ "api-axum": ["api-axum@workspace:apps/api-axum"], + "api-effect": ["api-effect@workspace:apps/api-effect"], + "api-elysia": ["api-elysia@workspace:apps/api-elysia"], "append-field": ["append-field@1.0.0", "", {}, "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="], @@ -1767,7 +1813,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "1.1.0", "fast-check": "3.23.2" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], + "effect": ["effect@4.0.0-rc.112", "", { "dependencies": { "fast-check": "^4.9.0", "msgpackr": "^2.0.5" } }, "sha512-wXxwuh1Ywnv4cPRM3Wfa0vDwuOHnZ1TsTgHJkG9XgzND6inhBH9n1vBxhg3iIXOia/OrpmvVmd3lrD4vq6bF3A=="], "ejs": ["ejs@5.0.2", "", { "bin": { "ejs": "bin/cli.js" } }, "sha512-IpbUaI/CAW86l3f+T8zN0iggSc0LmMZLcIW5eRVStLVNCoTXkE0YlncbbH50fp8Cl6zHIky0sW2uUbhBqGw0Jw=="], @@ -1905,7 +1951,7 @@ "extend-object": ["extend-object@1.0.0", "", {}, "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw=="], - "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + "fast-check": ["fast-check@4.9.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg=="], "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], @@ -2627,6 +2673,10 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "msgpackr": ["msgpackr@2.1.0", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ=="], + + "msgpackr-extract": ["msgpackr-extract@3.0.4", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw=="], + "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], "multer": ["multer@2.1.1", "", { "dependencies": { "append-field": "1.0.0", "busboy": "1.6.0", "concat-stream": "2.0.0", "type-is": "1.6.18" } }, "sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A=="], @@ -2661,6 +2711,8 @@ "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], + "node-releases": ["node-releases@2.0.44", "", {}, "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ=="], "nodemailer": ["nodemailer@9.0.6", "", {}, "sha512-IQUGFdhdGwI9+AWX+FpUt4DLmvFaOjTMEoneTIWX/RXxuy1TdenPwWrvFMSfLkPKl+HQEXWuSAxEMMbPYXtBmg=="], @@ -2979,7 +3031,7 @@ "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], - "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "pure-rand": ["pure-rand@8.4.2", "", {}, "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng=="], "qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "1.0.3", "pngjs": "5.0.0", "yargs": "15.4.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="], @@ -3511,6 +3563,8 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], "y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], @@ -3611,6 +3665,8 @@ "@next/mdx/source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + "@prisma/config/effect": ["effect@3.20.0", "", { "dependencies": { "@standard-schema/spec": "1.1.0", "fast-check": "3.23.2" } }, "sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw=="], + "@prisma/driver-adapter-utils/@prisma/debug": ["@prisma/debug@7.10.0", "", {}, "sha512-caygJKtltmRIgdJ3jRpkOr7yM4DW6zxo5uOmojKWFb3asnxWoRkQOwZmXBgD8FZp4htrX+nMpcWqDwzlQ1+Y4g=="], "@prisma/engines/@prisma/get-platform": ["@prisma/get-platform@7.8.0", "", { "dependencies": { "@prisma/debug": "7.8.0" } }, "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw=="], @@ -3719,6 +3775,8 @@ "@types/superagent/form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "0.4.0", "combined-stream": "1.0.8", "es-set-tostringtag": "2.1.0", "hasown": "2.0.3", "mime-types": "2.1.35" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + "@types/ws/@types/node": ["@types/node@26.4.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ=="], + "@typescript-eslint/eslint-plugin/eslint": ["eslint@10.4.0", "", { "dependencies": { "@eslint-community/eslint-utils": "4.9.1", "@eslint-community/regexpp": "4.12.2", "@eslint/config-array": "0.23.5", "@eslint/config-helpers": "0.6.0", "@eslint/core": "1.2.1", "@eslint/plugin-kit": "0.7.1", "@humanfs/node": "0.16.8", "@humanwhocodes/module-importer": "1.0.1", "@humanwhocodes/retry": "0.4.3", "@types/estree": "1.0.9", "ajv": "6.15.0", "cross-spawn": "7.0.6", "debug": "4.4.3", "escape-string-regexp": "4.0.0", "eslint-scope": "9.1.2", "eslint-visitor-keys": "5.0.1", "espree": "11.2.0", "esquery": "1.7.0", "esutils": "2.0.3", "fast-deep-equal": "3.1.3", "file-entry-cache": "8.0.0", "find-up": "5.0.0", "glob-parent": "6.0.2", "ignore": "5.3.2", "imurmurhash": "0.1.4", "is-glob": "4.0.3", "json-stable-stringify-without-jsonify": "1.0.1", "minimatch": "10.2.5", "natural-compare": "1.4.0", "optionator": "0.9.4" }, "optionalDependencies": { "jiti": "2.7.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -3785,6 +3843,10 @@ "api/prettier": ["prettier@3.9.6", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g=="], + "api-effect/argon2": ["argon2@0.45.1", "", { "dependencies": { "@phc/format": "^1.0.0", "cross-env": "^10.1.0", "node-addon-api": "^8.9.0", "node-gyp-build": "^4.8.4" } }, "sha512-skm+/WCjkGqCQxF7FG1LuZXM5yvbFjgbfiCGsud2oLgaDhh6b6dbH0b1EkghbM+xx4Bj8Ape+KKgixoIlWZicQ=="], + + "api-effect/ioredis": ["ioredis@6.0.0", "", { "dependencies": { "@ioredis/commands": "2.0.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "standard-as-callback": "2.1.0" } }, "sha512-f+Dtubxfpf6KYFq7WVXJoOLn0bk4TJrMrN9SzeE+jrWrCWj7XX3fA6vkryafhADX+GMymRxgDJDOI33COkJc0w=="], + "api-elysia/argon2": ["argon2@0.45.1", "", { "dependencies": { "@phc/format": "^1.0.0", "cross-env": "^10.1.0", "node-addon-api": "^8.9.0", "node-gyp-build": "^4.8.4" } }, "sha512-skm+/WCjkGqCQxF7FG1LuZXM5yvbFjgbfiCGsud2oLgaDhh6b6dbH0b1EkghbM+xx4Bj8Ape+KKgixoIlWZicQ=="], "api-elysia/ioredis": ["ioredis@6.0.0", "", { "dependencies": { "@ioredis/commands": "2.0.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "standard-as-callback": "2.1.0" } }, "sha512-f+Dtubxfpf6KYFq7WVXJoOLn0bk4TJrMrN9SzeE+jrWrCWj7XX3fA6vkryafhADX+GMymRxgDJDOI33COkJc0w=="], @@ -4195,6 +4257,8 @@ "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "@prisma/config/effect/fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + "@prisma/streams-local/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@radix-ui/react-arrow/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "optionalDependencies": { "@types/react": "19.2.14" }, "peerDependencies": { "react": "19.2.6" } }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], @@ -4289,6 +4353,8 @@ "@types/superagent/form-data/hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], + "@types/ws/@types/node/undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="], + "@typescript-eslint/eslint-plugin/eslint/@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "3.0.5", "debug": "4.4.3", "minimatch": "10.2.5" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="], "@typescript-eslint/eslint-plugin/eslint/@eslint/config-helpers": ["@eslint/config-helpers@0.6.0", "", { "dependencies": { "@eslint/core": "1.2.1" } }, "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA=="], @@ -4379,6 +4445,14 @@ "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "api-effect/argon2/node-addon-api": ["node-addon-api@8.9.2", "", {}, "sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg=="], + + "api-effect/ioredis/@ioredis/commands": ["@ioredis/commands@2.0.0", "", {}, "sha512-vrx0AE/T0h7cRZwfo1M39Cr+ZhZrkf0V8mQN75wucKCxCLD9l/VX6no3gFvrLqD1IlG/1LtzWovqEw3t0Vr9zg=="], + + "api-effect/ioredis/cluster-key-slot": ["cluster-key-slot@1.1.1", "", {}, "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw=="], + + "api-effect/ioredis/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "api-elysia/argon2/node-addon-api": ["node-addon-api@8.9.2", "", {}, "sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg=="], "api-elysia/ioredis/@ioredis/commands": ["@ioredis/commands@2.0.0", "", {}, "sha512-vrx0AE/T0h7cRZwfo1M39Cr+ZhZrkf0V8mQN75wucKCxCLD9l/VX6no3gFvrLqD1IlG/1LtzWovqEw3t0Vr9zg=="], @@ -4725,6 +4799,8 @@ "@eslint-community/eslint-utils/eslint/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "4.0.4" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], + "@prisma/config/effect/fast-check/pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], "@typescript-eslint/eslint-plugin/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="], From 5e90d0cffa0501a99e73ec0884fe8d90b7c3212b Mon Sep 17 00:00:00 2001 From: Xiro The Dev Date: Thu, 3 Sep 2026 13:28:57 +0700 Subject: [PATCH 2/7] refactor(web,web-vue): replace clsx+tailwind-merge wrapper with cn package Per rules/libraries.md #11: import { cn } from 'cn' directly, no lib/utils re-export indirection. Delete both twMerge(clsx()) wrappers, rewrite 45 cn imports, drop clsx/tailwind-merge deps, point components.json utils alias at cn. --- apps/web-vue/package.json | 3 +- apps/web-vue/src/components/Navbar.vue | 2 +- .../src/components/admin/admin-chart.vue | 2 +- .../src/components/admin/admin-sidebar.vue | 2 +- .../src/components/calendar/EventFilter.vue | 2 +- .../src/components/shop/product-actions.vue | 2 +- .../components/shop/product-image-gallery.vue | 2 +- .../components/shop/product-size-selector.vue | 2 +- .../src/components/shop/quantity-selector.vue | 2 +- .../src/components/ui/animated-beam.vue | 2 +- apps/web-vue/src/components/ui/avatar.vue | 2 +- apps/web-vue/src/components/ui/bento-grid.vue | 2 +- apps/web-vue/src/components/ui/button.vue | 2 +- apps/web-vue/src/components/ui/card.vue | 2 +- apps/web-vue/src/components/ui/chart.vue | 2 +- .../src/components/ui/dropdown-menu.vue | 2 +- apps/web-vue/src/components/ui/input.vue | 2 +- .../src/components/ui/markdown-editor.vue | 2 +- .../src/components/ui/navigation-menu.vue | 2 +- .../src/components/ui/number-ticker.vue | 2 +- apps/web-vue/src/components/ui/table.vue | 2 +- .../src/components/wds/user-avatar.vue | 2 +- apps/web-vue/src/lib/cn.ts | 6 - apps/web-vue/src/lib/utils.ts | 2 - apps/web/components.json | 2 +- apps/web/docs/feature-landing-page.md | 3 +- apps/web/docs/memorize.md | 3 +- apps/web/package.json | 3 +- apps/web/src/components/Navbar.tsx | 2 +- .../src/components/account/AccountSidebar.tsx | 2 +- .../src/components/account/AvatarUpload.tsx | 2 +- .../src/components/account/ProfileForm.tsx | 2 +- .../components/account/SecuritySettings.tsx | 2 +- .../src/components/account/SessionsList.tsx | 2 +- .../src/components/calendar/EventFilter.tsx | 2 +- .../src/components/shop/ProductActions.tsx | 2 +- .../components/shop/ProductImageGallery.tsx | 2 +- .../components/shop/ProductSizeSelector.tsx | 2 +- .../src/components/shop/QuantitySelector.tsx | 2 +- apps/web/src/components/ui/animated-beam.tsx | 2 +- apps/web/src/components/ui/avatar.tsx | 2 +- apps/web/src/components/ui/bento-grid.tsx | 2 +- apps/web/src/components/ui/button.tsx | 2 +- apps/web/src/components/ui/card.tsx | 2 +- apps/web/src/components/ui/chart.tsx | 2 +- apps/web/src/components/ui/dropdown-menu.tsx | 2 +- apps/web/src/components/ui/input.tsx | 2 +- .../web/src/components/ui/markdown-editor.tsx | 2 +- .../web/src/components/ui/navigation-menu.tsx | 2 +- apps/web/src/components/ui/number-ticker.tsx | 2 +- apps/web/src/components/ui/table.tsx | 2 +- apps/web/src/components/wds/UserAvatar.tsx | 2 +- apps/web/src/lib/utils.ts | 7 - bun.lock | 194 ++++-------------- 54 files changed, 89 insertions(+), 224 deletions(-) delete mode 100644 apps/web-vue/src/lib/cn.ts diff --git a/apps/web-vue/package.json b/apps/web-vue/package.json index d6aabde3..456cda0f 100644 --- a/apps/web-vue/package.json +++ b/apps/web-vue/package.json @@ -30,13 +30,12 @@ "axios": "^1.20.0", "chart.js": "^4.5.1", "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", + "cn": "^0.2.4", "countup.js": "^2.10.1", "lucide-vue-next": "^1.0.0", "marked": "^18.0.11", "motion-v": "^2.4.0", "reka-ui": "^2.10.4", - "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", "unhead": "^3.4.0", "vee-validate": "^4.15.1", diff --git a/apps/web-vue/src/components/Navbar.vue b/apps/web-vue/src/components/Navbar.vue index 66f56e8e..63f5dd3f 100644 --- a/apps/web-vue/src/components/Navbar.vue +++ b/apps/web-vue/src/components/Navbar.vue @@ -12,7 +12,7 @@ import { } from '@/components/ui/navigation-menu.vue'; import UserAvatar from '@/components/wds/user-avatar.vue'; import { useCurrentUser } from '@/lib/api/hooks/use-auth'; -import { cn } from '@/lib/cn'; +import { cn } from 'cn'; // Port of apps/web Navbar.tsx. ponytail: motion-v open/close animations dropped for v-if — // add wrappers back if the sidebar transition matters. diff --git a/apps/web-vue/src/components/admin/admin-chart.vue b/apps/web-vue/src/components/admin/admin-chart.vue index 50a47747..be0234a7 100644 --- a/apps/web-vue/src/components/admin/admin-chart.vue +++ b/apps/web-vue/src/components/admin/admin-chart.vue @@ -32,7 +32,7 @@ import { Bar, Line } from 'vue-chartjs'; import type { ChartOptions } from 'chart.js'; import { ChartContainer, ChartTooltip, type ChartConfig } from '@/components/ui/chart.vue'; -import { cn } from '@/lib/cn'; +import { cn } from 'cn'; import { formatPrice } from '@/lib/utils'; // mirrors apps/web AdminChart (recharts area/bar → chart.js line-with-fill / bar) diff --git a/apps/web-vue/src/components/admin/admin-sidebar.vue b/apps/web-vue/src/components/admin/admin-sidebar.vue index d4e01136..1a0c304a 100644 --- a/apps/web-vue/src/components/admin/admin-sidebar.vue +++ b/apps/web-vue/src/components/admin/admin-sidebar.vue @@ -10,7 +10,7 @@ import { } from 'lucide-vue-next'; import { useRoute } from 'vue-router'; -import { cn } from '@/lib/cn'; +import { cn } from 'cn'; import { useLogout } from '@/lib/api/hooks/use-auth'; // mirrors apps/web AdminSidebar (BarChart3 → ChartColumn: lucide renamed the icon) diff --git a/apps/web-vue/src/components/calendar/EventFilter.vue b/apps/web-vue/src/components/calendar/EventFilter.vue index c1c46327..deef6f57 100644 --- a/apps/web-vue/src/components/calendar/EventFilter.vue +++ b/apps/web-vue/src/components/calendar/EventFilter.vue @@ -1,6 +1,6 @@