+general tables

This commit is contained in:
Simon Martens
2026-01-12 15:16:11 +01:00
parent 925f22607b
commit 696f7fe087
9 changed files with 486 additions and 0 deletions

View File

@@ -72,6 +72,31 @@ func init() {
return err
}
err = app.Save(dataTable())
if err != nil {
return err
}
err = app.Save(imagesTable())
if err != nil {
return err
}
err = app.Save(filesTable())
if err != nil {
return err
}
err = app.Save(htmlTable())
if err != nil {
return err
}
err = app.Save(pagesTable())
if err != nil {
return err
}
return nil
}, func(app core.App) error {
places, err := app.FindCollectionByNameOrId(dbmodels.PLACES_TABLE)
@@ -436,3 +461,138 @@ func contentsIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.YEAR_FIELD, false)
dbmodels.AddIndexNoCollate(collection, dbmodels.ENTRIES_TABLE, false)
}
func dataTable() *core.Collection {
collection := core.NewBaseCollection(dbmodels.DATA_TABLE)
dbmodels.SetBasicPublicRules(collection)
collection.Fields = dataTableFields()
dataTableIndexes(collection)
return collection
}
func dataTableFields() core.FieldsList {
fields := core.NewFieldsList(
&core.TextField{Name: dbmodels.KEY_FIELD, Required: true, Presentable: true},
&core.JSONField{Name: dbmodels.VALUE_FIELD, Required: false},
)
dbmodels.SetCreatedUpdatedFields(&fields)
return fields
}
func dataTableIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.KEY_FIELD, false)
}
func imagesTable() *core.Collection {
collection := core.NewBaseCollection(dbmodels.IMAGES_TABLE)
dbmodels.SetBasicPublicRules(collection)
collection.Fields = imagesTableFields()
imagesTableIndexes(collection)
return collection
}
func imagesTableFields() core.FieldsList {
fields := core.NewFieldsList(
&core.TextField{Name: dbmodels.KEY_FIELD, Required: true, Presentable: true},
&core.TextField{Name: dbmodels.TITLE_FIELD, Required: false},
&core.TextField{Name: dbmodels.DESCRIPTION_FIELD, Required: false},
&core.FileField{
Name: dbmodels.PREVIEW_FIELD,
Required: false,
MaxSize: 100 * 1024 * 1024,
MaxSelect: 1,
MimeTypes: dbmodels.MUSENALM_MIME_TYPES,
Thumbs: []string{"0x300", "0x500", "0x1000", "300x0", "500x0", "1000x0"},
},
&core.FileField{
Name: dbmodels.IMAGE_FIELD,
Required: false,
MaxSize: 100 * 1024 * 1024,
MaxSelect: 1,
MimeTypes: dbmodels.MUSENALM_MIME_TYPES,
Thumbs: []string{"0x300", "0x500", "0x1000", "300x0", "500x0", "1000x0"},
},
)
dbmodels.SetCreatedUpdatedFields(&fields)
return fields
}
func imagesTableIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.KEY_FIELD, false)
dbmodels.AddIndex(collection, dbmodels.TITLE_FIELD, false)
}
func filesTable() *core.Collection {
collection := core.NewBaseCollection(dbmodels.FILES_TABLE)
dbmodels.SetBasicPublicRules(collection)
collection.Fields = filesTableFields()
filesTableIndexes(collection)
return collection
}
func filesTableFields() core.FieldsList {
fields := core.NewFieldsList(
&core.TextField{Name: dbmodels.KEY_FIELD, Required: true, Presentable: true},
&core.TextField{Name: dbmodels.DESCRIPTION_FIELD, Required: false},
&core.FileField{
Name: dbmodels.FILE_FIELD,
Required: false,
MaxSize: 100 * 1024 * 1024,
MaxSelect: 1,
MimeTypes: dbmodels.MUSENALM_MIME_TYPES,
},
)
dbmodels.SetCreatedUpdatedFields(&fields)
return fields
}
func filesTableIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.KEY_FIELD, false)
}
func htmlTable() *core.Collection {
collection := core.NewBaseCollection(dbmodels.HTML_TABLE)
dbmodels.SetBasicPublicRules(collection)
collection.Fields = htmlTableFields()
htmlTableIndexes(collection)
return collection
}
func htmlTableFields() core.FieldsList {
fields := core.NewFieldsList(
&core.TextField{Name: dbmodels.KEY_FIELD, Required: true, Presentable: true},
&core.EditorField{Name: dbmodels.HTML_FIELD, Required: false, ConvertURLs: false},
)
dbmodels.SetCreatedUpdatedFields(&fields)
return fields
}
func htmlTableIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.KEY_FIELD, false)
}
func pagesTable() *core.Collection {
collection := core.NewBaseCollection(dbmodels.PAGES_TABLE)
dbmodels.SetBasicPublicRules(collection)
collection.Fields = pagesTableFields()
pagesTableIndexes(collection)
return collection
}
func pagesTableFields() core.FieldsList {
fields := core.NewFieldsList(
&core.TextField{Name: dbmodels.KEY_FIELD, Required: true, Presentable: true},
&core.TextField{Name: dbmodels.URL_FIELD, Required: false},
&core.TextField{Name: dbmodels.TEMPLATE_FIELD, Required: false},
&core.TextField{Name: dbmodels.LAYOUT_FIELD, Required: false},
&core.TextField{Name: dbmodels.TYPE_FIELD, Required: false},
&core.JSONField{Name: dbmodels.DATA_FIELD, Required: false},
)
dbmodels.SetCreatedUpdatedFields(&fields)
return fields
}
func pagesTableIndexes(collection *core.Collection) {
dbmodels.AddIndex(collection, dbmodels.KEY_FIELD, false)
dbmodels.AddIndex(collection, dbmodels.URL_FIELD, false)
}

View File

@@ -0,0 +1,56 @@
package migrations
import (
"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
)
func init() {
m.Register(func(app core.App) error {
// Find source collection
abkColl, err := app.FindCollectionByNameOrId("page_benutzerhinweise_abkuerzungen")
if err != nil {
return err
}
// Query all abbreviations
var records []*core.Record
err = app.RecordQuery(abkColl.Name).All(&records)
if err != nil {
return err
}
// Convert to JSON map
abkMap := make(map[string]string)
for _, r := range records {
abkMap[r.GetString("Abkuerzung")] = r.GetString("Bedeutung")
}
// Find data collection
dataColl, err := app.FindCollectionByNameOrId(dbmodels.DATA_TABLE)
if err != nil {
return err
}
// Create new record in data table
record := core.NewRecord(dataColl)
record.Set(dbmodels.KEY_FIELD, "abkuerzungen")
record.Set(dbmodels.VALUE_FIELD, abkMap)
return app.Save(record)
}, func(app core.App) error {
// Rollback: delete from data table
dataColl, err := app.FindCollectionByNameOrId(dbmodels.DATA_TABLE)
if err != nil {
return err
}
record, err := app.FindFirstRecordByFilter(dataColl.Name, dbmodels.KEY_FIELD+" = 'abkuerzungen'")
if err != nil {
return nil // Already deleted
}
return app.Delete(record)
})
}