Skip to content

Commit f2ee907

Browse files
committed
improve selection process for picking decoder
1 parent ce29fd7 commit f2ee907

8 files changed

Lines changed: 235 additions & 232 deletions

File tree

cmd/device-definitions-api/decode_vin.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ func (p *decodeVINCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interf
108108
if wmi != nil {
109109
dbVin.ManufacturerName = wmi.ManufacturerName
110110
}
111-
dt, err := models.DeviceTypes(models.DeviceTypeWhere.ID.EQ(common.DefaultDeviceType)).One(ctx, pdb.DBS().Reader)
111+
_, err := models.DeviceTypes(models.DeviceTypeWhere.ID.EQ(common.DefaultDeviceType)).One(ctx, pdb.DBS().Reader)
112112
if err != nil {
113113
fmt.Println(err.Error())
114114
return subcommands.ExitFailure
115115
}
116116
vinInfo := &coremodels.VINDecodingInfoData{VIN: vin}
117117

118118
if p.datGroup {
119-
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, dt, coremodels.DATGroupProvider, country)
119+
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, coremodels.DATGroupProvider, country)
120120
// use the dat group service to decode
121121
if err != nil {
122122
fmt.Println(err.Error())
@@ -126,7 +126,7 @@ func (p *decodeVINCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interf
126126
fmt.Printf("\n\nVIN Response: %+v\n", vinInfo)
127127
}
128128
if p.drivly {
129-
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, dt, coremodels.DrivlyProvider, country)
129+
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, coremodels.DrivlyProvider, country)
130130
if err != nil {
131131
fmt.Println(err.Error())
132132
continue
@@ -135,23 +135,23 @@ func (p *decodeVINCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interf
135135
fmt.Printf("VIN Response: %+v\n", vinInfo)
136136
}
137137
if p.vincario {
138-
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, dt, coremodels.VincarioProvider, country)
138+
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, coremodels.VincarioProvider, country)
139139
if err != nil {
140140
fmt.Println(err.Error())
141141
continue
142142
}
143143
fmt.Printf("VIN Response: %+v\n", vinInfo)
144144
}
145145
if p.carvx {
146-
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, dt, coremodels.CarVXVIN, country)
146+
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, coremodels.CarVXVIN, country)
147147
if err != nil {
148148
fmt.Println(err.Error())
149149
continue
150150
}
151151
fmt.Printf("VIN Response: %+v\n", vinInfo)
152152
}
153153
if p.japan17vin {
154-
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, dt, coremodels.Japan17VIN, country)
154+
vinInfo, err = vinDecodingService.GetVIN(ctx, vin, coremodels.Japan17VIN, country)
155155
if err != nil {
156156
fmt.Println(err.Error())
157157
continue
@@ -249,6 +249,7 @@ func instantiateVINDecodingSvc(ctx context.Context, settings *config.Settings, l
249249
drivlyAPI := gateways.NewDrivlyAPIService(settings)
250250
vincarioAPI := gateways.NewVincarioAPIService(settings, logger)
251251
jp17vinAPI := gateways.NewJapan17VINAPI(logger, settings)
252+
carvxAPI := gateways.NewCarVxVINAPI(logger, settings)
252253

253254
send, err := createSender(ctx, settings, logger)
254255
if err != nil {
@@ -266,7 +267,7 @@ func instantiateVINDecodingSvc(ctx context.Context, settings *config.Settings, l
266267
}
267268
deviceDefinitionOnChainService := gateways.NewDeviceDefinitionOnChainService(settings, logger, ethClient, chainID, send, pdb.DBS)
268269

269-
vinDecodingService := services.NewVINDecodingService(drivlyAPI, vincarioAPI, nil, logger, deviceDefinitionOnChainService, datAPI, pdb.DBS, jp17vinAPI)
270+
vinDecodingService := services.NewVINDecodingService(drivlyAPI, vincarioAPI, nil, logger, deviceDefinitionOnChainService, datAPI, pdb.DBS, jp17vinAPI, carvxAPI)
270271

271272
return vinDecodingService
272273
}

internal/api/api.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings,
6161
fuelAPIService := gateways.NewFuelAPIService(settings, &logger)
6262
autoIsoAPIService := gateways.NewAutoIsoAPIService(settings.AutoIsoAPIUid, settings.AutoIsoAPIKey)
6363
japan17VINAPI := gateways.NewJapan17VINAPI(&logger, settings)
64+
carvxAPI := gateways.NewCarVxVINAPI(&logger, settings)
6465
registryInstance, err := contracts.NewRegistry(settings.EthereumRegistryAddress, ethClient)
6566
if err != nil {
6667
logger.Fatal().Err(err).Msg("Failed to create registry query instance.")
@@ -74,7 +75,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings,
7475
vinRepository := repositories.NewVINRepository(pdb.DBS, registryInstance, identityAPI)
7576

7677
//cache services
77-
vincDecodingService := services.NewVINDecodingService(drivlyAPIService, vincarioAPIService, autoIsoAPIService, &logger, ddOnChainService, datGroupWSService, pdb.DBS, japan17VINAPI)
78+
vincDecodingService := services.NewVINDecodingService(drivlyAPIService, vincarioAPIService, autoIsoAPIService, &logger, ddOnChainService, datGroupWSService, pdb.DBS, japan17VINAPI, carvxAPI)
7879
powerTrainTypeService, err := services.NewPowerTrainTypeService("powertrain_type_rule.yaml", &logger, ddOnChainService)
7980
searchService := search.NewTypesenseAPIService(settings, &logger)
8081
if err != nil {

internal/core/queries/decode_vin.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query mediator.Messa
186186
return resp, nil
187187
}
188188

189-
dt, err := models.DeviceTypes(models.DeviceTypeWhere.ID.EQ(common.DefaultDeviceType)).One(ctx, dc.dbs().Reader)
189+
_, err = models.DeviceTypes(models.DeviceTypeWhere.ID.EQ(common.DefaultDeviceType)).One(ctx, dc.dbs().Reader)
190190
if err != nil {
191191
metrics.InternalError.With(prometheus.Labels{"method": VinErrors}).Inc()
192192
return nil, errors.Wrap(err, "failed to get device_type")
@@ -201,13 +201,13 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query mediator.Messa
201201
dbWMI, err := models.Wmis(models.WmiWhere.Wmi.EQ(wmi)).One(ctx, dc.dbs().Reader)
202202
if err == nil && dbWMI != nil {
203203
if dbWMI.ManufacturerName == "Tesla" {
204-
vinInfo, err = dc.vinDecodingService.GetVIN(ctx, vin.String(), dt, coremodels.TeslaProvider, qry.Country)
204+
vinInfo, err = dc.vinDecodingService.GetVIN(ctx, vin.String(), coremodels.TeslaProvider, qry.Country)
205205
resp.Manufacturer = "Tesla"
206206
}
207207
}
208208
// not a tesla, regular decode path
209209
if vinInfo == nil || vinInfo.Model == "" {
210-
vinInfo, err = dc.vinDecodingService.GetVIN(ctx, vin.String(), dt, coremodels.AllProviders, qry.Country) // this will try drivly first unless of japan
210+
vinInfo, err = dc.vinDecodingService.GetVIN(ctx, vin.String(), coremodels.AllProviders, qry.Country) // this will try drivly first unless of japan
211211
}
212212

213213
// if no luck decoding VIN, try buildingVinInfo from known data passed in, typically smartcar or software connections

internal/core/queries/decode_vin_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingDD_UpdatesAt
147147
metaData, _ := json.Marshal(metaDataInfo)
148148
vinDecodingInfoData.MetaData = null.JSONFrom(metaData)
149149
definitionID := dd.ID
150-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
150+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
151151
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("ICE")
152152
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
153153
buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil)
@@ -262,7 +262,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_CreatesDD_WithMismatchWM
262262
styleLevelPT := "PHEV"
263263
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
264264
nil, nil, nil) // should return nil b/c doesn't exist
265-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
265+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
266266
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return(styleLevelPT)
267267

268268
trxHashHex := "0xa90868fe9364dbf41695b3b87e630f6455cfd63a4711f56b64f631b828c02b35"
@@ -416,7 +416,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_CreatesDD() {
416416
styleLevelPT := "PHEV"
417417
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
418418
nil, nil, nil) // should return nil b/c doesn't exist
419-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
419+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
420420
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return(styleLevelPT)
421421

422422
trxHashHex := "0xa90868fe9364dbf41695b3b87e630f6455cfd63a4711f56b64f631b828c02b35"
@@ -530,7 +530,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingDD_AndStyleA
530530
vinDecodingInfoData.MetaData = null.JSONFrom(metaData)
531531
definitionID := dd.ID
532532

533-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
533+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
534534
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("HEV")
535535
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
536536
buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil)
@@ -624,7 +624,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingWMI() {
624624
vinDecodingInfoData.MetaData = null.JSONFrom(metaData)
625625
definitionID := dd.ID
626626

627-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
627+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
628628
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("HEV")
629629
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
630630
buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil)
@@ -677,7 +677,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_TeslaDecode() {
677677

678678
definitionID := dd.ID
679679

680-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.TeslaProvider, "USA").Times(1).Return(vinDecodingInfoData, nil)
680+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.TeslaProvider, "USA").Times(1).Return(vinDecodingInfoData, nil)
681681
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("BEV")
682682
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
683683
buildTestTblDD(definitionID, dd.Model, dd.Year), nil, nil)
@@ -775,7 +775,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_InvalidVINYear_AutoIso()
775775
Model: "Escape",
776776
}
777777
definitionID := "ford_escape_2017"
778-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
778+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
779779
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("", "").Return("ICE") // normally this would return ""
780780
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
781781
buildTestTblDD(definitionID, "Escape", 2021), nil, nil)
@@ -817,7 +817,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_InvalidStyleName_AutoIso
817817
StyleName: "1",
818818
}
819819
definitionID := "ford_escape_2017"
820-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
820+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil)
821821
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("1", "").Return("ICE")
822822
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(
823823
buildTestTblDD(definitionID, "Escape", 2017), nil, nil)
@@ -857,7 +857,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Fail_DecodeErr() {
857857
_ = dbtesthelper.SetupCreateAutoPiIntegration(s.T(), s.pdb)
858858
_ = dbtesthelper.SetupCreateMake("Ford")
859859

860-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(nil, fmt.Errorf("unable to decode"))
860+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(nil, fmt.Errorf("unable to decode"))
861861

862862
qryResult, err := s.queryHandler.Handle(s.ctx, &DecodeVINQuery{VIN: vin, Country: country})
863863
assert.Nil(s.T(), qryResult)
@@ -873,7 +873,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_DecodeKnownFallback() {
873873
_ = dbtesthelper.SetupCreateWMI(s.T(), "1FM", dm.Name, s.pdb)
874874

875875
definitionID := "ford_bronco_2022"
876-
s.mockVINService.EXPECT().GetVIN(ctx, vin, gomock.Any(), coremodels.AllProviders, "USA").Times(1).Return(nil, fmt.Errorf("unable to decode"))
876+
s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(nil, fmt.Errorf("unable to decode"))
877877
s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("", "").Return("ICE")
878878

879879
s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return(

internal/core/services/mocks/vin_decoding_service_mock.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)