52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
package queries
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/common"
|
|
|
|
"github.com/go-pg/pg/v10/orm"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
const versionsAtSQL = "SELECT version_source, version FROM public.car_version_logs WHERE id IN (SELECT MAX(id) as id FROM public.car_version_logs WHERE vin = ? AND created_at <= ? GROUP BY vin, version_source)"
|
|
|
|
type CarVersionsLogInterface interface {
|
|
LogVersionChange(log *common.CarVersionLogs) (orm.Result, error)
|
|
SelectByVIN(vin string, options *PageQueryOptions) ([]common.CarVersionLogs, int, error)
|
|
GetCarVersions(vin string, timestamp time.Time) (map[string]string, error)
|
|
}
|
|
|
|
// CarVersionsLog query methods
|
|
type CarVersionsLog struct {
|
|
QueryBase
|
|
}
|
|
|
|
func (c *CarVersionsLog) LogVersionChange(log *common.CarVersionLogs) (orm.Result, error) {
|
|
return c.insert(log)
|
|
}
|
|
|
|
func (c *CarVersionsLog) SelectByVIN(vin string, options *PageQueryOptions) ([]common.CarVersionLogs, int, error) {
|
|
var logs []common.CarVersionLogs
|
|
query := c.GetDBConn().Model(&logs).Where("vin = ?", vin)
|
|
query = c.pageQuery(query, options)
|
|
total, err := query.SelectAndCount()
|
|
|
|
return logs, total, errors.WithStack(err)
|
|
}
|
|
|
|
func (c *CarVersionsLog) GetCarVersions(vin string, timestamp time.Time) (map[string]string, error) {
|
|
logs := []common.CarVersionLogs{}
|
|
result := map[string]string{}
|
|
|
|
_, err := c.GetDBConn().Query(&logs, versionsAtSQL, vin, timestamp)
|
|
if err == nil {
|
|
result = map[string]string{}
|
|
for _, log := range logs {
|
|
result[string(log.VersionSource)] = log.Version
|
|
}
|
|
}
|
|
|
|
return result, errors.WithStack(err)
|
|
}
|