1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2024-11-24 17:07:00 +02:00
pocketbase/migrations/1690454337_transform_relations_to_views.go

62 lines
1.4 KiB
Go

package migrations
import (
"github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/daos"
"github.com/pocketbase/pocketbase/models"
"github.com/pocketbase/pocketbase/models/schema"
)
// Transform the relation fields to views from non-view collections to json or text fields
// (see https://github.com/pocketbase/pocketbase/issues/3000).
func init() {
AppMigrations.Register(func(db dbx.Builder) error {
dao := daos.New(db)
views, err := dao.FindCollectionsByType(models.CollectionTypeView)
if err != nil {
return err
}
for _, view := range views {
refs, err := dao.FindCollectionReferences(view)
if err != nil {
return nil
}
for collection, fields := range refs {
if collection.IsView() {
continue // view-view relations are allowed
}
for _, f := range fields {
opt, ok := f.Options.(schema.MultiValuer)
if !ok {
continue
}
if opt.IsMultiple() {
f.Type = schema.FieldTypeJson
f.Options = &schema.JsonOptions{}
} else {
f.Type = schema.FieldTypeText
f.Options = &schema.TextOptions{}
}
// replace the existing field
// (this usually is not necessary since it is a pointer,
// but it is better to be explicit in case FindCollectionReferences changes)
collection.Schema.AddField(f)
}
// "raw" save without records table sync
if err := dao.Save(collection); err != nil {
return err
}
}
}
return nil
}, nil)
}