106 lines
3.2 KiB
Go
106 lines
3.2 KiB
Go
package common
|
|
|
|
import (
|
|
"fiskerinc.com/modules/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"
|
|
)
|