1
1
import { Knex } from 'knex'
2
2
import { SchemaDBModel } from '../models/schemaModel'
3
3
import { LastUpdatedSchema } from '../types'
4
+ import GraphRepository from './GraphRepository'
5
+ import SchemaTagRepository from './SchemaTagRepository'
6
+ import ServiceRepository from './ServiceRepository'
4
7
5
8
export default class SchemaRepository {
6
- #table = 'schema'
9
+ static table = 'schema'
10
+ static field = ( name : keyof SchemaDBModel ) => SchemaRepository . table + '.' + name
7
11
#knex: Knex
8
12
constructor ( knex : Knex ) {
9
13
this . #knex = knex
10
14
}
11
15
findById ( id : number ) {
12
16
const knex = this . #knex
13
- const table = this . # table
17
+ const table = SchemaRepository . table
14
18
return knex
15
- . from ( this . # table)
16
- . where ( `${ table } . isActive` , knex . raw ( '?' , true ) )
17
- . where ( `${ table } .id ` , knex . raw ( '?' , id ) )
19
+ . from ( table )
20
+ . where ( `${ SchemaRepository . field ( ' isActive' ) } ` , knex . raw ( '?' , true ) )
21
+ . where ( `${ SchemaRepository . field ( 'id' ) } ` , knex . raw ( '?' , id ) )
18
22
. first < SchemaDBModel > ( )
19
23
}
20
24
findFirst ( { graphName, typeDefs, serviceName } : { graphName : string ; typeDefs : string ; serviceName : string } ) {
21
25
const knex = this . #knex
22
- const table = this . # table
26
+ const table = SchemaRepository . table
23
27
return knex
24
28
. from ( table )
25
- . join ( 'graph' , function ( ) {
26
- this . on ( `${ table } . graphId` , '=' , 'graph. id')
27
- . andOn ( 'graph. isActive', '=' , knex . raw ( '?' , true ) )
28
- . andOn ( 'graph. name', '=' , knex . raw ( '?' , graphName ) )
29
+ . join ( ` ${ GraphRepository . table } ` , function ( ) {
30
+ this . on ( `${ SchemaRepository . field ( ' graphId' ) } ` , '=' , ` ${ GraphRepository . field ( ' id') } ` )
31
+ . andOn ( ` ${ GraphRepository . field ( ' isActive') } ` , '=' , knex . raw ( '?' , true ) )
32
+ . andOn ( ` ${ GraphRepository . field ( ' name') } ` , '=' , knex . raw ( '?' , graphName ) )
29
33
} )
30
- . join ( 'service' , function ( ) {
31
- this . on ( `${ table } . serviceId` , '=' , 'service. id')
32
- . andOn ( 'service. isActive', '=' , knex . raw ( '?' , true ) )
33
- . andOn ( 'service. name', '=' , knex . raw ( '?' , serviceName ) )
34
+ . join ( ` ${ ServiceRepository . table } ` , function ( ) {
35
+ this . on ( `${ SchemaRepository . field ( ' serviceId' ) } ` , '=' , ` ${ ServiceRepository . field ( ' id') } ` )
36
+ . andOn ( ` ${ ServiceRepository . field ( ' isActive') } ` , '=' , knex . raw ( '?' , true ) )
37
+ . andOn ( ` ${ ServiceRepository . field ( ' name') } ` , '=' , knex . raw ( '?' , serviceName ) )
34
38
} )
35
- . where ( `${ table } . typeDefs` , knex . raw ( '?' , typeDefs ) )
39
+ . where ( `${ SchemaRepository . field ( ' typeDefs' ) } ` , knex . raw ( '?' , typeDefs ) )
36
40
. select ( `${ table } .*` )
37
41
. first < SchemaDBModel > ( )
38
42
}
39
43
findLastUpdated ( { serviceName, graphName } : { graphName : string ; serviceName : string } ) {
40
44
const knex = this . #knex
41
- const table = this . # table
45
+ const table = SchemaRepository . table
42
46
return knex
43
47
. from ( table )
44
- . select ( [ `${ table } .id` , `${ table } .typeDefs` , `schema_tag.version` ] )
45
- . join ( 'graph' , function ( ) {
46
- this . on ( `${ table } .graphId` , '=' , 'graph.id' )
47
- . andOn ( 'graph.isActive' , '=' , knex . raw ( '?' , true ) )
48
- . andOn ( 'graph.name' , '=' , knex . raw ( '?' , graphName ) )
48
+ . select ( [
49
+ `${ SchemaRepository . field ( 'id' ) } ` ,
50
+ `${ SchemaRepository . field ( 'typeDefs' ) } ` ,
51
+ `${ SchemaTagRepository . field ( 'version' ) } ` ,
52
+ ] )
53
+ . join ( `${ GraphRepository . table } ` , function ( ) {
54
+ this . on ( `${ SchemaRepository . field ( 'graphId' ) } ` , '=' , `${ GraphRepository . field ( 'id' ) } ` )
55
+ . andOn ( `${ GraphRepository . field ( 'isActive' ) } ` , '=' , knex . raw ( '?' , true ) )
56
+ . andOn ( `${ GraphRepository . field ( 'name' ) } ` , '=' , knex . raw ( '?' , graphName ) )
49
57
} )
50
- . join ( 'service' , function ( ) {
51
- this . on ( `${ table } . serviceId` , '=' , 'service. id')
52
- . andOn ( 'service. isActive', '=' , knex . raw ( '?' , true ) )
53
- . andOn ( 'service. name', '=' , knex . raw ( '?' , serviceName ) )
58
+ . join ( ` ${ ServiceRepository . table } ` , function ( ) {
59
+ this . on ( `${ SchemaRepository . field ( ' serviceId' ) } ` , '=' , ` ${ ServiceRepository . field ( ' id') } ` )
60
+ . andOn ( ` ${ ServiceRepository . field ( ' isActive') } ` , '=' , knex . raw ( '?' , true ) )
61
+ . andOn ( ` ${ ServiceRepository . field ( ' name') } ` , '=' , knex . raw ( '?' , serviceName ) )
54
62
} )
55
- . leftJoin ( 'schema_tag' , function ( ) {
56
- this . on ( `${ table } .id` , '=' , 'schema_tag.schemaId' ) . andOn ( 'schema_tag.isActive' , '=' , knex . raw ( '?' , true ) )
63
+ . leftJoin ( `${ SchemaTagRepository . table } ` , function ( ) {
64
+ this . on ( `${ SchemaRepository . field ( 'id' ) } ` , '=' , `${ SchemaTagRepository . field ( 'schemaId' ) } ` ) . andOn (
65
+ `${ SchemaTagRepository . field ( 'isActive' ) } ` ,
66
+ '=' ,
67
+ knex . raw ( '?' , true ) ,
68
+ )
57
69
} )
58
- . where ( `${ table } . isActive` , knex . raw ( '?' , true ) )
70
+ . where ( `${ SchemaRepository . field ( ' isActive' ) } ` , knex . raw ( '?' , true ) )
59
71
. orderBy ( [
60
- { column : `${ table } . updatedAt` , order : 'desc' } ,
61
- { column : `schema_tag. createdAt` , order : 'desc' } ,
72
+ { column : `${ SchemaRepository . field ( ' updatedAt' ) } ` , order : 'desc' } ,
73
+ { column : `${ SchemaTagRepository . field ( ' createdAt' ) } ` , order : 'desc' } ,
62
74
] )
63
75
. first < LastUpdatedSchema > ( )
64
76
}
65
77
findBySchemaTag ( { graphName, version, serviceName } : { graphName : string ; version : string ; serviceName : string } ) {
66
78
const knex = this . #knex
67
- const table = this . # table
79
+ const table = SchemaRepository . table
68
80
return knex
69
81
. from ( table )
70
- . join ( 'graph' , function ( ) {
71
- this . on ( `${ table } . graphId` , '=' , 'graph. id')
72
- . andOn ( 'graph. isActive', '=' , knex . raw ( '?' , true ) )
73
- . andOn ( 'graph. name', '=' , knex . raw ( '?' , graphName ) )
82
+ . join ( ` ${ GraphRepository . table } ` , function ( ) {
83
+ this . on ( `${ SchemaRepository . field ( ' graphId' ) } ` , '=' , ` ${ GraphRepository . field ( ' id') } ` )
84
+ . andOn ( ` ${ GraphRepository . field ( ' isActive') } ` , '=' , knex . raw ( '?' , true ) )
85
+ . andOn ( ` ${ GraphRepository . field ( ' name') } ` , '=' , knex . raw ( '?' , graphName ) )
74
86
} )
75
- . join ( 'service' , function ( ) {
76
- this . on ( `${ table } . serviceId` , '=' , 'service. id')
77
- . andOn ( 'service. isActive', '=' , knex . raw ( '?' , true ) )
78
- . andOn ( 'service. name', '=' , knex . raw ( '?' , serviceName ) )
87
+ . join ( ` ${ ServiceRepository . table } ` , function ( ) {
88
+ this . on ( `${ SchemaRepository . field ( ' serviceId' ) } ` , '=' , ` ${ ServiceRepository . field ( ' id') } ` )
89
+ . andOn ( ` ${ ServiceRepository . field ( ' isActive') } ` , '=' , knex . raw ( '?' , true ) )
90
+ . andOn ( ` ${ ServiceRepository . field ( ' name') } ` , '=' , knex . raw ( '?' , serviceName ) )
79
91
} )
80
- . join ( 'schema_tag' , function ( ) {
81
- this . on ( `${ table } .id ` , '=' , 'schema_tag. id')
82
- . andOn ( 'schema_tag. isActive' , '=' , knex . raw ( '?' , true ) )
83
- . andOn ( 'schema_tag. version' , '=' , knex . raw ( '?' , version ) )
92
+ . join ( ` ${ SchemaTagRepository . table } ` , function ( ) {
93
+ this . on ( `${ SchemaRepository . field ( 'id' ) } ` , '=' , ` ${ SchemaTagRepository . field ( ' id') } ` )
94
+ . andOn ( ` ${ SchemaTagRepository . table } . isActive` , '=' , knex . raw ( '?' , true ) )
95
+ . andOn ( ` ${ SchemaTagRepository . table } . version` , '=' , knex . raw ( '?' , version ) )
84
96
} )
85
- . where ( `${ table } . isActive` , knex . raw ( '?' , true ) )
97
+ . where ( `${ SchemaRepository . field ( ' isActive' ) } ` , knex . raw ( '?' , true ) )
86
98
. select ( `${ table } .*` )
87
99
. first < SchemaDBModel > ( )
88
100
}
89
101
async create ( entity : Omit < SchemaDBModel , 'id' | 'createdAt' > ) {
90
102
const knex = this . #knex
91
- const table = this . # table
103
+ const table = SchemaRepository . table
92
104
const [ first ] = await knex < SchemaDBModel > ( table )
93
105
. insert ( {
94
106
...entity ,
@@ -101,7 +113,10 @@ export default class SchemaRepository {
101
113
}
102
114
async updateById ( schemaId : number , entity : Partial < SchemaDBModel > ) {
103
115
const knex = this . #knex
104
- const table = this . #table
105
- return knex ( table ) . update ( entity ) . where ( `${ table } .id` , '=' , schemaId ) . returning < SchemaDBModel [ ] > ( '*' )
116
+ const table = SchemaRepository . table
117
+ return knex ( table )
118
+ . update ( entity )
119
+ . where ( `${ SchemaRepository . field ( 'id' ) } ` , '=' , schemaId )
120
+ . returning < SchemaDBModel [ ] > ( '*' )
106
121
}
107
122
}
0 commit comments