1
+ import { Regiao } from './models/regiao' ;
2
+ import { SubRegiao } from './models/sub-regiao' ;
3
+ import { Uf } from './models/uf' ;
4
+ import { Cidade } from './models/cidade' ;
5
+ import { Cliente } from './models/cliente' ;
6
+ import { MetadataTable } from './../metadata-table' ;
7
+ import { Classificacao } from './models/classificacao' ;
8
+ import { DatabaseHelper } from './../database-helper' ;
9
+ import { GetMapper } from "../index" ;
10
+
11
+
12
+ export class MappersTable implements GetMapper {
13
+
14
+ private _databaseHelper : DatabaseHelper = new DatabaseHelper ( )
15
+
16
+
17
+ public classificacaoMapper =
18
+ new MetadataTable ( Classificacao , this . _databaseHelper )
19
+ . autoMapper ( false , true , false ) ;
20
+ public clienteMapper =
21
+ new MetadataTable ( Cliente , this . _databaseHelper )
22
+ . autoMapper ( false , true , false ) ;
23
+ public cidadeMapper =
24
+ new MetadataTable ( Cidade , this . _databaseHelper )
25
+ . autoMapper ( false , true , false ) ;
26
+ public ufMapper =
27
+ new MetadataTable ( Uf , this . _databaseHelper )
28
+ . autoMapper ( false , true , false ) ;
29
+ public subRegiaoMapper =
30
+ new MetadataTable ( SubRegiao , this . _databaseHelper )
31
+ . autoMapper ( false , true , false ) ;
32
+ public regiaoMapper =
33
+ new MetadataTable ( Regiao , this . _databaseHelper )
34
+ . autoMapper ( false , true , false ) ;
35
+
36
+ private _mappersKeyValue : Map < string , MetadataTable < any > > = new Map ( [
37
+ this . createEntry ( this . classificacaoMapper ) ,
38
+ this . createEntry ( this . clienteMapper ) ,
39
+ this . createEntry ( this . cidadeMapper ) ,
40
+ this . createEntry ( this . ufMapper ) ,
41
+ this . createEntry ( this . subRegiaoMapper ) ,
42
+ this . createEntry ( this . regiaoMapper ) ,
43
+ ] ) ;
44
+
45
+ /**
46
+ * Find mapper metadata by key
47
+ *
48
+ * @public
49
+ * @param {string } tKey
50
+ * @returns {MetadataTable }
51
+ * @memberof MappersTable
52
+ */
53
+ public getMapper < T > ( tKey : new ( ) => T ) : MetadataTable < T > {
54
+ return this . _mappersKeyValue . get ( tKey . name ) ;
55
+ }
56
+
57
+ public forEachMapper (
58
+ callbackfn : (
59
+ value : MetadataTable < any > ,
60
+ key : string ,
61
+ map : Map < string , MetadataTable < any > >
62
+ ) => void ,
63
+ thisArg ?: any
64
+ ) {
65
+ this . _mappersKeyValue . forEach ( callbackfn ) ;
66
+ }
67
+
68
+ /**
69
+ * Find mapper metadata by key and merge with new instance of data
70
+ *
71
+ * @param {string } tKey
72
+ * @param {* } newInstance
73
+ * @returns {MetadataTable }
74
+ * @memberof MappersTable
75
+ * */
76
+ public getMapperMerge < T > ( tKey : new ( ) => T , newInstance : any ) : MetadataTable < T > {
77
+ let mapper = this . getMapper ( tKey ) ;
78
+ if ( ! mapper ) {
79
+ throw `Mapper to ${ tKey . name } not found!` ;
80
+ }
81
+ let metadataCopy : MetadataTable < T > = Object . assign ( { } , mapper ) ;
82
+ metadataCopy . instance = Object . assign ( metadataCopy . instance , newInstance ) ;
83
+ return metadataCopy ;
84
+ }
85
+
86
+ private createEntry ( metadataTable : MetadataTable < any > ) : [ string , MetadataTable < any > ] {
87
+ return [ metadataTable . instance . constructor . name , metadataTable ] ;
88
+ }
89
+ }
0 commit comments