package repositories import ( "context" "fmt" "log/slog" "strconv" "time" "git.kocoder.xyz/kocoded/vt/fx/interfaces/stores" glide "github.com/valkey-io/valkey-glide/go/v2" ) type SessionRepository struct { store *glide.Client logger *slog.Logger } func NewSessionRepository(store *glide.Client, logger *slog.Logger) stores.SessionStore { return &SessionRepository{store: store, logger: logger} } func (sr *SessionRepository) AddSession(s *stores.Session) { // options.HSetExOptions{Expiry: options.NewExpiryIn(time.Hour * 2)} ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) defer cancel() _, err := sr.store.HSet(ctx, s.Token, s.Serialize()) if err != nil { sr.logger.Error("Error adding session to store", "error", err) panic(err) } _, err = sr.store.Expire(context.Background(), s.Token, time.Hour*2) if err != nil { sr.logger.Error("Error setting session expiration", "error", err) panic(err) } } func (sr *SessionRepository) GetSessionFromToken(token string) (*stores.Session, error) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) defer cancel() s, err := sr.store.HGetAll(ctx, token) if err != nil { sr.logger.Error("Error getting session from store", "error", err) fmt.Println("PANIC - HGETALL") panic(err) } _, err = sr.store.Expire(ctx, token, time.Hour*2) if err != nil { sr.logger.Error("Error setting session expiration", "error", err) panic(err) } return (&stores.Session{}).Deserialize(token, s) } func (sr *SessionRepository) SetMandantInSession(token string, mandantId uint) error { _, err := sr.store.HSet(context.Background(), token, map[string]string{"mandantid": strconv.Itoa(int(mandantId))}) if err != nil { sr.logger.Error("Error setting mandant in session", "error", err) return err } return nil } func (sr *SessionRepository) RemoveSession(token string) { _, err := sr.store.HDel(context.Background(), token, []string{"userid", "mandantid"}) if err != nil { sr.logger.Error("Error removing session from store", "error", err) panic(err) } }