@@ -12,6 +12,7 @@ export class DatabaseService {
12
12
private readonly prisma = new PrismaClient ( ) ;
13
13
14
14
constructor ( ) {
15
+
15
16
// Initialize the Prisma client
16
17
this . prisma
17
18
. $connect ( )
@@ -21,25 +22,20 @@ export class DatabaseService {
21
22
. catch ( ( error ) => {
22
23
this . logger . error ( 'Failed to connect to the database.' , error ) ;
23
24
} ) ;
24
- this . runMigrations ( )
25
- . then ( ( ) => {
26
- // create user after migrations
27
- this . seedDefaultData ( ) . then ( ( ) => {
28
- this . createSystemUser ( ) ;
29
- this . createAdminUser ( ) ;
30
- this . migrateLegeacyUsers ( ) ;
31
-
32
- } ) ;
33
- } )
34
- . catch ( ( error ) => {
35
- this . logger . error ( 'Error during database migrations.' , error ) ;
36
- } ) ;
25
+ }
37
26
38
- this . seedRunpacks ( ) ;
39
- this . seedPodSizes ( ) ;
27
+ public static async DBinit ( ) {
28
+ await this . Init ( ) ;
29
+ await this . RunMigrations ( ) ;
30
+ await this . SeedDefaultData ( ) ;
31
+ await this . CreateSystemUser ( ) ;
32
+ await this . CreateAdminUser ( ) ;
33
+ await this . MigrateLegacyUsers ( ) ;
34
+ await this . SeedRunpacks ( ) ;
35
+ await this . SeedPodSizes ( ) ;
40
36
}
41
37
42
- private async init ( ) {
38
+ private static async Init ( ) {
43
39
if (
44
40
process . env . DATABASE_URL === '' ||
45
41
process . env . DATABASE_URL === undefined
@@ -54,37 +50,36 @@ export class DatabaseService {
54
50
}
55
51
}
56
52
57
- private async runMigrations ( ) {
53
+ private static async RunMigrations ( ) {
58
54
const { execSync } = await import ( 'child_process' ) ;
59
55
60
- await this . init ( ) ;
61
-
62
56
const prisma = new PrismaClient ( ) ;
63
57
64
58
try {
65
- this . logger . log ( 'Running Prisma migrations...' ) ;
59
+ Logger . debug ( 'Running Prisma migrations...' , 'DatabaseService ') ;
66
60
// @ts -ignore
67
61
await prisma . $executeRawUnsafe ?.( 'PRAGMA foreign_keys=OFF;' ) ; // For SQLite, optional
68
62
// Use CLI for migrations
69
- execSync ( 'npx prisma migrate deploy' , { stdio : 'inherit' } ) ;
63
+ await execSync ( 'npx prisma migrate deploy' , { stdio : 'inherit' } ) ;
70
64
//execSync('npx prisma migrate deploy', {});
71
- this . logger . log ( 'Prisma migrations completed.' ) ;
65
+ Logger . log ( 'Prisma migrations completed.' , 'DatabaseService ') ;
72
66
//await prisma.$disconnect();
73
67
} catch ( err ) {
74
- this . logger . error ( 'Prisma migration failed' , err ) ;
68
+ Logger . error ( 'Prisma migration failed' , err , 'DatabaseService' ) ;
75
69
process . exit ( 1 ) ;
76
70
}
77
71
}
78
72
79
- private async createSystemUser ( ) {
73
+
74
+ private static async CreateSystemUser ( ) {
80
75
const prisma = new PrismaClient ( ) ;
81
76
82
77
// Check if the system user already exists
83
78
const existingUser = await prisma . user . findUnique ( {
84
79
where : { id : '1' } ,
85
80
} ) ;
86
81
if ( existingUser ) {
87
- this . logger . log ( 'System user already exists. Skipping creation.' ) ;
82
+ Logger . log ( 'System user already exists. Skipping creation.' , 'DatabaseService ') ;
88
83
return ;
89
84
}
90
85
@@ -107,21 +102,21 @@ export class DatabaseService {
107
102
: undefined ,
108
103
} ,
109
104
} ) ;
110
- this . logger . log ( 'System user created successfully.' ) ;
105
+ Logger . log ( 'System user created successfully.' , 'DatabaseService ') ;
111
106
} catch ( error ) {
112
- this . logger . error ( 'Failed to create system user.' , error ) ;
107
+ Logger . error ( 'Failed to create system user.' , error , 'DatabaseService' ) ;
113
108
}
114
109
}
115
110
116
- private async createAdminUser ( ) {
111
+ private static async CreateAdminUser ( ) {
117
112
const prisma = new PrismaClient ( ) ;
118
113
119
114
// Check if the admin user already exists
120
115
const existingUser = await prisma . user . findUnique ( {
121
116
where : { id : '2' } ,
122
117
} ) ;
123
118
if ( existingUser ) {
124
- this . logger . log ( 'Admin user already exists. Skipping creation.' ) ;
119
+ Logger . log ( 'Admin user already exists. Skipping creation.' , 'DatabaseService ') ;
125
120
return ;
126
121
}
127
122
@@ -161,9 +156,9 @@ export class DatabaseService {
161
156
updatedAt : new Date ( ) ,
162
157
} ,
163
158
} ) ;
164
- this . logger . log ( 'Admin user created successfully.' ) ;
159
+ Logger . log ( 'Admin user created successfully.' , 'DatabaseService ') ;
165
160
} catch ( error ) {
166
- Logger . error ( 'Failed to create admin user.' , error ) ;
161
+ Logger . error ( 'Failed to create admin user.' , error , 'DatabaseService' ) ;
167
162
}
168
163
}
169
164
@@ -239,17 +234,17 @@ export class DatabaseService {
239
234
}
240
235
}
241
236
242
- private async migrateLegeacyUsers ( ) {
237
+ private static async MigrateLegacyUsers ( ) {
243
238
const prisma = new PrismaClient ( ) ;
244
239
245
240
const existingUsers = await prisma . user . count ( ) ;
246
241
if ( existingUsers > 2 ) {
247
- this . logger . log ( 'Legacy users already migrated. Skipping migration.' ) ;
242
+ Logger . log ( 'Legacy users already migrated. Skipping migration.' , 'DatabaseService ') ;
248
243
return ;
249
244
}
250
245
251
246
if ( ! process . env . KUBERO_USERS || process . env . KUBERO_USERS === '' ) {
252
- this . logger . log ( 'No legacy users to migrate. KUBERO_USERS is not set.' ) ;
247
+ Logger . log ( 'No legacy users to migrate. KUBERO_USERS is not set.' , 'DatabaseService ') ;
253
248
return ;
254
249
}
255
250
@@ -263,10 +258,11 @@ export class DatabaseService {
263
258
user . insecure === true &&
264
259
process . env . KUBERO_SESSION_KEY
265
260
) {
266
- this . logger . warn (
261
+ Logger . warn (
267
262
'User with unencrypted Password detected: "' +
268
263
user . username +
269
264
'" - This feature is deprecated and will be removed in the future' ,
265
+ 'DatabaseService' ,
270
266
) ;
271
267
password = crypto
272
268
. createHmac ( 'sha256' , process . env . KUBERO_SESSION_KEY )
@@ -294,18 +290,19 @@ export class DatabaseService {
294
290
: undefined ,
295
291
} ,
296
292
} ) ;
297
- this . logger . log ( `Migrated user ${ user . username } successfully.` ) ;
293
+ Logger . log ( `Migrated user ${ user . username } successfully.` , 'DatabaseService' ) ;
298
294
} catch ( error ) {
299
- this . logger . error ( `Failed to migrate user ${ user . username } .` , error ) ;
295
+ Logger . error ( `Failed to migrate user ${ user . username } .` , error , 'DatabaseService' ) ;
300
296
}
301
297
}
302
298
303
- this . logger . log ( 'Legacy users migrated successfully.' ) ;
299
+ Logger . log ( 'Legacy users migrated successfully.' , 'DatabaseService ') ;
304
300
}
305
301
306
- private async seedDefaultData ( ) {
302
+ private static async SeedDefaultData ( ) {
303
+ const prisma = new PrismaClient ( ) ;
307
304
// Ensure the 'admin' role exists with permissions
308
- this . prisma . role
305
+ prisma . role
309
306
. upsert ( {
310
307
where : { name : 'admin' } ,
311
308
update : { } ,
@@ -329,11 +326,11 @@ export class DatabaseService {
329
326
} ,
330
327
} )
331
328
. then ( ( ) => {
332
- this . logger . log ( 'Role "admin" seeded successfully.' ) ;
329
+ Logger . log ( 'Role "admin" seeded successfully.' , 'DatabaseService ') ;
333
330
} ) ;
334
331
335
332
// Ensure the 'member' role exists with limited permissions
336
- this . prisma . role
333
+ prisma . role
337
334
. upsert ( {
338
335
where : { name : 'member' } ,
339
336
update : { } ,
@@ -357,11 +354,11 @@ export class DatabaseService {
357
354
} ,
358
355
} )
359
356
. then ( ( ) => {
360
- this . logger . log ( 'Role "member" seeded successfully.' ) ;
357
+ Logger . log ( 'Role "member" seeded successfully.' , 'DatabaseService ') ;
361
358
} ) ;
362
359
363
360
// Ensure the 'guest' role exists with minimal permissions
364
- this . prisma . role
361
+ prisma . role
365
362
. upsert ( {
366
363
where : { name : 'guest' } ,
367
364
update : { } ,
@@ -385,12 +382,12 @@ export class DatabaseService {
385
382
} ,
386
383
} )
387
384
. then ( ( ) => {
388
- this . logger . log ( 'Role "guest" seeded successfully.' ) ;
385
+ Logger . log ( 'Role "guest" seeded successfully.' , 'DatabaseService ') ;
389
386
} ) ;
390
387
391
388
// Ensure the 'everyone' user group exists
392
- this . prisma . userGroup
393
- . upsert ( {
389
+ prisma . userGroup
390
+ . upsert ( {
394
391
where : { name : 'everyone' } ,
395
392
update : { } ,
396
393
create : {
@@ -399,11 +396,11 @@ export class DatabaseService {
399
396
} ,
400
397
} )
401
398
. then ( ( ) => {
402
- this . logger . log ( 'UserGroup "everyone" seeded successfully.' ) ;
399
+ Logger . log ( 'UserGroup "everyone" seeded successfully.' , 'DatabaseService ') ;
403
400
} ) ;
404
401
405
402
// Ensure the 'admin' user group exists
406
- this . prisma . userGroup
403
+ prisma . userGroup
407
404
. upsert ( {
408
405
where : { name : 'admin' } ,
409
406
update : { } ,
@@ -413,20 +410,20 @@ export class DatabaseService {
413
410
} ,
414
411
} )
415
412
. then ( ( ) => {
416
- this . logger . log ( 'UserGroup "admin" seeded successfully.' ) ;
413
+ Logger . log ( 'UserGroup "admin" seeded successfully.' , 'DatabaseService ') ;
417
414
} ) ;
418
415
419
- this . logger . log ( 'Default data seeded successfully.' ) ;
416
+ Logger . log ( 'Default data seeded successfully.' , 'DatabaseService ') ;
420
417
}
421
418
422
- private async seedRunpacks ( ) {
419
+ private static async SeedRunpacks ( ) {
420
+ const prisma = new PrismaClient ( ) ;
423
421
const config = yaml . parse ( runpacks ) ;
424
422
425
423
const buildpacks = config || [ ] ;
426
424
for ( const bp of buildpacks ) {
427
425
// Find existing by name
428
- const existing = await this . prisma . runpack . findFirst ( { where : { name : bp . name } } ) ;
429
- const prisma = this . prisma ;
426
+ const existing = await prisma . runpack . findFirst ( { where : { name : bp . name } } ) ;
430
427
const createPhase = async ( phase : any ) => {
431
428
// Create SecurityContext
432
429
const sec = await prisma . securityContext . create ( {
@@ -460,10 +457,10 @@ export class DatabaseService {
460
457
const runPhase = await createPhase ( bp . run ) ;
461
458
if ( existing ) {
462
459
// Optionally update here
463
- this . logger . log ( `Runpack/Buildpack '${ bp . name } ' already exists. Skipping.` ) ;
460
+ Logger . log ( `Runpack/Buildpack '${ bp . name } ' already exists. Skipping.` , 'DatabaseService' ) ;
464
461
continue ;
465
462
}
466
- await this . prisma . runpack . create ( {
463
+ await prisma . runpack . create ( {
467
464
data : {
468
465
name : bp . name ,
469
466
language : bp . language ,
@@ -472,21 +469,22 @@ export class DatabaseService {
472
469
runId : runPhase . id ,
473
470
} ,
474
471
} ) ;
475
- this . logger . log ( `Runpack/Buildpack '${ bp . name } ' seeded.` ) ;
472
+ Logger . log ( `Runpack/Buildpack '${ bp . name } ' seeded.` , 'DatabaseService' ) ;
476
473
}
477
- this . logger . log ( 'Buildpacks/Runpacks seeded successfully.' ) ;
474
+ Logger . log ( 'Buildpacks/Runpacks seeded successfully.' , 'DatabaseService ') ;
478
475
}
479
476
480
- private async seedPodSizes ( ) {
477
+ private static async SeedPodSizes ( ) {
478
+ const prisma = new PrismaClient ( ) ;
481
479
const config = yaml . parse ( podsizes ) ;
482
480
// seed pod sizes if the table is empty
483
- const existingSizes = await this . prisma . podSize . count ( ) ;
481
+ const existingSizes = await prisma . podSize . count ( ) ;
484
482
if ( existingSizes > 0 ) {
485
- this . logger . log ( 'Pod sizes already exist. Skipping seeding.' ) ;
483
+ Logger . log ( 'Pod sizes already exist. Skipping seeding.' , 'DatabaseService ') ;
486
484
return ;
487
485
}
488
486
for ( const size of config ) {
489
- await this . prisma . podSize . create ( {
487
+ await prisma . podSize . create ( {
490
488
data : {
491
489
name : size . name ,
492
490
description : size . description ,
@@ -496,8 +494,8 @@ export class DatabaseService {
496
494
memoryRequest : size . resources . requests . memory ,
497
495
} ,
498
496
} ) ;
499
- this . logger . log ( `Pod size '${ size . name } ' seeded successfully.` ) ;
497
+ Logger . log ( `Pod size '${ size . name } ' seeded successfully.` , 'DatabaseService' ) ;
500
498
}
501
- this . logger . log ( 'Pod sizes seeded successfully.' ) ;
499
+ Logger . log ( 'Pod sizes seeded successfully.' , 'DatabaseService ') ;
502
500
}
503
501
}
0 commit comments