@@ -12,7 +12,7 @@ const { mergeAddresses } = require('@address-service/domains/address/utils/merge
1212const { Address } = require ( '@address-service/domains/address/utils/serverSchema' )
1313const { DADATA_PROVIDER , GOOGLE_PROVIDER , PULLENTI_PROVIDER } = require ( '@address-service/domains/common/constants/providers' )
1414const { upsertHeuristics } = require ( '@address-service/domains/common/utils/services/search/heuristicMatcher' )
15- const { DadataSearchProvider } = require ( '@address-service/domains/common/utils/services/search/providers' )
15+ const { DadataSearchProvider, PullentiSearchProvider } = require ( '@address-service/domains/common/utils/services/search/providers' )
1616const { DadataSuggestionProvider } = require ( '@address-service/domains/common/utils/services/suggest/providers' )
1717
1818const logger = getLogger ( )
@@ -120,8 +120,64 @@ const ActualizeAddressesService = new GQLCustomSchema('ActualizeAddressesService
120120 failures . push ( { addressId, errorMessage : 'Google not supported yet. Be free to contribute :)' } )
121121 continue
122122 } else if ( providerName === PULLENTI_PROVIDER ) {
123- failures . push ( { addressId, errorMessage : 'Pullenti not supported yet. Be free to contribute :)' } )
124- continue
123+ let fiasId
124+
125+ dataForLog . providerName = providerName
126+
127+ if ( meta . data ?. house_fias_id ) {
128+ fiasId = meta . data . house_fias_id
129+ } else {
130+ failures . push ( { addressId, errorMessage : 'No house_fias_id in meta.data' } )
131+ continue
132+ }
133+
134+ dataForLog . fiasId = fiasId
135+
136+ const provider = new PullentiSearchProvider ( { req : context . req } )
137+
138+ const denormalizedResult = await provider . getAddressByFiasId ( fiasId )
139+ if ( ! denormalizedResult ) {
140+ failures . push ( { addressId, errorMessage : `Address not found with provider=${ providerName } ` } )
141+ continue
142+ }
143+
144+ const [ searchResult ] = provider . normalize ( [ denormalizedResult ] )
145+ const addressKey = provider . generateAddressKey ( searchResult )
146+ const heuristics = provider . extractHeuristics ( searchResult )
147+
148+ dataForLog . denormalizedResult = denormalizedResult
149+ dataForLog . addressKey = addressKey
150+
151+ if ( key === addressKey ) {
152+ failures . push ( { addressId, errorMessage : `The addressKey was not changed: ${ addressKey } ` } )
153+ continue
154+ }
155+
156+ const existingAddress = await getByCondition ( 'Address' , { key : addressKey } )
157+ if ( existingAddress ) {
158+ dataForLog . existingAddress = existingAddress
159+ await mergeAddresses ( context , addressId , existingAddress . id , { dv, sender } )
160+ }
161+
162+ const newAddressData = {
163+ dv,
164+ sender,
165+ address : searchResult . value ,
166+ key : addressKey ,
167+ meta : {
168+ provider : {
169+ name : provider . getProviderName ( ) ,
170+ rawData : denormalizedResult ,
171+ } ,
172+ value : searchResult . value ,
173+ unrestricted_value : searchResult . unrestricted_value ,
174+ data : get ( searchResult , 'data' , { } ) ,
175+ } ,
176+ }
177+ const updatedAddress = await Address . update ( context , addressId , newAddressData , 'id' )
178+ await upsertHeuristics ( context , updatedAddress . id , heuristics , providerName , { dv, sender } )
179+ dataForLog . actualizedAddress = updatedAddress
180+ successIds . push ( updatedAddress . id )
125181 } else {
126182 failures . push ( { addressId, errorMessage : `No provider detected (name=${ providerName } )` } )
127183 continue
0 commit comments