Added DB models

This commit is contained in:
Simon Martens
2025-02-10 16:58:55 +01:00
parent bd59fdc2c2
commit a39ac0d68e
26 changed files with 1301 additions and 251 deletions

View File

@@ -15,58 +15,61 @@ import (
func RecordsFromBände(
app core.App,
adb xmlmodels.AccessDB,
) ([]*core.Record, error) {
) ([]*dbmodels.Entry, error) {
collection, err := app.FindCollectionByNameOrId(dbmodels.ENTRIES_TABLE)
records := make([]*core.Record, 0, len(adb.Bände.Bände))
records := make([]*dbmodels.Entry, 0, len(adb.Bände.Bände))
if err != nil {
fmt.Println(err)
return records, err
}
omap := datatypes.MakeMap(adb.Orte.Orte, func(o xmlmodels.Ort) string { return o.ID })
relmap := datatypes.MakeMultiMap(
adb.Relationen_Bände_Reihen.Relationen,
func(r xmlmodels.Relation_Band_Reihe) string { return r.Band },
)
rmap := datatypes.MakeMap(adb.Reihen.Reihen, func(r xmlmodels.Reihe) string { return r.ID })
ocoll, err := app.FindCollectionByNameOrId(dbmodels.PLACES_TABLE)
if err != nil {
app.Logger().Error("Error finding collection", "error", err, "collection", dbmodels.PLACES_TABLE)
return records, err
}
// INFO: lets make some maps to speed this up
omap := datatypes.MakeMap(adb.Orte.Orte, func(o xmlmodels.Ort) string { return o.ID })
relmap := datatypes.MakeMultiMap(
adb.Relationen_Bände_Reihen.Relationen,
func(r xmlmodels.Relation_Band_Reihe) string { return r.Band },
)
rmap := datatypes.MakeMap(adb.Reihen.Reihen, func(r xmlmodels.Reihe) string { return r.ID })
for i := 0; i < len(adb.Bände.Bände); i++ {
band := adb.Bände.Bände[i]
record := core.NewRecord(collection)
record := dbmodels.NewEntry(core.NewRecord(collection))
// TODO: Hier bevorzugter reihentitel + jahr, oder irgendein reihentitel, oder reihentitelALT
if band.ReihentitelALT == "" {
continue
}
record.Set(dbmodels.TITLE_STMT_FIELD, NormalizeString(band.Titelangabe))
record.Set(dbmodels.REFERENCES_FIELD, NormalizeString(band.Nachweis))
record.Set(dbmodels.ANNOTATION_FIELD, NormalizeString(band.Anmerkungen))
if band.Jahr != 0 {
record.Set(dbmodels.YEAR_FIELD, band.Jahr)
}
record.Set(dbmodels.RESPONSIBILITY_STMT_FIELD, NormalizeString(band.Verantwortlichkeitsangabe))
record.Set(dbmodels.PUBLICATION_STMT_FIELD, NormalizeString(band.Ortsangabe))
record.Set(dbmodels.EXTENT_FIELD, NormalizeString(band.Struktur))
record.Set(dbmodels.CARRIER_TYPE_FIELD, "Band")
record.Set(dbmodels.CONTENT_TYPE_FIELD, []string{"unbewegtes Bild", "Text"})
record.Set(dbmodels.MEDIA_TYPE_FIELD, "ohne Hilfsmittel")
record.Set(dbmodels.LANGUAGE_FIELD, "ger")
record.Set(dbmodels.MUSENALMID_FIELD, band.ID)
record.SetTitleStmt(NormalizeString(band.Titelangabe))
record.SetReferences(NormalizeString(band.Nachweis))
record.SetAnnotation(NormalizeString(band.Anmerkungen))
record.SetResponsibilityStmt(NormalizeString(band.Verantwortlichkeitsangabe))
record.SetPublicationStmt(NormalizeString(band.Ortsangabe))
record.SetExtent(NormalizeString(band.Struktur))
record.SetCarrierType([]string{"Band"})
record.SetContentType([]string{"unbewegtes Bild", "Text"})
record.SetMediaType([]string{"ohne Hilfsmittel"})
record.SetLanguage([]string{"ger"})
record.SetMusenalmID(band.ID)
if band.Jahr != 0 {
record.SetYear(band.Jahr)
}
if band.Erfasst {
record.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-1])
record.SetEditState(dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-1])
} else if band.Gesichtet {
record.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[2])
record.SetEditState(dbmodels.EDITORSTATE_VALUES[2])
} else if band.BiblioID != 0 {
record.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[1])
record.SetEditState(dbmodels.EDITORSTATE_VALUES[1])
} else {
record.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[0])
record.SetEditState(dbmodels.EDITORSTATE_VALUES[0])
}
handlePreferredTitleEntry(record, band, rmap, relmap)
@@ -80,15 +83,15 @@ func RecordsFromBände(
}
func handlePreferredTitleEntry(
record *core.Record,
record *dbmodels.Entry,
band xmlmodels.Band,
rmap map[string]xmlmodels.Reihe,
rrelmap map[string][]xmlmodels.Relation_Band_Reihe,
) {
rels := rrelmap[band.ID]
if len(rels) == 0 {
record.Set(dbmodels.PREFERRED_TITLE_FIELD, NormalizeString(band.ReihentitelALT))
record.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-2])
record.SetPreferredTitle(NormalizeString(band.ReihentitelALT))
record.SetEditState(dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-2])
return
}
@@ -102,7 +105,7 @@ func handlePreferredTitleEntry(
bevti := slices.IndexFunc(rels, func(r xmlmodels.Relation_Band_Reihe) bool { return r.Relation == "1" })
if bevti != -1 {
bevt := rmap[rels[bevti].Reihe]
record.Set(dbmodels.PREFERRED_TITLE_FIELD, NormalizeString(bevt.Titel)+" "+jahr)
record.SetPreferredTitle(NormalizeString(bevt.Titel) + " " + jahr)
return
}
@@ -110,11 +113,11 @@ func handlePreferredTitleEntry(
return strings.Compare(a.Relation, b.Relation)
})
record.Set(dbmodels.PREFERRED_TITLE_FIELD, NormalizeString(rmap[rels[0].Reihe].Titel)+jahr)
record.SetPreferredTitle(NormalizeString(rmap[rels[0].Reihe].Titel) + jahr)
}
func handleOrte(
record *core.Record,
record *dbmodels.Entry,
band xmlmodels.Band,
orte map[string]xmlmodels.Ort,
app core.App,
@@ -132,35 +135,32 @@ func handleOrte(
ort, err := app.FindFirstRecordByData(dbmodels.PLACES_TABLE, dbmodels.PLACES_NAME_FIELD, n)
if err == nil {
before := record.GetStringSlice(dbmodels.PLACES_TABLE)
record.Set(dbmodels.PLACES_TABLE, append(before, ort.Id))
before := record.Places()
record.SetPlaces(append(before, ort.Id))
} else {
orec := core.NewRecord(ocollection)
orec.Set(dbmodels.PLACES_NAME_FIELD, n)
orec.Set(dbmodels.ANNOTATION_FIELD, o.Anmerkungen)
orec.Set(dbmodels.PLACES_FICTIONAL_FIELD, o.Fiktiv)
orec.Set(dbmodels.EDITSTATE_FIELD, dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-1])
orec := dbmodels.NewPlace(core.NewRecord(ocollection))
orec.SetName(n)
orec.SetAnnotation(o.Anmerkungen)
orec.SetFictional(o.Fiktiv)
orec.SetEditState(dbmodels.EDITORSTATE_VALUES[len(dbmodels.EDITORSTATE_VALUES)-1])
if err := app.Save(orec); err != nil {
app.Logger().Error("Error saving record", "error", err, "record", orec)
continue
} else {
before := record.GetStringSlice(dbmodels.PLACES_TABLE)
record.Set(dbmodels.PLACES_TABLE, append(before, orec.Id))
before := record.Places()
record.SetPlaces(append(before, orec.Id))
}
}
if e {
// INFO: We do not need to get the record metadata here, as we know that the record is new
record.Set(
dbmodels.META_FIELD,
map[string]dbmodels.MetaData{dbmodels.PLACES_TABLE: {Conjecture: true}},
)
record.SetMeta(map[string]dbmodels.MetaData{dbmodels.PLACES_TABLE: {Conjecture: true}})
}
}
}
}
func handleDeprecated(record *core.Record, band xmlmodels.Band) {
func handleDeprecated(record *dbmodels.Entry, band xmlmodels.Band) {
depr := dbmodels.Deprecated{
Reihentitel: NormalizeString(band.ReihentitelALT),
Norm: NormalizeString(band.Norm),
@@ -170,5 +170,5 @@ func handleDeprecated(record *core.Record, band xmlmodels.Band) {
Erfasst: band.Erfasst,
}
record.Set(dbmodels.MUSENALM_DEPRECATED_FIELD, depr)
record.SetDeprecated(depr)
}