package redis import ( "fmt" "log" "github.com/gomodule/redigo/redis" "git.ofmax.li/iserv/internal/image" ) const V1FilePathFmt = "v1imagepost:%s" // ImageRepo deps. for storage type ImageRepo struct { db *redis.Pool } // NewRedisImageRepo func NewRedisImageRepo(conn *redis.Pool) *ImageRepo { return &ImageRepo{ conn, } } func fileKey(filename, V1FilePathFmt string) string { return fmt.Sprintf(V1FilePathFmt, filename) } func (r *ImageRepo) AddNewFile(filename string, meta *image.PostMeta, timeout int) error { conn := r.db.Get() defer conn.Close() key := fileKey(filename, V1FilePathFmt) _, err := conn.Do("HMSET", redis.Args{}.Add(key).AddFlat(meta)...) if err != nil { log.Fatal(err) } return err } func (r *ImageRepo) GetFile(fileUrl string) (*image.PostMeta, error) { conn := r.db.Get() defer conn.Close() imageMeta := &image.PostMeta{} key := fileKey(fileUrl, V1FilePathFmt) res, err := redis.Values(conn.Do("HGETALL", key)) if err != nil { return &image.PostMeta{}, err } err = redis.ScanStruct(res, imageMeta) return imageMeta, err }