46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/fiskerinc/cloud-services/services/attendant/controllers"
|
|
"github.com/fiskerinc/cloud-services/services/attendant/services"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/logger"
|
|
"github.com/fiskerinc/cloud-services/pkg/mongo"
|
|
"github.com/fiskerinc/cloud-services/pkg/validator"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func UploadDtc(id string, data []byte) error {
|
|
// ID is a vin in this case
|
|
logger.Debug().Msgf("Upload DTC for %s", id)
|
|
var DTCEntry controllers.DTCEntry
|
|
DTCEntry.VIN = id
|
|
|
|
err := json.Unmarshal(data, &DTCEntry)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = validator.GetValidator().Struct(&DTCEntry); err != nil {
|
|
return errors.WithMessage(err, "failed structure validation")
|
|
}
|
|
|
|
err = DTCEntry.ParseSnapshot()
|
|
if err != nil {
|
|
logger.Warn().Msg(err.Error())
|
|
return err
|
|
}
|
|
client, err := services.GetMongoClient()
|
|
if err != nil {
|
|
logger.Warn().Str("id", id).Err(err).Send()
|
|
return err
|
|
}
|
|
dtcs := mongo.NewCollection(client.Collection("dtcs"))
|
|
DTCEntry.CreatedAt = time.Now()
|
|
_, err = dtcs.InsertOne(DTCEntry)
|
|
return err
|
|
}
|