package repository import ( "context" "encoding/json" "strings" "time" "github.com/Wei-Shaw/sub2api/internal/service" "github.com/redis/go-redis/v9" ) const imageTaskKeyPrefix = "image_task:" type imageTaskStore struct { rdb *redis.Client } func NewImageTaskStore(rdb *redis.Client) service.ImageTaskStore { return &imageTaskStore{rdb: rdb} } func (s *imageTaskStore) Save(ctx context.Context, task *service.ImageTaskRecord, ttl time.Duration) error { data, err := json.Marshal(task) if err != nil { return err } return s.rdb.Set(ctx, imageTaskKey(task.ID), data, ttl).Err() } func (s *imageTaskStore) Get(ctx context.Context, id string) (*service.ImageTaskRecord, error) { data, err := s.rdb.Get(ctx, imageTaskKey(id)).Bytes() if err != nil { if err == redis.Nil { return nil, service.ErrImageTaskNotFound } return nil, err } var task service.ImageTaskRecord if err := json.Unmarshal(data, &task); err != nil { return nil, err } return &task, nil } func imageTaskKey(id string) string { return imageTaskKeyPrefix + strings.TrimSpace(id) }