Files
cloud-services/pkg/common/updatemanifest_file.go

106 lines
3.2 KiB
Go

package common
import (
"github.com/fiskerinc/cloud-services/pkg/common/dbbasemodel"
)
type ManifestFileType string
const (
Bootloader ManifestFileType = "bootloader"
Software ManifestFileType = "software"
Calibration ManifestFileType = "calibration"
Other ManifestFileType = "other"
)
var fileSortOrder = map[ManifestFileType]int{
Bootloader: 0,
Software: 1,
Calibration: 2,
Other: 3,
}
type UpdateManifestFile struct {
FileID string `json:"file_id" pg:",pk" validate:"omitempty,hexadecimal"`
UpdateManifestECUID int64 `json:"manifest_ecu_id,omitempty" pg:"update_manifest_ecu_id,unique:updatemanifestecuid_filename" validate:"gte=0"`
Filename string `json:"filename,omitempty" pg:",unique:updatemanifestecuid_filename" validate:"max=512"`
URL string `json:"url" validate:"omitempty,max=32768,url"`
FileSize uint64 `json:"file_size,omitempty"`
Checksum string `json:"checksum,omitempty" validate:"omitempty,max=8,hexadecimal"`
FileType ManifestFileType `json:"type,omitempty" validate:"max=255"`
FileOrder int `json:"order,omitempty"`
WriteRegionID int64 `json:"-"`
WriteRegion MemoryRegion `json:"write_region" pg:"rel:has-one"`
EraseRegionID int64 `json:"-"`
EraseRegion *MemoryRegion `json:"erase_region,omitempty" pg:"rel:has-one"`
FileKey *FileKeyResponse `json:"file_key,omitempty" pg:"rel:belongs-to"`
Parsed *bool `json:"parsed_file,omitempty" pg:"parsed_file"`
Signature string `json:"signature,omitempty" validate:"omitempty,max=129,hexadecimal"`
CompatibleTrims []CompatibleTrim `json:"compatible_trims,omitempty" pg:",array"`
CompatibleDriveSides []CompatibleDriveSide `json:"compatible_drive_sides,omitempty" pg:",array"`
dbbasemodel.DBModelBase
}
func (umf *UpdateManifestFile) Scrub() {
umf.UpdateManifestECUID = 0
umf.Filename = ""
umf.FileOrder = 0
umf.CreatedAt = nil
umf.UpdatedAt = nil
umf.Parsed = nil
umf.CompatibleTrims = nil
umf.CompatibleDriveSides = nil
}
// I think this code is kind of messy, and could definitely be cleaner
func (umf *UpdateManifestFile) IsFileCompatible(compatibleFilter ECUFileFilter) (compatible bool) {
compatible = true
hasTrim := false
for _, trim := range umf.CompatibleTrims {
if trim == compatibleFilter.Trim {
hasTrim = true
break
}
}
if !hasTrim {
compatible = false
return
}
hasDriveSide := false
for _, driveSide := range umf.CompatibleDriveSides{
if driveSide == compatibleFilter.DriveSide {
hasDriveSide = true
break
}
}
if !hasDriveSide {
compatible = false
return
}
return
}
type CompatibleDriveSide string
const (
LEFT_HAND_DRIVE CompatibleDriveSide = "LHD"
RIGHT_HAND_DRIVE CompatibleDriveSide = "RHD"
)
// May want to make a dynamic table for this, as new cars will have different trims
type CompatibleTrim string
const (
EXTREME CompatibleTrim = "EXT"
ULTRA CompatibleTrim = "ULT"
SPORT CompatibleTrim = "SPT"
)
// Unused, but I imagine we will need this field in the future
type CompatibleYear string
const (
YEAR_2023 CompatibleYear = "2023"
)