package store import ( "log/slog" "os" "path/filepath" "github.com/spf13/viper" ) func SetupStore() { path, err := filepath.Abs(viper.GetString("store.path")) if err != nil { slog.Error("could get full create storage path", "error", err, "path", viper.GetString("store.path")) panic(err) } err = os.MkdirAll(path, os.ModePerm) if err != nil { slog.Error("could get create storage directory", "error", err, "path", viper.GetString("store.path")) } slog.Info("Initialized File storage directory") } func SaveFile(fileName string, fileBytes []byte) (string, error) { path, err := filepath.Abs(viper.GetString("store.path")) if err != nil { slog.Error("could not save file,", "error", err, "file-uuid", fileName) return "", err } osFile, err := os.Create(filepath.Join(path, fileName)) if err != nil { slog.Error("could not create file on disk,", "error", err, "file-uuid", fileName) return "", err } defer osFile.Close() _, err = osFile.Write(fileBytes) if err != nil { slog.Error("could not write file content,", "error", err, "file-uuid", fileName) return "", err } return fileName, nil } func OpenFile(fileName string) (*os.File, error) { path, err := filepath.Abs(viper.GetString("store.path")) if err != nil { slog.Error("Storage directory not accessible", "error", err, "file-uuid", fileName) return nil, err } file, err := os.Open(filepath.Join(path, fileName)) return file, err } func DeleteFile(fileName string) error { path, err := filepath.Abs(viper.GetString("store.path")) if err != nil { slog.Error("Storage directory not accessible", "error", err, "file-uuid", fileName) return err } file := filepath.Join(path, fileName) return os.Remove(file) } func AbsPath(fileName string) (string, error) { path, err := filepath.Abs(viper.GetString("store.path")) if err != nil { slog.Error("could not get full path for file,", "error", err, "file-uuid", fileName) return "", err } return filepath.Join(path, fileName), nil } func GetFileBytes(fileName string) ([]byte, error) { var fileBytes []byte file, err := OpenFile(fileName) if err != nil { return fileBytes, err } _, err = file.Read(fileBytes) if err != nil { slog.Error("could not read file content,", "error", err, "file-uuid", fileName) return fileBytes, err } return fileBytes, nil }