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