mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2026-02-04 02:25:30 +00:00
+Benutzer filter, u. Spalte
This commit is contained in:
138
helpers/imports/fts.go
Normal file
138
helpers/imports/fts.go
Normal file
@@ -0,0 +1,138 @@
|
||||
package imports
|
||||
|
||||
import (
|
||||
"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
)
|
||||
|
||||
func RebuildFTS(app core.App) error {
|
||||
if err := dbmodels.DeleteFTS5Data(app); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
places := []*dbmodels.Place{}
|
||||
if err := app.RecordQuery(dbmodels.PLACES_TABLE).All(&places); err != nil {
|
||||
return err
|
||||
}
|
||||
agents := []*dbmodels.Agent{}
|
||||
if err := app.RecordQuery(dbmodels.AGENTS_TABLE).All(&agents); err != nil {
|
||||
return err
|
||||
}
|
||||
series := []*dbmodels.Series{}
|
||||
if err := app.RecordQuery(dbmodels.SERIES_TABLE).All(&series); err != nil {
|
||||
return err
|
||||
}
|
||||
items := []*dbmodels.Item{}
|
||||
if err := app.RecordQuery(dbmodels.ITEMS_TABLE).All(&items); err != nil {
|
||||
return err
|
||||
}
|
||||
entries := []*dbmodels.Entry{}
|
||||
if err := app.RecordQuery(dbmodels.ENTRIES_TABLE).All(&entries); err != nil {
|
||||
return err
|
||||
}
|
||||
contents := []*dbmodels.Content{}
|
||||
if err := app.RecordQuery(dbmodels.CONTENTS_TABLE).All(&contents); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
entriesSeries := []*dbmodels.REntriesSeries{}
|
||||
if err := app.RecordQuery(dbmodels.RelationTableName(dbmodels.ENTRIES_TABLE, dbmodels.SERIES_TABLE)).All(&entriesSeries); err != nil {
|
||||
return err
|
||||
}
|
||||
entriesAgents := []*dbmodels.REntriesAgents{}
|
||||
if err := app.RecordQuery(dbmodels.RelationTableName(dbmodels.ENTRIES_TABLE, dbmodels.AGENTS_TABLE)).All(&entriesAgents); err != nil {
|
||||
return err
|
||||
}
|
||||
contentsAgents := []*dbmodels.RContentsAgents{}
|
||||
if err := app.RecordQuery(dbmodels.RelationTableName(dbmodels.CONTENTS_TABLE, dbmodels.AGENTS_TABLE)).All(&contentsAgents); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
placesById := map[string]*dbmodels.Place{}
|
||||
for _, place := range places {
|
||||
placesById[place.Id] = place
|
||||
}
|
||||
agentsById := map[string]*dbmodels.Agent{}
|
||||
for _, agent := range agents {
|
||||
agentsById[agent.Id] = agent
|
||||
}
|
||||
seriesById := map[string]*dbmodels.Series{}
|
||||
for _, s := range series {
|
||||
seriesById[s.Id] = s
|
||||
}
|
||||
entriesById := map[string]*dbmodels.Entry{}
|
||||
for _, entry := range entries {
|
||||
entriesById[entry.Id] = entry
|
||||
}
|
||||
|
||||
entriesSeriesMap := map[string][]*dbmodels.Series{}
|
||||
for _, rel := range entriesSeries {
|
||||
if series := seriesById[rel.Series()]; series != nil {
|
||||
entriesSeriesMap[rel.Entry()] = append(entriesSeriesMap[rel.Entry()], series)
|
||||
}
|
||||
}
|
||||
entriesAgentsMap := map[string][]*dbmodels.Agent{}
|
||||
for _, rel := range entriesAgents {
|
||||
if agent := agentsById[rel.Agent()]; agent != nil {
|
||||
entriesAgentsMap[rel.Entry()] = append(entriesAgentsMap[rel.Entry()], agent)
|
||||
}
|
||||
}
|
||||
contentsAgentsMap := map[string][]*dbmodels.Agent{}
|
||||
for _, rel := range contentsAgents {
|
||||
if agent := agentsById[rel.Agent()]; agent != nil {
|
||||
contentsAgentsMap[rel.Content()] = append(contentsAgentsMap[rel.Content()], agent)
|
||||
}
|
||||
}
|
||||
|
||||
qp := dbmodels.FTS5InsertQuery(app, dbmodels.PLACES_TABLE, dbmodels.PLACES_FTS5_FIELDS)
|
||||
qa := dbmodels.FTS5InsertQuery(app, dbmodels.AGENTS_TABLE, dbmodels.AGENTS_FTS5_FIELDS)
|
||||
qs := dbmodels.FTS5InsertQuery(app, dbmodels.SERIES_TABLE, dbmodels.SERIES_FTS5_FIELDS)
|
||||
qi := dbmodels.FTS5InsertQuery(app, dbmodels.ITEMS_TABLE, dbmodels.ITEMS_FTS5_FIELDS)
|
||||
qe := dbmodels.FTS5InsertQuery(app, dbmodels.ENTRIES_TABLE, dbmodels.ENTRIES_FTS5_FIELDS)
|
||||
qc := dbmodels.FTS5InsertQuery(app, dbmodels.CONTENTS_TABLE, dbmodels.CONTENTS_FTS5_FIELDS)
|
||||
|
||||
for _, place := range places {
|
||||
if err := dbmodels.BulkInsertFTS5Place(qp, place); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, agent := range agents {
|
||||
if err := dbmodels.BulkInsertFTS5Agent(qa, agent); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, s := range series {
|
||||
if err := dbmodels.BulkInsertFTS5Series(qs, s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, item := range items {
|
||||
if err := dbmodels.BulkInsertFTS5Item(qi, item); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
entryPlaces := []*dbmodels.Place{}
|
||||
for _, placeId := range entry.Places() {
|
||||
if place := placesById[placeId]; place != nil {
|
||||
entryPlaces = append(entryPlaces, place)
|
||||
}
|
||||
}
|
||||
entryAgents := entriesAgentsMap[entry.Id]
|
||||
entrySeries := entriesSeriesMap[entry.Id]
|
||||
if err := dbmodels.BulkInsertFTS5Entry(qe, entry, entryPlaces, entryAgents, entrySeries); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, content := range contents {
|
||||
entry := entriesById[content.Entry()]
|
||||
contentAgents := contentsAgentsMap[content.Id]
|
||||
if err := dbmodels.BulkInsertFTS5Content(qc, content, entry, contentAgents); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user