Skip to content

Commit ab95670

Browse files
committed
feat(address-service): DOMA-13263 add Pullenti provider support to ActualizeAddressesService
1 parent 4185631 commit ab95670

1 file changed

Lines changed: 59 additions & 3 deletions

File tree

apps/address-service/domains/address/schema/ActualizeAddressesService.js

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const { mergeAddresses } = require('@address-service/domains/address/utils/merge
1212
const { Address } = require('@address-service/domains/address/utils/serverSchema')
1313
const { DADATA_PROVIDER, GOOGLE_PROVIDER, PULLENTI_PROVIDER } = require('@address-service/domains/common/constants/providers')
1414
const { 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')
1616
const { DadataSuggestionProvider } = require('@address-service/domains/common/utils/services/suggest/providers')
1717

1818
const 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

Comments
 (0)