mirror of
				https://github.com/Theodor-Springmann-Stiftung/musenalm.git
				synced 2025-10-31 10:15:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package seed
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
 | |
| 	"github.com/Theodor-Springmann-Stiftung/musenalm/xmlmodels"
 | |
| 	"github.com/pocketbase/pocketbase/core"
 | |
| )
 | |
| 
 | |
| const NO_TITLE = "[No Title]"
 | |
| 
 | |
| func RecordsFromInhalte(app core.App, inhalte xmlmodels.Inhalte) ([]*dbmodels.Content, error) {
 | |
| 	collection, err := app.FindCollectionByNameOrId(dbmodels.CONTENTS_TABLE)
 | |
| 	records := make([]*dbmodels.Content, 0, len(inhalte.Inhalte))
 | |
| 	if err != nil {
 | |
| 		fmt.Println(err)
 | |
| 		return records, err
 | |
| 	}
 | |
| 
 | |
| 	for i := 0; i < len(inhalte.Inhalte); i++ {
 | |
| 		record := dbmodels.NewContent(core.NewRecord(collection))
 | |
| 		inhalt := inhalte.Inhalte[i]
 | |
| 		band, err := app.FindFirstRecordByData(dbmodels.ENTRIES_TABLE, dbmodels.MUSENALMID_FIELD, inhalt.Band)
 | |
| 		if err != nil {
 | |
| 			app.Logger().Error("Error finding band record for inhalt", "error", err, "inhalt", inhalt)
 | |
| 			continue
 | |
| 		}
 | |
| 		record.SetEntry(band.Id)
 | |
| 		record.SetAnnotation(NormalizeString(inhalt.Anmerkungen))
 | |
| 		record.SetMusenalmID(inhalt.ID)
 | |
| 		record.SetResponsibilityStmt(NormalizeString(inhalt.Urheberangabe))
 | |
| 		record.SetMusenalmType(inhalt.Typ.Value)
 | |
| 		record.SetExtent(NormalizeString(inhalt.Seite))
 | |
| 		record.SetTitleStmt(NormalizeString(inhalt.Titelangabe))
 | |
| 		record.SetIncipitStmt(NormalizeString(inhalt.Incipit))
 | |
| 
 | |
| 		counting, ok := dbmodels.MUSENALM_PAGINATION_VALUES[inhalt.Paginierung]
 | |
| 		if ok {
 | |
| 			record.SetMusenalmPagination(counting)
 | |
| 		}
 | |
| 
 | |
| 		no, err := strconv.ParseFloat(NormalizeString(inhalt.Objektnummer), 64)
 | |
| 		if err != nil {
 | |
| 			app.Logger().Error("Error parsing object number", "error", err, "object number", inhalt.Objektnummer)
 | |
| 		}
 | |
| 		record.SetNumbering(no)
 | |
| 
 | |
| 		handlePreferredTitle(inhalt, record)
 | |
| 		n := record.PreferredTitle()
 | |
| 		if n == "" || n == NO_TITLE {
 | |
| 			record.SetEditState(dbmodels.EDITORSTATE_VALUES[1])
 | |
| 		} else {
 | |
| 			record.SetEditState(dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-1])
 | |
| 		}
 | |
| 
 | |
| 		records = append(records, record)
 | |
| 	}
 | |
| 	return records, nil
 | |
| }
 | |
| 
 | |
| func handlePreferredTitle(inhalt xmlmodels.Inhalt, record *dbmodels.Content) {
 | |
| 	if inhalt.Titelangabe != "" {
 | |
| 		record.SetPreferredTitle(NormalizeString(inhalt.Titelangabe))
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if inhalt.Incipit != "" {
 | |
| 		record.SetPreferredTitle(NormalizeString(inhalt.Incipit) + "…")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if len(inhalt.Typ.Value) > 0 {
 | |
| 		str := commatizeArray(inhalt.Typ.Value)
 | |
| 		if str != "" {
 | |
| 			if inhalt.Urheberangabe != "" &&
 | |
| 				!strings.Contains(inhalt.Urheberangabe, "unbezeichnet") &&
 | |
| 				!strings.Contains(inhalt.Urheberangabe, "unbekannt") &&
 | |
| 				!strings.Contains(inhalt.Urheberangabe, "unleserlich") {
 | |
| 				urhh := NormalizeString(inhalt.Urheberangabe)
 | |
| 				urhh = strings.ReplaceAll(urhh, "#", "")
 | |
| 				urhh = NormalizeString(urhh)
 | |
| 				str += " (" + urhh + ")"
 | |
| 			}
 | |
| 			record.SetPreferredTitle("[" + str + "]")
 | |
| 			return
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	record.SetPreferredTitle(NO_TITLE)
 | |
| }
 | |
| 
 | |
| func commatizeArray(array []string) string {
 | |
| 	if len(array) == 0 {
 | |
| 		return ""
 | |
| 	}
 | |
| 
 | |
| 	res := array[0]
 | |
| 
 | |
| 	for i := 1; i < len(array)-1; i++ {
 | |
| 		res += ", " + array[i]
 | |
| 	}
 | |
| 	return array[0]
 | |
| }
 | 
