electricity_bill_calc_service/cache/session.go

43 lines
912 B
Go

package cache
import (
"electricity_bill_calc/global"
"electricity_bill_calc/model"
"fmt"
"time"
"github.com/go-redis/redis/v8"
"github.com/vmihailenco/msgpack/v5"
)
func CacheSession(session *model.Session) error {
key := fmt.Sprintf("session:%s", session.Token)
serializedSession, err := msgpack.Marshal(session)
if err != nil {
return err
}
validRemains := time.Until(session.ExpiresAt)
cmd := global.RedisConn.SetNX(global.Ctx, key, serializedSession, validRemains)
return cmd.Err()
}
func RetreiveSession(token string) (*model.Session, error) {
key := fmt.Sprintf("session:%s", token)
result, err := global.RedisConn.Get(global.Ctx, key).Result()
if err != nil {
if err == redis.Nil {
return nil, nil
} else {
return nil, err
}
}
session := &model.Session{}
err = msgpack.Unmarshal([]byte(result), session)
if err != nil {
return nil, err
}
return session, nil
}