1- import { BaseModel , column , SnakeCaseNamingStrategy } from '@adonisjs/lucid/orm'
1+ import { BaseModel , belongsTo , column , hasMany , SnakeCaseNamingStrategy } from '@adonisjs/lucid/orm'
2+ import type { BelongsTo , HasMany } from '@adonisjs/lucid/types/relations'
23import { DateTime } from 'luxon'
34
45export default class Service extends BaseModel {
56 static namingStrategy = new SnakeCaseNamingStrategy ( )
67
7- @column ( { isPrimary : true } )
8+ @column ( { isPrimary : true } )
89 declare id : number
910
1011 @column ( )
@@ -14,16 +15,31 @@ export default class Service extends BaseModel {
1415 declare container_image : string
1516
1617 @column ( )
17- declare container_command : string
18+ declare container_command : string | null
1819
1920 @column ( )
2021 declare container_config : string | null
2122
22- @column ( )
23+ @column ( {
24+ serialize ( value ) {
25+ return Boolean ( value )
26+ } ,
27+ } )
2328 declare installed : boolean
2429
2530 @column ( )
26- declare ui_location : string
31+ declare depends_on : string | null
32+
33+ // For services that are dependencies for other services - not intended to be installed directly by users
34+ @column ( {
35+ serialize ( value ) {
36+ return Boolean ( value )
37+ } ,
38+ } )
39+ declare is_dependency_service : boolean
40+
41+ @column ( )
42+ declare ui_location : string | null
2743
2844 @column ( )
2945 declare metadata : string | null
@@ -33,4 +49,15 @@ export default class Service extends BaseModel {
3349
3450 @column . dateTime ( { autoCreate : true , autoUpdate : true } )
3551 declare updated_at : DateTime | null
52+
53+ // Define a self-referential relationship for dependencies
54+ @belongsTo ( ( ) => Service , {
55+ foreignKey : 'depends_on' ,
56+ } )
57+ declare dependency : BelongsTo < typeof Service >
58+
59+ @hasMany ( ( ) => Service , {
60+ foreignKey : 'depends_on' ,
61+ } )
62+ declare dependencies : HasMany < typeof Service >
3663}
0 commit comments