diff --git a/internal/core/queries/decode_vin.go b/internal/core/queries/decode_vin.go index da0f9d5d..7546ede6 100644 --- a/internal/core/queries/decode_vin.go +++ b/internal/core/queries/decode_vin.go @@ -123,6 +123,11 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query *DecodeVINQuer metrics.Success.With(prometheus.Labels{"method": VinExists}).Inc() return r, nil } + // check if vin has failed in the past, and if it has just fail now + vinAlreadyFailed, _ := models.FailedVinDecodes(models.FailedVinDecodeWhere.Vin.EQ(vinObj.String())).Exists(ctx, dc.dbs().Writer) + if vinAlreadyFailed { + return nil, fmt.Errorf("vin %s failed decoding already", vinObj.String()) + } localLog.Info().Msgf("Start Decode VIN ") diff --git a/internal/core/queries/decode_vin_test.go b/internal/core/queries/decode_vin_test.go index a32068d2..2ca6b83c 100644 --- a/internal/core/queries/decode_vin_test.go +++ b/internal/core/queries/decode_vin_test.go @@ -10,6 +10,7 @@ import ( "testing" mock_repository "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/repositories/mocks" + "github.com/aarondl/sqlboiler/v4/types" "github.com/segmentio/ksuid" coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" @@ -87,6 +88,21 @@ func (s *DecodeVINQueryHandlerSuite) TearDownSuite() { } } +func (s *DecodeVINQueryHandlerSuite) TestHandle_Failure_ExistingFailedVIN() { + const vin = "1FMCU0G61MUA52727" // ford escape 2021 + + fvin := models.FailedVinDecode{ + Vin: vin, + VendorsTried: types.StringArray{"drivly"}, + } + err := fvin.Insert(s.ctx, s.pdb.DBS().Writer, boil.Infer()) + s.Require().NoError(err) + + qryResult, err := s.queryHandler.Handle(s.ctx, &DecodeVINQuery{VIN: vin, Country: country}) + s.Error(err) + s.Nil(qryResult) +} + func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingDD_UpdatesAttributes_CreatesStyle() { ctx := context.Background() const vin = "1FMCU0G61MUA52727" // ford escape 2021 diff --git a/internal/core/services/vin_decoding_service.go b/internal/core/services/vin_decoding_service.go index e736d1f5..4360e1f1 100644 --- a/internal/core/services/vin_decoding_service.go +++ b/internal/core/services/vin_decoding_service.go @@ -85,8 +85,8 @@ func (c vinDecodingService) GetVIN(ctx context.Context, vin string, provider cor if len(providersToTry) == 0 { if provider == coremodels.AllProviders { - // fill in the list, future could do something country specific - providersToTry = append(providersToTry, coremodels.DrivlyProvider, coremodels.VincarioProvider, coremodels.DATGroupProvider, coremodels.Japan17VIN) + // fill in the list, future could do something country specific. removed DAT group + providersToTry = append(providersToTry, coremodels.DrivlyProvider, coremodels.VincarioProvider, coremodels.Japan17VIN, coremodels.AutoIsoProvider) } else { // use the specified override providersToTry = append(providersToTry, provider) diff --git a/internal/core/services/vin_decoding_service_test.go b/internal/core/services/vin_decoding_service_test.go index 543be6ec..24c78c94 100644 --- a/internal/core/services/vin_decoding_service_test.go +++ b/internal/core/services/vin_decoding_service_test.go @@ -4,7 +4,6 @@ import ( "context" _ "embed" "encoding/json" - "encoding/xml" "fmt" "testing" @@ -262,29 +261,3 @@ func (s *VINDecodingServiceSuite) Test_VINDecodingService_DD_Default_Success() { s.NoError(err) assert.Equal(s.T(), result.VIN, vin) } - -//go:embed datgroup_resp.xml -var testDATGroupXML []byte - -func (s *VINDecodingServiceSuite) Test_VINDecodingService_DATGroup_Success() { - ctx := context.Background() - const vin = "ZFADEXTESTSTUB001" - const country = "TR" - - vinInfoResp := &coremodels.DATGroupInfoResponse{ - VIN: vin, - MainTypeGroupName: "Test", - Year: 2023, - } - _ = xml.Unmarshal(testDATGroupXML, vinInfoResp) - - s.mockDATGroupAPIService.EXPECT().GetVINv2(vin).Times(1).Return(vinInfoResp, nil, nil) - - _ = dbtesthelper.SetupCreateDeviceType(s.T(), s.pdb) - - result, _, err := s.vinDecodingService.GetVIN(ctx, vin, coremodels.DATGroupProvider, country) - - s.NoError(err) - assert.Equal(s.T(), result.VIN, vin) - assert.Equal(s.T(), result.Source, coremodels.DATGroupProvider) -}