package session // import ( // "context" // "time" // "management/internal/pkg/redis" // ) // var ( // storePrefix = "scs:session:" // ctx = context.Background() // DefaultRedisStore = newRedisStore() // ) // type redisStore struct{} // func newRedisStore() *redisStore { // return &redisStore{} // } // // Delete should remove the session token and corresponding data from the // // session store. If the token does not exist then Delete should be a no-op // // and return nil (not an error). // func (s *redisStore) Delete(token string) error { // return redis.Del(ctx, storePrefix+token) // } // // Find should return the data for a session token from the store. If the // // session token is not found or is expired, the found return value should // // be false (and the err return value should be nil). Similarly, tampered // // or malformed tokens should result in a found return value of false and a // // nil err value. The err return value should be used for system errors only. // func (s *redisStore) Find(token string) (b []byte, found bool, err error) { // val, err := redis.GetBytes(ctx, storePrefix+token) // if err != nil { // return nil, false, err // } else { // return val, true, nil // } // } // // Commit should add the session token and data to the store, with the given // // expiry time. If the session token already exists, then the data and // // expiry time should be overwritten. // func (s *redisStore) Commit(token string, b []byte, expiry time.Time) error { // // TODO: 这边可以调整时间 // exp, err := time.ParseInLocation(time.DateTime, time.Now().Format("2006-01-02")+" 23:59:59", time.Local) // if err != nil { // return err // } // t := time.Now() // expired := exp.Sub(t) // return redis.Set(ctx, storePrefix+token, b, expired) // } // // All should return a map containing data for all active sessions (i.e. // // sessions which have not expired). The map key should be the session // // token and the map value should be the session data. If no active // // sessions exist this should return an empty (not nil) map. // func (s *redisStore) All() (map[string][]byte, error) { // sessions := make(map[string][]byte) // iter := redis.Scan(ctx, 0, storePrefix+"*", 0).Iterator() // for iter.Next(ctx) { // key := iter.Val() // token := key[len(storePrefix):] // data, exists, err := s.Find(token) // if err != nil { // return nil, err // } // if exists { // sessions[token] = data // } // } // if err := iter.Err(); err != nil { // return nil, err // } // return sessions, nil // }