Skip to content

Commit a570d92

Browse files
committed
use identity for definition check
1 parent 68c321c commit a570d92

4 files changed

Lines changed: 50 additions & 21 deletions

File tree

cmd/device-definitions-api/add_vins_csv.go

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways"
1717
"github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender"
1818
"github.com/DIMO-Network/shared/pkg/db"
19+
"github.com/DIMO-Network/shared/pkg/logfields"
1920
stringutils "github.com/DIMO-Network/shared/pkg/strings"
2021
vinutils "github.com/DIMO-Network/shared/pkg/vin"
2122
"github.com/aarondl/null/v8"
@@ -30,7 +31,8 @@ type addVINsCSVCmd struct {
3031
logger zerolog.Logger
3132
settings config.Settings
3233

33-
sender sender.Sender
34+
sender sender.Sender
35+
identity gateways.IdentityAPI
3436
}
3537

3638
func (*addVINsCSVCmd) Name() string { return "addvinscsv" }
@@ -156,29 +158,18 @@ func (p *addVINsCSVCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...inter
156158
errorCount++
157159
continue
158160
}
161+
159162
// Verify the device definition exists
160-
manufacturer, err := onChainSvc.GetManufacturer(stringutils.SlugString(wmi.ManufacturerName))
161-
if err != nil {
162-
p.logger.Error().Err(err).Str("vin", vin).Str("manufacturer", wmi.ManufacturerName).Msg("Could not find manufacturer")
163+
deviceDefinition, err := p.identity.GetDeviceDefinitionByID(definitionID)
164+
if err != nil || deviceDefinition == nil {
165+
if err != nil {
166+
p.logger.Error().Err(err).Str(logfields.DefinitionID, definitionID).Msg("Could not find definition")
167+
}
163168
fmt.Printf("Error: Could not find manufacturer '%s' for VIN '%s': %v\n", wmi.ManufacturerName, vin, err)
164169
errorCount++
165170
continue
166171
}
167172

168-
deviceDefinition, err := onChainSvc.GetDefinitionTableland(ctx, big.NewInt(int64(manufacturer.TokenID)), definitionID)
169-
if err != nil {
170-
p.logger.Error().Err(err).Str("vin", vin).Str("definitionID", definitionID).Msg("Could not find device definition")
171-
fmt.Printf("Error: Could not find device definition '%s' for VIN '%s': %v\n", definitionID, vin, err)
172-
errorCount++
173-
continue
174-
}
175-
if deviceDefinition == nil {
176-
p.logger.Error().Str("vin", vin).Str("definitionID", definitionID).Msg("Device definition not found")
177-
fmt.Printf("Error: Device definition '%s' not found for VIN '%s'\n", definitionID, vin)
178-
errorCount++
179-
continue
180-
}
181-
182173
vinNumber := models.VinNumber{
183174
Vin: vin,
184175
Wmi: null.StringFrom(processedVIN.Wmi()),

cmd/device-definitions-api/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77
"os"
88

9+
"github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways"
910
"github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender"
1011
awsconfig "github.com/aws/aws-sdk-go-v2/config"
1112
"github.com/aws/aws-sdk-go-v2/service/kms"
@@ -43,13 +44,14 @@ func main() {
4344
Str("git-sha1", gitSha1).
4445
Logger()
4546
sigSender, err := createSender(ctx, &settings, &logger)
47+
identity := gateways.NewIdentityAPIService(&logger, &settings)
4648

4749
subcommands.Register(subcommands.HelpCommand(), "")
4850
subcommands.Register(subcommands.FlagsCommand(), "")
4951
subcommands.Register(subcommands.CommandsCommand(), "")
5052
subcommands.Register(&migrateDBCmd{logger: logger, settings: settings}, "")
5153
subcommands.Register(&addVINCmd{logger: logger, settings: settings}, "")
52-
subcommands.Register(&addVINsCSVCmd{logger: logger, settings: settings, sender: sigSender}, "")
54+
subcommands.Register(&addVINsCSVCmd{logger: logger, settings: settings, sender: sigSender, identity: identity}, "")
5355
subcommands.Register(&decodeVINCmd{logger: &logger, settings: &settings}, "")
5456
subcommands.Register(&syncDeviceDefinitionSearchCmd{logger: logger, settings: settings, sender: sigSender}, "")
5557
subcommands.Register(&deleteDefinition{logger: logger, settings: settings}, "")

internal/core/models/manufacturer.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,10 @@ type Manufacturer struct {
66
TableID int `json:"tableId"`
77
Owner string `json:"owner"`
88
}
9+
10+
type DeviceDefinition struct {
11+
DeviceDefinitionID string `json:"deviceDefinitionId"`
12+
Manufacturer Manufacturer `json:"manufacturer"`
13+
Model string `json:"model"`
14+
Year int `json:"year"`
15+
}

internal/infrastructure/gateways/identity_api.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package gateways
22

33
import (
4+
"fmt"
45
"time"
56

6-
coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models"
7-
87
"github.com/DIMO-Network/device-definitions-api/internal/config"
8+
coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models"
99
"github.com/DIMO-Network/shared/pkg/http"
1010
"github.com/pkg/errors"
1111
"github.com/rs/zerolog"
@@ -24,6 +24,7 @@ type identityAPIService struct {
2424
type IdentityAPI interface {
2525
GetManufacturer(slug string) (*coremodels.Manufacturer, error)
2626
GetManufacturers() ([]coremodels.Manufacturer, error)
27+
GetDeviceDefinitionByID(id string) (*coremodels.DeviceDefinition, error)
2728
}
2829

2930
// NewIdentityAPIService creates a new instance of IdentityAPI, initializing it with the provided logger, settings, and HTTP client.
@@ -92,6 +93,34 @@ func (i *identityAPIService) GetManufacturers() ([]coremodels.Manufacturer, erro
9293
return wrapper.Data.Manufacturers.Nodes, nil
9394
}
9495

96+
func (i *identityAPIService) GetDeviceDefinitionByID(id string) (*coremodels.DeviceDefinition, error) {
97+
graphqlQuery := fmt.Sprintf(DeviceDefinitionByIDQuery, id)
98+
99+
var wrapper struct {
100+
Data struct {
101+
DeviceDefinition coremodels.DeviceDefinition `json:"deviceDefinition"`
102+
} `json:"data"`
103+
}
104+
105+
err := i.httpClient.GraphQLQuery("", graphqlQuery, &wrapper)
106+
if err != nil {
107+
return nil, err
108+
}
109+
return &wrapper.Data.DeviceDefinition, nil
110+
}
111+
95112
type GraphQLRequest struct {
96113
Query string `json:"query"`
97114
}
115+
116+
const DeviceDefinitionByIDQuery = `{
117+
deviceDefinition(by: {id: "%s"}) {
118+
deviceDefinitionId
119+
manufacturer {
120+
name
121+
tokenId
122+
}
123+
model
124+
year
125+
}
126+
}`

0 commit comments

Comments
 (0)