Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
60
pkg/cache/vins.go
vendored
Normal file
60
pkg/cache/vins.go
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"fiskerinc.com/modules/common"
|
||||
"fiskerinc.com/modules/db/queries"
|
||||
"fiskerinc.com/modules/logger"
|
||||
"fiskerinc.com/modules/redis"
|
||||
)
|
||||
|
||||
// RetrieveVINs retrieves VINs from redis or from DB based on driver ID and proceeds to cache VINs
|
||||
// redis keys:
|
||||
//
|
||||
// driver:<ID>:cars
|
||||
func RetrieveVINs(client redis.Client, db queries.CarsInterface, id string) ([]string, error) {
|
||||
var vins []string
|
||||
driverVINsKey := redis.DriverToVINsKey(id)
|
||||
|
||||
// retrieve VINs from redis
|
||||
err := client.GetCache(driverVINsKey, &vins, 0)
|
||||
if err != nil && !errors.Is(err, redis.ErrNilObject) {
|
||||
logger.Warn().Err(err).Send()
|
||||
} else if len(vins) > 0 {
|
||||
return vins, nil
|
||||
}
|
||||
|
||||
// if VINs not present in redis perform DB lookup
|
||||
var vehicles []common.CarToDriver
|
||||
vehicles, err = db.GetCarsForDriver(id)
|
||||
if err != nil {
|
||||
return vins, err
|
||||
}
|
||||
|
||||
for _, vehicle := range vehicles {
|
||||
vins = append(vins, vehicle.VIN)
|
||||
}
|
||||
|
||||
// cache drivers vehicles
|
||||
err = client.SetCache(driverVINsKey, vins, redisObjectExpire)
|
||||
if err != nil {
|
||||
return vins, err
|
||||
}
|
||||
|
||||
return vins, nil
|
||||
}
|
||||
|
||||
func RetrieveVINsAsSet(client redis.Client, db queries.CarsInterface, id string) (map[string]struct{}, error) {
|
||||
vins, err := RetrieveVINs(client, db, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var vinsSet = make(map[string]struct{})
|
||||
for _, vin := range vins {
|
||||
vinsSet[vin] = struct{}{}
|
||||
}
|
||||
|
||||
return vinsSet, nil
|
||||
}
|
||||
Reference in New Issue
Block a user