Skip to content

Commit 4249229

Browse files
authored
add powertrain type to vin profile using existing logic (#297)
1 parent a2d2044 commit 4249229

2 files changed

Lines changed: 32 additions & 13 deletions

File tree

internal/api/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings,
122122
mediator.WithHandler(&queries.GetAllDeviceDefinitionByAutocompleteQuery{}, queries.NewGetAllDeviceDefinitionByAutocompleteQueryHandler(searchService)),
123123
mediator.WithHandler(&queries.GetCompatibilityR1SheetQuery{}, queries.NewCompatibilityR1SheetQueryHandler(settings)),
124124
mediator.WithHandler(&queries.GetDeviceDefinitionByIDQueryV2{}, queries.NewGetDeviceDefinitionByIDQueryV2Handler(ddOnChainService, pdb.DBS)),
125-
mediator.WithHandler(&queries.GetVINProfileQuery{}, queries.NewGetVINProfileQueryHandler(pdb.DBS, &logger)),
125+
mediator.WithHandler(&queries.GetVINProfileQuery{}, queries.NewGetVINProfileQueryHandler(pdb.DBS, &logger, powerTrainTypeService)),
126126

127127
mediator.WithHandler(&queries.DecodeVINQuery{}, decodeVINHandler),
128128
mediator.WithHandler(&queries.UpsertDecodingQuery{}, upsertVINHandler),

internal/core/queries/get_vin_profile.go

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import (
55
"context"
66
"database/sql"
77
"fmt"
8+
coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models"
9+
"github.com/DIMO-Network/device-definitions-api/internal/core/services"
10+
"github.com/DIMO-Network/shared/pkg/logfields"
11+
"strings"
812

913
"github.com/DIMO-Network/device-definitions-api/internal/core/mediator"
1014
"github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/models"
@@ -15,26 +19,29 @@ import (
1519
)
1620

1721
type GetVINProfileQueryHandler struct {
18-
dbs func() *db.ReaderWriter
19-
logger *zerolog.Logger
22+
dbs func() *db.ReaderWriter
23+
logger *zerolog.Logger
24+
powertrainSvc services.PowerTrainTypeService
2025
}
2126

2227
type GetVINProfileQuery struct {
2328
VIN string `json:"vin"`
2429
}
2530

2631
type GetVINProfileResponse struct {
27-
VIN string `json:"vin"`
28-
ProfileRaw []byte `json:"profileRaw"`
29-
Vendor string `json:"vendor"`
32+
VIN string `json:"vin"`
33+
ProfileRaw []byte `json:"profileRaw"`
34+
Vendor string `json:"vendor"`
35+
PowertrainType string `json:"powertrainType,omitempty"`
3036
}
3137

3238
func (*GetVINProfileQuery) Key() string { return "GetVINProfileQuery" }
3339

34-
func NewGetVINProfileQueryHandler(dbs func() *db.ReaderWriter, logger *zerolog.Logger) GetVINProfileQueryHandler {
40+
func NewGetVINProfileQueryHandler(dbs func() *db.ReaderWriter, logger *zerolog.Logger, powertrainSvc services.PowerTrainTypeService) GetVINProfileQueryHandler {
3541
return GetVINProfileQueryHandler{
36-
dbs: dbs,
37-
logger: logger,
42+
dbs: dbs,
43+
logger: logger,
44+
powertrainSvc: powertrainSvc,
3845
}
3946
}
4047

@@ -44,18 +51,30 @@ func (dc GetVINProfileQueryHandler) Handle(ctx context.Context, query mediator.M
4451
return nil, &exceptions.ValidationError{Err: fmt.Errorf("invalid vin %s", qry.VIN)}
4552
}
4653

47-
vinNumber, err := models.VinNumbers(models.VinNumberWhere.Vin.EQ(qry.VIN), models.VinNumberWhere.DrivlyData.IsNotNull()).One(ctx, dc.dbs().Reader)
54+
vinNumber, err := models.VinNumbers(models.VinNumberWhere.Vin.EQ(qry.VIN)).One(ctx, dc.dbs().Reader)
4855

4956
if err != nil {
5057
if errors.Is(err, sql.ErrNoRows) {
5158
return nil, &exceptions.NotFoundError{Err: fmt.Errorf("vin %s not found", qry.VIN)}
5259
}
5360
return nil, &exceptions.InternalError{Err: fmt.Errorf("failed to get vin %s", qry.VIN)}
5461
}
62+
split := strings.Split(vinNumber.DefinitionID, "_")
63+
powertrain := ""
64+
if len(split) == 3 {
65+
powertrain, err = dc.powertrainSvc.ResolvePowerTrainType(split[0], split[1], vinNumber.DrivlyData, vinNumber.VincarioData)
66+
if err != nil {
67+
dc.logger.Error().Err(err).Str(logfields.VIN, qry.VIN).Msg("failed to resolve powertrain type for vin, continuing with ICE")
68+
}
69+
}
70+
if powertrain == "" {
71+
powertrain = string(coremodels.ICE)
72+
}
5573

5674
return &GetVINProfileResponse{
57-
VIN: qry.VIN,
58-
ProfileRaw: vinNumber.DrivlyData.JSON,
59-
Vendor: "drivly",
75+
VIN: qry.VIN,
76+
ProfileRaw: vinNumber.DrivlyData.JSON,
77+
Vendor: vinNumber.DecodeProvider.String,
78+
PowertrainType: powertrain,
6079
}, nil
6180
}

0 commit comments

Comments
 (0)