mirror of
				https://github.com/Theodor-Springmann-Stiftung/musenalm.git
				synced 2025-10-31 10:15:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package migrations
 | |
| 
 | |
| import (
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/helpers/datatypes"
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/migrations/seed"
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/xmlmodels"
 | |
| 	"github.com/pocketbase/pocketbase/core"
 | |
| 	m "github.com/pocketbase/pocketbase/migrations"
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	m.Register(func(app core.App) error {
 | |
| 		adb, err := xmlmodels.ReadAccessDB(xmlmodels.DATA_PATH, app.Logger())
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 
 | |
| 		adb.Reihen = xmlmodels.SanitizeReihen(adb.Reihen, adb.Relationen_Bände_Reihen)
 | |
| 
 | |
| 		agents, err := seed.RecordsFromAkteure(app, adb.Akteure)
 | |
| 		if err == nil {
 | |
| 			for _, record := range agents {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		places, err := seed.RecordsFromOrte(app, adb.Orte)
 | |
| 		if err == nil {
 | |
| 			for _, record := range places {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		placesmap := datatypes.MakeMap(places, func(record *dbmodels.Place) string { return record.Name() })
 | |
| 
 | |
| 		series, err := seed.RecordsFromReihentitel(app, adb.Reihen)
 | |
| 		if err == nil {
 | |
| 			for _, record := range series {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		entries, err := seed.RecordsFromBände(app, *adb, placesmap)
 | |
| 		if err == nil {
 | |
| 			for _, record := range entries {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		entriesmap := datatypes.MakeMap(entries, func(record *dbmodels.Entry) string { return record.MusenalmID() })
 | |
| 
 | |
| 		if records, err := seed.ItemsFromBändeAndBIBLIO(app, adb.Bände, adb.BIBLIO, entriesmap); err == nil {
 | |
| 			for _, record := range records {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		contents, err := seed.RecordsFromInhalte(app, adb.Inhalte, entriesmap)
 | |
| 		if err == nil {
 | |
| 			for _, record := range contents {
 | |
| 				if err = app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		seriesmap := datatypes.MakeMap(series, func(record *dbmodels.Series) string { return record.MusenalmID() })
 | |
| 		agentsmap := datatypes.MakeMap(agents, func(record *dbmodels.Agent) string { return record.MusenalmID() })
 | |
| 		contentsmap := datatypes.MakeMap(contents, func(record *dbmodels.Content) string { return record.MusenalmID() })
 | |
| 
 | |
| 		if records, err := seed.RecordsFromRelationBändeReihen(app, adb.Relationen_Bände_Reihen, seriesmap, entriesmap); err == nil {
 | |
| 			for _, record := range records {
 | |
| 				if err := app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		if records, err := seed.RecordsFromRelationBändeAkteure(app, adb.Relationen_Bände_Akteure, entriesmap, agentsmap); err == nil {
 | |
| 			for _, record := range records {
 | |
| 				if err := app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		if records, err := seed.RecordsFromRelationInhalteAkteure(app, adb.Relationen_Inhalte_Akteure, contentsmap, agentsmap); err == nil {
 | |
| 			for _, record := range records {
 | |
| 				if err := app.Save(record); err != nil {
 | |
| 					app.Logger().Error("Error saving record", "error", err, "record", record)
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 
 | |
| 		return nil
 | |
| 	}, func(app core.App) error {
 | |
| 		return delete_data(app)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func delete_data(app core.App) error {
 | |
| 	_ = deleteTableContents(app, dbmodels.RelationTableName(dbmodels.ENTRIES_TABLE, dbmodels.SERIES_TABLE))
 | |
| 	_ = deleteTableContents(app, dbmodels.RelationTableName(dbmodels.ENTRIES_TABLE, dbmodels.AGENTS_TABLE))
 | |
| 	_ = deleteTableContents(app, dbmodels.RelationTableName(dbmodels.CONTENTS_TABLE, dbmodels.AGENTS_TABLE))
 | |
| 	_ = deleteTableContents(app, dbmodels.CONTENTS_TABLE)
 | |
| 	_ = deleteTableContents(app, dbmodels.ENTRIES_TABLE)
 | |
| 	_ = deleteTableContents(app, dbmodels.SERIES_TABLE)
 | |
| 	_ = deleteTableContents(app, dbmodels.AGENTS_TABLE)
 | |
| 	_ = deleteTableContents(app, dbmodels.PLACES_TABLE)
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func deleteTableContents(app core.App, table string) error {
 | |
| 	_, err := app.DB().NewQuery("DELETE FROM " + table).Execute()
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | 
