- Backend: NestJS with Docker - Frontend: Next.js with Docker - Nginx configuration for reverse proxy - PostgreSQL setup - Docker compose for orchestration - Development environment configuration
2142 lines
182 KiB
Plaintext
2142 lines
182 KiB
Plaintext
|
||
> backend@0.0.1 start:dev
|
||
> nest start --watch
|
||
|
||
[2J[3J[H[[90m7:00:22 PM[0m] Starting compilation in watch mode...
|
||
|
||
[[90m7:00:27 PM[0m] Found 0 errors. Watching for file changes.
|
||
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[NestFactory] [39m[32mStarting Nest application...[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mPrismaModule dependencies initialized[39m[38;5;3m +29ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mPassportModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAdminModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigHostModule dependencies initialized[39m[38;5;3m +3ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAppModule dependencies initialized[39m[38;5;3m +3ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mJwtModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAdminModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAuthModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RoutesResolver] [39m[32mAppController {/api}:[39m[38;5;3m +44ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api, GET} route[39m[38;5;3m +3ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/hello, GET} route[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RoutesResolver] [39m[32mAuthController {/api/auth}:[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/login, POST} route[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/register, POST} route[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/profile, GET} route[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 13244 - [39m02/23/2026, 7:00:31 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/test, GET} route[39m[38;5;3m +1ms[39m
|
||
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 (<anonymous>)
|
||
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': <ref *1> 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: <ref *1> 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
|
||
[2J[3J[H[[90m7:04:27 PM[0m] File change detected. Starting incremental compilation...
|
||
|
||
[[90m7:04:28 PM[0m] Found 0 errors. Watching for file changes.
|
||
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[NestFactory] [39m[32mStarting Nest application...[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mPrismaModule dependencies initialized[39m[38;5;3m +29ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mPassportModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAdminModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigHostModule dependencies initialized[39m[38;5;3m +4ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAppModule dependencies initialized[39m[38;5;3m +2ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mConfigModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mJwtModule dependencies initialized[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAdminModule dependencies initialized[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[InstanceLoader] [39m[32mAuthModule dependencies initialized[39m[38;5;3m +2ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RoutesResolver] [39m[32mAppController {/api}:[39m[38;5;3m +51ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api, GET} route[39m[38;5;3m +3ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/hello, GET} route[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RoutesResolver] [39m[32mAuthController {/api/auth}:[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/login, POST} route[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/register, POST} route[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/profile, GET} route[39m[38;5;3m +1ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[RouterExplorer] [39m[32mMapped {/api/auth/test, GET} route[39m[38;5;3m +0ms[39m
|
||
[32m[Nest] 19196 - [39m02/23/2026, 7:04:32 PM [32m LOG[39m [38;5;3m[NestApplication] [39m[32mNest application successfully started[39m[38;5;3m +209ms[39m
|
||
🚀 Application is running on: http://localhost:3000/api
|
||
📚 Swagger documentation: http://localhost:3000/api/docs
|
||
- Bundling files...
|
||
Γ£ö Finish bundling: 2 files
|