diff --git a/.env.example b/.env.example index c9230ec..e21882e 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,6 @@ DATABASE_URL=postgresql://mapflow:mapflow@localhost:5432/mapflow HATCHET_CLIENT_TOKEN= +OPENROUTER_API_KEY= +OPENROUTER_MODEL=deepseek/deepseek-v4-flash HOST=0.0.0.0 PORT=4000 diff --git a/graphql-contracts b/graphql-contracts index 3340962..39f32e3 160000 --- a/graphql-contracts +++ b/graphql-contracts @@ -1 +1 @@ -Subproject commit 3340962c024cd33935f8f3669ef86a31ca3e1128 +Subproject commit 39f32e3d3663e3ea724573d54973984645ae1853 diff --git a/prisma/migrations/7_add_place_enrichment_and_favorites/migration.sql b/prisma/migrations/7_add_place_enrichment_and_favorites/migration.sql new file mode 100644 index 0000000..d085b9c --- /dev/null +++ b/prisma/migrations/7_add_place_enrichment_and_favorites/migration.sql @@ -0,0 +1,33 @@ +-- AlterTable +ALTER TABLE "Place" ADD COLUMN "googleBusinessStatus" TEXT, +ADD COLUMN "googleCurrentOpeningHours" JSONB, +ADD COLUMN "googlePayload" JSONB, +ADD COLUMN "googlePayloadFetchedAt" TIMESTAMP(3), +ADD COLUMN "googlePhotos" JSONB, +ADD COLUMN "googleRating" DOUBLE PRECISION, +ADD COLUMN "googleRegularOpeningHours" JSONB, +ADD COLUMN "googleUserRatingCount" INTEGER; + +-- AlterTable +ALTER TABLE "VoiceExperience" ADD COLUMN "promptHintsShown" TEXT[] DEFAULT ARRAY[]::TEXT[], +ADD COLUMN "recordingPayload" JSONB; + +-- CreateTable +CREATE TABLE "UserFavoritePlace" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "placeId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "UserFavoritePlace_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "UserFavoritePlace_userId_placeId_key" ON "UserFavoritePlace"("userId", "placeId"); + +-- AddForeignKey +ALTER TABLE "UserFavoritePlace" ADD CONSTRAINT "UserFavoritePlace_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "UserFavoritePlace" ADD CONSTRAINT "UserFavoritePlace_placeId_fkey" FOREIGN KEY ("placeId") REFERENCES "Place"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 610094f..af8490c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -17,16 +17,25 @@ enum VoiceExperienceStatus { } model Place { - id String @id @default(cuid()) - googlePlaceId String @unique - name String - latitude Float - longitude Float - googlePrimaryType String? - googleTypes String[] @default([]) - experiences VoiceExperience[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + id String @id @default(cuid()) + googlePlaceId String @unique + name String + latitude Float + longitude Float + googlePrimaryType String? + googleTypes String[] @default([]) + googleBusinessStatus String? + googleRating Float? + googleUserRatingCount Int? + googleRegularOpeningHours Json? + googleCurrentOpeningHours Json? + googlePhotos Json? + googlePayload Json? + googlePayloadFetchedAt DateTime? + experiences VoiceExperience[] + favoriteUsers UserFavoritePlace[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt } model User { @@ -41,10 +50,22 @@ model User { sessions UserSession[] loginRequests TelegramLoginRequest[] voiceExperiences VoiceExperience[] + favoritePlaces UserFavoritePlace[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } +model UserFavoritePlace { + id String @id @default(cuid()) + userId String + user User @relation(fields: [userId], references: [id]) + placeId String + place Place @relation(fields: [placeId], references: [id]) + createdAt DateTime @default(now()) + + @@unique([userId, placeId]) +} + model UserSession { id String @id @default(cuid()) tokenHash String @unique @@ -82,6 +103,8 @@ model VoiceExperience { status VoiceExperienceStatus @default(UPLOADED) transcript String? analysis Json? + recordingPayload Json? + promptHintsShown String[] @default([]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } diff --git a/src/config.ts b/src/config.ts index c2f97aa..0c33e01 100644 --- a/src/config.ts +++ b/src/config.ts @@ -13,6 +13,8 @@ export const config = { telegramBotUsername: process.env.TELEGRAM_BOT_USERNAME ?? 'carfteebot', telegramWebhookSecret: process.env.TELEGRAM_WEBHOOK_SECRET ?? '', googlePlacesApiKey: process.env.GOOGLE_PLACES_API_KEY ?? '', + openRouterApiKey: process.env.OPENROUTER_API_KEY ?? '', + openRouterModel: process.env.OPENROUTER_MODEL ?? 'deepseek/deepseek-v4-flash', webAppUrl: process.env.WEB_APP_URL ?? 'https://map.craftee.vn', publicApiUrl: process.env.PUBLIC_API_URL ?? 'https://api.map.craftee.vn', telegramAuthMaxAgeSeconds: Number( diff --git a/src/generated/prisma/edge.js b/src/generated/prisma/edge.js index f218a8b..d708291 100644 --- a/src/generated/prisma/edge.js +++ b/src/generated/prisma/edge.js @@ -100,6 +100,14 @@ exports.Prisma.PlaceScalarFieldEnum = { longitude: 'longitude', googlePrimaryType: 'googlePrimaryType', googleTypes: 'googleTypes', + googleBusinessStatus: 'googleBusinessStatus', + googleRating: 'googleRating', + googleUserRatingCount: 'googleUserRatingCount', + googleRegularOpeningHours: 'googleRegularOpeningHours', + googleCurrentOpeningHours: 'googleCurrentOpeningHours', + googlePhotos: 'googlePhotos', + googlePayload: 'googlePayload', + googlePayloadFetchedAt: 'googlePayloadFetchedAt', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -117,6 +125,13 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserFavoritePlaceScalarFieldEnum = { + id: 'id', + userId: 'userId', + placeId: 'placeId', + createdAt: 'createdAt' +}; + exports.Prisma.UserSessionScalarFieldEnum = { id: 'id', tokenHash: 'tokenHash', @@ -150,6 +165,8 @@ exports.Prisma.VoiceExperienceScalarFieldEnum = { status: 'status', transcript: 'transcript', analysis: 'analysis', + recordingPayload: 'recordingPayload', + promptHintsShown: 'promptHintsShown', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -169,16 +186,16 @@ exports.Prisma.QueryMode = { insensitive: 'insensitive' }; -exports.Prisma.NullsOrder = { - first: 'first', - last: 'last' -}; - exports.Prisma.JsonNullValueFilter = { DbNull: Prisma.DbNull, JsonNull: Prisma.JsonNull, AnyNull: Prisma.AnyNull }; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { UPLOADED: 'UPLOADED', TRANSCRIBING: 'TRANSCRIBING', @@ -191,6 +208,7 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserFavoritePlace: 'UserFavoritePlace', UserSession: 'UserSession', TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' @@ -203,14 +221,14 @@ const config = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n googlePrimaryType String?\n googleTypes String[] @default([])\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n isAdmin Boolean @default(false)\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n telegramChatId String?\n telegramMessageId Int?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n audioContentBase64 String?\n audioMimeType String?\n audioAccessToken String? @unique\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n googlePrimaryType String?\n googleTypes String[] @default([])\n googleBusinessStatus String?\n googleRating Float?\n googleUserRatingCount Int?\n googleRegularOpeningHours Json?\n googleCurrentOpeningHours Json?\n googlePhotos Json?\n googlePayload Json?\n googlePayloadFetchedAt DateTime?\n experiences VoiceExperience[]\n favoriteUsers UserFavoritePlace[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n isAdmin Boolean @default(false)\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n favoritePlaces UserFavoritePlace[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserFavoritePlace {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id])\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n createdAt DateTime @default(now())\n\n @@unique([userId, placeId])\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n telegramChatId String?\n telegramMessageId Int?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n audioContentBase64 String?\n audioMimeType String?\n audioAccessToken String? @unique\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n recordingPayload Json?\n promptHintsShown String[] @default([])\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googlePrimaryType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramChatId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramMessageId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioContentBase64\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioAccessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googlePrimaryType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleBusinessStatus\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleRating\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googleUserRatingCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"googleRegularOpeningHours\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googleCurrentOpeningHours\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePhotos\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePayload\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePayloadFetchedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"favoriteUsers\",\"kind\":\"object\",\"type\":\"UserFavoritePlace\",\"relationName\":\"PlaceToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"favoritePlaces\",\"kind\":\"object\",\"type\":\"UserFavoritePlace\",\"relationName\":\"UserToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserFavoritePlace\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserFavoritePlace\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramChatId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramMessageId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioContentBase64\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioAccessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"recordingPayload\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"promptHintsShown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"_count\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.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\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"audioContentBase64\",\"audioMimeType\",\"audioAccessToken\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"telegramChatId\",\"telegramMessageId\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"isAdmin\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"googlePrimaryType\",\"googleTypes\",\"has\",\"hasEvery\",\"hasSome\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"push\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "ugIxUA0JAACvAQAgYgAAtAEAMGMAABgAEGQAALQBADBlAQAAAAFxQACsAQAhckAArAEAIZMBAQAAAAGUAQEAtQEAIZUBCAC2AQAhlgEIALYBACGXAQEAqgEAIZgBAACyAQAgAQAAAAEAIBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAtQEAIWYBALUBACFnAQCqAQAhaAIAvQEAIWkBALUBACFqAQCqAQAhawEAqgEAIWwBAKoBACFuAAC-AW4ibwEAqgEAIXAAAL8BACBxQACsAQAhckAArAEAIQgDAACiAgAgBAAAoQIAIGcAAMEBACBqAADBAQAgawAAwQEAIGwAAMEBACBvAADBAQAgcAAAwQEAIBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAAAABZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAAAABbgAAvgFuIm8BAKoBACFwAAC_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_AQAgcUAArAEAIXJAAKwBACEIcwIAAAABdAIAAAAEdQIAAAAEdgIAAAABdwIAAAABeAIAAAABeQIAAAABegIAlAEAIQRzAAAAbgJ0AAAAbgh1AAAAbgh6AACZAW4iDHOAAAAAAXaAAAAAAXeAAAAAAXiAAAAAAXmAAAAAAXqAAAAAAXsBAAAAAXwBAAAAAX0BAAAAAX6AAAAAAX-AAAAAAYABgAAAAAEPCQAArwEAIGIAALQBADBjAAAYABBkAAC0AQAwZQEAtQEAIXFAAKwBACFyQACsAQAhkwEBALUBACGUAQEAtQEAIZUBCAC2AQAhlgEIALYBACGXAQEAqgEAIZgBAACyAQAgnAEAABgAIJ0BAAAYACAAAAAAAAABoQEBAAAAAQWhAQIAAAABqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAQGhAQEAAAABAaEBAAAAbgIBoQFAAAAAAQUWAACzAgAgFwAAuQIAIJ4BAAC0AgAgnwEAALgCACCkAQAAAQAgBxYAALECACAXAAC2AgAgngEAALICACCfAQAAtQIAIKIBAAAHACCjAQAABwAgpAEAAC4AIAMWAACzAgAgngEAALQCACCkAQAAAQAgAxYAALECACCeAQAAsgIAIKQBAAAuACAAAAAAAAWhAQIAAAABqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAQcWAACsAgAgFwAArwIAIJ4BAACtAgAgnwEAAK4CACCiAQAABwAgowEAAAcAIKQBAAAuACADFgAArAIAIJ4BAACtAgAgpAEAAC4AIAAAAAUWAACnAgAgFwAAqgIAIJ4BAACoAgAgnwEAAKkCACCkAQAALgAgAxYAAKcCACCeAQAAqAIAIKQBAAAuACAAAAABoQEgAAAAAQsWAAD8AQAwFwAAgQIAMJ4BAAD9AQAwnwEAAP4BADCgAQAA_wEAIKEBAACAAgAwogEAAIACADCjAQAAgAIAMKQBAACAAgAwpQEAAIICADCmAQAAgwIAMAsWAADwAQAwFwAA9QEAMJ4BAADxAQAwnwEAAPIBADCgAQAA8wEAIKEBAAD0AQAwogEAAPQBADCjAQAA9AEAMKQBAAD0AQAwpQEAAPYBADCmAQAA9wEAMAsWAADkAQAwFwAA6QEAMJ4BAADlAQAwnwEAAOYBADCgAQAA5wEAIKEBAADoAQAwogEAAOgBADCjAQAA6AEAMKQBAADoAQAwpQEAAOoBADCmAQAA6wEAMA0DAADOAQAgZQEAAAABZgEAAAABaAIAAAABaQEAAAABagEAAAABawEAAAABbAEAAAABbgAAAG4CbwEAAAABcIAAAAABcUAAAAABckAAAAABAgAAAAUAIBYAAO8BACADAAAABQAgFgAA7wEAIBcAAO4BACABDwAApgIAMBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAAAABZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAAAABbgAAvgFuIm8BAKoBACFwAAC_AQAgcUAArAEAIXJAAKwBACECAAAABQAgDwAA7gEAIAIAAADsAQAgDwAA7QEAIBBiAADrAQAwYwAA7AEAEGQAAOsBADBlAQC1AQAhZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAqgEAIW4AAL4BbiJvAQCqAQAhcAAAvwEAIHFAAKwBACFyQACsAQAhEGIAAOsBADBjAADsAQAQZAAA6wEAMGUBALUBACFmAQC1AQAhZwEAqgEAIWgCAL0BACFpAQC1AQAhagEAqgEAIWsBAKoBACFsAQCqAQAhbgAAvgFuIm8BAKoBACFwAAC_AQAgcUAArAEAIXJAAKwBACEMZQEAxwEAIWYBAMcBACFoAgDIAQAhaQEAxwEAIWoBAMkBACFrAQDJAQAhbAEAyQEAIW4AAMoBbiJvAQDJAQAhcIAAAAABcUAAywEAIXJAAMsBACENAwAAzAEAIGUBAMcBACFmAQDHAQAhaAIAyAEAIWkBAMcBACFqAQDJAQAhawEAyQEAIWwBAMkBACFuAADKAW4ibwEAyQEAIXCAAAAAAXFAAMsBACFyQADLAQAhDQMAAM4BACBlAQAAAAFmAQAAAAFoAgAAAAFpAQAAAAFqAQAAAAFrAQAAAAFsAQAAAAFuAAAAbgJvAQAAAAFwgAAAAAFxQAAAAAFyQAAAAAEJZQEAAAABbgEAAAABcUAAAAABckAAAAABhAEBAAAAAYUBAQAAAAGGAQEAAAABhwECAAAAAYgBQAAAAAECAAAADwAgFgAA-wEAIAMAAAAPACAWAAD7AQAgFwAA-gEAIAEPAAClAgAwDgQAALkBACBiAAC3AQAwYwAADQAQZAAAtwEAMGUBAAAAAWcBAKoBACFuAQC1AQAhcUAArAEAIXJAAKwBACGEAQEAAAABhQEBAKoBACGGAQEAqgEAIYcBAgC4AQAhiAFAAKwBACECAAAADwAgDwAA-gEAIAIAAAD4AQAgDwAA-QEAIA1iAAD3AQAwYwAA-AEAEGQAAPcBADBlAQC1AQAhZwEAqgEAIW4BALUBACFxQACsAQAhckAArAEAIYQBAQC1AQAhhQEBAKoBACGGAQEAqgEAIYcBAgC4AQAhiAFAAKwBACENYgAA9wEAMGMAAPgBABBkAAD3AQAwZQEAtQEAIWcBAKoBACFuAQC1AQAhcUAArAEAIXJAAKwBACGEAQEAtQEAIYUBAQCqAQAhhgEBAKoBACGHAQIAuAEAIYgBQACsAQAhCWUBAMcBACFuAQDHAQAhcUAAywEAIXJAAMsBACGEAQEAxwEAIYUBAQDJAQAhhgEBAMkBACGHAQIA1QEAIYgBQADLAQAhCWUBAMcBACFuAQDHAQAhcUAAywEAIXJAAMsBACGEAQEAxwEAIYUBAQDJAQAhhgEBAMkBACGHAQIA1QEAIYgBQADLAQAhCWUBAAAAAW4BAAAAAXFAAAAAAXJAAAAAAYQBAQAAAAGFAQEAAAABhgEBAAAAAYcBAgAAAAGIAUAAAAABBGUBAAAAAXFAAAAAAYQBAQAAAAGIAUAAAAABAgAAAAsAIBYAAIcCACADAAAACwAgFgAAhwIAIBcAAIYCACABDwAApAIAMAkEAAC7AQAgYgAAugEAMGMAAAkAEGQAALoBADBlAQAAAAFnAQC1AQAhcUAArAEAIYQBAQAAAAGIAUAArAEAIQIAAAALACAPAACGAgAgAgAAAIQCACAPAACFAgAgCGIAAIMCADBjAACEAgAQZAAAgwIAMGUBALUBACFnAQC1AQAhcUAArAEAIYQBAQC1AQAhiAFAAKwBACEIYgAAgwIAMGMAAIQCABBkAACDAgAwZQEAtQEAIWcBALUBACFxQACsAQAhhAEBALUBACGIAUAArAEAIQRlAQDHAQAhcUAAywEAIYQBAQDHAQAhiAFAAMsBACEEZQEAxwEAIXFAAMsBACGEAQEAxwEAIYgBQADLAQAhBGUBAAAAAXFAAAAAAYQBAQAAAAGIAUAAAAABBBYAAPwBADCeAQAA_QEAMKABAAD_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-Ey0_Ay5AAy9BCDBEFDFFGDJGBDNHBDRIBDVJBDZKBDdMBDhOCDlPGTpRBDtTCDxUGj1VBD5WBD9XCEBaG0FbH0JcBUNdBUReBUVfBUZgBUdiBUhkCEllIEpoBUtqCExrIU1tBU5uBU9vCFByIlFzKFJ0AlN1AlR2AlV3AlZ4Ald6Alh8CFl9KVqAAQJbggEIXIMBKl2FAQJehgECX4cBCGCKASthiwEx" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"favoritePlaces\",\"_count\",\"experiences\",\"favoriteUsers\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.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\",\"UserFavoritePlace.findUnique\",\"UserFavoritePlace.findUniqueOrThrow\",\"UserFavoritePlace.findFirst\",\"UserFavoritePlace.findFirstOrThrow\",\"UserFavoritePlace.findMany\",\"UserFavoritePlace.createOne\",\"UserFavoritePlace.createMany\",\"UserFavoritePlace.createManyAndReturn\",\"UserFavoritePlace.updateOne\",\"UserFavoritePlace.updateMany\",\"UserFavoritePlace.updateManyAndReturn\",\"UserFavoritePlace.upsertOne\",\"UserFavoritePlace.deleteOne\",\"UserFavoritePlace.deleteMany\",\"UserFavoritePlace.groupBy\",\"UserFavoritePlace.aggregate\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"audioContentBase64\",\"audioMimeType\",\"audioAccessToken\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"recordingPayload\",\"promptHintsShown\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"has\",\"hasEvery\",\"hasSome\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"telegramChatId\",\"telegramMessageId\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"isAdmin\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"googlePrimaryType\",\"googleTypes\",\"googleBusinessStatus\",\"googleRating\",\"googleUserRatingCount\",\"googleRegularOpeningHours\",\"googleCurrentOpeningHours\",\"googlePhotos\",\"googlePayload\",\"googlePayloadFetchedAt\",\"userId_placeId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\",\"push\"]"), + graph: "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_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_AQAhnwFAAPQBACECAAAADwAgEQAAhAEAIAp3AQDvAQAheQEA8QEAIYABAQDvAQAhhQFAAPQBACGGAUAA9AEAIZsBAQDvAQAhnAEBAPEBACGdAQEA8QEAIZ4BAgD_AQAhnwFAAPQBACECAAAADQAgEQAAhgEAIAIAAAANACARAACGAQAgAQAAAAcAIAMAAAAPACAYAAB-ACAZAACEAQAgAQAAAA8AIAEAAAANACAJCQAA-gEAIB4AAPsBACAfAAD-AQAgIAAA_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_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_gIAILsBAAD5AgAgvAEAAP0CACDBAQAANQAgBRgAAPYCACAZAAD7AgAguwEAAPcCACC8AQAA-gIAIMEBAAABACADGAAA-AIAILsBAAD5AgAgwQEAADUAIAMYAAD2AgAguwEAAPcCACDBAQAAAQAgAAAAAb4BIAAAAAELGAAAugIAMBkAAL8CADC7AQAAuwIAMLwBAAC8AgAwvQEAAL0CACC-AQAAvgIAML8BAAC-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_AQAhnwFAAPQBACEJdwEA7wEAIYABAQDvAQAhhQFAAPQBACGGAUAA9AEAIZsBAQDvAQAhnAEBAPEBACGdAQEA8QEAIZ4BAgD_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_AQAhswGAAAAAAbQBgAAAAAG1AYAAAAABtgGAAAAAAbcBQADWAgAhAwAAAAcAIBgAAPgCACAZAAD_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_wEAIbMBgAAAAAG0AYAAAAABtQGAAAAAAbYBgAAAAAG3AUAA1gIAIRILAADYAgAgdwEA7wEAIYUBQAD0AQAhhgFAAPQBACGqAQEA7wEAIasBAQDvAQAhrAEIANMCACGtAQgA0wIAIa4BAQDxAQAhrwEAANQCACCwAQEA8QEAIbEBCADVAgAhsgECAP8BACGzAYAAAAABtAGAAAAAAbUBgAAAAAG2AYAAAAABtwFAANYCACEDCQAICgYCCxsGAgMAAQQIAwUFDAQGEAUHEgIIFgYJAAcBBAADAQQRAwIDAAEEAAMEBRcABhgABxkACBoAAgocAAsdAAAAAAUJAA0eAA4fAA8gABAhABEAAAAAAAUJAA0eAA4fAA8gABAhABEAAAMJABYgABchABgAAAADCQAWIAAXIQAYAgMAAQQAAwIDAAEEAAMDCQAdIAAeIQAfAAAAAwkAHSAAHiEAHwEEAAMBBAADAwkAJCAAJSEAJgAAAAMJACQgACUhACYBBIMBAwEEiQEDBQkAKx4ALB8ALSAALiEALwAAAAAABQkAKx4ALB8ALSAALiEALwIDAAEEmwEDAgMAAQShAQMFCQA0HgA1HwA2IAA3IQA4AAAAAAAFCQA0HgA1HwA2IAA3IQA4DAIBDR4BDiEBDyIBECMBEiUBEycJFCgKFSoBFiwJFy0LGi4BGy8BHDAJIjMMIzQSJDYDJTcDJjkDJzoDKDsDKT0DKj8JK0ATLEIDLUQJLkUUL0YDMEcDMUgJMksVM0wZNE0GNU4GNk8GN1AGOFEGOVMGOlUJO1YaPFgGPVoJPlsbP1wGQF0GQV4JQmEcQ2IgRGMERWQERmUER2YESGcESWkESmsJS2whTG4ETXAJTnEiT3IEUHMEUXQJUncjU3gnVHkFVXoFVnsFV3wFWH0FWX8FWoEBCVuCAShchQEFXYcBCV6IASlfigEFYIsBBWGMAQlijwEqY5ABMGSRAQJlkgECZpMBAmeUAQJolQECaZcBAmqZAQlrmgExbJ0BAm2fAQluoAEyb6IBAnCjAQJxpAEJcqcBM3OoATk" } config.compilerWasm = { getRuntime: async () => require('./query_compiler_fast_bg.js'), diff --git a/src/generated/prisma/index-browser.js b/src/generated/prisma/index-browser.js index 64a1b65..c642397 100644 --- a/src/generated/prisma/index-browser.js +++ b/src/generated/prisma/index-browser.js @@ -128,6 +128,14 @@ exports.Prisma.PlaceScalarFieldEnum = { longitude: 'longitude', googlePrimaryType: 'googlePrimaryType', googleTypes: 'googleTypes', + googleBusinessStatus: 'googleBusinessStatus', + googleRating: 'googleRating', + googleUserRatingCount: 'googleUserRatingCount', + googleRegularOpeningHours: 'googleRegularOpeningHours', + googleCurrentOpeningHours: 'googleCurrentOpeningHours', + googlePhotos: 'googlePhotos', + googlePayload: 'googlePayload', + googlePayloadFetchedAt: 'googlePayloadFetchedAt', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -145,6 +153,13 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserFavoritePlaceScalarFieldEnum = { + id: 'id', + userId: 'userId', + placeId: 'placeId', + createdAt: 'createdAt' +}; + exports.Prisma.UserSessionScalarFieldEnum = { id: 'id', tokenHash: 'tokenHash', @@ -178,6 +193,8 @@ exports.Prisma.VoiceExperienceScalarFieldEnum = { status: 'status', transcript: 'transcript', analysis: 'analysis', + recordingPayload: 'recordingPayload', + promptHintsShown: 'promptHintsShown', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -197,16 +214,16 @@ exports.Prisma.QueryMode = { insensitive: 'insensitive' }; -exports.Prisma.NullsOrder = { - first: 'first', - last: 'last' -}; - exports.Prisma.JsonNullValueFilter = { DbNull: Prisma.DbNull, JsonNull: Prisma.JsonNull, AnyNull: Prisma.AnyNull }; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { UPLOADED: 'UPLOADED', TRANSCRIBING: 'TRANSCRIBING', @@ -219,6 +236,7 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserFavoritePlace: 'UserFavoritePlace', UserSession: 'UserSession', TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' diff --git a/src/generated/prisma/index.d.ts b/src/generated/prisma/index.d.ts index fb6ecc9..b5cbafa 100644 --- a/src/generated/prisma/index.d.ts +++ b/src/generated/prisma/index.d.ts @@ -23,6 +23,11 @@ export type Place = $Result.DefaultSelection * */ export type User = $Result.DefaultSelection +/** + * Model UserFavoritePlace + * + */ +export type UserFavoritePlace = $Result.DefaultSelection /** * Model UserSession * @@ -201,6 +206,16 @@ export class PrismaClient< */ get user(): Prisma.UserDelegate; + /** + * `prisma.userFavoritePlace`: Exposes CRUD operations for the **UserFavoritePlace** model. + * Example usage: + * ```ts + * // Fetch zero or more UserFavoritePlaces + * const userFavoritePlaces = await prisma.userFavoritePlace.findMany() + * ``` + */ + get userFavoritePlace(): Prisma.UserFavoritePlaceDelegate; + /** * `prisma.userSession`: Exposes CRUD operations for the **UserSession** model. * Example usage: @@ -666,6 +681,7 @@ export namespace Prisma { export const ModelName: { Place: 'Place', User: 'User', + UserFavoritePlace: 'UserFavoritePlace', UserSession: 'UserSession', TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' @@ -684,7 +700,7 @@ export namespace Prisma { omit: GlobalOmitOptions } meta: { - modelProps: "place" | "user" | "userSession" | "telegramLoginRequest" | "voiceExperience" + modelProps: "place" | "user" | "userFavoritePlace" | "userSession" | "telegramLoginRequest" | "voiceExperience" txIsolationLevel: Prisma.TransactionIsolationLevel } model: { @@ -836,6 +852,80 @@ export namespace Prisma { } } } + UserFavoritePlace: { + payload: Prisma.$UserFavoritePlacePayload + fields: Prisma.UserFavoritePlaceFieldRefs + operations: { + findUnique: { + args: Prisma.UserFavoritePlaceFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.UserFavoritePlaceFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.UserFavoritePlaceFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.UserFavoritePlaceFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.UserFavoritePlaceFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.UserFavoritePlaceCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.UserFavoritePlaceCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.UserFavoritePlaceCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.UserFavoritePlaceDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.UserFavoritePlaceUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.UserFavoritePlaceDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.UserFavoritePlaceUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.UserFavoritePlaceUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.UserFavoritePlaceUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.UserFavoritePlaceAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.UserFavoritePlaceGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.UserFavoritePlaceCountArgs + result: $Utils.Optional | number + } + } + } UserSession: { payload: Prisma.$UserSessionPayload fields: Prisma.UserSessionFieldRefs @@ -1168,6 +1258,7 @@ export namespace Prisma { export type GlobalOmitConfig = { place?: PlaceOmit user?: UserOmit + userFavoritePlace?: UserFavoritePlaceOmit userSession?: UserSessionOmit telegramLoginRequest?: TelegramLoginRequestOmit voiceExperience?: VoiceExperienceOmit @@ -1252,10 +1343,12 @@ export namespace Prisma { export type PlaceCountOutputType = { experiences: number + favoriteUsers: number } export type PlaceCountOutputTypeSelect = { experiences?: boolean | PlaceCountOutputTypeCountExperiencesArgs + favoriteUsers?: boolean | PlaceCountOutputTypeCountFavoriteUsersArgs } // Custom InputTypes @@ -1276,6 +1369,13 @@ export namespace Prisma { where?: VoiceExperienceWhereInput } + /** + * PlaceCountOutputType without action + */ + export type PlaceCountOutputTypeCountFavoriteUsersArgs = { + where?: UserFavoritePlaceWhereInput + } + /** * Count Type UserCountOutputType @@ -1285,12 +1385,14 @@ export namespace Prisma { sessions: number loginRequests: number voiceExperiences: number + favoritePlaces: number } export type UserCountOutputTypeSelect = { sessions?: boolean | UserCountOutputTypeCountSessionsArgs loginRequests?: boolean | UserCountOutputTypeCountLoginRequestsArgs voiceExperiences?: boolean | UserCountOutputTypeCountVoiceExperiencesArgs + favoritePlaces?: boolean | UserCountOutputTypeCountFavoritePlacesArgs } // Custom InputTypes @@ -1325,6 +1427,13 @@ export namespace Prisma { where?: VoiceExperienceWhereInput } + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountFavoritePlacesArgs = { + where?: UserFavoritePlaceWhereInput + } + /** * Models @@ -1345,11 +1454,15 @@ export namespace Prisma { export type PlaceAvgAggregateOutputType = { latitude: number | null longitude: number | null + googleRating: number | null + googleUserRatingCount: number | null } export type PlaceSumAggregateOutputType = { latitude: number | null longitude: number | null + googleRating: number | null + googleUserRatingCount: number | null } export type PlaceMinAggregateOutputType = { @@ -1359,6 +1472,10 @@ export namespace Prisma { latitude: number | null longitude: number | null googlePrimaryType: string | null + googleBusinessStatus: string | null + googleRating: number | null + googleUserRatingCount: number | null + googlePayloadFetchedAt: Date | null createdAt: Date | null updatedAt: Date | null } @@ -1370,6 +1487,10 @@ export namespace Prisma { latitude: number | null longitude: number | null googlePrimaryType: string | null + googleBusinessStatus: string | null + googleRating: number | null + googleUserRatingCount: number | null + googlePayloadFetchedAt: Date | null createdAt: Date | null updatedAt: Date | null } @@ -1382,6 +1503,14 @@ export namespace Prisma { longitude: number googlePrimaryType: number googleTypes: number + googleBusinessStatus: number + googleRating: number + googleUserRatingCount: number + googleRegularOpeningHours: number + googleCurrentOpeningHours: number + googlePhotos: number + googlePayload: number + googlePayloadFetchedAt: number createdAt: number updatedAt: number _all: number @@ -1391,11 +1520,15 @@ export namespace Prisma { export type PlaceAvgAggregateInputType = { latitude?: true longitude?: true + googleRating?: true + googleUserRatingCount?: true } export type PlaceSumAggregateInputType = { latitude?: true longitude?: true + googleRating?: true + googleUserRatingCount?: true } export type PlaceMinAggregateInputType = { @@ -1405,6 +1538,10 @@ export namespace Prisma { latitude?: true longitude?: true googlePrimaryType?: true + googleBusinessStatus?: true + googleRating?: true + googleUserRatingCount?: true + googlePayloadFetchedAt?: true createdAt?: true updatedAt?: true } @@ -1416,6 +1553,10 @@ export namespace Prisma { latitude?: true longitude?: true googlePrimaryType?: true + googleBusinessStatus?: true + googleRating?: true + googleUserRatingCount?: true + googlePayloadFetchedAt?: true createdAt?: true updatedAt?: true } @@ -1428,6 +1569,14 @@ export namespace Prisma { longitude?: true googlePrimaryType?: true googleTypes?: true + googleBusinessStatus?: true + googleRating?: true + googleUserRatingCount?: true + googleRegularOpeningHours?: true + googleCurrentOpeningHours?: true + googlePhotos?: true + googlePayload?: true + googlePayloadFetchedAt?: true createdAt?: true updatedAt?: true _all?: true @@ -1527,6 +1676,14 @@ export namespace Prisma { longitude: number googlePrimaryType: string | null googleTypes: string[] + googleBusinessStatus: string | null + googleRating: number | null + googleUserRatingCount: number | null + googleRegularOpeningHours: JsonValue | null + googleCurrentOpeningHours: JsonValue | null + googlePhotos: JsonValue | null + googlePayload: JsonValue | null + googlePayloadFetchedAt: Date | null createdAt: Date updatedAt: Date _count: PlaceCountAggregateOutputType | null @@ -1558,9 +1715,18 @@ export namespace Prisma { longitude?: boolean googlePrimaryType?: boolean googleTypes?: boolean + googleBusinessStatus?: boolean + googleRating?: boolean + googleUserRatingCount?: boolean + googleRegularOpeningHours?: boolean + googleCurrentOpeningHours?: boolean + googlePhotos?: boolean + googlePayload?: boolean + googlePayloadFetchedAt?: boolean createdAt?: boolean updatedAt?: boolean experiences?: boolean | Place$experiencesArgs + favoriteUsers?: boolean | Place$favoriteUsersArgs _count?: boolean | PlaceCountOutputTypeDefaultArgs }, ExtArgs["result"]["place"]> @@ -1572,6 +1738,14 @@ export namespace Prisma { longitude?: boolean googlePrimaryType?: boolean googleTypes?: boolean + googleBusinessStatus?: boolean + googleRating?: boolean + googleUserRatingCount?: boolean + googleRegularOpeningHours?: boolean + googleCurrentOpeningHours?: boolean + googlePhotos?: boolean + googlePayload?: boolean + googlePayloadFetchedAt?: boolean createdAt?: boolean updatedAt?: boolean }, ExtArgs["result"]["place"]> @@ -1584,6 +1758,14 @@ export namespace Prisma { longitude?: boolean googlePrimaryType?: boolean googleTypes?: boolean + googleBusinessStatus?: boolean + googleRating?: boolean + googleUserRatingCount?: boolean + googleRegularOpeningHours?: boolean + googleCurrentOpeningHours?: boolean + googlePhotos?: boolean + googlePayload?: boolean + googlePayloadFetchedAt?: boolean createdAt?: boolean updatedAt?: boolean }, ExtArgs["result"]["place"]> @@ -1596,13 +1778,22 @@ export namespace Prisma { longitude?: boolean googlePrimaryType?: boolean googleTypes?: boolean + googleBusinessStatus?: boolean + googleRating?: boolean + googleUserRatingCount?: boolean + googleRegularOpeningHours?: boolean + googleCurrentOpeningHours?: boolean + googlePhotos?: boolean + googlePayload?: boolean + googlePayloadFetchedAt?: boolean createdAt?: boolean updatedAt?: boolean } - export type PlaceOmit = $Extensions.GetOmit<"id" | "googlePlaceId" | "name" | "latitude" | "longitude" | "googlePrimaryType" | "googleTypes" | "createdAt" | "updatedAt", ExtArgs["result"]["place"]> + export type PlaceOmit = $Extensions.GetOmit<"id" | "googlePlaceId" | "name" | "latitude" | "longitude" | "googlePrimaryType" | "googleTypes" | "googleBusinessStatus" | "googleRating" | "googleUserRatingCount" | "googleRegularOpeningHours" | "googleCurrentOpeningHours" | "googlePhotos" | "googlePayload" | "googlePayloadFetchedAt" | "createdAt" | "updatedAt", ExtArgs["result"]["place"]> export type PlaceInclude = { experiences?: boolean | Place$experiencesArgs + favoriteUsers?: boolean | Place$favoriteUsersArgs _count?: boolean | PlaceCountOutputTypeDefaultArgs } export type PlaceIncludeCreateManyAndReturn = {} @@ -1612,6 +1803,7 @@ export namespace Prisma { name: "Place" objects: { experiences: Prisma.$VoiceExperiencePayload[] + favoriteUsers: Prisma.$UserFavoritePlacePayload[] } scalars: $Extensions.GetPayloadResult<{ id: string @@ -1621,6 +1813,14 @@ export namespace Prisma { longitude: number googlePrimaryType: string | null googleTypes: string[] + googleBusinessStatus: string | null + googleRating: number | null + googleUserRatingCount: number | null + googleRegularOpeningHours: Prisma.JsonValue | null + googleCurrentOpeningHours: Prisma.JsonValue | null + googlePhotos: Prisma.JsonValue | null + googlePayload: Prisma.JsonValue | null + googlePayloadFetchedAt: Date | null createdAt: Date updatedAt: Date }, ExtArgs["result"]["place"]> @@ -2018,6 +2218,7 @@ export namespace Prisma { export interface Prisma__PlaceClient extends Prisma.PrismaPromise { readonly [Symbol.toStringTag]: "PrismaPromise" experiences = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + favoriteUsers = {}>(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. @@ -2054,6 +2255,14 @@ export namespace Prisma { readonly longitude: FieldRef<"Place", 'Float'> readonly googlePrimaryType: FieldRef<"Place", 'String'> readonly googleTypes: FieldRef<"Place", 'String[]'> + readonly googleBusinessStatus: FieldRef<"Place", 'String'> + readonly googleRating: FieldRef<"Place", 'Float'> + readonly googleUserRatingCount: FieldRef<"Place", 'Int'> + readonly googleRegularOpeningHours: FieldRef<"Place", 'Json'> + readonly googleCurrentOpeningHours: FieldRef<"Place", 'Json'> + readonly googlePhotos: FieldRef<"Place", 'Json'> + readonly googlePayload: FieldRef<"Place", 'Json'> + readonly googlePayloadFetchedAt: FieldRef<"Place", 'DateTime'> readonly createdAt: FieldRef<"Place", 'DateTime'> readonly updatedAt: FieldRef<"Place", 'DateTime'> } @@ -2472,6 +2681,30 @@ export namespace Prisma { distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[] } + /** + * Place.favoriteUsers + */ + export type Place$favoriteUsersArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + where?: UserFavoritePlaceWhereInput + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + cursor?: UserFavoritePlaceWhereUniqueInput + take?: number + skip?: number + distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[] + } + /** * Place without action */ @@ -2698,6 +2931,7 @@ export namespace Prisma { sessions?: boolean | User$sessionsArgs loginRequests?: boolean | User$loginRequestsArgs voiceExperiences?: boolean | User$voiceExperiencesArgs + favoritePlaces?: boolean | User$favoritePlacesArgs _count?: boolean | UserCountOutputTypeDefaultArgs }, ExtArgs["result"]["user"]> @@ -2745,6 +2979,7 @@ export namespace Prisma { sessions?: boolean | User$sessionsArgs loginRequests?: boolean | User$loginRequestsArgs voiceExperiences?: boolean | User$voiceExperiencesArgs + favoritePlaces?: boolean | User$favoritePlacesArgs _count?: boolean | UserCountOutputTypeDefaultArgs } export type UserIncludeCreateManyAndReturn = {} @@ -2756,6 +2991,7 @@ export namespace Prisma { sessions: Prisma.$UserSessionPayload[] loginRequests: Prisma.$TelegramLoginRequestPayload[] voiceExperiences: Prisma.$VoiceExperiencePayload[] + favoritePlaces: Prisma.$UserFavoritePlacePayload[] } scalars: $Extensions.GetPayloadResult<{ id: string @@ -3165,6 +3401,7 @@ export namespace Prisma { sessions = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> loginRequests = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> voiceExperiences = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + favoritePlaces = {}>(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. @@ -3668,6 +3905,30 @@ export namespace Prisma { distinct?: VoiceExperienceScalarFieldEnum | VoiceExperienceScalarFieldEnum[] } + /** + * User.favoritePlaces + */ + export type User$favoritePlacesArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + where?: UserFavoritePlaceWhereInput + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + cursor?: UserFavoritePlaceWhereUniqueInput + take?: number + skip?: number + distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[] + } + /** * User without action */ @@ -3687,6 +3948,1064 @@ export namespace Prisma { } + /** + * Model UserFavoritePlace + */ + + export type AggregateUserFavoritePlace = { + _count: UserFavoritePlaceCountAggregateOutputType | null + _min: UserFavoritePlaceMinAggregateOutputType | null + _max: UserFavoritePlaceMaxAggregateOutputType | null + } + + export type UserFavoritePlaceMinAggregateOutputType = { + id: string | null + userId: string | null + placeId: string | null + createdAt: Date | null + } + + export type UserFavoritePlaceMaxAggregateOutputType = { + id: string | null + userId: string | null + placeId: string | null + createdAt: Date | null + } + + export type UserFavoritePlaceCountAggregateOutputType = { + id: number + userId: number + placeId: number + createdAt: number + _all: number + } + + + export type UserFavoritePlaceMinAggregateInputType = { + id?: true + userId?: true + placeId?: true + createdAt?: true + } + + export type UserFavoritePlaceMaxAggregateInputType = { + id?: true + userId?: true + placeId?: true + createdAt?: true + } + + export type UserFavoritePlaceCountAggregateInputType = { + id?: true + userId?: true + placeId?: true + createdAt?: true + _all?: true + } + + export type UserFavoritePlaceAggregateArgs = { + /** + * Filter which UserFavoritePlace to aggregate. + */ + where?: UserFavoritePlaceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserFavoritePlaces to fetch. + */ + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: UserFavoritePlaceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserFavoritePlaces from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserFavoritePlaces. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned UserFavoritePlaces + **/ + _count?: true | UserFavoritePlaceCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: UserFavoritePlaceMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: UserFavoritePlaceMaxAggregateInputType + } + + export type GetUserFavoritePlaceAggregateType = { + [P in keyof T & keyof AggregateUserFavoritePlace]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type UserFavoritePlaceGroupByArgs = { + where?: UserFavoritePlaceWhereInput + orderBy?: UserFavoritePlaceOrderByWithAggregationInput | UserFavoritePlaceOrderByWithAggregationInput[] + by: UserFavoritePlaceScalarFieldEnum[] | UserFavoritePlaceScalarFieldEnum + having?: UserFavoritePlaceScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: UserFavoritePlaceCountAggregateInputType | true + _min?: UserFavoritePlaceMinAggregateInputType + _max?: UserFavoritePlaceMaxAggregateInputType + } + + export type UserFavoritePlaceGroupByOutputType = { + id: string + userId: string + placeId: string + createdAt: Date + _count: UserFavoritePlaceCountAggregateOutputType | null + _min: UserFavoritePlaceMinAggregateOutputType | null + _max: UserFavoritePlaceMaxAggregateOutputType | null + } + + type GetUserFavoritePlaceGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof UserFavoritePlaceGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type UserFavoritePlaceSelect = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + placeId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + }, ExtArgs["result"]["userFavoritePlace"]> + + export type UserFavoritePlaceSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + placeId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + }, ExtArgs["result"]["userFavoritePlace"]> + + export type UserFavoritePlaceSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + userId?: boolean + placeId?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + }, ExtArgs["result"]["userFavoritePlace"]> + + export type UserFavoritePlaceSelectScalar = { + id?: boolean + userId?: boolean + placeId?: boolean + createdAt?: boolean + } + + export type UserFavoritePlaceOmit = $Extensions.GetOmit<"id" | "userId" | "placeId" | "createdAt", ExtArgs["result"]["userFavoritePlace"]> + export type UserFavoritePlaceInclude = { + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + } + export type UserFavoritePlaceIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + } + export type UserFavoritePlaceIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + place?: boolean | PlaceDefaultArgs + } + + export type $UserFavoritePlacePayload = { + name: "UserFavoritePlace" + objects: { + user: Prisma.$UserPayload + place: Prisma.$PlacePayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + userId: string + placeId: string + createdAt: Date + }, ExtArgs["result"]["userFavoritePlace"]> + composites: {} + } + + type UserFavoritePlaceGetPayload = $Result.GetResult + + type UserFavoritePlaceCountArgs = + Omit & { + select?: UserFavoritePlaceCountAggregateInputType | true + } + + export interface UserFavoritePlaceDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['UserFavoritePlace'], meta: { name: 'UserFavoritePlace' } } + /** + * Find zero or one UserFavoritePlace that matches the filter. + * @param {UserFavoritePlaceFindUniqueArgs} args - Arguments to find a UserFavoritePlace + * @example + * // Get one UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one UserFavoritePlace that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {UserFavoritePlaceFindUniqueOrThrowArgs} args - Arguments to find a UserFavoritePlace + * @example + * // Get one UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserFavoritePlace that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceFindFirstArgs} args - Arguments to find a UserFavoritePlace + * @example + * // Get one UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserFavoritePlace that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceFindFirstOrThrowArgs} args - Arguments to find a UserFavoritePlace + * @example + * // Get one UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more UserFavoritePlaces that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all UserFavoritePlaces + * const userFavoritePlaces = await prisma.userFavoritePlace.findMany() + * + * // Get first 10 UserFavoritePlaces + * const userFavoritePlaces = await prisma.userFavoritePlace.findMany({ take: 10 }) + * + * // Only select the `id` + * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a UserFavoritePlace. + * @param {UserFavoritePlaceCreateArgs} args - Arguments to create a UserFavoritePlace. + * @example + * // Create one UserFavoritePlace + * const UserFavoritePlace = await prisma.userFavoritePlace.create({ + * data: { + * // ... data to create a UserFavoritePlace + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many UserFavoritePlaces. + * @param {UserFavoritePlaceCreateManyArgs} args - Arguments to create many UserFavoritePlaces. + * @example + * // Create many UserFavoritePlaces + * const userFavoritePlace = await prisma.userFavoritePlace.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many UserFavoritePlaces and returns the data saved in the database. + * @param {UserFavoritePlaceCreateManyAndReturnArgs} args - Arguments to create many UserFavoritePlaces. + * @example + * // Create many UserFavoritePlaces + * const userFavoritePlace = await prisma.userFavoritePlace.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many UserFavoritePlaces and only return the `id` + * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a UserFavoritePlace. + * @param {UserFavoritePlaceDeleteArgs} args - Arguments to delete one UserFavoritePlace. + * @example + * // Delete one UserFavoritePlace + * const UserFavoritePlace = await prisma.userFavoritePlace.delete({ + * where: { + * // ... filter to delete one UserFavoritePlace + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one UserFavoritePlace. + * @param {UserFavoritePlaceUpdateArgs} args - Arguments to update one UserFavoritePlace. + * @example + * // Update one UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more UserFavoritePlaces. + * @param {UserFavoritePlaceDeleteManyArgs} args - Arguments to filter UserFavoritePlaces to delete. + * @example + * // Delete a few UserFavoritePlaces + * const { count } = await prisma.userFavoritePlace.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserFavoritePlaces. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many UserFavoritePlaces + * const userFavoritePlace = await prisma.userFavoritePlace.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserFavoritePlaces and returns the data updated in the database. + * @param {UserFavoritePlaceUpdateManyAndReturnArgs} args - Arguments to update many UserFavoritePlaces. + * @example + * // Update many UserFavoritePlaces + * const userFavoritePlace = await prisma.userFavoritePlace.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more UserFavoritePlaces and only return the `id` + * const userFavoritePlaceWithIdOnly = await prisma.userFavoritePlace.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one UserFavoritePlace. + * @param {UserFavoritePlaceUpsertArgs} args - Arguments to update or create a UserFavoritePlace. + * @example + * // Update or create a UserFavoritePlace + * const userFavoritePlace = await prisma.userFavoritePlace.upsert({ + * create: { + * // ... data to create a UserFavoritePlace + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the UserFavoritePlace we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__UserFavoritePlaceClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of UserFavoritePlaces. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceCountArgs} args - Arguments to filter UserFavoritePlaces to count. + * @example + * // Count the number of UserFavoritePlaces + * const count = await prisma.userFavoritePlace.count({ + * where: { + * // ... the filter for the UserFavoritePlaces we want to count + * } + * }) + **/ + count( + 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 UserFavoritePlace. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Subset): Prisma.PrismaPromise> + + /** + * Group by UserFavoritePlace. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserFavoritePlaceGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends UserFavoritePlaceGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: UserFavoritePlaceGroupByArgs['orderBy'] } + : { orderBy?: UserFavoritePlaceGroupByArgs['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 ? GetUserFavoritePlaceGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the UserFavoritePlace model + */ + readonly fields: UserFavoritePlaceFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for UserFavoritePlace. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ + export interface Prisma__UserFavoritePlaceClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + place = {}>(args?: Subset>): Prisma__PlaceClient<$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 UserFavoritePlace model + */ + interface UserFavoritePlaceFieldRefs { + readonly id: FieldRef<"UserFavoritePlace", 'String'> + readonly userId: FieldRef<"UserFavoritePlace", 'String'> + readonly placeId: FieldRef<"UserFavoritePlace", 'String'> + readonly createdAt: FieldRef<"UserFavoritePlace", 'DateTime'> + } + + + // Custom InputTypes + /** + * UserFavoritePlace findUnique + */ + export type UserFavoritePlaceFindUniqueArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter, which UserFavoritePlace to fetch. + */ + where: UserFavoritePlaceWhereUniqueInput + } + + /** + * UserFavoritePlace findUniqueOrThrow + */ + export type UserFavoritePlaceFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter, which UserFavoritePlace to fetch. + */ + where: UserFavoritePlaceWhereUniqueInput + } + + /** + * UserFavoritePlace findFirst + */ + export type UserFavoritePlaceFindFirstArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter, which UserFavoritePlace to fetch. + */ + where?: UserFavoritePlaceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserFavoritePlaces to fetch. + */ + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserFavoritePlaces. + */ + cursor?: UserFavoritePlaceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserFavoritePlaces from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserFavoritePlaces. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserFavoritePlaces. + */ + distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[] + } + + /** + * UserFavoritePlace findFirstOrThrow + */ + export type UserFavoritePlaceFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter, which UserFavoritePlace to fetch. + */ + where?: UserFavoritePlaceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserFavoritePlaces to fetch. + */ + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserFavoritePlaces. + */ + cursor?: UserFavoritePlaceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserFavoritePlaces from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserFavoritePlaces. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserFavoritePlaces. + */ + distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[] + } + + /** + * UserFavoritePlace findMany + */ + export type UserFavoritePlaceFindManyArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter, which UserFavoritePlaces to fetch. + */ + where?: UserFavoritePlaceWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserFavoritePlaces to fetch. + */ + orderBy?: UserFavoritePlaceOrderByWithRelationInput | UserFavoritePlaceOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing UserFavoritePlaces. + */ + cursor?: UserFavoritePlaceWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserFavoritePlaces from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserFavoritePlaces. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserFavoritePlaces. + */ + distinct?: UserFavoritePlaceScalarFieldEnum | UserFavoritePlaceScalarFieldEnum[] + } + + /** + * UserFavoritePlace create + */ + export type UserFavoritePlaceCreateArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * The data needed to create a UserFavoritePlace. + */ + data: XOR + } + + /** + * UserFavoritePlace createMany + */ + export type UserFavoritePlaceCreateManyArgs = { + /** + * The data used to create many UserFavoritePlaces. + */ + data: UserFavoritePlaceCreateManyInput | UserFavoritePlaceCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * UserFavoritePlace createManyAndReturn + */ + export type UserFavoritePlaceCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelectCreateManyAndReturn | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * The data used to create many UserFavoritePlaces. + */ + data: UserFavoritePlaceCreateManyInput | UserFavoritePlaceCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceIncludeCreateManyAndReturn | null + } + + /** + * UserFavoritePlace update + */ + export type UserFavoritePlaceUpdateArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * The data needed to update a UserFavoritePlace. + */ + data: XOR + /** + * Choose, which UserFavoritePlace to update. + */ + where: UserFavoritePlaceWhereUniqueInput + } + + /** + * UserFavoritePlace updateMany + */ + export type UserFavoritePlaceUpdateManyArgs = { + /** + * The data used to update UserFavoritePlaces. + */ + data: XOR + /** + * Filter which UserFavoritePlaces to update + */ + where?: UserFavoritePlaceWhereInput + /** + * Limit how many UserFavoritePlaces to update. + */ + limit?: number + } + + /** + * UserFavoritePlace updateManyAndReturn + */ + export type UserFavoritePlaceUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * The data used to update UserFavoritePlaces. + */ + data: XOR + /** + * Filter which UserFavoritePlaces to update + */ + where?: UserFavoritePlaceWhereInput + /** + * Limit how many UserFavoritePlaces to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceIncludeUpdateManyAndReturn | null + } + + /** + * UserFavoritePlace upsert + */ + export type UserFavoritePlaceUpsertArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * The filter to search for the UserFavoritePlace to update in case it exists. + */ + where: UserFavoritePlaceWhereUniqueInput + /** + * In case the UserFavoritePlace found by the `where` argument doesn't exist, create a new UserFavoritePlace with this data. + */ + create: XOR + /** + * In case the UserFavoritePlace was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * UserFavoritePlace delete + */ + export type UserFavoritePlaceDeleteArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + /** + * Filter which UserFavoritePlace to delete. + */ + where: UserFavoritePlaceWhereUniqueInput + } + + /** + * UserFavoritePlace deleteMany + */ + export type UserFavoritePlaceDeleteManyArgs = { + /** + * Filter which UserFavoritePlaces to delete + */ + where?: UserFavoritePlaceWhereInput + /** + * Limit how many UserFavoritePlaces to delete. + */ + limit?: number + } + + /** + * UserFavoritePlace without action + */ + export type UserFavoritePlaceDefaultArgs = { + /** + * Select specific fields to fetch from the UserFavoritePlace + */ + select?: UserFavoritePlaceSelect | null + /** + * Omit specific fields from the UserFavoritePlace + */ + omit?: UserFavoritePlaceOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserFavoritePlaceInclude | null + } + + /** * Model UserSession */ @@ -5993,6 +7312,8 @@ export namespace Prisma { status: number transcript: number analysis: number + recordingPayload: number + promptHintsShown: number createdAt: number updatedAt: number _all: number @@ -6049,6 +7370,8 @@ export namespace Prisma { status?: true transcript?: true analysis?: true + recordingPayload?: true + promptHintsShown?: true createdAt?: true updatedAt?: true _all?: true @@ -6152,6 +7475,8 @@ export namespace Prisma { status: $Enums.VoiceExperienceStatus transcript: string | null analysis: JsonValue | null + recordingPayload: JsonValue | null + promptHintsShown: string[] createdAt: Date updatedAt: Date _count: VoiceExperienceCountAggregateOutputType | null @@ -6187,6 +7512,8 @@ export namespace Prisma { status?: boolean transcript?: boolean analysis?: boolean + recordingPayload?: boolean + promptHintsShown?: boolean createdAt?: boolean updatedAt?: boolean place?: boolean | PlaceDefaultArgs @@ -6205,6 +7532,8 @@ export namespace Prisma { status?: boolean transcript?: boolean analysis?: boolean + recordingPayload?: boolean + promptHintsShown?: boolean createdAt?: boolean updatedAt?: boolean place?: boolean | PlaceDefaultArgs @@ -6223,6 +7552,8 @@ export namespace Prisma { status?: boolean transcript?: boolean analysis?: boolean + recordingPayload?: boolean + promptHintsShown?: boolean createdAt?: boolean updatedAt?: boolean place?: boolean | PlaceDefaultArgs @@ -6241,11 +7572,13 @@ export namespace Prisma { status?: boolean transcript?: boolean analysis?: boolean + recordingPayload?: boolean + promptHintsShown?: boolean createdAt?: boolean updatedAt?: boolean } - export type VoiceExperienceOmit = $Extensions.GetOmit<"id" | "placeId" | "userId" | "durationSeconds" | "audioObjectKey" | "audioContentBase64" | "audioMimeType" | "audioAccessToken" | "status" | "transcript" | "analysis" | "createdAt" | "updatedAt", ExtArgs["result"]["voiceExperience"]> + export type VoiceExperienceOmit = $Extensions.GetOmit<"id" | "placeId" | "userId" | "durationSeconds" | "audioObjectKey" | "audioContentBase64" | "audioMimeType" | "audioAccessToken" | "status" | "transcript" | "analysis" | "recordingPayload" | "promptHintsShown" | "createdAt" | "updatedAt", ExtArgs["result"]["voiceExperience"]> export type VoiceExperienceInclude = { place?: boolean | PlaceDefaultArgs user?: boolean | VoiceExperience$userArgs @@ -6277,6 +7610,8 @@ export namespace Prisma { status: $Enums.VoiceExperienceStatus transcript: string | null analysis: Prisma.JsonValue | null + recordingPayload: Prisma.JsonValue | null + promptHintsShown: string[] createdAt: Date updatedAt: Date }, ExtArgs["result"]["voiceExperience"]> @@ -6715,6 +8050,8 @@ export namespace Prisma { readonly status: FieldRef<"VoiceExperience", 'VoiceExperienceStatus'> readonly transcript: FieldRef<"VoiceExperience", 'String'> readonly analysis: FieldRef<"VoiceExperience", 'Json'> + readonly recordingPayload: FieldRef<"VoiceExperience", 'Json'> + readonly promptHintsShown: FieldRef<"VoiceExperience", 'String[]'> readonly createdAt: FieldRef<"VoiceExperience", 'DateTime'> readonly updatedAt: FieldRef<"VoiceExperience", 'DateTime'> } @@ -7177,6 +8514,14 @@ export namespace Prisma { longitude: 'longitude', googlePrimaryType: 'googlePrimaryType', googleTypes: 'googleTypes', + googleBusinessStatus: 'googleBusinessStatus', + googleRating: 'googleRating', + googleUserRatingCount: 'googleUserRatingCount', + googleRegularOpeningHours: 'googleRegularOpeningHours', + googleCurrentOpeningHours: 'googleCurrentOpeningHours', + googlePhotos: 'googlePhotos', + googlePayload: 'googlePayload', + googlePayloadFetchedAt: 'googlePayloadFetchedAt', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -7200,6 +8545,16 @@ export namespace Prisma { export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum] + export const UserFavoritePlaceScalarFieldEnum: { + id: 'id', + userId: 'userId', + placeId: 'placeId', + createdAt: 'createdAt' + }; + + export type UserFavoritePlaceScalarFieldEnum = (typeof UserFavoritePlaceScalarFieldEnum)[keyof typeof UserFavoritePlaceScalarFieldEnum] + + export const UserSessionScalarFieldEnum: { id: 'id', tokenHash: 'tokenHash', @@ -7239,6 +8594,8 @@ export namespace Prisma { status: 'status', transcript: 'transcript', analysis: 'analysis', + recordingPayload: 'recordingPayload', + promptHintsShown: 'promptHintsShown', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -7270,14 +8627,6 @@ export namespace Prisma { export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode] - export const NullsOrder: { - first: 'first', - last: 'last' - }; - - export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] - - export const JsonNullValueFilter: { DbNull: typeof DbNull, JsonNull: typeof JsonNull, @@ -7287,6 +8636,14 @@ export namespace Prisma { export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter] + export const NullsOrder: { + first: 'first', + last: 'last' + }; + + export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder] + + /** * Field references */ @@ -7320,6 +8677,34 @@ export namespace Prisma { + /** + * Reference to a field of type 'Int' + */ + export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'> + + + + /** + * Reference to a field of type 'Int[]' + */ + export type ListIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int[]'> + + + + /** + * Reference to a field of type 'Json' + */ + export type JsonFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Json'> + + + + /** + * Reference to a field of type 'QueryMode' + */ + export type EnumQueryModeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'QueryMode'> + + + /** * Reference to a field of type 'DateTime' */ @@ -7341,20 +8726,6 @@ export namespace Prisma { - /** - * 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 'VoiceExperienceStatus' */ @@ -7367,20 +8738,6 @@ export namespace Prisma { */ export type ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'VoiceExperienceStatus[]'> - - - /** - * Reference to a field of type 'Json' - */ - export type JsonFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Json'> - - - - /** - * Reference to a field of type 'QueryMode' - */ - export type EnumQueryModeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'QueryMode'> - /** * Deep Input Types */ @@ -7397,9 +8754,18 @@ export namespace Prisma { longitude?: FloatFilter<"Place"> | number googlePrimaryType?: StringNullableFilter<"Place"> | string | null googleTypes?: StringNullableListFilter<"Place"> + googleBusinessStatus?: StringNullableFilter<"Place"> | string | null + googleRating?: FloatNullableFilter<"Place"> | number | null + googleUserRatingCount?: IntNullableFilter<"Place"> | number | null + googleRegularOpeningHours?: JsonNullableFilter<"Place"> + googleCurrentOpeningHours?: JsonNullableFilter<"Place"> + googlePhotos?: JsonNullableFilter<"Place"> + googlePayload?: JsonNullableFilter<"Place"> + googlePayloadFetchedAt?: DateTimeNullableFilter<"Place"> | Date | string | null createdAt?: DateTimeFilter<"Place"> | Date | string updatedAt?: DateTimeFilter<"Place"> | Date | string experiences?: VoiceExperienceListRelationFilter + favoriteUsers?: UserFavoritePlaceListRelationFilter } export type PlaceOrderByWithRelationInput = { @@ -7410,9 +8776,18 @@ export namespace Prisma { longitude?: SortOrder googlePrimaryType?: SortOrderInput | SortOrder googleTypes?: SortOrder + googleBusinessStatus?: SortOrderInput | SortOrder + googleRating?: SortOrderInput | SortOrder + googleUserRatingCount?: SortOrderInput | SortOrder + googleRegularOpeningHours?: SortOrderInput | SortOrder + googleCurrentOpeningHours?: SortOrderInput | SortOrder + googlePhotos?: SortOrderInput | SortOrder + googlePayload?: SortOrderInput | SortOrder + googlePayloadFetchedAt?: SortOrderInput | SortOrder createdAt?: SortOrder updatedAt?: SortOrder experiences?: VoiceExperienceOrderByRelationAggregateInput + favoriteUsers?: UserFavoritePlaceOrderByRelationAggregateInput } export type PlaceWhereUniqueInput = Prisma.AtLeast<{ @@ -7426,9 +8801,18 @@ export namespace Prisma { longitude?: FloatFilter<"Place"> | number googlePrimaryType?: StringNullableFilter<"Place"> | string | null googleTypes?: StringNullableListFilter<"Place"> + googleBusinessStatus?: StringNullableFilter<"Place"> | string | null + googleRating?: FloatNullableFilter<"Place"> | number | null + googleUserRatingCount?: IntNullableFilter<"Place"> | number | null + googleRegularOpeningHours?: JsonNullableFilter<"Place"> + googleCurrentOpeningHours?: JsonNullableFilter<"Place"> + googlePhotos?: JsonNullableFilter<"Place"> + googlePayload?: JsonNullableFilter<"Place"> + googlePayloadFetchedAt?: DateTimeNullableFilter<"Place"> | Date | string | null createdAt?: DateTimeFilter<"Place"> | Date | string updatedAt?: DateTimeFilter<"Place"> | Date | string experiences?: VoiceExperienceListRelationFilter + favoriteUsers?: UserFavoritePlaceListRelationFilter }, "id" | "googlePlaceId"> export type PlaceOrderByWithAggregationInput = { @@ -7439,6 +8823,14 @@ export namespace Prisma { longitude?: SortOrder googlePrimaryType?: SortOrderInput | SortOrder googleTypes?: SortOrder + googleBusinessStatus?: SortOrderInput | SortOrder + googleRating?: SortOrderInput | SortOrder + googleUserRatingCount?: SortOrderInput | SortOrder + googleRegularOpeningHours?: SortOrderInput | SortOrder + googleCurrentOpeningHours?: SortOrderInput | SortOrder + googlePhotos?: SortOrderInput | SortOrder + googlePayload?: SortOrderInput | SortOrder + googlePayloadFetchedAt?: SortOrderInput | SortOrder createdAt?: SortOrder updatedAt?: SortOrder _count?: PlaceCountOrderByAggregateInput @@ -7459,6 +8851,14 @@ export namespace Prisma { longitude?: FloatWithAggregatesFilter<"Place"> | number googlePrimaryType?: StringNullableWithAggregatesFilter<"Place"> | string | null googleTypes?: StringNullableListFilter<"Place"> + googleBusinessStatus?: StringNullableWithAggregatesFilter<"Place"> | string | null + googleRating?: FloatNullableWithAggregatesFilter<"Place"> | number | null + googleUserRatingCount?: IntNullableWithAggregatesFilter<"Place"> | number | null + googleRegularOpeningHours?: JsonNullableWithAggregatesFilter<"Place"> + googleCurrentOpeningHours?: JsonNullableWithAggregatesFilter<"Place"> + googlePhotos?: JsonNullableWithAggregatesFilter<"Place"> + googlePayload?: JsonNullableWithAggregatesFilter<"Place"> + googlePayloadFetchedAt?: DateTimeNullableWithAggregatesFilter<"Place"> | Date | string | null createdAt?: DateTimeWithAggregatesFilter<"Place"> | Date | string updatedAt?: DateTimeWithAggregatesFilter<"Place"> | Date | string } @@ -7480,6 +8880,7 @@ export namespace Prisma { sessions?: UserSessionListRelationFilter loginRequests?: TelegramLoginRequestListRelationFilter voiceExperiences?: VoiceExperienceListRelationFilter + favoritePlaces?: UserFavoritePlaceListRelationFilter } export type UserOrderByWithRelationInput = { @@ -7496,6 +8897,7 @@ export namespace Prisma { sessions?: UserSessionOrderByRelationAggregateInput loginRequests?: TelegramLoginRequestOrderByRelationAggregateInput voiceExperiences?: VoiceExperienceOrderByRelationAggregateInput + favoritePlaces?: UserFavoritePlaceOrderByRelationAggregateInput } export type UserWhereUniqueInput = Prisma.AtLeast<{ @@ -7515,6 +8917,7 @@ export namespace Prisma { sessions?: UserSessionListRelationFilter loginRequests?: TelegramLoginRequestListRelationFilter voiceExperiences?: VoiceExperienceListRelationFilter + favoritePlaces?: UserFavoritePlaceListRelationFilter }, "id" | "telegramId"> export type UserOrderByWithAggregationInput = { @@ -7549,6 +8952,60 @@ export namespace Prisma { updatedAt?: DateTimeWithAggregatesFilter<"User"> | Date | string } + export type UserFavoritePlaceWhereInput = { + AND?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[] + OR?: UserFavoritePlaceWhereInput[] + NOT?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[] + id?: StringFilter<"UserFavoritePlace"> | string + userId?: StringFilter<"UserFavoritePlace"> | string + placeId?: StringFilter<"UserFavoritePlace"> | string + createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string + user?: XOR + place?: XOR + } + + export type UserFavoritePlaceOrderByWithRelationInput = { + id?: SortOrder + userId?: SortOrder + placeId?: SortOrder + createdAt?: SortOrder + user?: UserOrderByWithRelationInput + place?: PlaceOrderByWithRelationInput + } + + export type UserFavoritePlaceWhereUniqueInput = Prisma.AtLeast<{ + id?: string + userId_placeId?: UserFavoritePlaceUserIdPlaceIdCompoundUniqueInput + AND?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[] + OR?: UserFavoritePlaceWhereInput[] + NOT?: UserFavoritePlaceWhereInput | UserFavoritePlaceWhereInput[] + userId?: StringFilter<"UserFavoritePlace"> | string + placeId?: StringFilter<"UserFavoritePlace"> | string + createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string + user?: XOR + place?: XOR + }, "id" | "userId_placeId"> + + export type UserFavoritePlaceOrderByWithAggregationInput = { + id?: SortOrder + userId?: SortOrder + placeId?: SortOrder + createdAt?: SortOrder + _count?: UserFavoritePlaceCountOrderByAggregateInput + _max?: UserFavoritePlaceMaxOrderByAggregateInput + _min?: UserFavoritePlaceMinOrderByAggregateInput + } + + export type UserFavoritePlaceScalarWhereWithAggregatesInput = { + AND?: UserFavoritePlaceScalarWhereWithAggregatesInput | UserFavoritePlaceScalarWhereWithAggregatesInput[] + OR?: UserFavoritePlaceScalarWhereWithAggregatesInput[] + NOT?: UserFavoritePlaceScalarWhereWithAggregatesInput | UserFavoritePlaceScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"UserFavoritePlace"> | string + userId?: StringWithAggregatesFilter<"UserFavoritePlace"> | string + placeId?: StringWithAggregatesFilter<"UserFavoritePlace"> | string + createdAt?: DateTimeWithAggregatesFilter<"UserFavoritePlace"> | Date | string + } + export type UserSessionWhereInput = { AND?: UserSessionWhereInput | UserSessionWhereInput[] OR?: UserSessionWhereInput[] @@ -7701,6 +9158,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus transcript?: StringNullableFilter<"VoiceExperience"> | string | null analysis?: JsonNullableFilter<"VoiceExperience"> + recordingPayload?: JsonNullableFilter<"VoiceExperience"> + promptHintsShown?: StringNullableListFilter<"VoiceExperience"> createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string place?: XOR @@ -7719,6 +9178,8 @@ export namespace Prisma { status?: SortOrder transcript?: SortOrderInput | SortOrder analysis?: SortOrderInput | SortOrder + recordingPayload?: SortOrderInput | SortOrder + promptHintsShown?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder place?: PlaceOrderByWithRelationInput @@ -7740,6 +9201,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus transcript?: StringNullableFilter<"VoiceExperience"> | string | null analysis?: JsonNullableFilter<"VoiceExperience"> + recordingPayload?: JsonNullableFilter<"VoiceExperience"> + promptHintsShown?: StringNullableListFilter<"VoiceExperience"> createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string place?: XOR @@ -7758,6 +9221,8 @@ export namespace Prisma { status?: SortOrder transcript?: SortOrderInput | SortOrder analysis?: SortOrderInput | SortOrder + recordingPayload?: SortOrderInput | SortOrder + promptHintsShown?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder _count?: VoiceExperienceCountOrderByAggregateInput @@ -7782,6 +9247,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusWithAggregatesFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus transcript?: StringNullableWithAggregatesFilter<"VoiceExperience"> | string | null analysis?: JsonNullableWithAggregatesFilter<"VoiceExperience"> + recordingPayload?: JsonNullableWithAggregatesFilter<"VoiceExperience"> + promptHintsShown?: StringNullableListFilter<"VoiceExperience"> createdAt?: DateTimeWithAggregatesFilter<"VoiceExperience"> | Date | string updatedAt?: DateTimeWithAggregatesFilter<"VoiceExperience"> | Date | string } @@ -7794,9 +9261,18 @@ export namespace Prisma { longitude: number googlePrimaryType?: string | null googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null createdAt?: Date | string updatedAt?: Date | string experiences?: VoiceExperienceCreateNestedManyWithoutPlaceInput + favoriteUsers?: UserFavoritePlaceCreateNestedManyWithoutPlaceInput } export type PlaceUncheckedCreateInput = { @@ -7807,9 +9283,18 @@ export namespace Prisma { longitude: number googlePrimaryType?: string | null googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null createdAt?: Date | string updatedAt?: Date | string experiences?: VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput + favoriteUsers?: UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput } export type PlaceUpdateInput = { @@ -7820,9 +9305,18 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string experiences?: VoiceExperienceUpdateManyWithoutPlaceNestedInput + favoriteUsers?: UserFavoritePlaceUpdateManyWithoutPlaceNestedInput } export type PlaceUncheckedUpdateInput = { @@ -7833,9 +9327,18 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string experiences?: VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput + favoriteUsers?: UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput } export type PlaceCreateManyInput = { @@ -7846,6 +9349,14 @@ export namespace Prisma { longitude: number googlePrimaryType?: string | null googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null createdAt?: Date | string updatedAt?: Date | string } @@ -7858,6 +9369,14 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -7870,6 +9389,14 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -7888,6 +9415,7 @@ export namespace Prisma { sessions?: UserSessionCreateNestedManyWithoutUserInput loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput } export type UserUncheckedCreateInput = { @@ -7904,6 +9432,7 @@ export namespace Prisma { sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput } export type UserUpdateInput = { @@ -7920,6 +9449,7 @@ export namespace Prisma { sessions?: UserSessionUpdateManyWithoutUserNestedInput loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateInput = { @@ -7936,6 +9466,7 @@ export namespace Prisma { sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput } export type UserCreateManyInput = { @@ -7977,6 +9508,53 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } + export type UserFavoritePlaceCreateInput = { + id?: string + createdAt?: Date | string + user: UserCreateNestedOneWithoutFavoritePlacesInput + place: PlaceCreateNestedOneWithoutFavoriteUsersInput + } + + export type UserFavoritePlaceUncheckedCreateInput = { + id?: string + userId: string + placeId: string + createdAt?: Date | string + } + + export type UserFavoritePlaceUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutFavoritePlacesNestedInput + place?: PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput + } + + export type UserFavoritePlaceUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + placeId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserFavoritePlaceCreateManyInput = { + id?: string + userId: string + placeId: string + createdAt?: Date | string + } + + export type UserFavoritePlaceUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserFavoritePlaceUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + placeId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type UserSessionCreateInput = { id?: string tokenHash: string @@ -8132,6 +9710,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string place: PlaceCreateNestedOneWithoutExperiencesInput @@ -8150,6 +9730,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } @@ -8164,6 +9746,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string place?: PlaceUpdateOneRequiredWithoutExperiencesNestedInput @@ -8182,6 +9766,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -8198,6 +9784,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } @@ -8212,6 +9800,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -8228,6 +9818,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -8281,6 +9873,62 @@ export namespace Prisma { isEmpty?: boolean } + export type FloatNullableFilter<$PrismaModel = never> = { + equals?: number | FloatFieldRefInput<$PrismaModel> | null + in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + lt?: number | FloatFieldRefInput<$PrismaModel> + lte?: number | FloatFieldRefInput<$PrismaModel> + gt?: number | FloatFieldRefInput<$PrismaModel> + gte?: number | FloatFieldRefInput<$PrismaModel> + not?: NestedFloatNullableFilter<$PrismaModel> | number | null + } + + export type IntNullableFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableFilter<$PrismaModel> | number | null + } + export type JsonNullableFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, 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 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> @@ -8298,6 +9946,12 @@ export namespace Prisma { none?: VoiceExperienceWhereInput } + export type UserFavoritePlaceListRelationFilter = { + every?: UserFavoritePlaceWhereInput + some?: UserFavoritePlaceWhereInput + none?: UserFavoritePlaceWhereInput + } + export type SortOrderInput = { sort: SortOrder nulls?: NullsOrder @@ -8307,6 +9961,10 @@ export namespace Prisma { _count?: SortOrder } + export type UserFavoritePlaceOrderByRelationAggregateInput = { + _count?: SortOrder + } + export type PlaceCountOrderByAggregateInput = { id?: SortOrder googlePlaceId?: SortOrder @@ -8315,6 +9973,14 @@ export namespace Prisma { longitude?: SortOrder googlePrimaryType?: SortOrder googleTypes?: SortOrder + googleBusinessStatus?: SortOrder + googleRating?: SortOrder + googleUserRatingCount?: SortOrder + googleRegularOpeningHours?: SortOrder + googleCurrentOpeningHours?: SortOrder + googlePhotos?: SortOrder + googlePayload?: SortOrder + googlePayloadFetchedAt?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder } @@ -8322,6 +9988,8 @@ export namespace Prisma { export type PlaceAvgOrderByAggregateInput = { latitude?: SortOrder longitude?: SortOrder + googleRating?: SortOrder + googleUserRatingCount?: SortOrder } export type PlaceMaxOrderByAggregateInput = { @@ -8331,6 +9999,10 @@ export namespace Prisma { latitude?: SortOrder longitude?: SortOrder googlePrimaryType?: SortOrder + googleBusinessStatus?: SortOrder + googleRating?: SortOrder + googleUserRatingCount?: SortOrder + googlePayloadFetchedAt?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder } @@ -8342,6 +10014,10 @@ export namespace Prisma { latitude?: SortOrder longitude?: SortOrder googlePrimaryType?: SortOrder + googleBusinessStatus?: SortOrder + googleRating?: SortOrder + googleUserRatingCount?: SortOrder + googlePayloadFetchedAt?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder } @@ -8349,6 +10025,8 @@ export namespace Prisma { export type PlaceSumOrderByAggregateInput = { latitude?: SortOrder longitude?: SortOrder + googleRating?: SortOrder + googleUserRatingCount?: SortOrder } export type StringWithAggregatesFilter<$PrismaModel = never> = { @@ -8403,6 +10081,78 @@ export namespace Prisma { _max?: NestedStringNullableFilter<$PrismaModel> } + export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | FloatFieldRefInput<$PrismaModel> | null + in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + lt?: number | FloatFieldRefInput<$PrismaModel> + lte?: number | FloatFieldRefInput<$PrismaModel> + gt?: number | FloatFieldRefInput<$PrismaModel> + gte?: number | FloatFieldRefInput<$PrismaModel> + not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedFloatNullableFilter<$PrismaModel> + _min?: NestedFloatNullableFilter<$PrismaModel> + _max?: NestedFloatNullableFilter<$PrismaModel> + } + + export type IntNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedIntNullableFilter<$PrismaModel> + _max?: NestedIntNullableFilter<$PrismaModel> + } + export type JsonNullableWithAggregatesFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, 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 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> @@ -8494,6 +10244,37 @@ export namespace Prisma { isNot?: UserWhereInput } + export type PlaceScalarRelationFilter = { + is?: PlaceWhereInput + isNot?: PlaceWhereInput + } + + export type UserFavoritePlaceUserIdPlaceIdCompoundUniqueInput = { + userId: string + placeId: string + } + + export type UserFavoritePlaceCountOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + placeId?: SortOrder + createdAt?: SortOrder + } + + export type UserFavoritePlaceMaxOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + placeId?: SortOrder + createdAt?: SortOrder + } + + export type UserFavoritePlaceMinOrderByAggregateInput = { + id?: SortOrder + userId?: SortOrder + placeId?: SortOrder + createdAt?: SortOrder + } + export type UserSessionCountOrderByAggregateInput = { id?: SortOrder tokenHash?: SortOrder @@ -8518,17 +10299,6 @@ export namespace Prisma { createdAt?: SortOrder } - 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 UserNullableScalarRelationFilter = { is?: UserWhereInput | null isNot?: UserWhereInput | null @@ -8581,22 +10351,6 @@ export namespace Prisma { telegramMessageId?: 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 IntFilter<$PrismaModel = never> = { equals?: number | IntFieldRefInput<$PrismaModel> in?: number[] | ListIntFieldRefInput<$PrismaModel> @@ -8614,34 +10368,6 @@ export namespace Prisma { notIn?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel> not?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel> | $Enums.VoiceExperienceStatus } - 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 PlaceScalarRelationFilter = { - is?: PlaceWhereInput - isNot?: PlaceWhereInput - } export type VoiceExperienceCountOrderByAggregateInput = { id?: SortOrder @@ -8655,6 +10381,8 @@ export namespace Prisma { status?: SortOrder transcript?: SortOrder analysis?: SortOrder + recordingPayload?: SortOrder + promptHintsShown?: SortOrder createdAt?: SortOrder updatedAt?: SortOrder } @@ -8722,32 +10450,6 @@ export namespace Prisma { _min?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel> _max?: NestedEnumVoiceExperienceStatusFilter<$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 PlaceCreategoogleTypesInput = { set: string[] @@ -8760,6 +10462,13 @@ export namespace Prisma { connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[] } + export type UserFavoritePlaceCreateNestedManyWithoutPlaceInput = { + create?: XOR | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[] + createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + } + export type VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput = { create?: XOR | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[] @@ -8767,6 +10476,13 @@ export namespace Prisma { connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[] } + export type UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput = { + create?: XOR | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[] + createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + } + export type StringFieldUpdateOperationsInput = { set?: string } @@ -8788,6 +10504,26 @@ export namespace Prisma { push?: string | string[] } + export type NullableFloatFieldUpdateOperationsInput = { + set?: number | null + increment?: number + decrement?: number + multiply?: number + divide?: number + } + + export type NullableIntFieldUpdateOperationsInput = { + set?: number | null + increment?: number + decrement?: number + multiply?: number + divide?: number + } + + export type NullableDateTimeFieldUpdateOperationsInput = { + set?: Date | string | null + } + export type DateTimeFieldUpdateOperationsInput = { set?: Date | string } @@ -8806,6 +10542,20 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserFavoritePlaceUpdateManyWithoutPlaceNestedInput = { + create?: XOR | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[] + upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput[] + createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope + set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput[] + updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput | UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput[] + deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + } + export type VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput = { create?: XOR | VoiceExperienceCreateWithoutPlaceInput[] | VoiceExperienceUncheckedCreateWithoutPlaceInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutPlaceInput | VoiceExperienceCreateOrConnectWithoutPlaceInput[] @@ -8820,6 +10570,20 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput = { + create?: XOR | UserFavoritePlaceCreateWithoutPlaceInput[] | UserFavoritePlaceUncheckedCreateWithoutPlaceInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutPlaceInput | UserFavoritePlaceCreateOrConnectWithoutPlaceInput[] + upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput[] + createMany?: UserFavoritePlaceCreateManyPlaceInputEnvelope + set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput[] + updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput | UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput[] + deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + } + export type UserSessionCreateNestedManyWithoutUserInput = { create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] @@ -8841,6 +10605,13 @@ export namespace Prisma { connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[] } + export type UserFavoritePlaceCreateNestedManyWithoutUserInput = { + create?: XOR | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[] + createMany?: UserFavoritePlaceCreateManyUserInputEnvelope + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + } + export type UserSessionUncheckedCreateNestedManyWithoutUserInput = { create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] @@ -8862,6 +10633,13 @@ export namespace Prisma { connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[] } + export type UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[] + createMany?: UserFavoritePlaceCreateManyUserInputEnvelope + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + } + export type BoolFieldUpdateOperationsInput = { set?: boolean } @@ -8908,6 +10686,20 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserFavoritePlaceUpdateManyWithoutUserNestedInput = { + create?: XOR | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[] + upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserFavoritePlaceCreateManyUserInputEnvelope + set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutUserInput | UserFavoritePlaceUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + } + export type UserSessionUncheckedUpdateManyWithoutUserNestedInput = { create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] @@ -8950,6 +10742,48 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | UserFavoritePlaceCreateWithoutUserInput[] | UserFavoritePlaceUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserFavoritePlaceCreateOrConnectWithoutUserInput | UserFavoritePlaceCreateOrConnectWithoutUserInput[] + upsert?: UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserFavoritePlaceCreateManyUserInputEnvelope + set?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + disconnect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + delete?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + connect?: UserFavoritePlaceWhereUniqueInput | UserFavoritePlaceWhereUniqueInput[] + update?: UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput | UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserFavoritePlaceUpdateManyWithWhereWithoutUserInput | UserFavoritePlaceUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + } + + export type UserCreateNestedOneWithoutFavoritePlacesInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutFavoritePlacesInput + connect?: UserWhereUniqueInput + } + + export type PlaceCreateNestedOneWithoutFavoriteUsersInput = { + create?: XOR + connectOrCreate?: PlaceCreateOrConnectWithoutFavoriteUsersInput + connect?: PlaceWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutFavoritePlacesNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutFavoritePlacesInput + upsert?: UserUpsertWithoutFavoritePlacesInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutFavoritePlacesInput> + } + + export type PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput = { + create?: XOR + connectOrCreate?: PlaceCreateOrConnectWithoutFavoriteUsersInput + upsert?: PlaceUpsertWithoutFavoriteUsersInput + connect?: PlaceWhereUniqueInput + update?: XOR, PlaceUncheckedUpdateWithoutFavoriteUsersInput> + } + export type UserCreateNestedOneWithoutSessionsInput = { create?: XOR connectOrCreate?: UserCreateOrConnectWithoutSessionsInput @@ -8970,14 +10804,6 @@ export namespace Prisma { connect?: UserWhereUniqueInput } - export type NullableIntFieldUpdateOperationsInput = { - set?: number | null - increment?: number - decrement?: number - multiply?: number - divide?: number - } - export type UserUpdateOneWithoutLoginRequestsNestedInput = { create?: XOR connectOrCreate?: UserCreateOrConnectWithoutLoginRequestsInput @@ -8988,6 +10814,10 @@ export namespace Prisma { update?: XOR, UserUncheckedUpdateWithoutLoginRequestsInput> } + export type VoiceExperienceCreatepromptHintsShownInput = { + set: string[] + } + export type PlaceCreateNestedOneWithoutExperiencesInput = { create?: XOR connectOrCreate?: PlaceCreateOrConnectWithoutExperiencesInput @@ -9012,6 +10842,11 @@ export namespace Prisma { set?: $Enums.VoiceExperienceStatus } + export type VoiceExperienceUpdatepromptHintsShownInput = { + set?: string[] + push?: string | string[] + } + export type PlaceUpdateOneRequiredWithoutExperiencesNestedInput = { create?: XOR connectOrCreate?: PlaceCreateOrConnectWithoutExperiencesInput @@ -9069,6 +10904,39 @@ export namespace Prisma { not?: NestedStringNullableFilter<$PrismaModel> | string | null } + export type NestedFloatNullableFilter<$PrismaModel = never> = { + equals?: number | FloatFieldRefInput<$PrismaModel> | null + in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + lt?: number | FloatFieldRefInput<$PrismaModel> + lte?: number | FloatFieldRefInput<$PrismaModel> + gt?: number | FloatFieldRefInput<$PrismaModel> + gte?: number | FloatFieldRefInput<$PrismaModel> + not?: NestedFloatNullableFilter<$PrismaModel> | number | null + } + + export type NestedIntNullableFilter<$PrismaModel = never> = { + equals?: number | IntFieldRefInput<$PrismaModel> | null + in?: number[] | ListIntFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null + lt?: number | IntFieldRefInput<$PrismaModel> + lte?: number | IntFieldRefInput<$PrismaModel> + gt?: number | IntFieldRefInput<$PrismaModel> + gte?: number | IntFieldRefInput<$PrismaModel> + not?: NestedIntNullableFilter<$PrismaModel> | number | null + } + + export type NestedDateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null + in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + notIn?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> | null + lt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | DateTimeFieldRefInput<$PrismaModel> + not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null + } + export type NestedDateTimeFilter<$PrismaModel = never> = { equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> in?: Date[] | string[] | ListDateTimeFieldRefInput<$PrismaModel> @@ -9141,7 +11009,23 @@ export namespace Prisma { _max?: NestedStringNullableFilter<$PrismaModel> } - export type NestedIntNullableFilter<$PrismaModel = never> = { + export type NestedFloatNullableWithAggregatesFilter<$PrismaModel = never> = { + equals?: number | FloatFieldRefInput<$PrismaModel> | null + in?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + notIn?: number[] | ListFloatFieldRefInput<$PrismaModel> | null + lt?: number | FloatFieldRefInput<$PrismaModel> + lte?: number | FloatFieldRefInput<$PrismaModel> + gt?: number | FloatFieldRefInput<$PrismaModel> + gte?: number | FloatFieldRefInput<$PrismaModel> + not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedFloatNullableFilter<$PrismaModel> + _min?: NestedFloatNullableFilter<$PrismaModel> + _max?: NestedFloatNullableFilter<$PrismaModel> + } + + export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: number | IntFieldRefInput<$PrismaModel> | null in?: number[] | ListIntFieldRefInput<$PrismaModel> | null notIn?: number[] | ListIntFieldRefInput<$PrismaModel> | null @@ -9149,7 +11033,49 @@ export namespace Prisma { lte?: number | IntFieldRefInput<$PrismaModel> gt?: number | IntFieldRefInput<$PrismaModel> gte?: number | IntFieldRefInput<$PrismaModel> - not?: NestedIntNullableFilter<$PrismaModel> | number | null + not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null + _count?: NestedIntNullableFilter<$PrismaModel> + _avg?: NestedFloatNullableFilter<$PrismaModel> + _sum?: NestedIntNullableFilter<$PrismaModel> + _min?: NestedIntNullableFilter<$PrismaModel> + _max?: NestedIntNullableFilter<$PrismaModel> + } + export type NestedJsonNullableFilter<$PrismaModel = never> = + | PatchUndefined< + Either>, 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 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> = { @@ -9179,33 +11105,6 @@ export namespace Prisma { _max?: NestedBoolFilter<$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 NestedEnumVoiceExperienceStatusFilter<$PrismaModel = never> = { equals?: $Enums.VoiceExperienceStatus | EnumVoiceExperienceStatusFieldRefInput<$PrismaModel> in?: $Enums.VoiceExperienceStatus[] | ListEnumVoiceExperienceStatusFieldRefInput<$PrismaModel> @@ -9238,29 +11137,6 @@ export namespace Prisma { _min?: NestedEnumVoiceExperienceStatusFilter<$PrismaModel> _max?: NestedEnumVoiceExperienceStatusFilter<$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 VoiceExperienceCreateWithoutPlaceInput = { id?: string @@ -9272,6 +11148,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string user?: UserCreateNestedOneWithoutVoiceExperiencesInput @@ -9288,6 +11166,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } @@ -9302,6 +11182,28 @@ export namespace Prisma { skipDuplicates?: boolean } + export type UserFavoritePlaceCreateWithoutPlaceInput = { + id?: string + createdAt?: Date | string + user: UserCreateNestedOneWithoutFavoritePlacesInput + } + + export type UserFavoritePlaceUncheckedCreateWithoutPlaceInput = { + id?: string + userId: string + createdAt?: Date | string + } + + export type UserFavoritePlaceCreateOrConnectWithoutPlaceInput = { + where: UserFavoritePlaceWhereUniqueInput + create: XOR + } + + export type UserFavoritePlaceCreateManyPlaceInputEnvelope = { + data: UserFavoritePlaceCreateManyPlaceInput | UserFavoritePlaceCreateManyPlaceInput[] + skipDuplicates?: boolean + } + export type VoiceExperienceUpsertWithWhereUniqueWithoutPlaceInput = { where: VoiceExperienceWhereUniqueInput update: XOR @@ -9333,10 +11235,38 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFilter<"VoiceExperience"> | $Enums.VoiceExperienceStatus transcript?: StringNullableFilter<"VoiceExperience"> | string | null analysis?: JsonNullableFilter<"VoiceExperience"> + recordingPayload?: JsonNullableFilter<"VoiceExperience"> + promptHintsShown?: StringNullableListFilter<"VoiceExperience"> createdAt?: DateTimeFilter<"VoiceExperience"> | Date | string updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string } + export type UserFavoritePlaceUpsertWithWhereUniqueWithoutPlaceInput = { + where: UserFavoritePlaceWhereUniqueInput + update: XOR + create: XOR + } + + export type UserFavoritePlaceUpdateWithWhereUniqueWithoutPlaceInput = { + where: UserFavoritePlaceWhereUniqueInput + data: XOR + } + + export type UserFavoritePlaceUpdateManyWithWhereWithoutPlaceInput = { + where: UserFavoritePlaceScalarWhereInput + data: XOR + } + + export type UserFavoritePlaceScalarWhereInput = { + AND?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + OR?: UserFavoritePlaceScalarWhereInput[] + NOT?: UserFavoritePlaceScalarWhereInput | UserFavoritePlaceScalarWhereInput[] + id?: StringFilter<"UserFavoritePlace"> | string + userId?: StringFilter<"UserFavoritePlace"> | string + placeId?: StringFilter<"UserFavoritePlace"> | string + createdAt?: DateTimeFilter<"UserFavoritePlace"> | Date | string + } + export type UserSessionCreateWithoutUserInput = { id?: string tokenHash: string @@ -9405,6 +11335,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string place: PlaceCreateNestedOneWithoutExperiencesInput @@ -9421,6 +11353,8 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } @@ -9435,6 +11369,28 @@ export namespace Prisma { skipDuplicates?: boolean } + export type UserFavoritePlaceCreateWithoutUserInput = { + id?: string + createdAt?: Date | string + place: PlaceCreateNestedOneWithoutFavoriteUsersInput + } + + export type UserFavoritePlaceUncheckedCreateWithoutUserInput = { + id?: string + placeId: string + createdAt?: Date | string + } + + export type UserFavoritePlaceCreateOrConnectWithoutUserInput = { + where: UserFavoritePlaceWhereUniqueInput + create: XOR + } + + export type UserFavoritePlaceCreateManyUserInputEnvelope = { + data: UserFavoritePlaceCreateManyUserInput | UserFavoritePlaceCreateManyUserInput[] + skipDuplicates?: boolean + } + export type UserSessionUpsertWithWhereUniqueWithoutUserInput = { where: UserSessionWhereUniqueInput update: XOR @@ -9510,6 +11466,202 @@ export namespace Prisma { data: XOR } + export type UserFavoritePlaceUpsertWithWhereUniqueWithoutUserInput = { + where: UserFavoritePlaceWhereUniqueInput + update: XOR + create: XOR + } + + export type UserFavoritePlaceUpdateWithWhereUniqueWithoutUserInput = { + where: UserFavoritePlaceWhereUniqueInput + data: XOR + } + + export type UserFavoritePlaceUpdateManyWithWhereWithoutUserInput = { + where: UserFavoritePlaceScalarWhereInput + data: XOR + } + + export type UserCreateWithoutFavoritePlacesInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + isAdmin?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sessions?: UserSessionCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + } + + export type UserUncheckedCreateWithoutFavoritePlacesInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + isAdmin?: boolean + createdAt?: Date | string + updatedAt?: Date | string + sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + } + + export type UserCreateOrConnectWithoutFavoritePlacesInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type PlaceCreateWithoutFavoriteUsersInput = { + id?: string + googlePlaceId: string + name: string + latitude: number + longitude: number + googlePrimaryType?: string | null + googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + experiences?: VoiceExperienceCreateNestedManyWithoutPlaceInput + } + + export type PlaceUncheckedCreateWithoutFavoriteUsersInput = { + id?: string + googlePlaceId: string + name: string + latitude: number + longitude: number + googlePrimaryType?: string | null + googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null + createdAt?: Date | string + updatedAt?: Date | string + experiences?: VoiceExperienceUncheckedCreateNestedManyWithoutPlaceInput + } + + export type PlaceCreateOrConnectWithoutFavoriteUsersInput = { + where: PlaceWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutFavoritePlacesInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutFavoritePlacesInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutFavoritePlacesInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + isAdmin?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + } + + export type UserUncheckedUpdateWithoutFavoritePlacesInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + isAdmin?: BoolFieldUpdateOperationsInput | boolean + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + } + + export type PlaceUpsertWithoutFavoriteUsersInput = { + update: XOR + create: XOR + where?: PlaceWhereInput + } + + export type PlaceUpdateToOneWithWhereWithoutFavoriteUsersInput = { + where?: PlaceWhereInput + data: XOR + } + + export type PlaceUpdateWithoutFavoriteUsersInput = { + id?: StringFieldUpdateOperationsInput | string + googlePlaceId?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + latitude?: FloatFieldUpdateOperationsInput | number + longitude?: FloatFieldUpdateOperationsInput | number + googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null + googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + experiences?: VoiceExperienceUpdateManyWithoutPlaceNestedInput + } + + export type PlaceUncheckedUpdateWithoutFavoriteUsersInput = { + id?: StringFieldUpdateOperationsInput | string + googlePlaceId?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + latitude?: FloatFieldUpdateOperationsInput | number + longitude?: FloatFieldUpdateOperationsInput | number + googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null + googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + experiences?: VoiceExperienceUncheckedUpdateManyWithoutPlaceNestedInput + } + export type UserCreateWithoutSessionsInput = { id?: string telegramId: string @@ -9523,6 +11675,7 @@ export namespace Prisma { updatedAt?: Date | string loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutSessionsInput = { @@ -9538,6 +11691,7 @@ export namespace Prisma { updatedAt?: Date | string loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutSessionsInput = { @@ -9569,6 +11723,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutSessionsInput = { @@ -9584,6 +11739,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput } export type UserCreateWithoutLoginRequestsInput = { @@ -9599,6 +11755,7 @@ export namespace Prisma { updatedAt?: Date | string sessions?: UserSessionCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutLoginRequestsInput = { @@ -9614,6 +11771,7 @@ export namespace Prisma { updatedAt?: Date | string sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutLoginRequestsInput = { @@ -9645,6 +11803,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string sessions?: UserSessionUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutLoginRequestsInput = { @@ -9660,6 +11819,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput } export type PlaceCreateWithoutExperiencesInput = { @@ -9670,8 +11830,17 @@ export namespace Prisma { longitude: number googlePrimaryType?: string | null googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null createdAt?: Date | string updatedAt?: Date | string + favoriteUsers?: UserFavoritePlaceCreateNestedManyWithoutPlaceInput } export type PlaceUncheckedCreateWithoutExperiencesInput = { @@ -9682,8 +11851,17 @@ export namespace Prisma { longitude: number googlePrimaryType?: string | null googleTypes?: PlaceCreategoogleTypesInput | string[] + googleBusinessStatus?: string | null + googleRating?: number | null + googleUserRatingCount?: number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: Date | string | null createdAt?: Date | string updatedAt?: Date | string + favoriteUsers?: UserFavoritePlaceUncheckedCreateNestedManyWithoutPlaceInput } export type PlaceCreateOrConnectWithoutExperiencesInput = { @@ -9704,6 +11882,7 @@ export namespace Prisma { updatedAt?: Date | string sessions?: UserSessionCreateNestedManyWithoutUserInput loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutVoiceExperiencesInput = { @@ -9719,6 +11898,7 @@ export namespace Prisma { updatedAt?: Date | string sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput + favoritePlaces?: UserFavoritePlaceUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutVoiceExperiencesInput = { @@ -9745,8 +11925,17 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + favoriteUsers?: UserFavoritePlaceUpdateManyWithoutPlaceNestedInput } export type PlaceUncheckedUpdateWithoutExperiencesInput = { @@ -9757,8 +11946,17 @@ export namespace Prisma { longitude?: FloatFieldUpdateOperationsInput | number googlePrimaryType?: NullableStringFieldUpdateOperationsInput | string | null googleTypes?: PlaceUpdategoogleTypesInput | string[] + googleBusinessStatus?: NullableStringFieldUpdateOperationsInput | string | null + googleRating?: NullableFloatFieldUpdateOperationsInput | number | null + googleUserRatingCount?: NullableIntFieldUpdateOperationsInput | number | null + googleRegularOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googleCurrentOpeningHours?: NullableJsonNullValueInput | InputJsonValue + googlePhotos?: NullableJsonNullValueInput | InputJsonValue + googlePayload?: NullableJsonNullValueInput | InputJsonValue + googlePayloadFetchedAt?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + favoriteUsers?: UserFavoritePlaceUncheckedUpdateManyWithoutPlaceNestedInput } export type UserUpsertWithoutVoiceExperiencesInput = { @@ -9785,6 +11983,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string sessions?: UserSessionUpdateManyWithoutUserNestedInput loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutVoiceExperiencesInput = { @@ -9800,6 +11999,7 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput + favoritePlaces?: UserFavoritePlaceUncheckedUpdateManyWithoutUserNestedInput } export type VoiceExperienceCreateManyPlaceInput = { @@ -9813,10 +12013,18 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } + export type UserFavoritePlaceCreateManyPlaceInput = { + id?: string + userId: string + createdAt?: Date | string + } + export type VoiceExperienceUpdateWithoutPlaceInput = { id?: StringFieldUpdateOperationsInput | string durationSeconds?: IntFieldUpdateOperationsInput | number @@ -9827,6 +12035,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string user?: UserUpdateOneWithoutVoiceExperiencesNestedInput @@ -9843,6 +12053,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -9858,10 +12070,30 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } + export type UserFavoritePlaceUpdateWithoutPlaceInput = { + id?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutFavoritePlacesNestedInput + } + + export type UserFavoritePlaceUncheckedUpdateWithoutPlaceInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserFavoritePlaceUncheckedUpdateManyWithoutPlaceInput = { + id?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type UserSessionCreateManyUserInput = { id?: string tokenHash: string @@ -9892,10 +12124,18 @@ export namespace Prisma { status?: $Enums.VoiceExperienceStatus transcript?: string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceCreatepromptHintsShownInput | string[] createdAt?: Date | string updatedAt?: Date | string } + export type UserFavoritePlaceCreateManyUserInput = { + id?: string + placeId: string + createdAt?: Date | string + } + export type UserSessionUpdateWithoutUserInput = { id?: StringFieldUpdateOperationsInput | string tokenHash?: StringFieldUpdateOperationsInput | string @@ -9963,6 +12203,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string place?: PlaceUpdateOneRequiredWithoutExperiencesNestedInput @@ -9979,6 +12221,8 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } @@ -9994,10 +12238,30 @@ export namespace Prisma { status?: EnumVoiceExperienceStatusFieldUpdateOperationsInput | $Enums.VoiceExperienceStatus transcript?: NullableStringFieldUpdateOperationsInput | string | null analysis?: NullableJsonNullValueInput | InputJsonValue + recordingPayload?: NullableJsonNullValueInput | InputJsonValue + promptHintsShown?: VoiceExperienceUpdatepromptHintsShownInput | string[] createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } + export type UserFavoritePlaceUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + place?: PlaceUpdateOneRequiredWithoutFavoriteUsersNestedInput + } + + export type UserFavoritePlaceUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + placeId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserFavoritePlaceUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + placeId?: StringFieldUpdateOperationsInput | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + /** diff --git a/src/generated/prisma/index.js b/src/generated/prisma/index.js index 5f0ddd0..9d340c7 100644 --- a/src/generated/prisma/index.js +++ b/src/generated/prisma/index.js @@ -101,6 +101,14 @@ exports.Prisma.PlaceScalarFieldEnum = { longitude: 'longitude', googlePrimaryType: 'googlePrimaryType', googleTypes: 'googleTypes', + googleBusinessStatus: 'googleBusinessStatus', + googleRating: 'googleRating', + googleUserRatingCount: 'googleUserRatingCount', + googleRegularOpeningHours: 'googleRegularOpeningHours', + googleCurrentOpeningHours: 'googleCurrentOpeningHours', + googlePhotos: 'googlePhotos', + googlePayload: 'googlePayload', + googlePayloadFetchedAt: 'googlePayloadFetchedAt', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -118,6 +126,13 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserFavoritePlaceScalarFieldEnum = { + id: 'id', + userId: 'userId', + placeId: 'placeId', + createdAt: 'createdAt' +}; + exports.Prisma.UserSessionScalarFieldEnum = { id: 'id', tokenHash: 'tokenHash', @@ -151,6 +166,8 @@ exports.Prisma.VoiceExperienceScalarFieldEnum = { status: 'status', transcript: 'transcript', analysis: 'analysis', + recordingPayload: 'recordingPayload', + promptHintsShown: 'promptHintsShown', createdAt: 'createdAt', updatedAt: 'updatedAt' }; @@ -170,16 +187,16 @@ exports.Prisma.QueryMode = { insensitive: 'insensitive' }; -exports.Prisma.NullsOrder = { - first: 'first', - last: 'last' -}; - exports.Prisma.JsonNullValueFilter = { DbNull: Prisma.DbNull, JsonNull: Prisma.JsonNull, AnyNull: Prisma.AnyNull }; + +exports.Prisma.NullsOrder = { + first: 'first', + last: 'last' +}; exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { UPLOADED: 'UPLOADED', TRANSCRIBING: 'TRANSCRIBING', @@ -192,6 +209,7 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserFavoritePlace: 'UserFavoritePlace', UserSession: 'UserSession', TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' @@ -204,14 +222,14 @@ const config = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n googlePrimaryType String?\n googleTypes String[] @default([])\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n isAdmin Boolean @default(false)\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n telegramChatId String?\n telegramMessageId Int?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n audioContentBase64 String?\n audioMimeType String?\n audioAccessToken String? @unique\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n googlePrimaryType String?\n googleTypes String[] @default([])\n googleBusinessStatus String?\n googleRating Float?\n googleUserRatingCount Int?\n googleRegularOpeningHours Json?\n googleCurrentOpeningHours Json?\n googlePhotos Json?\n googlePayload Json?\n googlePayloadFetchedAt DateTime?\n experiences VoiceExperience[]\n favoriteUsers UserFavoritePlace[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n isAdmin Boolean @default(false)\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n favoritePlaces UserFavoritePlace[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserFavoritePlace {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id])\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n createdAt DateTime @default(now())\n\n @@unique([userId, placeId])\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n telegramChatId String?\n telegramMessageId Int?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n audioContentBase64 String?\n audioMimeType String?\n audioAccessToken String? @unique\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n recordingPayload Json?\n promptHintsShown String[] @default([])\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googlePrimaryType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramChatId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramMessageId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioContentBase64\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioAccessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googlePrimaryType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleTypes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleBusinessStatus\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleRating\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"googleUserRatingCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"googleRegularOpeningHours\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googleCurrentOpeningHours\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePhotos\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePayload\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"googlePayloadFetchedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"favoriteUsers\",\"kind\":\"object\",\"type\":\"UserFavoritePlace\",\"relationName\":\"PlaceToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isAdmin\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"favoritePlaces\",\"kind\":\"object\",\"type\":\"UserFavoritePlace\",\"relationName\":\"UserToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserFavoritePlace\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserFavoritePlace\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToUserFavoritePlace\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramChatId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramMessageId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioContentBase64\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"audioAccessToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"recordingPayload\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"promptHintsShown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"_count\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.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\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"audioContentBase64\",\"audioMimeType\",\"audioAccessToken\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"telegramChatId\",\"telegramMessageId\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"isAdmin\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"googlePrimaryType\",\"googleTypes\",\"has\",\"hasEvery\",\"hasSome\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"push\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "ugIxUA0JAACvAQAgYgAAtAEAMGMAABgAEGQAALQBADBlAQAAAAFxQACsAQAhckAArAEAIZMBAQAAAAGUAQEAtQEAIZUBCAC2AQAhlgEIALYBACGXAQEAqgEAIZgBAACyAQAgAQAAAAEAIBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAtQEAIWYBALUBACFnAQCqAQAhaAIAvQEAIWkBALUBACFqAQCqAQAhawEAqgEAIWwBAKoBACFuAAC-AW4ibwEAqgEAIXAAAL8BACBxQACsAQAhckAArAEAIQgDAACiAgAgBAAAoQIAIGcAAMEBACBqAADBAQAgawAAwQEAIGwAAMEBACBvAADBAQAgcAAAwQEAIBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAAAABZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAAAABbgAAvgFuIm8BAKoBACFwAAC_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_AQAgcUAArAEAIXJAAKwBACEIcwIAAAABdAIAAAAEdQIAAAAEdgIAAAABdwIAAAABeAIAAAABeQIAAAABegIAlAEAIQRzAAAAbgJ0AAAAbgh1AAAAbgh6AACZAW4iDHOAAAAAAXaAAAAAAXeAAAAAAXiAAAAAAXmAAAAAAXqAAAAAAXsBAAAAAXwBAAAAAX0BAAAAAX6AAAAAAX-AAAAAAYABgAAAAAEPCQAArwEAIGIAALQBADBjAAAYABBkAAC0AQAwZQEAtQEAIXFAAKwBACFyQACsAQAhkwEBALUBACGUAQEAtQEAIZUBCAC2AQAhlgEIALYBACGXAQEAqgEAIZgBAACyAQAgnAEAABgAIJ0BAAAYACAAAAAAAAABoQEBAAAAAQWhAQIAAAABqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAQGhAQEAAAABAaEBAAAAbgIBoQFAAAAAAQUWAACzAgAgFwAAuQIAIJ4BAAC0AgAgnwEAALgCACCkAQAAAQAgBxYAALECACAXAAC2AgAgngEAALICACCfAQAAtQIAIKIBAAAHACCjAQAABwAgpAEAAC4AIAMWAACzAgAgngEAALQCACCkAQAAAQAgAxYAALECACCeAQAAsgIAIKQBAAAuACAAAAAAAAWhAQIAAAABqAECAAAAAakBAgAAAAGqAQIAAAABqwECAAAAAQcWAACsAgAgFwAArwIAIJ4BAACtAgAgnwEAAK4CACCiAQAABwAgowEAAAcAIKQBAAAuACADFgAArAIAIJ4BAACtAgAgpAEAAC4AIAAAAAUWAACnAgAgFwAAqgIAIJ4BAACoAgAgnwEAAKkCACCkAQAALgAgAxYAAKcCACCeAQAAqAIAIKQBAAAuACAAAAABoQEgAAAAAQsWAAD8AQAwFwAAgQIAMJ4BAAD9AQAwnwEAAP4BADCgAQAA_wEAIKEBAACAAgAwogEAAIACADCjAQAAgAIAMKQBAACAAgAwpQEAAIICADCmAQAAgwIAMAsWAADwAQAwFwAA9QEAMJ4BAADxAQAwnwEAAPIBADCgAQAA8wEAIKEBAAD0AQAwogEAAPQBADCjAQAA9AEAMKQBAAD0AQAwpQEAAPYBADCmAQAA9wEAMAsWAADkAQAwFwAA6QEAMJ4BAADlAQAwnwEAAOYBADCgAQAA5wEAIKEBAADoAQAwogEAAOgBADCjAQAA6AEAMKQBAADoAQAwpQEAAOoBADCmAQAA6wEAMA0DAADOAQAgZQEAAAABZgEAAAABaAIAAAABaQEAAAABagEAAAABawEAAAABbAEAAAABbgAAAG4CbwEAAAABcIAAAAABcUAAAAABckAAAAABAgAAAAUAIBYAAO8BACADAAAABQAgFgAA7wEAIBcAAO4BACABDwAApgIAMBIDAADAAQAgBAAAuQEAIGIAALwBADBjAAADABBkAAC8AQAwZQEAAAABZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAAAABbgAAvgFuIm8BAKoBACFwAAC_AQAgcUAArAEAIXJAAKwBACECAAAABQAgDwAA7gEAIAIAAADsAQAgDwAA7QEAIBBiAADrAQAwYwAA7AEAEGQAAOsBADBlAQC1AQAhZgEAtQEAIWcBAKoBACFoAgC9AQAhaQEAtQEAIWoBAKoBACFrAQCqAQAhbAEAqgEAIW4AAL4BbiJvAQCqAQAhcAAAvwEAIHFAAKwBACFyQACsAQAhEGIAAOsBADBjAADsAQAQZAAA6wEAMGUBALUBACFmAQC1AQAhZwEAqgEAIWgCAL0BACFpAQC1AQAhagEAqgEAIWsBAKoBACFsAQCqAQAhbgAAvgFuIm8BAKoBACFwAAC_AQAgcUAArAEAIXJAAKwBACEMZQEAxwEAIWYBAMcBACFoAgDIAQAhaQEAxwEAIWoBAMkBACFrAQDJAQAhbAEAyQEAIW4AAMoBbiJvAQDJAQAhcIAAAAABcUAAywEAIXJAAMsBACENAwAAzAEAIGUBAMcBACFmAQDHAQAhaAIAyAEAIWkBAMcBACFqAQDJAQAhawEAyQEAIWwBAMkBACFuAADKAW4ibwEAyQEAIXCAAAAAAXFAAMsBACFyQADLAQAhDQMAAM4BACBlAQAAAAFmAQAAAAFoAgAAAAFpAQAAAAFqAQAAAAFrAQAAAAFsAQAAAAFuAAAAbgJvAQAAAAFwgAAAAAFxQAAAAAFyQAAAAAEJZQEAAAABbgEAAAABcUAAAAABckAAAAABhAEBAAAAAYUBAQAAAAGGAQEAAAABhwECAAAAAYgBQAAAAAECAAAADwAgFgAA-wEAIAMAAAAPACAWAAD7AQAgFwAA-gEAIAEPAAClAgAwDgQAALkBACBiAAC3AQAwYwAADQAQZAAAtwEAMGUBAAAAAWcBAKoBACFuAQC1AQAhcUAArAEAIXJAAKwBACGEAQEAAAABhQEBAKoBACGGAQEAqgEAIYcBAgC4AQAhiAFAAKwBACECAAAADwAgDwAA-gEAIAIAAAD4AQAgDwAA-QEAIA1iAAD3AQAwYwAA-AEAEGQAAPcBADBlAQC1AQAhZwEAqgEAIW4BALUBACFxQACsAQAhckAArAEAIYQBAQC1AQAhhQEBAKoBACGGAQEAqgEAIYcBAgC4AQAhiAFAAKwBACENYgAA9wEAMGMAAPgBABBkAAD3AQAwZQEAtQEAIWcBAKoBACFuAQC1AQAhcUAArAEAIXJAAKwBACGEAQEAtQEAIYUBAQCqAQAhhgEBAKoBACGHAQIAuAEAIYgBQACsAQAhCWUBAMcBACFuAQDHAQAhcUAAywEAIXJAAMsBACGEAQEAxwEAIYUBAQDJAQAhhgEBAMkBACGHAQIA1QEAIYgBQADLAQAhCWUBAMcBACFuAQDHAQAhcUAAywEAIXJAAMsBACGEAQEAxwEAIYUBAQDJAQAhhgEBAMkBACGHAQIA1QEAIYgBQADLAQAhCWUBAAAAAW4BAAAAAXFAAAAAAXJAAAAAAYQBAQAAAAGFAQEAAAABhgEBAAAAAYcBAgAAAAGIAUAAAAABBGUBAAAAAXFAAAAAAYQBAQAAAAGIAUAAAAABAgAAAAsAIBYAAIcCACADAAAACwAgFgAAhwIAIBcAAIYCACABDwAApAIAMAkEAAC7AQAgYgAAugEAMGMAAAkAEGQAALoBADBlAQAAAAFnAQC1AQAhcUAArAEAIYQBAQAAAAGIAUAArAEAIQIAAAALACAPAACGAgAgAgAAAIQCACAPAACFAgAgCGIAAIMCADBjAACEAgAQZAAAgwIAMGUBALUBACFnAQC1AQAhcUAArAEAIYQBAQC1AQAhiAFAAKwBACEIYgAAgwIAMGMAAIQCABBkAACDAgAwZQEAtQEAIWcBALUBACFxQACsAQAhhAEBALUBACGIAUAArAEAIQRlAQDHAQAhcUAAywEAIYQBAQDHAQAhiAFAAMsBACEEZQEAxwEAIXFAAMsBACGEAQEAxwEAIYgBQADLAQAhBGUBAAAAAXFAAAAAAYQBAQAAAAGIAUAAAAABBBYAAPwBADCeAQAA_QEAMKABAAD_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-Ey0_Ay5AAy9BCDBEFDFFGDJGBDNHBDRIBDVJBDZKBDdMBDhOCDlPGTpRBDtTCDxUGj1VBD5WBD9XCEBaG0FbH0JcBUNdBUReBUVfBUZgBUdiBUhkCEllIEpoBUtqCExrIU1tBU5uBU9vCFByIlFzKFJ0AlN1AlR2AlV3AlZ4Ald6Alh8CFl9KVqAAQJbggEIXIMBKl2FAQJehgECX4cBCGCKASthiwEx" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"favoritePlaces\",\"_count\",\"experiences\",\"favoriteUsers\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.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\",\"UserFavoritePlace.findUnique\",\"UserFavoritePlace.findUniqueOrThrow\",\"UserFavoritePlace.findFirst\",\"UserFavoritePlace.findFirstOrThrow\",\"UserFavoritePlace.findMany\",\"UserFavoritePlace.createOne\",\"UserFavoritePlace.createMany\",\"UserFavoritePlace.createManyAndReturn\",\"UserFavoritePlace.updateOne\",\"UserFavoritePlace.updateMany\",\"UserFavoritePlace.updateManyAndReturn\",\"UserFavoritePlace.upsertOne\",\"UserFavoritePlace.deleteOne\",\"UserFavoritePlace.deleteMany\",\"UserFavoritePlace.groupBy\",\"UserFavoritePlace.aggregate\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"audioContentBase64\",\"audioMimeType\",\"audioAccessToken\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"recordingPayload\",\"promptHintsShown\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"has\",\"hasEvery\",\"hasSome\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"telegramChatId\",\"telegramMessageId\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"isAdmin\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"googlePrimaryType\",\"googleTypes\",\"googleBusinessStatus\",\"googleRating\",\"googleUserRatingCount\",\"googleRegularOpeningHours\",\"googleCurrentOpeningHours\",\"googlePhotos\",\"googlePayload\",\"googlePayloadFetchedAt\",\"userId_placeId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\",\"push\"]"), + graph: "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_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_AQAhnwFAAPQBACECAAAADwAgEQAAhAEAIAp3AQDvAQAheQEA8QEAIYABAQDvAQAhhQFAAPQBACGGAUAA9AEAIZsBAQDvAQAhnAEBAPEBACGdAQEA8QEAIZ4BAgD_AQAhnwFAAPQBACECAAAADQAgEQAAhgEAIAIAAAANACARAACGAQAgAQAAAAcAIAMAAAAPACAYAAB-ACAZAACEAQAgAQAAAA8AIAEAAAANACAJCQAA-gEAIB4AAPsBACAfAAD-AQAgIAAA_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_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_gIAILsBAAD5AgAgvAEAAP0CACDBAQAANQAgBRgAAPYCACAZAAD7AgAguwEAAPcCACC8AQAA-gIAIMEBAAABACADGAAA-AIAILsBAAD5AgAgwQEAADUAIAMYAAD2AgAguwEAAPcCACDBAQAAAQAgAAAAAb4BIAAAAAELGAAAugIAMBkAAL8CADC7AQAAuwIAMLwBAAC8AgAwvQEAAL0CACC-AQAAvgIAML8BAAC-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_AQAhnwFAAPQBACEJdwEA7wEAIYABAQDvAQAhhQFAAPQBACGGAUAA9AEAIZsBAQDvAQAhnAEBAPEBACGdAQEA8QEAIZ4BAgD_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_AQAhswGAAAAAAbQBgAAAAAG1AYAAAAABtgGAAAAAAbcBQADWAgAhAwAAAAcAIBgAAPgCACAZAAD_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_wEAIbMBgAAAAAG0AYAAAAABtQGAAAAAAbYBgAAAAAG3AUAA1gIAIRILAADYAgAgdwEA7wEAIYUBQAD0AQAhhgFAAPQBACGqAQEA7wEAIasBAQDvAQAhrAEIANMCACGtAQgA0wIAIa4BAQDxAQAhrwEAANQCACCwAQEA8QEAIbEBCADVAgAhsgECAP8BACGzAYAAAAABtAGAAAAAAbUBgAAAAAG2AYAAAAABtwFAANYCACEDCQAICgYCCxsGAgMAAQQIAwUFDAQGEAUHEgIIFgYJAAcBBAADAQQRAwIDAAEEAAMEBRcABhgABxkACBoAAgocAAsdAAAAAAUJAA0eAA4fAA8gABAhABEAAAAAAAUJAA0eAA4fAA8gABAhABEAAAMJABYgABchABgAAAADCQAWIAAXIQAYAgMAAQQAAwIDAAEEAAMDCQAdIAAeIQAfAAAAAwkAHSAAHiEAHwEEAAMBBAADAwkAJCAAJSEAJgAAAAMJACQgACUhACYBBIMBAwEEiQEDBQkAKx4ALB8ALSAALiEALwAAAAAABQkAKx4ALB8ALSAALiEALwIDAAEEmwEDAgMAAQShAQMFCQA0HgA1HwA2IAA3IQA4AAAAAAAFCQA0HgA1HwA2IAA3IQA4DAIBDR4BDiEBDyIBECMBEiUBEycJFCgKFSoBFiwJFy0LGi4BGy8BHDAJIjMMIzQSJDYDJTcDJjkDJzoDKDsDKT0DKj8JK0ATLEIDLUQJLkUUL0YDMEcDMUgJMksVM0wZNE0GNU4GNk8GN1AGOFEGOVMGOlUJO1YaPFgGPVoJPlsbP1wGQF0GQV4JQmEcQ2IgRGMERWQERmUER2YESGcESWkESmsJS2whTG4ETXAJTnEiT3IEUHMEUXQJUncjU3gnVHkFVXoFVnsFV3wFWH0FWX8FWoEBCVuCAShchQEFXYcBCV6IASlfigEFYIsBBWGMAQlijwEqY5ABMGSRAQJlkgECZpMBAmeUAQJolQECaZcBAmqZAQlrmgExbJ0BAm2fAQluoAEyb6IBAnCjAQJxpAEJcqcBM3OoATk" } config.compilerWasm = { getRuntime: async () => require('./query_compiler_fast_bg.js'), diff --git a/src/generated/prisma/package.json b/src/generated/prisma/package.json index e0f1f2b..311f682 100644 --- a/src/generated/prisma/package.json +++ b/src/generated/prisma/package.json @@ -1,5 +1,5 @@ { - "name": "prisma-client-af7d1a24a80c81a94e157e22f4f12e91cca6099374f7a2346452663b0168688a", + "name": "prisma-client-0b8929063537a8b938f0db85082be56f6d3b5317e97858abd029e31273b163bc", "main": "index.js", "types": "index.d.ts", "browser": "default.js", diff --git a/src/generated/prisma/schema.prisma b/src/generated/prisma/schema.prisma index 610094f..af8490c 100644 --- a/src/generated/prisma/schema.prisma +++ b/src/generated/prisma/schema.prisma @@ -17,16 +17,25 @@ enum VoiceExperienceStatus { } model Place { - id String @id @default(cuid()) - googlePlaceId String @unique - name String - latitude Float - longitude Float - googlePrimaryType String? - googleTypes String[] @default([]) - experiences VoiceExperience[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + id String @id @default(cuid()) + googlePlaceId String @unique + name String + latitude Float + longitude Float + googlePrimaryType String? + googleTypes String[] @default([]) + googleBusinessStatus String? + googleRating Float? + googleUserRatingCount Int? + googleRegularOpeningHours Json? + googleCurrentOpeningHours Json? + googlePhotos Json? + googlePayload Json? + googlePayloadFetchedAt DateTime? + experiences VoiceExperience[] + favoriteUsers UserFavoritePlace[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt } model User { @@ -41,10 +50,22 @@ model User { sessions UserSession[] loginRequests TelegramLoginRequest[] voiceExperiences VoiceExperience[] + favoritePlaces UserFavoritePlace[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } +model UserFavoritePlace { + id String @id @default(cuid()) + userId String + user User @relation(fields: [userId], references: [id]) + placeId String + place Place @relation(fields: [placeId], references: [id]) + createdAt DateTime @default(now()) + + @@unique([userId, placeId]) +} + model UserSession { id String @id @default(cuid()) tokenHash String @unique @@ -82,6 +103,8 @@ model VoiceExperience { status VoiceExperienceStatus @default(UPLOADED) transcript String? analysis Json? + recordingPayload Json? + promptHintsShown String[] @default([]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } diff --git a/src/google/places.ts b/src/google/places.ts new file mode 100644 index 0000000..682ada3 --- /dev/null +++ b/src/google/places.ts @@ -0,0 +1,154 @@ +import { config } from '../config.js'; + +const googlePlaceDetailsBaseUrl = 'https://places.googleapis.com/v1/places'; + +export const googlePlaceDetailsFieldMask = [ + 'id', + 'displayName', + 'location', + 'primaryType', + 'types', + 'businessStatus', + 'rating', + 'userRatingCount', + 'regularOpeningHours', + 'currentOpeningHours', + 'photos', +].join(','); + +export type GooglePlacePhoto = { + name?: string; + widthPx?: number; + heightPx?: number; + authorAttributions?: Array<{ + displayName?: string; + uri?: string; + photoUri?: string; + }>; +}; + +export type GooglePlaceDetails = { + id?: string; + displayName?: { + text?: string; + }; + primaryType?: string; + types?: string[]; + businessStatus?: string; + rating?: number; + userRatingCount?: number; + regularOpeningHours?: unknown; + currentOpeningHours?: unknown; + photos?: GooglePlacePhoto[]; + location?: { + latitude?: number; + longitude?: number; + }; +}; + +export type GooglePlaceEnrichment = { + name: string; + latitude: number; + longitude: number; + googlePrimaryType: string | null; + googleTypes: string[]; + googleBusinessStatus: string | null; + googleRating: number | null; + googleUserRatingCount: number | null; + googleRegularOpeningHours: unknown | null; + googleCurrentOpeningHours: unknown | null; + googlePhotos: GooglePlacePhoto[]; + googlePayload: GooglePlaceDetails; + googlePayloadFetchedAt: Date; +}; + +function assertGooglePlacesKey() { + if (config.googlePlacesApiKey === '') { + throw new Error('GOOGLE_PLACES_API_KEY is required for Google Places.'); + } +} + +export async function fetchGooglePlaceDetails( + googlePlaceId: string, +): Promise { + assertGooglePlacesKey(); + + const response = await fetch( + `${googlePlaceDetailsBaseUrl}/${encodeURIComponent(googlePlaceId)}`, + { + headers: { + 'X-Goog-Api-Key': config.googlePlacesApiKey, + 'X-Goog-FieldMask': googlePlaceDetailsFieldMask, + }, + }, + ); + + if (!response.ok) { + const body = await response.text(); + throw new Error(`Google Place Details failed: ${response.status} ${body}`); + } + + return (await response.json()) as GooglePlaceDetails; +} + +export function normalizeGooglePlaceDetails( + fallback: { + name: string; + latitude: number; + longitude: number; + }, + payload: GooglePlaceDetails, +): GooglePlaceEnrichment { + return { + name: payload.displayName?.text?.trim() || fallback.name, + latitude: payload.location?.latitude ?? fallback.latitude, + longitude: payload.location?.longitude ?? fallback.longitude, + googlePrimaryType: payload.primaryType ?? null, + googleTypes: payload.types ?? [], + googleBusinessStatus: payload.businessStatus ?? null, + googleRating: payload.rating ?? null, + googleUserRatingCount: payload.userRatingCount ?? null, + googleRegularOpeningHours: payload.regularOpeningHours ?? null, + googleCurrentOpeningHours: payload.currentOpeningHours ?? null, + googlePhotos: (payload.photos ?? []) + .filter((photo) => Boolean(photo.name)) + .slice(0, 3), + googlePayload: payload, + googlePayloadFetchedAt: new Date(), + }; +} + +export async function fetchGooglePlacePhotoMedia(input: { + photoName: string; + maxWidthPx: number; +}) { + assertGooglePlacesKey(); + if ( + !input.photoName.startsWith('places/') || + !input.photoName.includes('/photos/') + ) { + throw new Error('Google photo name is invalid.'); + } + if ( + !Number.isInteger(input.maxWidthPx) || + input.maxWidthPx < 1 || + input.maxWidthPx > 4800 + ) { + throw new Error('Google photo maxWidthPx must be from 1 to 4800.'); + } + + const response = await fetch( + `https://places.googleapis.com/v1/${input.photoName}/media?maxWidthPx=${input.maxWidthPx}`, + { headers: { 'X-Goog-Api-Key': config.googlePlacesApiKey } }, + ); + + if (!response.ok) { + const body = await response.text(); + throw new Error(`Google Place Photo failed: ${response.status} ${body}`); + } + + return { + contentType: response.headers.get('content-type') ?? 'image/jpeg', + bytes: Buffer.from(await response.arrayBuffer()), + }; +} diff --git a/src/graphql/places.ts b/src/graphql/places.ts index e74216a..6984f6c 100644 --- a/src/graphql/places.ts +++ b/src/graphql/places.ts @@ -1,6 +1,11 @@ import { prisma } from '../prisma.js'; import { config } from '../config.js'; import type { Prisma } from '../generated/prisma/client.js'; +import { + fetchGooglePlaceDetails, + normalizeGooglePlaceDetails, + type GooglePlacePhoto, +} from '../google/places.js'; const googleNearbySearchUrl = 'https://places.googleapis.com/v1/places:searchNearby'; @@ -20,6 +25,10 @@ type NearbyPlacesInput = { radiusMeters: number; }; +type SearchPlacesInput = { + query: string; +}; + type GoogleNearbyPlace = { id?: string; displayName?: { @@ -48,6 +57,7 @@ type PersistableGooglePlace = { type PlaceWithRecentExperiences = Prisma.PlaceGetPayload<{ include: { + favoriteUsers: true; experiences: { include: { user: true; @@ -56,6 +66,20 @@ type PlaceWithRecentExperiences = Prisma.PlaceGetPayload<{ }; }>; +type AiSearchResponse = { + choices?: Array<{ + finish_reason?: string; + message?: { + content?: string; + }; + }>; +}; + +type AiSearchSelection = { + placeIds: string[]; + message: string; +}; + function serializeVoiceExperience( experience: Awaited>[number], ) { @@ -65,19 +89,31 @@ function serializeVoiceExperience( }; } -function serializePlace(place: PlaceWithRecentExperiences) { +function serializePlace(place: PlaceWithRecentExperiences, userId?: string) { return { ...place, + googleRegularOpeningHours: place.googleRegularOpeningHours, + googleCurrentOpeningHours: place.googleCurrentOpeningHours, + googlePayload: place.googlePayload, + googlePhotos: place.googlePhotos, + photoUrls: googlePhotoUrls(place.googlePhotos), + photoAttributions: googlePhotoAttributions(place.googlePhotos), + traits: placeTraits(place), + isFavorite: + userId === undefined + ? false + : place.favoriteUsers.some((favorite) => favorite.userId === userId), experiences: place.experiences.map(serializeVoiceExperience), }; } -export async function listPlaces() { +export async function listPlaces(userId: string) { const places = await prisma.place.findMany({ where: { experiences: { some: {} }, }, include: { + favoriteUsers: true, experiences: { orderBy: { createdAt: 'desc' }, take: 10, @@ -87,10 +123,36 @@ export async function listPlaces() { orderBy: { updatedAt: 'desc' }, }); - return places.map(serializePlace); + await enrichPlacesMissingGooglePayload(places); + const refreshedPlaces = await loadPlacesByIds(places.map((place) => place.id)); + return refreshedPlaces.map((place) => serializePlace(place, userId)); } -export async function listNearbyPlaces(input: NearbyPlacesInput) { +export async function listFavoritePlaces(userId: string) { + const favorites = await prisma.userFavoritePlace.findMany({ + where: { userId }, + include: { + place: { + include: { + favoriteUsers: true, + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + include: { user: true }, + }, + }, + }, + }, + orderBy: { createdAt: 'desc' }, + }); + + return favorites.map((favorite) => serializePlace(favorite.place, userId)); +} + +export async function listNearbyPlaces( + input: NearbyPlacesInput, + userId: string, +) { if (!Number.isFinite(input.latitude) || !Number.isFinite(input.longitude)) { throw new Error('Nearby place search requires a valid coordinate.'); } @@ -142,9 +204,32 @@ export async function listNearbyPlaces(input: NearbyPlacesInput) { } const payload = (await response.json()) as GoogleNearbyResponse; - return parseGoogleNearbyPlaces(input, payload).map((place) => - serializeGoogleNearbyPlace(place), + const nearbyPlaces = parseGoogleNearbyPlaces(input, payload); + const storedPlaces = await prisma.place.findMany({ + where: { + googlePlaceId: { + in: nearbyPlaces.map((place) => place.googlePlaceId), + }, + }, + include: { + favoriteUsers: true, + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + include: { user: true }, + }, + }, + }); + const storedByGoogleId = new Map( + storedPlaces.map((place) => [place.googlePlaceId, place]), ); + + return nearbyPlaces.map((place) => { + const stored = storedByGoogleId.get(place.googlePlaceId); + return stored + ? serializePlace(stored, userId) + : serializeGoogleNearbyPlace(place); + }); } export async function listVoiceExperiences() { @@ -157,6 +242,90 @@ export async function listVoiceExperiences() { return experiences.map(serializeVoiceExperience); } +export async function searchPlaces(input: SearchPlacesInput, userId: string) { + const query = input.query.trim(); + if (query === '') { + throw new Error('Place search query is required.'); + } + + const places = await prisma.place.findMany({ + where: { + experiences: { some: {} }, + }, + include: { + favoriteUsers: true, + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + include: { user: true }, + }, + }, + orderBy: { updatedAt: 'desc' }, + take: 50, + }); + + if (places.length === 0) { + return { message: '', places: [] }; + } + + const selection = await selectPlacesWithAi({ + query, + places: places.map((place) => ({ + id: place.id, + name: place.name, + googlePrimaryType: place.googlePrimaryType, + googleTypes: place.googleTypes, + traits: placeTraits(place), + businessStatus: place.googleBusinessStatus, + rating: place.googleRating, + userRatingCount: place.googleUserRatingCount, + currentOpeningHours: place.googleCurrentOpeningHours, + isFavorite: place.favoriteUsers.some( + (favorite) => favorite.userId === userId, + ), + reviewSummaries: place.experiences + .map((experience) => { + const analysis = jsonObject(experience.analysis); + const summary = analysis?.summary; + return typeof summary === 'string' ? summary : null; + }) + .filter((summary) => summary !== null), + })), + }); + const byId = new Map(places.map((place) => [place.id, place])); + const selectedPlaces = selection.placeIds + .map((id) => byId.get(id)) + .filter((place) => place !== undefined); + + return { + message: selection.message, + places: selectedPlaces.map((place) => serializePlace(place, userId)), + }; +} + +export async function addFavoritePlace(placeId: string, userId: string) { + const place = await prisma.place.findUnique({ where: { id: placeId } }); + if (!place) { + throw new Error(`Place ${placeId} was not found.`); + } + + await prisma.userFavoritePlace.upsert({ + where: { userId_placeId: { userId, placeId } }, + create: { userId, placeId }, + update: {}, + }); + + return loadSerializedPlace(placeId, userId); +} + +export async function removeFavoritePlace(placeId: string, userId: string) { + await prisma.userFavoritePlace.deleteMany({ + where: { userId, placeId }, + }); + + return loadSerializedPlace(placeId, userId); +} + function distanceMeters( fromLatitude: number, fromLongitude: number, @@ -229,6 +398,245 @@ function serializeGoogleNearbyPlace(place: PersistableGooglePlace) { longitude: place.longitude, googlePrimaryType: place.googlePrimaryType, googleTypes: place.googleTypes, + googleBusinessStatus: null, + googleRating: null, + googleUserRatingCount: null, + googleRegularOpeningHours: null, + googleCurrentOpeningHours: null, + googlePayload: null, + googlePhotos: null, + photoUrls: [], + photoAttributions: [], + traits: [], + isFavorite: false, experiences: [], }; } + +async function loadSerializedPlace(placeId: string, userId: string) { + const place = await prisma.place.findUnique({ + where: { id: placeId }, + include: { + favoriteUsers: true, + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + include: { user: true }, + }, + }, + }); + if (!place) { + throw new Error(`Place ${placeId} was not found.`); + } + return serializePlace(place, userId); +} + +async function loadPlacesByIds(placeIds: string[]) { + if (placeIds.length === 0) { + return []; + } + + const places = await prisma.place.findMany({ + where: { id: { in: placeIds } }, + include: { + favoriteUsers: true, + experiences: { + orderBy: { createdAt: 'desc' }, + take: 10, + include: { user: true }, + }, + }, + orderBy: { updatedAt: 'desc' }, + }); + const order = new Map(placeIds.map((id, index) => [id, index])); + return places.sort((left, right) => { + return (order.get(left.id) ?? 0) - (order.get(right.id) ?? 0); + }); +} + +async function enrichPlacesMissingGooglePayload( + places: Array>, +) { + for (const place of places) { + if (place.googlePayloadFetchedAt) { + continue; + } + + await enrichPlaceFromGoogle({ + id: place.id, + googlePlaceId: place.googlePlaceId, + name: place.name, + latitude: place.latitude, + longitude: place.longitude, + }); + } +} + +export async function enrichPlaceFromGoogle(input: { + id: string; + googlePlaceId: string; + name: string; + latitude: number; + longitude: number; +}) { + const payload = await fetchGooglePlaceDetails(input.googlePlaceId); + const enrichment = normalizeGooglePlaceDetails( + { + name: input.name, + latitude: input.latitude, + longitude: input.longitude, + }, + payload, + ); + + return prisma.place.update({ + where: { id: input.id }, + data: { + name: enrichment.name, + latitude: enrichment.latitude, + longitude: enrichment.longitude, + googlePrimaryType: enrichment.googlePrimaryType, + googleTypes: enrichment.googleTypes, + googleBusinessStatus: enrichment.googleBusinessStatus, + googleRating: enrichment.googleRating, + googleUserRatingCount: enrichment.googleUserRatingCount, + googleRegularOpeningHours: + enrichment.googleRegularOpeningHours as Prisma.InputJsonValue, + googleCurrentOpeningHours: + enrichment.googleCurrentOpeningHours as Prisma.InputJsonValue, + googlePhotos: enrichment.googlePhotos as Prisma.InputJsonValue, + googlePayload: enrichment.googlePayload as Prisma.InputJsonValue, + googlePayloadFetchedAt: enrichment.googlePayloadFetchedAt, + }, + }); +} + +function googlePhotoUrls(value: Prisma.JsonValue | null) { + return googlePhotos(value).map((photo) => { + return `${config.publicApiUrl}/google/place-photo?name=${encodeURIComponent(photo.name ?? '')}&maxWidthPx=900`; + }); +} + +function googlePhotoAttributions(value: Prisma.JsonValue | null) { + return googlePhotos(value).flatMap((photo) => photo.authorAttributions ?? []); +} + +function googlePhotos(value: Prisma.JsonValue | null): GooglePlacePhoto[] { + if (!Array.isArray(value)) { + return []; + } + + return value.filter((item): item is GooglePlacePhoto => { + return jsonObject(item)?.name !== undefined; + }); +} + +function placeTraits(place: Pick) { + const tags = new Set(); + for (const experience of place.experiences) { + const analysis = jsonObject(experience.analysis); + const analysisTags = analysis?.tags; + if (!Array.isArray(analysisTags)) { + continue; + } + for (const tag of analysisTags) { + if (typeof tag === 'string') { + tags.add(tag); + } + } + } + return [...tags]; +} + +function jsonObject(value: unknown): Record | null { + if (!value || Array.isArray(value) || typeof value !== 'object') { + return null; + } + return value as Record; +} + +async function selectPlacesWithAi(input: { + query: string; + places: Array>; +}): Promise { + if (!config.openRouterApiKey) { + throw new Error('OPENROUTER_API_KEY is required for AI place search.'); + } + + const response = await fetch('https://openrouter.ai/api/v1/chat/completions', { + method: 'POST', + headers: { + authorization: `Bearer ${config.openRouterApiKey}`, + 'content-type': 'application/json', + 'http-referer': config.webAppUrl, + 'x-title': 'MapFlow', + }, + body: JSON.stringify({ + model: config.openRouterModel, + provider: { require_parameters: true }, + temperature: 0.1, + max_tokens: 1200, + response_format: { + type: 'json_schema', + json_schema: { + name: 'place_search', + strict: true, + schema: { + type: 'object', + additionalProperties: false, + required: ['placeIds', 'message'], + properties: { + placeIds: { + type: 'array', + maxItems: 12, + items: { type: 'string' }, + }, + message: { type: 'string' }, + }, + }, + }, + }, + messages: [ + { + role: 'system', + content: + 'You rank known places for a map UI. Use only provided place ids. Return one valid JSON object. Do not invent places.', + }, + { + role: 'user', + content: JSON.stringify({ + task: + 'Select places that best match the user search. Prefer favorites and open places only when relevant to the query.', + query: input.query, + places: input.places, + }), + }, + ], + }), + }); + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error( + `OpenRouter place search failed with ${response.status}: ${errorBody.slice(0, 500)}`, + ); + } + + const payload = (await response.json()) as AiSearchResponse; + const choice = payload.choices?.[0]; + const content = choice?.message?.content?.trim(); + if (!content) { + throw new Error( + `OpenRouter returned an empty place search for ${config.openRouterModel}; finish_reason=${choice?.finish_reason ?? 'missing'}.`, + ); + } + + const selection = JSON.parse(content) as AiSearchSelection; + if (!Array.isArray(selection.placeIds)) { + throw new Error('OpenRouter place search placeIds must be an array.'); + } + if (typeof selection.message !== 'string') { + throw new Error('OpenRouter place search message must be a string.'); + } + return selection; +} diff --git a/src/graphql/schema.ts b/src/graphql/schema.ts index 9ce9792..e7ca247 100644 --- a/src/graphql/schema.ts +++ b/src/graphql/schema.ts @@ -12,9 +12,13 @@ import { createTelegramBotLogin, } from '../auth/telegram-bot-login.js'; import { + addFavoritePlace, + listFavoritePlaces, listNearbyPlaces, listPlaces, listVoiceExperiences, + removeFavoritePlace, + searchPlaces, } from './places.js'; import { createVoiceExperience } from './voice-experiences.js'; @@ -36,8 +40,13 @@ export const resolvers = { }, places: async (_: unknown, __: unknown, context: unknown) => { const graphqlContext = context as GraphqlContext; - await requireTelegramUser(graphqlContext); - return listPlaces(); + const user = await requireTelegramUser(graphqlContext); + return listPlaces(user.id); + }, + favoritePlaces: async (_: unknown, __: unknown, context: unknown) => { + const graphqlContext = context as GraphqlContext; + const user = await requireTelegramUser(graphqlContext); + return listFavoritePlaces(user.id); }, nearbyPlaces: async ( _: unknown, @@ -45,8 +54,17 @@ export const resolvers = { context: unknown, ) => { const graphqlContext = context as GraphqlContext; - await requireTelegramUser(graphqlContext); - return listNearbyPlaces(args.input); + const user = await requireTelegramUser(graphqlContext); + return listNearbyPlaces(args.input, user.id); + }, + searchPlaces: async ( + _: unknown, + args: { input: Parameters[0] }, + context: unknown, + ) => { + const graphqlContext = context as GraphqlContext; + const user = await requireTelegramUser(graphqlContext); + return searchPlaces(args.input, user.id); }, voiceExperiences: async (_: unknown, __: unknown, context: unknown) => { const graphqlContext = context as GraphqlContext; @@ -75,5 +93,23 @@ export const resolvers = { const user = await requireTelegramUser(graphqlContext); return createVoiceExperience(args.input, user.id); }, + addFavoritePlace: async ( + _: unknown, + args: { placeId: string }, + context: unknown, + ) => { + const graphqlContext = context as GraphqlContext; + const user = await requireTelegramUser(graphqlContext); + return addFavoritePlace(args.placeId, user.id); + }, + removeFavoritePlace: async ( + _: unknown, + args: { placeId: string }, + context: unknown, + ) => { + const graphqlContext = context as GraphqlContext; + const user = await requireTelegramUser(graphqlContext); + return removeFavoritePlace(args.placeId, user.id); + }, }, }; diff --git a/src/graphql/type-defs.ts b/src/graphql/type-defs.ts index f30040a..b897934 100644 --- a/src/graphql/type-defs.ts +++ b/src/graphql/type-defs.ts @@ -18,6 +18,17 @@ export const typeDefs = /* GraphQL */ ` longitude: Float! googlePrimaryType: String googleTypes: [String!]! + googleBusinessStatus: String + googleRating: Float + googleUserRatingCount: Int + googleRegularOpeningHours: JSON + googleCurrentOpeningHours: JSON + googlePayload: JSON + googlePhotos: JSON + photoUrls: [String!]! + photoAttributions: JSON + traits: [String!]! + isFavorite: Boolean! experiences: [VoiceExperience!]! } @@ -41,6 +52,8 @@ export const typeDefs = /* GraphQL */ ` audioObjectKey: String! transcript: String analysis: JSON + recordingPayload: JSON + promptHintsShown: [String!]! createdAt: String! } @@ -49,10 +62,15 @@ export const typeDefs = /* GraphQL */ ` googleName: String! latitude: Float! longitude: Float! + googlePrimaryType: String + googleTypes: [String!] = [] durationSeconds: Int! audioObjectKey: String! audioContentBase64: String! audioMimeType: String! + addToFavorites: Boolean = false + recordingPayload: JSON + promptHintsShown: [String!] = [] } input NearbyPlacesInput { @@ -61,6 +79,10 @@ export const typeDefs = /* GraphQL */ ` radiusMeters: Int! } + input SearchPlacesInput { + query: String! + } + input AuthenticateTelegramInput { initData: String! } @@ -90,11 +112,18 @@ export const typeDefs = /* GraphQL */ ` user: User! } + type SearchPlacesPayload { + message: String! + places: [Place!]! + } + type Query { health: String! me: User! places: [Place!]! + favoritePlaces: [Place!]! nearbyPlaces(input: NearbyPlacesInput!): [Place!]! + searchPlaces(input: SearchPlacesInput!): SearchPlacesPayload! voiceExperiences: [VoiceExperience!]! } @@ -104,5 +133,7 @@ export const typeDefs = /* GraphQL */ ` authenticateTelegram(input: AuthenticateTelegramInput!): AuthPayload! authenticateTelegramLogin(input: AuthenticateTelegramLoginInput!): AuthPayload! createVoiceExperience(input: CreateVoiceExperienceInput!): VoiceExperience! + addFavoritePlace(placeId: ID!): Place! + removeFavoritePlace(placeId: ID!): Place! } `; diff --git a/src/graphql/voice-experiences.ts b/src/graphql/voice-experiences.ts index 29b524e..492d382 100644 --- a/src/graphql/voice-experiences.ts +++ b/src/graphql/voice-experiences.ts @@ -2,6 +2,8 @@ import { randomBytes } from 'node:crypto'; import { enqueueVoiceExperience } from '../hatchet/enqueue-voice-experience.js'; import { prisma } from '../prisma.js'; +import { enrichPlaceFromGoogle } from './places.js'; +import type { Prisma } from '../generated/prisma/client.js'; const forbiddenGeneratedPlaceIdPrefix = 'manual-'; @@ -10,10 +12,15 @@ export type CreateVoiceExperienceInput = { googleName: string; latitude: number; longitude: number; + googlePrimaryType?: string | null; + googleTypes?: string[]; durationSeconds: number; audioObjectKey: string; audioContentBase64: string; audioMimeType: string; + addToFavorites?: boolean | null; + recordingPayload?: unknown; + promptHintsShown?: string[]; }; function randomAudioAccessToken() { @@ -49,23 +56,45 @@ export async function createVoiceExperience( name: googleName, latitude: input.latitude, longitude: input.longitude, + googlePrimaryType: input.googlePrimaryType ?? null, + googleTypes: input.googleTypes ?? [], }, update: { name: googleName, latitude: input.latitude, longitude: input.longitude, + googlePrimaryType: input.googlePrimaryType ?? undefined, + googleTypes: input.googleTypes ?? undefined, }, }); + const enrichedPlace = await enrichPlaceFromGoogle({ + id: place.id, + googlePlaceId, + name: googleName, + latitude: input.latitude, + longitude: input.longitude, + }); + + if (input.addToFavorites === true) { + await prisma.userFavoritePlace.upsert({ + where: { userId_placeId: { userId, placeId: enrichedPlace.id } }, + create: { userId, placeId: enrichedPlace.id }, + update: {}, + }); + } + const experience = await prisma.voiceExperience.create({ data: { - placeId: place.id, + placeId: enrichedPlace.id, userId, durationSeconds: input.durationSeconds, audioObjectKey: input.audioObjectKey, audioContentBase64: input.audioContentBase64, audioMimeType: input.audioMimeType, audioAccessToken: randomAudioAccessToken(), + recordingPayload: input.recordingPayload as Prisma.InputJsonValue, + promptHintsShown: input.promptHintsShown ?? [], status: 'UPLOADED', }, include: { place: true, user: true }, diff --git a/src/server.ts b/src/server.ts index fcb4ff5..8818a60 100644 --- a/src/server.ts +++ b/src/server.ts @@ -8,6 +8,7 @@ import { fetchTelegramPhoto, handleTelegramBotWebhook, } from './auth/telegram-bot-login.js'; +import { fetchGooglePlacePhotoMedia } from './google/places.js'; const app = Fastify({ logger: true, @@ -49,6 +50,23 @@ app.get('/telegram/photo/:fileId', async (request, reply) => { return reply.send(photo.bytes); }); +app.get('/google/place-photo', async (request, reply) => { + const query = request.query as { name?: string; maxWidthPx?: string }; + if (!query.name) { + return reply.code(400).send({ error: 'Google photo name is required.' }); + } + + const photo = await fetchGooglePlacePhotoMedia({ + photoName: query.name, + maxWidthPx: Number(query.maxWidthPx ?? '900'), + }); + reply.header('content-type', photo.contentType); + reply.header('cache-control', 'public, max-age=86400'); + reply.header('access-control-allow-origin', '*'); + reply.header('cross-origin-resource-policy', 'cross-origin'); + return reply.send(photo.bytes); +}); + app.get('/audio/voice-experiences/:experienceId', async (request, reply) => { const params = request.params as { experienceId: string }; const query = request.query as { token?: string };