1338 lines
35 KiB
Go
1338 lines
35 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"fiskerinc.com/modules/grpc/kafka_grpc"
|
|
"fiskerinc.com/modules/logger"
|
|
)
|
|
|
|
func DepotRouteTRexToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_DepotPayload {
|
|
|
|
switch input.Handler {
|
|
case "init":
|
|
return MessageToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_DepotPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func DepotRouteHMIToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_DepotPayload {
|
|
|
|
switch input.Handler {
|
|
case "init":
|
|
return HMISessionToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_DepotPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func DepotRouteMobileToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_DepotPayload {
|
|
return &kafka_grpc.GRPC_DepotPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func MessageToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_DepotPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_DepotPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var data map[string]string
|
|
err := json.Unmarshal(input.Data, &data)
|
|
if err != nil || data == nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
initPayload := &kafka_grpc.InitPayload{
|
|
Data: data,
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_DepotPayload_InitPayload{
|
|
InitPayload: initPayload,
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
// #####################################################################################################
|
|
// ################################## Attendant ########################################################
|
|
// #####################################################################################################
|
|
func AttendantRouteTRexGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
|
|
switch input.Handler {
|
|
case "car_state":
|
|
return CarStateToGRPC(input)
|
|
case "car_update_status", "car_update_download", "car_update_install":
|
|
return CarUpdateToGRPC(input)
|
|
case "get_filekeys":
|
|
return CarFileKeysRequestToGRPC(input)
|
|
case "ecc_keys":
|
|
return CarUpdateRequestToGRPC(input)
|
|
case "dtcs":
|
|
return DTCEntryToGRPC(input)
|
|
case "sms_delivery_status_manifest":
|
|
return MessageStatusToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func AttendantRouteHMIGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
|
|
switch input.Handler {
|
|
case "update_approve":
|
|
return UpdateApprove(input)
|
|
case "car_update_status", "car_update_download", "car_update_install":
|
|
return CarUpdateToGRPC(input)
|
|
case "get_filekeys":
|
|
return CarFileKeysRequestToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func AttendantRouteMobileGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
|
|
switch input.Handler {
|
|
case "update_approve":
|
|
if input.Data == nil {
|
|
break
|
|
}
|
|
return UpdateApprove(input)
|
|
case "updates_get":
|
|
if input.Data == nil {
|
|
break
|
|
}
|
|
var m map[string]string
|
|
err := json.Unmarshal(input.Data, &m)
|
|
if err != nil || m == nil {
|
|
break
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
Data: &kafka_grpc.GRPC_AttendantPayload_UpdateGet{
|
|
UpdateGet: &kafka_grpc.VehicleData{
|
|
Vin: m["vin"],
|
|
},
|
|
},
|
|
}
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func UpdateApprove(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
var m map[string]int
|
|
err := json.Unmarshal(input.Data, &m)
|
|
if err != nil || m == nil {
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
Data: &kafka_grpc.GRPC_AttendantPayload_UpdateApprove{
|
|
UpdateApprove: &kafka_grpc.UpdateData{
|
|
Id: int64(m["id"]),
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// tmobile.MessageStatus imp
|
|
func MessageStatusToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
var m map[string]string
|
|
err := json.Unmarshal(input.Data, &m)
|
|
if err != nil || m == nil {
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
val, ok := kafka_grpc.EmumStatus_value[m["Status"]]
|
|
if !ok {
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
Data: &kafka_grpc.GRPC_AttendantPayload_MessageStatus{
|
|
MessageStatus: &kafka_grpc.MessageStatus{
|
|
MessageId: m["MessageID"],
|
|
Status: kafka_grpc.EmumStatus(val),
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func DTCEntryToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var dtc CommonDTCEntry
|
|
err := json.Unmarshal(input.Data, &dtc)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_DtcEntry{
|
|
DtcEntry: &kafka_grpc.DTCEntry{
|
|
Vin: dtc.VIN,
|
|
Ecu: dtc.ECU,
|
|
Dtc: dtc.DTC,
|
|
Timestamp: dtc.CreatedAt.UnixMilli(),
|
|
CreatedAt: dtc.CreatedAt.UnixMilli(),
|
|
Speed: uint32(dtc.Speed),
|
|
Mileage: dtc.Mileage,
|
|
Volt: uint32(dtc.Voltage),
|
|
SnapshotBase64: dtc.SnapshotBase64,
|
|
Status: uint32(dtc.Status),
|
|
},
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func AttendantRouteServiceGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
|
|
switch input.Handler {
|
|
case "send_manifest":
|
|
return UpdateManifestToGRPC(input)
|
|
case "order_updated":
|
|
return OrderToGRPC(input)
|
|
}
|
|
|
|
return &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
|
|
}
|
|
|
|
func CarUpdateRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var carState CarUpdateRequest
|
|
err := json.Unmarshal(input.Data, &carState)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_CarUpdateRequest{
|
|
CarUpdateRequest: &kafka_grpc.CarUpdateRequest{
|
|
CarUpdateId: carState.CarUpdateID,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func CarStateToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var carState CarStateUpdate
|
|
err := json.Unmarshal(input.Data, &carState)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
var ecuUpdate map[string]*kafka_grpc.CarECU
|
|
for key, ecu := range carState.ECUs {
|
|
if ecuUpdate == nil {
|
|
ecuUpdate = make(map[string]*kafka_grpc.CarECU)
|
|
}
|
|
|
|
obj := &kafka_grpc.CarECU{
|
|
Vin: ecu.VIN,
|
|
Ecu: ecu.ECU,
|
|
SwVersion: ecu.Version,
|
|
SerialNumber: ecu.SerialNumber,
|
|
HwVersion: ecu.HWVersion,
|
|
BootLoaderVersion: ecu.BootLoaderVersion,
|
|
Fingerprint: ecu.Fingerprint,
|
|
CodeDataString: ecu.Config,
|
|
Vendor: ecu.Vendor,
|
|
SupplierSwVersion: ecu.SupplierSWVersion,
|
|
EpochUsec: ecu.Epoch_usec,
|
|
AssyNumber: ecu.ASSYNumber,
|
|
}
|
|
|
|
if ecu.CreatedAt != nil {
|
|
t := ecu.CreatedAt.UnixMilli()
|
|
obj.CreatedAt = &t
|
|
}
|
|
if ecu.UpdatedAt != nil {
|
|
t := ecu.UpdatedAt.UnixMilli()
|
|
obj.UpdatedAt = &t
|
|
}
|
|
|
|
ecuUpdate[key] = obj
|
|
}
|
|
|
|
carUpdateStatus := &kafka_grpc.CarUpdateStatus{
|
|
Ecus: ecuUpdate,
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_CarUpdateStatus{
|
|
CarUpdateStatus: carUpdateStatus,
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func CarUpdateToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var carProg CarUpdateProgress
|
|
err := json.Unmarshal(input.Data, &carProg)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_CarUpdateProgress{
|
|
CarUpdateProgress: &kafka_grpc.CarUpdateProgress{
|
|
FileCurrent: carProg.FileCurrent,
|
|
FileTotal: carProg.FileTotal,
|
|
PkgCurrent: carProg.PackageCurrent,
|
|
PkgTotal: carProg.PackageTotal,
|
|
InstalledFiles: int64(carProg.InstalledFiles),
|
|
TotalFiles: int64(carProg.TotalFiles),
|
|
CarUpdateID: carProg.CarUpdateID,
|
|
Ecu: carProg.ECU,
|
|
Status: carProg.Status,
|
|
Info: carProg.Info,
|
|
ErrCode: int64(carProg.ErrorCode),
|
|
},
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func CarFileKeysRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var fileReq FileKeysRequest
|
|
err := json.Unmarshal(input.Data, &fileReq)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_FileKeyReq{
|
|
FileKeyReq: &kafka_grpc.FileKeysRequest{
|
|
FileIDs: fileReq.FileIDs,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func ECCKeysToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var eccKeys []ECCKeys
|
|
err := json.Unmarshal(input.Data, &eccKeys)
|
|
if err != nil || len(eccKeys) == 0 {
|
|
return grpcPayload
|
|
}
|
|
|
|
var grpcECCKeys []*kafka_grpc.ECCKey
|
|
|
|
for _, eccKey := range eccKeys {
|
|
grpcECCKey := toKafkaECCKey(&eccKey)
|
|
|
|
grpcECCKeys = append(grpcECCKeys, grpcECCKey)
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_Keys{
|
|
Keys: &kafka_grpc.ECCKeys{
|
|
EccKeys: grpcECCKeys,
|
|
},
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func HMISessionToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_DepotPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_DepotPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var sessionData HMISessionData
|
|
err := json.Unmarshal(input.Data, &sessionData)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
hmiSession := &kafka_grpc.HMISessionData{
|
|
SessionId: sessionData.SessionID,
|
|
Vin: sessionData.VIN,
|
|
Salt: sessionData.Salt,
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_DepotPayload_HmiSession{
|
|
HmiSession: hmiSession,
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
// #####################################################################################################
|
|
// ################################## Valet ########################################################
|
|
// #####################################################################################################
|
|
func ValetRouteTRexPayloadGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
|
|
switch input.Handler {
|
|
case "departure_schedule":
|
|
return DepartureScheduleToGRPC(input)
|
|
case "charge_settings":
|
|
return ChargeSettingToGRPC(input)
|
|
case "charging_command":
|
|
return ChargingCMDToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func ChargingCMDToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var m map[string]string
|
|
err := json.Unmarshal(input.Data, &m)
|
|
if err != nil || m == nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_ChCMD{
|
|
ChCMD: &kafka_grpc.ChargingCommand{
|
|
Action: m["action"],
|
|
},
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func DepartureScheduleToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var schedule DepartureSchedule
|
|
err := json.Unmarshal(input.Data, &schedule)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_DepartureSchedule{
|
|
DepartureSchedule: &kafka_grpc.DepartureSchedule{
|
|
NextDayDeparture: schedule.NextDayDeparture,
|
|
},
|
|
}
|
|
|
|
if len(schedule.DepartureDays) > 0 {
|
|
var departureDays []*kafka_grpc.DepartureDay
|
|
for _, d := range schedule.DepartureDays {
|
|
departureDays = append(departureDays, &kafka_grpc.DepartureDay{
|
|
DayOfWeek: d.DayOfWeek,
|
|
Time: d.Time,
|
|
})
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_DepartureSchedule).DepartureSchedule.DepartureDays = departureDays
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func ChargeSettingToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var settings ChargeSettings
|
|
err := json.Unmarshal(input.Data, &settings)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_ChargeSetting{
|
|
ChargeSetting: &kafka_grpc.ChargeSettings{
|
|
ChargeLimit: int32(settings.ChargeLimit),
|
|
MaxCurrent: int32(settings.MaxCurrent),
|
|
},
|
|
}
|
|
if settings.OffPeakCharging != nil {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_ChargeSetting).ChargeSetting.OffPeakCcharging = &kafka_grpc.OffPeakCharging{
|
|
Start: settings.OffPeakCharging.Start.UnixMilli(),
|
|
End: settings.OffPeakCharging.End.UnixMilli(),
|
|
}
|
|
}
|
|
|
|
if settings.MinCharge != nil {
|
|
minCharge := int32(*settings.MinCharge)
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_ChargeSetting).ChargeSetting.MinCharge = &minCharge
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func ValetRouteHMIPayloadGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
|
|
switch input.Handler {
|
|
case "ble_key":
|
|
return BLEKeysToGRPC(input)
|
|
case "profiles":
|
|
break
|
|
case "settings_update":
|
|
return HMISettingsUpdateToGRPC(input)
|
|
case "map_history":
|
|
return HMIMapHistoryToGRPC(input)
|
|
case "user_pois":
|
|
return HMIPOIsMessageToGRPC(input)
|
|
case "consent":
|
|
return UserConsentFromHMIToGRPC(input)
|
|
case "profile_delete":
|
|
return JSONHMIDeleteProfileToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func BLEKeysToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var m map[string]string
|
|
err := json.Unmarshal(input.Data, &m)
|
|
if err != nil || m == nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_BLEKey{
|
|
BLEKey: &kafka_grpc.BLEKeyRequest{
|
|
DriverId: m["driver_id"],
|
|
BleKey: m["ble_key"],
|
|
},
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func HMISettingsUpdateToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var update HMISettingsUpdate
|
|
err := json.Unmarshal(input.Data, &update)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_HmiSettingsUpdate{
|
|
HmiSettingsUpdate: &kafka_grpc.HMISettingsUpdate{
|
|
DriverId: update.DriverID,
|
|
},
|
|
}
|
|
if len(update.Settings) > 0 {
|
|
var settings []*kafka_grpc.CarSetting
|
|
for _, s := range update.Settings {
|
|
carSetting := &kafka_grpc.CarSetting{
|
|
Vin: s.VIN,
|
|
DriverId: s.DriverID,
|
|
Name: s.Name,
|
|
Type: s.Type,
|
|
Value: s.Value,
|
|
}
|
|
if s.CreatedAt != nil {
|
|
millis := s.CreatedAt.UnixMilli()
|
|
carSetting.Created = &millis
|
|
}
|
|
if s.UpdatedAt != nil {
|
|
millis := s.UpdatedAt.UnixMilli()
|
|
carSetting.Updated = &millis
|
|
}
|
|
|
|
settings = append(settings, carSetting)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_HmiSettingsUpdate).HmiSettingsUpdate.Settings = settings
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func HMIMapHistoryToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var history HMIMapHistory
|
|
err := json.Unmarshal(input.Data, &history)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_HmiMapHistory{
|
|
HmiMapHistory: &kafka_grpc.HMIMapHistory{
|
|
DriverId: history.DriverID,
|
|
},
|
|
}
|
|
|
|
if len(history.Searches) > 0 {
|
|
var searches []*kafka_grpc.MapHistory
|
|
for _, s := range history.Searches {
|
|
search := &kafka_grpc.MapHistory{
|
|
Name: s.Name,
|
|
Description: s.Description,
|
|
}
|
|
if s.Location != nil {
|
|
search.Location = &kafka_grpc.MapCoordinates{
|
|
Latitude: s.Location.Latitude,
|
|
Longitude: s.Location.Longitude,
|
|
}
|
|
}
|
|
searches = append(searches, search)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_HmiMapHistory).HmiMapHistory.Searches = searches
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func HMIPOIsMessageToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var message HMIPOIsMessage
|
|
err := json.Unmarshal(input.Data, &message)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_HmiPOIsMessage{
|
|
HmiPOIsMessage: &kafka_grpc.HMIPOIsMessage{
|
|
DriverId: message.DriverID,
|
|
},
|
|
}
|
|
|
|
if len(message.UserPOIs) > 0 {
|
|
var userPOIs []*kafka_grpc.PointOfInterest
|
|
for _, poi := range message.UserPOIs {
|
|
userPOI := &kafka_grpc.PointOfInterest{
|
|
Name: poi.Name,
|
|
}
|
|
if poi.Location != (POILocation{}) {
|
|
userPOI.Location = &kafka_grpc.POILocation{
|
|
Latitude: poi.Location.Latitude,
|
|
Longitude: poi.Location.Longitude,
|
|
}
|
|
}
|
|
userPOIs = append(userPOIs, userPOI)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_HmiPOIsMessage).HmiPOIsMessage.UserPOIs = userPOIs
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func UserConsentFromHMIToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var consent []UserConsentFromHMI
|
|
err := json.Unmarshal(input.Data, &consent)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
if len(consent) > 0 {
|
|
var arr []*kafka_grpc.UserConsent
|
|
for _, c := range consent {
|
|
arr = append(arr, &kafka_grpc.UserConsent{
|
|
Name: c.Name,
|
|
Accept: c.Accept,
|
|
DriverId: c.DriverID,
|
|
})
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_UserConsentFromHMI{
|
|
UserConsentFromHMI: &kafka_grpc.UserConsentFromHMI{
|
|
UserConsent: arr,
|
|
},
|
|
}
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func JSONHMIDeleteProfileToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var profile JSONHMIDeleteProfile
|
|
err := json.Unmarshal(input.Data, &profile)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_HmiDeleteProfile{
|
|
HmiDeleteProfile: &kafka_grpc.JSONHMIDeleteProfile{
|
|
DriverId: profile.DriverID,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func ValetRouteMobilePayloadGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
|
|
switch input.Handler {
|
|
case "charge_settings_get", "departure_schedule_get":
|
|
return EmptyMessageFromMobileToGRPC(input)
|
|
case "remote_command":
|
|
return RemoteCMDToGRPC(input)
|
|
case "car_locations", "map_history_get", "profiles", "store_inventory", "user_pois_get":
|
|
break // no payload for these handlers
|
|
case "digital_twin":
|
|
return DigitalTwinRequestToGRPC(input)
|
|
case "map_destination":
|
|
return MapDestinationRequestToGRPC(input)
|
|
case "map_route":
|
|
return MapRouteRequestToGRPC(input)
|
|
case "map_history_add":
|
|
return MapHistoryToGRPC(input)
|
|
case "settings_update":
|
|
return MobileSettingsUpdateToGRPC(input)
|
|
case "charge_settings":
|
|
return MobileChargeSettingUpdateToGRPC(input)
|
|
case "store_purchase":
|
|
return StorePurchasesToGRPC(input)
|
|
case "user_poi_create":
|
|
return PointOfInterestToGRPC(input)
|
|
case "user_poi_edit":
|
|
return MobilePOIEditMessageToGRPC(input)
|
|
case "user_poi_delete":
|
|
return MobilePOIDeleteMessageToGRPC(input)
|
|
case "departure_schedule":
|
|
return MobileDepartureScheduleToGRPC(input)
|
|
case "wake_car":
|
|
return WakeCarToGRPC(input)
|
|
case "manual_issue":
|
|
return AddIssueRequestToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
}
|
|
|
|
func EmptyMessageFromMobileToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var request EmptyMessageFromMobile
|
|
err := json.Unmarshal(input.Data, &request)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_EmptyMsg{
|
|
EmptyMsg: &kafka_grpc.VIN{
|
|
Vin: request.VIN,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func AddIssueRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var request AddIssueRequest
|
|
err := json.Unmarshal(input.Data, &request)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_AddIssueReq{
|
|
AddIssueReq: &kafka_grpc.AddIssueRequest{
|
|
Images: request.Images,
|
|
},
|
|
}
|
|
|
|
issue := &kafka_grpc.Issue{
|
|
Vin: request.VIN,
|
|
Description: request.Description,
|
|
DriverId: request.DriverID,
|
|
Id: int32(request.ID),
|
|
Title: request.Title,
|
|
Timestamp: request.Timestamp.UnixMilli(),
|
|
}
|
|
|
|
if len(request.IssueImages) > 0 {
|
|
var images []*kafka_grpc.IssueImage
|
|
for _, img := range request.IssueImages {
|
|
image := &kafka_grpc.IssueImage{
|
|
Id: int32(img.ID),
|
|
Image: img.Image,
|
|
IssueId: int32(img.IssueID),
|
|
}
|
|
images = append(images, image)
|
|
}
|
|
issue.Images = images
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_AddIssueReq).AddIssueReq.Issue = issue
|
|
return grpcPayload
|
|
}
|
|
|
|
func WakeCarToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var wakeCar EmptyMessageFromMobile
|
|
err := json.Unmarshal(input.Data, &wakeCar)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_Wakecar{
|
|
Wakecar: &kafka_grpc.VIN{
|
|
Vin: wakeCar.VIN,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MobileDepartureScheduleToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var schedule MobileDepartureSchedule
|
|
err := json.Unmarshal(input.Data, &schedule)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_MobileDepartureSchedule{
|
|
MobileDepartureSchedule: &kafka_grpc.MobileDepartureSchedule{
|
|
Vin: schedule.VIN,
|
|
},
|
|
}
|
|
|
|
if schedule.DepartureSchedule.NextDayDeparture != nil || len(schedule.DepartureSchedule.DepartureDays) > 0 {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MobileDepartureSchedule).MobileDepartureSchedule.DepartureSchedule = &kafka_grpc.DepartureSchedule{
|
|
NextDayDeparture: schedule.DepartureSchedule.NextDayDeparture,
|
|
}
|
|
|
|
if len(schedule.DepartureSchedule.DepartureDays) > 0 {
|
|
var departureDays []*kafka_grpc.DepartureDay
|
|
for _, day := range schedule.DepartureSchedule.DepartureDays {
|
|
departureDay := &kafka_grpc.DepartureDay{
|
|
DayOfWeek: day.DayOfWeek,
|
|
Time: day.Time,
|
|
}
|
|
departureDays = append(departureDays, departureDay)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MobileDepartureSchedule).MobileDepartureSchedule.DepartureSchedule.DepartureDays = departureDays
|
|
}
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MobilePOIDeleteMessageToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var message MobilePOIDeleteMessage
|
|
err := json.Unmarshal(input.Data, &message)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_PoiDelete{
|
|
PoiDelete: &kafka_grpc.MobilePOIDeleteMessage{
|
|
Name: message.Name,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MobilePOIEditMessageToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var message MobilePOIEditMessage
|
|
err := json.Unmarshal(input.Data, &message)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_PoiEdit{
|
|
PoiEdit: &kafka_grpc.MobilePOIEditMessage{
|
|
OldName: message.OldName,
|
|
},
|
|
}
|
|
|
|
if message.UserPOI != (PointOfInterest{}) {
|
|
userPoi := &kafka_grpc.PointOfInterest{
|
|
Name: message.UserPOI.Name,
|
|
}
|
|
if message.UserPOI.Location != (POILocation{}) {
|
|
userPoi.Location = &kafka_grpc.POILocation{
|
|
Latitude: message.UserPOI.Location.Latitude,
|
|
Longitude: message.UserPOI.Location.Longitude,
|
|
}
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_PoiEdit).PoiEdit.UserPoi = userPoi
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func PointOfInterestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var poi PointOfInterest
|
|
err := json.Unmarshal(input.Data, &poi)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_PoiCreate{
|
|
PoiCreate: &kafka_grpc.PointOfInterest{
|
|
Name: poi.Name,
|
|
},
|
|
}
|
|
|
|
if poi.Location != (POILocation{}) {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_PoiCreate).PoiCreate.Location = &kafka_grpc.POILocation{
|
|
Latitude: poi.Location.Latitude,
|
|
Longitude: poi.Location.Longitude,
|
|
}
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func StorePurchasesToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var purchases StorePurchases
|
|
err := json.Unmarshal(input.Data, &purchases)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_StorePurchases{
|
|
StorePurchases: &kafka_grpc.StorePurchases{
|
|
Vin: purchases.VIN,
|
|
},
|
|
}
|
|
|
|
if len(purchases.Purchases) > 0 {
|
|
var storePurchases []*kafka_grpc.StorePurchaseItem
|
|
for _, p := range purchases.Purchases {
|
|
purchase := &kafka_grpc.StorePurchaseItem{
|
|
Id: p.ID.String(),
|
|
}
|
|
storePurchases = append(storePurchases, purchase)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_StorePurchases).StorePurchases.Purchases = storePurchases
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
func MobileChargeSettingUpdateToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var setting MobileChargeSetting
|
|
err := json.Unmarshal(input.Data, &setting)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_MobileChargeSetting{
|
|
MobileChargeSetting: &kafka_grpc.MobileChargeSetting{
|
|
Vin: setting.VIN,
|
|
},
|
|
}
|
|
|
|
if setting.ChargeSettings != (ChargeSettings{}) {
|
|
chargeSettings := &kafka_grpc.ChargeSettings{
|
|
ChargeLimit: int32(setting.ChargeSettings.ChargeLimit),
|
|
MaxCurrent: int32(setting.ChargeSettings.MaxCurrent),
|
|
}
|
|
if setting.ChargeSettings.OffPeakCharging != nil {
|
|
chargeSettings.OffPeakCcharging = &kafka_grpc.OffPeakCharging{
|
|
Start: setting.ChargeSettings.OffPeakCharging.Start.UnixMilli(),
|
|
End: setting.ChargeSettings.OffPeakCharging.End.UnixMilli(),
|
|
}
|
|
}
|
|
|
|
if setting.ChargeSettings.MinCharge != nil {
|
|
minCharge := int32(*setting.ChargeSettings.MinCharge)
|
|
chargeSettings.MinCharge = &minCharge
|
|
}
|
|
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MobileChargeSetting).MobileChargeSetting.ChargeSettings = chargeSettings
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MobileSettingsUpdateToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var update MobileSettingsUpdate
|
|
err := json.Unmarshal(input.Data, &update)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_SettingsUpdate{
|
|
SettingsUpdate: &kafka_grpc.MobileSettingsUpdate{
|
|
Vin: update.VIN,
|
|
},
|
|
}
|
|
|
|
if len(update.Settings) > 0 {
|
|
var settings []*kafka_grpc.CarSetting
|
|
for _, s := range update.Settings {
|
|
setting := &kafka_grpc.CarSetting{
|
|
Vin: s.VIN,
|
|
DriverId: s.DriverID,
|
|
Name: s.Name,
|
|
Value: s.Value,
|
|
Type: s.Type,
|
|
}
|
|
if s.CreatedAt != nil {
|
|
millis := s.CreatedAt.UnixMilli()
|
|
setting.Created = &millis
|
|
}
|
|
if s.UpdatedAt != nil {
|
|
millis := s.UpdatedAt.UnixMilli()
|
|
setting.Updated = &millis
|
|
}
|
|
settings = append(settings, setting)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_SettingsUpdate).SettingsUpdate.Settings = settings
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MapHistoryToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var history MapHistory
|
|
err := json.Unmarshal(input.Data, &history)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_MapHistory{
|
|
MapHistory: &kafka_grpc.MapHistory{
|
|
Name: history.Name,
|
|
Description: history.Description,
|
|
},
|
|
}
|
|
|
|
if history.Location != nil {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MapHistory).MapHistory.Location = &kafka_grpc.MapCoordinates{
|
|
Latitude: history.Location.Latitude,
|
|
Longitude: history.Location.Longitude,
|
|
}
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MapRouteRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var request MapRouteRequest
|
|
err := json.Unmarshal(input.Data, &request)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_MapRouteReq{
|
|
MapRouteReq: &kafka_grpc.MapRouteRequest{
|
|
Vin: request.VIN,
|
|
},
|
|
}
|
|
|
|
if len(request.Route) > 0 {
|
|
var route []*kafka_grpc.MapCoordinates
|
|
for _, r := range request.Route {
|
|
route = append(route, &kafka_grpc.MapCoordinates{
|
|
Latitude: r.Latitude,
|
|
Longitude: r.Longitude,
|
|
})
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MapRouteReq).MapRouteReq.Route = route
|
|
}
|
|
|
|
if len(request.Waypoints) > 0 {
|
|
var waypoints []*kafka_grpc.MapWaypoint
|
|
for _, p := range request.Waypoints {
|
|
waypoint := &kafka_grpc.MapWaypoint{
|
|
Type: p.Type,
|
|
Title: p.Title,
|
|
Coordinates: &kafka_grpc.MapCoordinates{
|
|
Latitude: p.Latitude,
|
|
Longitude: p.Longitude,
|
|
},
|
|
}
|
|
waypoints = append(waypoints, waypoint)
|
|
}
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MapRouteReq).MapRouteReq.Waypoints = waypoints
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func MapDestinationRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var request MapDestinationRequest
|
|
err := json.Unmarshal(input.Data, &request)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_MapDestReq{
|
|
MapDestReq: &kafka_grpc.MapDestinationRequest{
|
|
Vin: request.VIN,
|
|
Name: request.Name,
|
|
},
|
|
}
|
|
|
|
if request.Address != nil {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MapDestReq).MapDestReq.Address = &kafka_grpc.TomTomAddress{
|
|
StreetName: request.Address.StreetName,
|
|
StreetNumber: request.Address.StreetNumber,
|
|
LocalName: request.Address.LocalName,
|
|
PostalCode: request.Address.PostalCode,
|
|
CountrySubdivisionName: request.Address.CountrySubdivisionName,
|
|
CountryCodeIso3: request.Address.CountryCodeIso3,
|
|
}
|
|
}
|
|
|
|
if request.Coordinates != (MapCoordinates{}) {
|
|
grpcPayload.Data.(*kafka_grpc.GRPC_ValetPayload_MapDestReq).MapDestReq.Coordinates = &kafka_grpc.MapCoordinates{
|
|
Latitude: request.Coordinates.Latitude,
|
|
Longitude: request.Coordinates.Longitude,
|
|
}
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func DigitalTwinRequestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var request DigitalTwinRequest
|
|
err := json.Unmarshal(input.Data, &request)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_DigitalTwinReq{
|
|
DigitalTwinReq: &kafka_grpc.VIN{
|
|
Vin: request.VIN,
|
|
},
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func ValetRouteServicePayloadGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
|
|
switch input.Handler {
|
|
case "remote_command":
|
|
return RemoteCMDToGRPC(input)
|
|
}
|
|
return &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
|
|
}
|
|
|
|
func RemoteCMDToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_ValetPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_ValetPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
var command kafka_grpc.RemoteCommand
|
|
err := json.Unmarshal(input.Data, &command)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
|
|
grpcPayload.Data = &kafka_grpc.GRPC_ValetPayload_RemoteCmd{
|
|
RemoteCmd: &command,
|
|
}
|
|
|
|
return grpcPayload
|
|
}
|
|
|
|
func UpdateManifestToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
|
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
|
Handler: input.Handler,
|
|
}
|
|
|
|
var commonManifest UpdateManifest
|
|
err := json.Unmarshal(input.Data, &commonManifest)
|
|
if err != nil {
|
|
return grpcPayload
|
|
}
|
|
data := &kafka_grpc.UpdateManifest{}
|
|
|
|
data.Id = commonManifest.ID
|
|
data.Name = commonManifest.Name
|
|
data.Version = commonManifest.Version
|
|
data.Description = commonManifest.Description
|
|
data.ReleaseNotes = commonManifest.ReleaseNotes
|
|
data.EcuList = commonManifest.ECUList
|
|
data.Fingerprint = commonManifest.Fingerprint
|
|
data.CarUpdateId = commonManifest.CarUpdateID
|
|
data.Rollback = commonManifest.RollbackEnabled
|
|
data.Type = commonManifest.Type
|
|
data.Vod = commonManifest.VOD
|
|
data.ManifestType = int32(commonManifest.ManifestType)
|
|
data.Env = commonManifest.Env
|
|
data.UpdateDuration = int32(commonManifest.UpdateDuration)
|
|
data.MaxAttempts = int32(commonManifest.MaxAttempts)
|
|
data.Active = commonManifest.Active
|
|
data.Country = commonManifest.Country
|
|
data.BodyType = commonManifest.BodyType
|
|
data.Restraint = commonManifest.Restraint
|
|
data.Powertrain = commonManifest.PowerTrain
|
|
data.Model = commonManifest.Model
|
|
data.Trim = commonManifest.Trim
|
|
data.Year = int32(commonManifest.Year)
|
|
data.Sums = commonManifest.SUMS
|
|
|
|
if commonManifest.CreatedAt != nil {
|
|
created := commonManifest.CreatedAt.UnixMilli()
|
|
data.Created = &created
|
|
}
|
|
if commonManifest.UpdatedAt != nil {
|
|
updated := commonManifest.UpdatedAt.UnixMilli()
|
|
data.Updated = &updated
|
|
}
|
|
|
|
// Convert ECUs
|
|
updateManifestECU := make([]*kafka_grpc.UpdateManifestECU, 0, len(commonManifest.ECUs))
|
|
updateManifestECU = UpdateManifestECUToGRPC(commonManifest.ECUs, updateManifestECU)
|
|
data.EcuUpdates = updateManifestECU
|
|
data.EcuUpdates = updateManifestECU
|
|
grpcPayload.Data = &kafka_grpc.GRPC_AttendantPayload_UpdateManifest{
|
|
UpdateManifest: data,
|
|
}
|
|
return grpcPayload
|
|
}
|
|
|
|
func UpdateManifestECUToGRPC(ecus []*UpdateManifestECU, output []*kafka_grpc.UpdateManifestECU) []*kafka_grpc.UpdateManifestECU {
|
|
for _, commonECU := range ecus {
|
|
u := &kafka_grpc.UpdateManifestECU{
|
|
Id: commonECU.ID,
|
|
ManifestId: commonECU.UpdateManifestID,
|
|
Name: commonECU.ECU,
|
|
Version: commonECU.Version,
|
|
CurrentVersion: commonECU.CurrentVersion,
|
|
HwVersion: commonECU.HWVersion,
|
|
HwVersions: commonECU.HWVersions,
|
|
ConfigurationMask: commonECU.ConfigurationMask,
|
|
Configuration: commonECU.Configuration,
|
|
SelfDownload: commonECU.SelfDownload,
|
|
Mode: commonECU.Mode,
|
|
InstallPriority: int32(commonECU.InstallPriority),
|
|
}
|
|
if commonECU.CreatedAt != nil {
|
|
created := commonECU.CreatedAt.UnixMilli()
|
|
u.Created = &created
|
|
}
|
|
if commonECU.UpdatedAt != nil {
|
|
updated := commonECU.UpdatedAt.UnixMilli()
|
|
u.Updated = &updated
|
|
}
|
|
|
|
u.EccKeys = toKafkaECCKey(commonECU.ECCKeys)
|
|
|
|
if len(commonECU.Files) > 0 {
|
|
fileInBytes := toBinaryArray(commonECU.Files)
|
|
if len(fileInBytes) > 0 {
|
|
var files []*kafka_grpc.UpdateManifestFile
|
|
err := json.Unmarshal(fileInBytes, &files)
|
|
if err != nil {
|
|
logger.Warn().Msgf("unable to parse Files of %s", string(fileInBytes))
|
|
}
|
|
u.Files = files
|
|
}
|
|
}
|
|
if len(commonECU.Rollback) > 0 {
|
|
u.Rollback = make([]*kafka_grpc.UpdateManifestECU, 0, len(u.Rollback))
|
|
u.Rollback = UpdateManifestECUToGRPC(commonECU.Rollback, u.Rollback)
|
|
}
|
|
output = append(output, u)
|
|
}
|
|
return output
|
|
}
|
|
|
|
func toKafkaECCKey(req *ECCKeys) *kafka_grpc.ECCKey {
|
|
|
|
if req == nil {
|
|
return nil
|
|
}
|
|
e := &kafka_grpc.ECCKey{
|
|
Ecu: req.ECU,
|
|
Env: req.Env,
|
|
}
|
|
if req.CreatedAt != nil {
|
|
t := req.CreatedAt.UnixMilli()
|
|
e.Created = &t
|
|
}
|
|
|
|
if req.UpdatedAt != nil {
|
|
t := req.UpdatedAt.UnixMilli()
|
|
e.Updated = &t
|
|
}
|
|
|
|
if req.PubKey1 != nil {
|
|
e.PubKeyLevel_1 = &kafka_grpc.BineryHex{
|
|
Data: req.PubKey1.Bytes(),
|
|
}
|
|
}
|
|
if req.PubKey2 != nil {
|
|
e.PubKeyLevel_2 = &kafka_grpc.BineryHex{
|
|
Data: req.PubKey2.Bytes(),
|
|
}
|
|
}
|
|
if req.PubKey3 != nil {
|
|
e.PubKeyLevel_3 = &kafka_grpc.BineryHex{
|
|
Data: req.PubKey3.Bytes(),
|
|
}
|
|
}
|
|
if req.PrivKey1 != nil {
|
|
e.Level_1 = &kafka_grpc.BineryHex{
|
|
Data: req.PrivKey1.Bytes(),
|
|
}
|
|
}
|
|
if req.PrivKey2 != nil {
|
|
e.Level_2 = &kafka_grpc.BineryHex{
|
|
Data: req.PrivKey2.Bytes(),
|
|
}
|
|
}
|
|
if req.PrivKey3 != nil {
|
|
e.Level_3 = &kafka_grpc.BineryHex{
|
|
Data: req.PrivKey3.Bytes(),
|
|
}
|
|
}
|
|
return e
|
|
|
|
}
|