> backend@0.0.1 start:dev > nest start --watch [7:00:22 PM] Starting compilation in watch mode... [7:00:27 PM] Found 0 errors. Watching for file changes. [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [NestFactory] Starting Nest application... [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] PrismaModule dependencies initialized +29ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] PassportModule dependencies initialized +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] AdminModule dependencies initialized +1ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] ConfigHostModule dependencies initialized +3ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] AppModule dependencies initialized +3ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] ConfigModule dependencies initialized +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] ConfigModule dependencies initialized +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] JwtModule dependencies initialized +1ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] AdminModule dependencies initialized +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [InstanceLoader] AuthModule dependencies initialized +1ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RoutesResolver] AppController {/api}: +44ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api, GET} route +3ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api/hello, GET} route +1ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RoutesResolver] AuthController {/api/auth}: +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api/auth/login, POST} route +1ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api/auth/register, POST} route +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api/auth/profile, GET} route +0ms [Nest] 13244 - 02/23/2026, 7:00:31 PM  LOG [RouterExplorer] Mapped {/api/auth/test, GET} route +1ms node.exe : file:///E:/my%20Projects/dyolink/backend/node_modules/adminjs/lib/backend/utils/resources-factory/resources-factory.js:73 At line:1 char:1 + & "C:\Program Files\nodejs/node.exe" "C:\Program Files\nodejs/node_mo ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (file:///E:/my%2...s-factory.js:73:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError throw new NoResourceAdapterError(resourceObject); ^ NoResourceAdapterError: There are no adapters supporting one of the resource you provided at file:///E:/my%20Projects/dyolink/backend/node_modules/adminjs/lib/backend/utils/resources-factory/resources-factory.js:73:15 at Array.map () at ResourcesFactory._convertResources (file:///E:/my%20Projects/dyolink/backend/node_modules/adminjs/lib/backend/utils/resources-factory/resources-factory.js:68:22) at ResourcesFactory.buildResources (file:///E:/my%20Projects/dyolink/backend/node_modules/adminjs/lib/backend/utils/resources-factory/resources-factory.js:28:35) at new AdminJS (file:///E:/my%20Projects/dyolink/backend/node_modules/adminjs/lib/adminjs.js:79:39) at AdminModule.onModuleInit (file:///E:/my%20Projects/dyolink/backend/node_modules/@adminjs/nestjs/build/admin.module.js:70:23) at async callModuleInitHook (E:\my Projects\dyolink\backend\node_modules\@nestjs\core\hooks\on-module-init.hook.js:51:9) at async NestApplication.callInitHook (E:\my Projects\dyolink\backend\node_modules\@nestjs\core\nest-application-context.js:252:13) at async NestApplication.init (E:\my Projects\dyolink\backend\node_modules\@nestjs\core\nest-application.js:103:9) at async NestApplication.listen (E:\my Projects\dyolink\backend\node_modules\@nestjs\core\nest-application.js:175:13) { resource: { model: { findUnique: [Function (anonymous)], findUniqueOrThrow: [Function (anonymous)], findFirst: [Function (anonymous)], findFirstOrThrow: [Function (anonymous)], findMany: [Function (anonymous)], create: [Function (anonymous)], createMany: [Function (anonymous)], createManyAndReturn: [Function (anonymous)], update: [Function (anonymous)], updateMany: [Function (anonymous)], updateManyAndReturn: [Function (anonymous)], upsert: [Function (anonymous)], delete: [Function (anonymous)], deleteMany: [Function (anonymous)], groupBy: [Function (anonymous)], count: [Function (anonymous)], aggregate: [Function (anonymous)], findRaw: [Function (anonymous)], aggregateRaw: [Function (anonymous)], fields: { id: mt { modelName: 'User', name: 'id', typeName: 'String', isList: false, isEnum: false }, email: mt { modelName: 'User', name: 'email', typeName: 'String', isList: false, isEnum: false }, passwordHash: mt { modelName: 'User', name: 'passwordHash', typeName: 'String', isList: false, isEnum: false }, googleId: mt { modelName: 'User', name: 'googleId', typeName: 'String', isList: false, isEnum: false }, facebookId: mt { modelName: 'User', name: 'facebookId', typeName: 'String', isList: false, isEnum: false }, name: mt { modelName: 'User', name: 'name', typeName: 'String', isList: false, isEnum: false }, createdAt: mt { modelName: 'User', name: 'createdAt', typeName: 'DateTime', isList: false, isEnum: false }, updatedAt: mt { modelName: 'User', name: 'updatedAt', typeName: 'DateTime', isList: false, isEnum: false } }, name: 'User', '$name': 'User', '$parent': PrismaService [PrismaClient] { _originalClient: [Circular *1], _runtimeDataModel: { models: { User: [Object], OrganizationType: [Object], Organization: [Object], Plan: [Object], Membership: [Object], Permission: [Object], MembershipPermission: [Object], Feature: [Object], OrganizationLink: [Object], Session: [Object] }, enums: { LinkStatus: [Object] }, types: {} }, _requestHandler: ei [RequestHandler] { client: [Circular *1], dataloader: Zn [DataLoader] { batches: {}, tickActive: false, options: [Object] }, logEmitter: EventEmitter { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false } }, _connectionPromise: undefined, _disconnectionPromise: undefined, _engineConfig: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client\\query_engine-windows.dll.node', engineEndpoint: undefined, generator: { name: 'client', provider: [Object], output: [Object], config: [Object], binaryTargets: [Array], previewFeatures: [], sourceFilePath: 'E:\\my Projects\\dyolink\\backend\\prisma\\schema.prisma' }, showColors: false, logLevel: undefined, logQueries: undefined, env: { DATABASE_URL: 'postgresql://postgres:1234@localhost:5432/dyolink_db', JWT_SECRET: 'your-super-secret-jwt-key-change-this', JWT_REFRESH_SECRET: 'your-super-secret-refresh-key-change-this', FRONTEND_URL: 'http://localhost:3001' }, flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: { db: [Object] }, inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: { maxWait: 2000, timeout: 5000, isolationLevel: undefined }, logEmitter: EventEmitter { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, isBundled: undefined, adapter: undefined }, _accelerateEngineConfig: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: undefined, engineEndpoint: undefined, generator: { name: 'client', provider: [Object], output: [Object], config: [Object], binaryTargets: [Array], previewFeatures: [], sourceFilePath: 'E:\\my Projects\\dyolink\\backend\\prisma\\schema.prisma' }, showColors: false, logLevel: undefined, logQueries: undefined, env: { DATABASE_URL: 'postgresql://postgres:1234@localhost:5432/dyolink_db', JWT_SECRET: 'your-super-secret-jwt-key-change-this', JWT_REFRESH_SECRET: 'your-super-secret-refresh-key-change-this', FRONTEND_URL: 'http://localhost:3001' }, flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: { db: [Object] }, inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: { maxWait: 2000, timeout: 5000, isolationLevel: undefined }, logEmitter: EventEmitter { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, isBundled: undefined, adapter: undefined, accelerateUtils: { resolveDatasourceUrl: [Function: jr], getBatchRequestPayload: [Function: Mr], prismaGraphQLToJSError: [Function: $r], PrismaClientUnknownRequestError: [class PrismaClientUnknownRequestError extends Error], PrismaClientInitializationError: [class PrismaClientInitializationError extends Error], PrismaClientKnownRequestError: [class PrismaClientKnownRequestError extends Error], debug: [Function: t], engineVersion: '7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7', clientVersion: '6.19.2' } }, _clientVersion: '6.19.2', _errorFormat: 'colorless', _tracingHelper: Ao {}, _previewFeatures: [], _activeProvider: 'postgresql', _globalOmit: undefined, _extensions: e { head: undefined }, _engine: Qr { name: 'LibraryEngine', engine: { applyPendingMigrations: undefined, commitTransaction: [AsyncFunction (anonymous)], connect: [AsyncFunction (anonymous)], disconnect: [AsyncFunction (anonymous)], metrics: [Function: bound metrics], query: [AsyncFunction (anonymous)], rollbackTransaction: [AsyncFunction (anonymous)], sdlSchema: [Function: bound sdlSchema], startTransaction: [AsyncFunction (anonymous)], trace: [Function: bound trace], free: undefined }, libraryInstantiationPromise: Promise { undefined }, libraryStartingPromise: undefined, libraryStoppingPromise: undefined, libraryStarted: true, executingQueryPromise: undefined, config: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client\\query_engine-windows.dll.node', engineEndpoint: undefined, generator: [Object], showColors: false, logLevel: undefined, logQueries: undefined, env: [Object], flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: [Object], inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: [Object], logEmitter: [EventEmitter], isBundled: undefined, adapter: undefined }, QueryEngineConstructor: [Function: QueryEngine], libraryLoader: { loadLibrary: [AsyncFunction: loadLibrary] }, library: { version: [Function: version], debugPanic: [Function: debugPanic], ColumnType: [Object], QueryEngine: [Function: QueryEngine] }, logEmitter: EventEmitter { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, libQueryEnginePath: undefined, binaryTarget: 'windows', datasourceOverrides: undefined, datamodel: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', logQueries: false, logLevel: 'error', lastQuery: undefined, loggerRustPanic: undefined, tracingHelper: Ao {}, adapterPromise: undefined, versionInfo: { commit: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', version: '0.1.0' } }, _appliedParent: [Circular *1], _createPrismaPromise: [Function (anonymous)], '$metrics': Lr { _client: [Circular *1] }, '$extends': [Function: Wa], Symbol(nodejs.util.inspect.custom): [Function (anonymous)] } }, client: PrismaService [PrismaClient] { _originalClient: [Circular *1], _runtimeDataModel: { models: { User: { dbName: 'users', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, OrganizationType: { dbName: 'organization_types', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, Organization: { dbName: 'organizations', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, Plan: { dbName: 'plans', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, Membership: { dbName: 'memberships', schema: null, fields: [Array], primaryKey: null, uniqueFields: [Array], uniqueIndexes: [Array], isGenerated: false }, Permission: { dbName: 'permissions', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, MembershipPermission: { dbName: 'membership_permissions', schema: null, fields: [Array], primaryKey: [Object], uniqueFields: [], uniqueIndexes: [], isGenerated: false }, Feature: { dbName: 'features', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false }, OrganizationLink: { dbName: 'organization_links', schema: null, fields: [Array], primaryKey: null, uniqueFields: [Array], uniqueIndexes: [Array], isGenerated: false }, Session: { dbName: 'sessions', schema: null, fields: [Array], primaryKey: null, uniqueFields: [], uniqueIndexes: [], isGenerated: false } }, enums: { LinkStatus: { values: [Array], dbName: null } }, types: {} }, _requestHandler: ei [RequestHandler] { client: [Circular *1], dataloader: Zn [DataLoader] { batches: {}, tickActive: false, options: { batchLoader: [Function (anonymous)], singleLoader: [AsyncFunction: singleLoader], batchBy: [Function: batchBy], batchOrder: [Function: batchOrder] } }, logEmitter: EventEmitter { _events: [Object: null prototype] { error: [Function (anonymous)] }, _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false } }, _connectionPromise: undefined, _disconnectionPromise: undefined, _engineConfig: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client\\query_engine-windows.dll.node', engineEndpoint: undefined, generator: { name: 'client', provider: { fromEnvVar: null, value: 'prisma-client-js' }, output: { value: 'E:\\my Projects\\dyolink\\backend\\node_modules\\@prisma\\client', fromEnvVar: null }, config: { engineType: 'library' }, binaryTargets: [ [Object] ], previewFeatures: [], sourceFilePath: 'E:\\my Projects\\dyolink\\backend\\prisma\\schema.prisma' }, showColors: false, logLevel: undefined, logQueries: undefined, env: { DATABASE_URL: 'postgresql://postgres:1234@localhost:5432/dyolink_db', JWT_SECRET: 'your-super-secret-jwt-key-change-this', JWT_REFRESH_SECRET: 'your-super-secret-refresh-key-change-this', FRONTEND_URL: 'http://localhost:3001' }, flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: { db: { url: [Object] } }, inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: { maxWait: 2000, timeout: 5000, isolationLevel: undefined }, logEmitter: EventEmitter { _events: [Object: null prototype] { error: [Function (anonymous)] }, _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, isBundled: undefined, adapter: undefined }, _accelerateEngineConfig: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: undefined, engineEndpoint: undefined, generator: { name: 'client', provider: { fromEnvVar: null, value: 'prisma-client-js' }, output: { value: 'E:\\my Projects\\dyolink\\backend\\node_modules\\@prisma\\client', fromEnvVar: null }, config: { engineType: 'library' }, binaryTargets: [ [Object] ], previewFeatures: [], sourceFilePath: 'E:\\my Projects\\dyolink\\backend\\prisma\\schema.prisma' }, showColors: false, logLevel: undefined, logQueries: undefined, env: { DATABASE_URL: 'postgresql://postgres:1234@localhost:5432/dyolink_db', JWT_SECRET: 'your-super-secret-jwt-key-change-this', JWT_REFRESH_SECRET: 'your-super-secret-refresh-key-change-this', FRONTEND_URL: 'http://localhost:3001' }, flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: { db: { url: [Object] } }, inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: { maxWait: 2000, timeout: 5000, isolationLevel: undefined }, logEmitter: EventEmitter { _events: [Object: null prototype] { error: [Function (anonymous)] }, _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, isBundled: undefined, adapter: undefined, accelerateUtils: { resolveDatasourceUrl: [Function: jr], getBatchRequestPayload: [Function: Mr], prismaGraphQLToJSError: [Function: $r], PrismaClientUnknownRequestError: [class PrismaClientUnknownRequestError extends Error], PrismaClientInitializationError: [class PrismaClientInitializationError extends Error], PrismaClientKnownRequestError: [class PrismaClientKnownRequestError extends Error], debug: [Function: t], engineVersion: '7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7', clientVersion: '6.19.2' } }, _clientVersion: '6.19.2', _errorFormat: 'colorless', _tracingHelper: Ao {}, _previewFeatures: [], _activeProvider: 'postgresql', _globalOmit: undefined, _extensions: e { head: undefined }, _engine: Qr { name: 'LibraryEngine', engine: { applyPendingMigrations: undefined, commitTransaction: [AsyncFunction (anonymous)], connect: [AsyncFunction (anonymous)], disconnect: [AsyncFunction (anonymous)], metrics: [Function: bound metrics], query: [AsyncFunction (anonymous)], rollbackTransaction: [AsyncFunction (anonymous)], sdlSchema: [Function: bound sdlSchema], startTransaction: [AsyncFunction (anonymous)], trace: [Function: bound trace], free: undefined }, libraryInstantiationPromise: Promise { undefined }, libraryStartingPromise: undefined, libraryStoppingPromise: undefined, libraryStarted: true, executingQueryPromise: undefined, config: { cwd: 'E:\\my Projects\\dyolink\\backend\\prisma', dirname: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client', enableDebugLogs: false, allowTriggerPanic: undefined, prismaPath: 'E:\\my Projects\\dyolink\\backend\\node_modules\\.prisma\\client\\query_engine-windows.dll.node', engineEndpoint: undefined, generator: { name: 'client', provider: [Object], output: [Object], config: [Object], binaryTargets: [Array], previewFeatures: [], sourceFilePath: 'E:\\my Projects\\dyolink\\backend\\prisma\\schema.prisma' }, showColors: false, logLevel: undefined, logQueries: undefined, env: { DATABASE_URL: 'postgresql://postgres:1234@localhost:5432/dyolink_db', JWT_SECRET: 'your-super-secret-jwt-key-change-this', JWT_REFRESH_SECRET: 'your-super-secret-refresh-key-change-this', FRONTEND_URL: 'http://localhost:3001' }, flags: [], engineWasm: undefined, compilerWasm: undefined, clientVersion: '6.19.2', engineVersion: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', previewFeatures: [], activeProvider: 'postgresql', inlineSchema: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', overrideDatasources: {}, inlineDatasources: { db: [Object] }, inlineSchemaHash: '4aae01036d0b31bf4276d4cd600a2bdaac52abdf50fe0f617feb1c2620130473', tracingHelper: Ao {}, transactionOptions: { maxWait: 2000, timeout: 5000, isolationLevel: undefined }, logEmitter: EventEmitter { _events: [Object: null prototype], _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, isBundled: undefined, adapter: undefined }, QueryEngineConstructor: [Function: QueryEngine], libraryLoader: { loadLibrary: [AsyncFunction: loadLibrary] }, library: { version: [Function: version], debugPanic: [Function: debugPanic], ColumnType: { Int32: 0, Int64: 1, Float: 2, Double: 3, Numeric: 4, Boolean: 5, Character: 6, Text: 7, Date: 8, Time: 9, DateTime: 10, Json: 11, Enum: 12, Bytes: 13, Set: 14, Uuid: 15, Int32Array: 64, Int64Array: 65, FloatArray: 66, DoubleArray: 67, NumericArray: 68, BooleanArray: 69, CharacterArray: 70, TextArray: 71, DateArray: 72, TimeArray: 73, DateTimeArray: 74, JsonArray: 75, EnumArray: 76, BytesArray: 77, UuidArray: 78, UnknownNumber: 128 }, QueryEngine: [Function: QueryEngine] }, logEmitter: EventEmitter { _events: [Object: null prototype] { error: [Function (anonymous)] }, _eventsCount: 1, _maxListeners: undefined, Symbol(shapeMode): false, Symbol(kCapture): false }, libQueryEnginePath: undefined, binaryTarget: 'windows', datasourceOverrides: undefined, datamodel: '// backend/prisma/schema.prisma\n' + 'generator client {\n' + ' provider = "prisma-client-js"\n' + '}\n' + '\n' + 'datasource db {\n' + ' provider = "postgresql"\n' + ' url = env("DATABASE_URL")\n' + '}\n' + '\n' + 'model User {\n' + ' id String @id @default(uuid())\n' + ' email String @unique\n' + ' passwordHash String?\n' + ' googleId String? @unique\n' + ' facebookId String? @unique\n' + ' name String\n' + '\n' + ' memberships Membership[]\n' + ' ownedOrganizations Organization[] @relation("OrganizationOwner")\n' + ' sessions Session[] // 👈 ADD THIS - opposite relation for Session\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("users")\n' + '}\n' + '\n' + 'model OrganizationType {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "CLINIC" or "LAB"\n' + '\n' + ' organizations Organization[]\n' + ' features Feature[] // 👈 ADD THIS - opposite relation for Feature\n' + '\n' + ' @@map("organization_types")\n' + '}\n' + '\n' + 'model Organization {\n' + ' id String @id @default(uuid())\n' + ' name String\n' + ' email String @unique\n' + ' phone String?\n' + ' address String?\n' + '\n' + ' typeId String\n' + ' type OrganizationType @relation(fields: [typeId], references: [id])\n' + '\n' + ' ownerId String\n' + ' owner User @relation("OrganizationOwner", fields: [ownerId], references: [id])\n' + '\n' + ' memberships Membership[]\n' + ' planId String\n' + ' plan Plan @relation(fields: [planId], references: [id])\n' + '\n' + ' sharedWithMe OrganizationLink[] @relation("OrganizationB")\n' + ' sharedWithOthers OrganizationLink[] @relation("OrganizationA")\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("organizations")\n' + '}\n' + '\n' + 'model Plan {\n' + ' id String @id @default(uuid())\n' + ' name String @unique // "Solo", "Small", "Medium", "Large", "Enterprise"\n' + ' maxUsers Int // 1, 5, 10, 15, 999999 for unlimited\n' + ' price Float\n' + ' features Json // Store feature flags as JSON\n' + '\n' + ' organizations Organization[]\n' + '\n' + ' @@map("plans")\n' + '}\n' + '\n' + 'model Membership {\n' + ' id String @id @default(uuid())\n' + '\n' + ' userId String\n' + ' organizationId String\n' + '\n' + ' isOwner Boolean @default(false)\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + ' organization Organization @relation(fields: [organizationId], references: [id])\n' + '\n' + ' permissions MembershipPermission[]\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([userId, organizationId])\n' + ' @@map("memberships")\n' + '}\n' + '\n' + 'model Permission {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' memberships MembershipPermission[]\n' + ' featureId String?\n' + ' feature Feature? @relation(fields: [featureId], references: [id])\n' + '\n' + ' @@map("permissions")\n' + '}\n' + '\n' + 'model MembershipPermission {\n' + ' membershipId String\n' + ' permissionId String\n' + '\n' + ' membership Membership @relation(fields: [membershipId], references: [id])\n' + ' permission Permission @relation(fields: [permissionId], references: [id])\n' + '\n' + ' @@id([membershipId, permissionId])\n' + ' @@map("membership_permissions")\n' + '}\n' + '\n' + 'model Feature {\n' + ' id String @id @default(uuid())\n' + ' name String @unique\n' + ' description String?\n' + '\n' + ' permissions Permission[]\n' + ' organizationTypeId String?\n' + ' organizationType OrganizationType? @relation(fields: [organizationTypeId], references: [id])\n' + '\n' + ' @@map("features")\n' + '}\n' + '\n' + 'model OrganizationLink {\n' + ' id String @id @default(uuid())\n' + '\n' + ' organizationAId String\n' + ' organizationBId String\n' + ' status LinkStatus @default(PENDING)\n' + ' sharedDataTypes Json\n' + '\n' + ' organizationA Organization @relation("OrganizationA", fields: [organizationAId], references: [id])\n' + ' organizationB Organization @relation("OrganizationB", fields: [organizationBId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@unique([organizationAId, organizationBId])\n' + ' @@map("organization_links")\n' + '}\n' + '\n' + 'model Session {\n' + ' id String @id @default(uuid())\n' + ' userId String\n' + ' token String @unique\n' + ' refreshToken String? @unique\n' + ' expiresAt DateTime\n' + ' userAgent String?\n' + ' ipAddress String?\n' + '\n' + ' user User @relation(fields: [userId], references: [id])\n' + '\n' + ' createdAt DateTime @default(now())\n' + ' updatedAt DateTime @updatedAt\n' + '\n' + ' @@map("sessions")\n' + '}\n' + '\n' + 'enum LinkStatus {\n' + ' PENDING\n' + ' ACTIVE\n' + ' REJECTED\n' + ' BLOCKED\n' + '}\n', logQueries: false, logLevel: 'error', lastQuery: undefined, loggerRustPanic: undefined, tracingHelper: Ao {}, adapterPromise: undefined, versionInfo: { commit: 'c2990dca591cba766e3b7ef5d9e8a84796e47ab7', version: '0.1.0' } }, _appliedParent: [Circular *1], _createPrismaPromise: [Function (anonymous)], '$metrics': Lr { _client: [Circular *1] }, '$extends': [Function: Wa], Symbol(nodejs.util.inspect.custom): [Function (anonymous)] } } } Node.js v24.13.0 [7:04:27 PM] File change detected. Starting incremental compilation... [7:04:28 PM] Found 0 errors. Watching for file changes. [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [NestFactory] Starting Nest application... [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] PrismaModule dependencies initialized +29ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] PassportModule dependencies initialized +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] AdminModule dependencies initialized +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] ConfigHostModule dependencies initialized +4ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] AppModule dependencies initialized +2ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] ConfigModule dependencies initialized +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] ConfigModule dependencies initialized +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] JwtModule dependencies initialized +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] AdminModule dependencies initialized +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [InstanceLoader] AuthModule dependencies initialized +2ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RoutesResolver] AppController {/api}: +51ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api, GET} route +3ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api/hello, GET} route +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RoutesResolver] AuthController {/api/auth}: +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api/auth/login, POST} route +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api/auth/register, POST} route +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api/auth/profile, GET} route +1ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [RouterExplorer] Mapped {/api/auth/test, GET} route +0ms [Nest] 19196 - 02/23/2026, 7:04:32 PM  LOG [NestApplication] Nest application successfully started +209ms 🚀 Application is running on: http://localhost:3000/api 📚 Swagger documentation: http://localhost:3000/api/docs - Bundling files... ✔ Finish bundling: 2 files