package callback import ( "context" "os" "path/filepath" "strings" "time" "lone-services/pkg/redis" "lone-services/pkg/utils" pkgws "lone-services/pkg/ws" ) func CacheUploadedLights(taskID, finalDir string) error { files, err := os.ReadDir(finalDir) if err != nil { return err } seen := make(map[string]struct{}) lights := make([]interface{}, 0) for _, file := range files { if file.IsDir() { continue } light := lightingTypeFromFileName(file.Name()) if light == utils.StringEmpty { continue } if _, ok := seen[light]; ok { continue } seen[light] = struct{}{} lights = append(lights, light) } if len(lights) == 0 { return nil } ctx := context.Background() key := pkgws.RedisKeyTaskLights + taskID if err = redis.Client.SAdd(ctx, key, lights...).Err(); err != nil { return err } return redis.Client.Expire(ctx, key, time.Hour).Err() } func lightingTypeFromFileName(fileName string) string { ext := strings.ToLower(filepath.Ext(fileName)) if !isImageExt(ext) { return utils.StringEmpty } base := strings.TrimSuffix(fileName, filepath.Ext(fileName)) parts := strings.Split(base, "_") if len(parts) < 2 { return utils.StringEmpty } return strings.ToLower(parts[0]) }