@@ -13,6 +13,7 @@ import {
1313import { getLogger } from '@boostercloud/framework-common-helpers'
1414import { Booster } from './booster'
1515import { applyReadModelRequestBeforeFunctions } from './services/filter-helpers'
16+ import { ReadModelSchemaMigrator } from './read-model-schema-migrator'
1617
1718export class BoosterReadModelsReader {
1819 public constructor ( readonly config : BoosterConfig ) { }
@@ -33,7 +34,16 @@ export class BoosterReadModelsReader {
3334 if ( ! key ) {
3435 throw 'Tried to run a findById operation without providing a key. An ID is required to perform this operation.'
3536 }
36- return Booster . readModel ( readModelMetadata . class ) . findById ( key . id , key . sequenceKey )
37+ const currentReadModel = await Booster . readModel ( readModelMetadata . class ) . findById ( key . id , key . sequenceKey )
38+ if ( currentReadModel ) {
39+ const readModelName = readModelMetadata . class . name
40+ const readModelSchemaMigrator = new ReadModelSchemaMigrator ( this . config )
41+ if ( Array . isArray ( currentReadModel ) ) {
42+ return [ await readModelSchemaMigrator . migrate ( < ReadModelInterface > currentReadModel [ 0 ] , readModelName ) ]
43+ }
44+ return readModelSchemaMigrator . migrate ( < ReadModelInterface > currentReadModel , readModelName )
45+ }
46+ return currentReadModel
3747 }
3848
3949 public async search (
@@ -48,13 +58,23 @@ export class BoosterReadModelsReader {
4858 readModelRequest . currentUser
4959 )
5060
51- return Booster . readModel ( readModelMetadata . class )
61+ const readModelName = readModelMetadata . class . name
62+ const readModels = await Booster . readModel ( readModelMetadata . class )
5263 . filter ( readModelTransformedRequest . filters )
5364 . sortBy ( readModelTransformedRequest . sortBy )
5465 . limit ( readModelTransformedRequest . limit )
5566 . afterCursor ( readModelTransformedRequest . afterCursor )
5667 . paginatedVersion ( readModelTransformedRequest . paginatedVersion )
5768 . search ( )
69+
70+ const readModelSchemaMigrator = new ReadModelSchemaMigrator ( this . config )
71+ if ( Array . isArray ( readModels ) ) {
72+ return Promise . all ( readModels . map ( ( readModel ) => readModelSchemaMigrator . migrate ( readModel , readModelName ) ) )
73+ }
74+ readModels . items = await Promise . all (
75+ readModels . items . map ( ( readModel ) => readModelSchemaMigrator . migrate ( readModel , readModelName ) )
76+ )
77+ return readModels
5878 }
5979
6080 public async subscribe (
0 commit comments