mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-29 09:15:33 +00:00
138 lines
2.9 KiB
Go
138 lines
2.9 KiB
Go
package dbmodels
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
type EntriesAgents map[string][]*REntriesAgents
|
|
|
|
func EntriesForID(app core.App, query int) ([]*Entry, error) {
|
|
entries := []*Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.HashExp{MUSENALMID_FIELD: strconv.Itoa(query)}).
|
|
All(&entries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return entries, nil
|
|
}
|
|
|
|
func YearsForEntries(app core.App) ([]int, error) {
|
|
rec := []core.Record{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Select(YEAR_FIELD + " AS id").
|
|
Distinct(true).
|
|
OrderBy("id").
|
|
All(&rec)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
years := []int{}
|
|
for _, r := range rec {
|
|
years = append(years, r.GetInt("id"))
|
|
}
|
|
|
|
return years, nil
|
|
}
|
|
|
|
func EntriesForYear(app core.App, year int) ([]*Entry, error) {
|
|
entries := []*Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.HashExp{YEAR_FIELD: year}).
|
|
All(&entries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return entries, nil
|
|
}
|
|
|
|
func EntriesForAgent(app core.App, agentId string) ([]*Entry, EntriesAgents, error) {
|
|
relations := []*core.Record{}
|
|
err := app.RecordQuery(RelationTableName(ENTRIES_TABLE, AGENTS_TABLE)).
|
|
Where(dbx.HashExp{AGENTS_TABLE: agentId}).
|
|
All(&relations)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
app.ExpandRecords(relations, []string{ENTRIES_TABLE}, nil)
|
|
entries := []*Entry{}
|
|
for _, r := range relations {
|
|
record := r.ExpandedOne(ENTRIES_TABLE)
|
|
if record == nil {
|
|
continue
|
|
}
|
|
entries = append(entries, NewEntry(record))
|
|
}
|
|
|
|
agents := map[string][]*REntriesAgents{}
|
|
for _, r := range relations {
|
|
agent := NewREntriesAgents(r)
|
|
agents[agent.Entry()] = append(agents[agent.Entry()], agent)
|
|
}
|
|
|
|
return entries, agents, nil
|
|
}
|
|
|
|
func EntriesForPlace(app core.App, placeId string) ([]*Entry, error) {
|
|
entries := []*Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.Like(PLACES_TABLE, placeId).Match(true, true)).
|
|
All(&entries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return entries, nil
|
|
}
|
|
|
|
func EntryForId(app core.App, id string) (*Entry, error) {
|
|
entry := &Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.HashExp{ID_FIELD: id}).
|
|
One(entry)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return entry, nil
|
|
}
|
|
|
|
func EntryForMusenalmID(app core.App, id string) (*Entry, error) {
|
|
entry := &Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.HashExp{MUSENALMID_FIELD: id}).
|
|
One(entry)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return entry, nil
|
|
}
|
|
|
|
func EntriesForContents(app core.App, contents []*Content) (map[string]*Entry, error) {
|
|
cids := []any{}
|
|
for _, c := range contents {
|
|
cids = append(cids, c.Entry())
|
|
}
|
|
|
|
entries := []*Entry{}
|
|
err := app.RecordQuery(ENTRIES_TABLE).
|
|
Where(dbx.HashExp{ID_FIELD: cids}).
|
|
All(&entries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
entriesMap := make(map[string]*Entry, len(entries))
|
|
for _, e := range entries {
|
|
entriesMap[e.Id] = e
|
|
}
|
|
|
|
return entriesMap, nil
|
|
}
|