Files
dyolink/backend/output.txt
Admin 26bd35ae3c Initial commit: Full project structure
- Backend: NestJS with Docker
- Frontend: Next.js with Docker
- Nginx configuration for reverse proxy
- PostgreSQL setup
- Docker compose for orchestration
- Development environment configuration
2026-04-23 15:33:11 +03:30

2142 lines
182 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 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 (<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
[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