memos/store/migrator.go

45 lines
1.0 KiB
Go
Raw Normal View History

package store
import (
"context"
"path/filepath"
"strings"
"github.com/pkg/errors"
)
// MigrateResourceInternalPath migrates resource internal path from absolute path to relative path.
func (s *Store) MigrateResourceInternalPath(ctx context.Context) error {
resources, err := s.ListResources(ctx, &FindResource{})
if err != nil {
return errors.Wrap(err, "failed to list resources")
}
for _, resource := range resources {
if resource.InternalPath == "" {
continue
}
internalPath := resource.InternalPath
if filepath.IsAbs(internalPath) {
if !strings.HasPrefix(internalPath, s.Profile.Data) {
// Invalid internal path, skip.
continue
}
internalPath = strings.TrimPrefix(internalPath, s.Profile.Data)
for strings.HasPrefix(internalPath, "/") {
internalPath = strings.TrimPrefix(internalPath, "/")
}
_, err := s.UpdateResource(ctx, &UpdateResource{
ID: resource.ID,
InternalPath: &internalPath,
})
if err != nil {
return errors.Wrap(err, "failed to update resource")
}
}
}
return nil
}