Initial cloud-services repo - gateway service + pkg modules

This commit is contained in:
Chris Rai
2026-01-30 23:14:52 -05:00
commit fbb820d7b3
1037 changed files with 171318 additions and 0 deletions

128
pkg/carcommand/wake_up.go Normal file
View File

@@ -0,0 +1,128 @@
package carcommand
import (
"context"
"fiskerinc.com/modules/cache"
"fiskerinc.com/modules/db/queries"
"fiskerinc.com/modules/grpc/sms"
"fiskerinc.com/modules/logger"
"fiskerinc.com/modules/redis"
"fiskerinc.com/modules/utils/envtool"
"fiskerinc.com/modules/validator"
"github.com/pkg/errors"
)
type CarWakeUp struct {
db queries.CarsInterface
sms sms.SMSServiceClient
}
func NewCarWakeUp(db queries.CarsInterface, sms sms.SMSServiceClient) *CarWakeUp {
return &CarWakeUp{
db: db,
sms: sms,
}
}
func (c *CarWakeUp) WakeUp(vin string, await bool) error {
logger.Debug().Msgf("CarWakeUp.WakeUp %s", vin)
car, err := c.db.SelectByVIN(vin)
if err != nil {
return err
}
if car.ICCID == "" {
return errors.WithStack(ErrNoICCIDForWakeUp)
}
// KafkaServiceTarget is where the sms delivery status will be sent if await is false
// Need to be added to aftersales and ota_update
smsWakeUp := sms.SendSMSRequest{
ICCID: car.ICCID,
MessageText: ".",
Await: await,
KafkaServiceTarget: envtool.GetEnv("SMS_SERVICE_KAFKA_CALLBACK", "attendant_service"),
}
if ok, err := validator.ValidateICCIDSimple(smsWakeUp.ICCID); !ok || err != nil {
err = errors.New("iccid " + smsWakeUp.ICCID + " is invalid")
logger.Warn().Err(errors.WithStack(err)).Send()
return err
}
_, err = c.sms.HandleSMSSend(context.Background(), &smsWakeUp)
if err != nil {
logger.Error().Err(errors.WithStack(err)).Send()
return errors.WithStack(ErrWakeUpMessageNotSent)
}
return nil
}
func (c *CarWakeUp) WakeUpQueue(vin string, await bool) (qs *sms.SMSQueueResponse, err error) {
logger.Debug().Msgf("CarWakeUp.WakeUpQueue %s", vin)
car, err := c.db.SelectByVIN(vin)
if err != nil {
return qs, err
}
// If we do not return an ICCID, we still send the message to the SMS service.
// The sms service will create a fake wake up message to be used on dev
smsWakeUp := sms.SendSMSRequest{
ICCID: car.ICCID,
MessageText: ".",
Await: await,
}
qs, err = c.sms.HandleSMSQueue(context.Background(), &smsWakeUp)
if err != nil {
logger.Error().Err(errors.WithStack(err)).Send()
return qs, errors.WithStack(ErrWakeUpMessageNotSent)
}
return
}
// The SMS service currently automatically always calls back to the attendant service, which is not great, as config updates are not sent that way
func QueueSMSWakeUp(vin string, await bool, kafkaclient redis.Client, carDB queries.CarsInterface, sms sms.SMSServiceClient) (qs *sms.SMSQueueResponse, err error) {
// This new client with every request is bad. These are re-usable
wake := NewCarWakeUp(carDB, sms)
qs, err = wake.WakeUpQueue(vin, await)
if err != nil {
level := logger.Error()
if errors.Is(err, ErrNoICCIDForWakeUp) ||
errors.Is(err, ErrWakeUpMessageNotSent) {
level = logger.Warn()
}
logger.At(level, vin, "sms").Err(err).Send()
}
return
}
func SMSWakeUp(vin string, checkonline bool, clientPool redis.ClientPoolInterface, carDB queries.CarsInterface, sms sms.SMSServiceClient) (err error) {
if checkonline {
var online bool
online, err = cache.IsCarOnline(clientPool, vin)
if err != nil {
logger.At(logger.Error(), vin, "sms").Err(err).Send()
return
}
if online {
return nil
}
}
wake := NewCarWakeUp(carDB, sms)
err = wake.WakeUp(vin, true)
if err != nil {
level := logger.Error()
if errors.Is(err, ErrNoICCIDForWakeUp) ||
errors.Is(err, ErrWakeUpMessageNotSent) {
level = logger.Warn()
}
logger.At(level, vin, "sms").Err(err).Send()
}
return
}