From 9e68532af1f5b32b23cee4ee0f6355df90bc2428 Mon Sep 17 00:00:00 2001 From: Simon Martens Date: Fri, 28 Feb 2025 01:29:16 +0100 Subject: [PATCH] =?UTF-8?q?Beginn=20Personenansicht=20Beitr=C3=A4ge=20/=20?= =?UTF-8?q?Anzahl=20Personen=C3=BCbersicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .air.toml | 1 + dbmodels/agents.go | 43 +++++++++++++++++++++++++ pages/person.go | 23 ++++++++++--- pages/personen.go | 20 ++++++++++++ views/routes/components/_content.gohtml | 7 +++- views/routes/person/body.gohtml | 29 +++++++++-------- views/routes/personen/body.gohtml | 13 ++++++++ views/routes/suche/baende/body.gohtml | 2 +- 8 files changed, 119 insertions(+), 19 deletions(-) diff --git a/.air.toml b/.air.toml index 1aed42b..824b4f6 100644 --- a/.air.toml +++ b/.air.toml @@ -8,6 +8,7 @@ full_bin = "./tmp/musenalm --dir ./pb_data serve" cmd = "go build -tags=dev,fts5,sqlite_icu -o ./tmp/musenalm ." delay = 400 exclude_dir = [ + "views/assets", "views/transform", "views/routes", "views/layouts", diff --git a/dbmodels/agents.go b/dbmodels/agents.go index bdcf1e3..3dee7b7 100644 --- a/dbmodels/agents.go +++ b/dbmodels/agents.go @@ -290,3 +290,46 @@ func AgentsForOrg(app core.App, org bool, letter string) ([]*Agent, error) { return agents, nil } + +type AgentCount struct { + Count int `db:"count"` + ID string `db:"id"` +} + +func CountAgentsBaende(app core.App) (map[string]int, error) { + couns := []AgentCount{} + err := app.RecordQuery(RelationTableName(ENTRIES_TABLE, AGENTS_TABLE)). + Select("count(*) as count, " + AGENTS_TABLE + " as id"). + GroupBy(AGENTS_TABLE). + All(&couns) + + if err != nil { + return nil, err + } + + ret := make(map[string]int, len(couns)) + for _, c := range couns { + ret[c.ID] = c.Count + } + + return ret, nil +} + +func CountAgentsContents(app core.App) (map[string]int, error) { + couns := []AgentCount{} + err := app.RecordQuery(RelationTableName(CONTENTS_TABLE, AGENTS_TABLE)). + Select("count(*) as count, " + AGENTS_TABLE + " as id"). + GroupBy(AGENTS_TABLE). + All(&couns) + + if err != nil { + return nil, err + } + + ret := make(map[string]int, len(couns)) + for _, c := range couns { + ret[c.ID] = c.Count + } + + return ret, nil +} diff --git a/pages/person.go b/pages/person.go index bfc0fdb..6bc135b 100644 --- a/pages/person.go +++ b/pages/person.go @@ -62,6 +62,7 @@ type AgentResult struct { CResult []*dbmodels.Entry /// Sorted Contents map[string][]*dbmodels.Content // KEY: entry ID ContentsAgents map[string][]*dbmodels.RContentsAgents // KEY: Content ID + Agents map[string]*dbmodels.Agent // KEY: Agent ID } func NewAgentResult(app core.App, id string) (*AgentResult, error) { @@ -79,6 +80,11 @@ func NewAgentResult(app core.App, id string) (*AgentResult, error) { return nil, err } + err = res.FilterContentsByEntry(app, id, res) + if err != nil { + return nil, err + } + return res, nil } @@ -146,9 +152,8 @@ func (p *AgentResult) FilterEntriesByPerson(app core.App, id string, res *AgentR } func (p *AgentResult) FilterContentsByEntry(app core.App, id string, res *AgentResult) error { - // 1. DB Hit relations, err := dbmodels.RContentsAgents_Agent(app, id) - if err != nil && err != sql.ErrNoRows { + if err != nil { return err } @@ -158,13 +163,24 @@ func (p *AgentResult) FilterContentsByEntry(app core.App, id string, res *AgentR contentsagents := make(map[string][]*dbmodels.RContentsAgents) contentIds := []any{} + agentids := []any{} for _, r := range relations { contentIds = append(contentIds, r.Content()) + agentids = append(agentids, r.Agent()) contentsagents[r.Content()] = append(contentsagents[r.Content()], r) } res.ContentsAgents = contentsagents - // 2. DB Hit + agents, err := dbmodels.Agents_IDs(app, agentids) + if err != nil { + return err + } + aMap := make(map[string]*dbmodels.Agent, len(agents)) + for _, a := range agents { + aMap[a.Id] = a + } + res.Agents = aMap + contents, err := dbmodels.Contents_IDs(app, contentIds) if err != nil { return err @@ -178,7 +194,6 @@ func (p *AgentResult) FilterContentsByEntry(app core.App, id string, res *AgentR } res.Contents = contentMap - // 3. DB Hit entries, err := dbmodels.Entries_IDs(app, entrykeys) if err != nil { return err diff --git a/pages/personen.go b/pages/personen.go index 301dbdc..a4cb8a1 100644 --- a/pages/personen.go +++ b/pages/personen.go @@ -91,6 +91,16 @@ func (p *PersonenPage) FilterRequest(app core.App, engine *templating.Engine, e data["filter"] = filter data["letter"] = letter + bcount, err := dbmodels.CountAgentsBaende(app) + if err == nil { + data["bcount"] = bcount + } + + count, err := dbmodels.CountAgentsContents(app) + if err == nil { + data["ccount"] = count + } + letters, err := dbmodels.LettersForAgents(app, filter) if err != nil { return engine.Response404(e, err, data) @@ -132,6 +142,16 @@ func (p *PersonenPage) SearchRequest(app core.App, engine *templating.Engine, e data["agents"] = agents data["altagents"] = altagents + bcount, err := dbmodels.CountAgentsBaende(app) + if err == nil { + data["bcount"] = bcount + } + + count, err := dbmodels.CountAgentsContents(app) + if err == nil { + data["ccount"] = count + } + return p.Get(e, engine, data) } diff --git a/views/routes/components/_content.gohtml b/views/routes/components/_content.gohtml index 45b0bdb..120fd6a 100644 --- a/views/routes/components/_content.gohtml +++ b/views/routes/components/_content.gohtml @@ -16,6 +16,11 @@ {{- $singleView = index . 4 -}} {{- end -}} +{{- $entrySubView := false -}} +{{- if gt (len .) 5 -}} + {{- $entrySubView = index . 5 -}} +{{- end -}} +
{{- if not $singleView -}} @@ -41,7 +46,7 @@ +
+ {{- if (index $model.bcount $agent.Id) -}} +
+ {{ index $model.bcount $agent.Id }} +
+ {{- end -}} + {{- if index $model.ccount $agent.Id -}} +
+ {{ index $model.ccount $agent.Id }} +
+ {{- end -}} +
+
{{ $agent.References }}
diff --git a/views/routes/suche/baende/body.gohtml b/views/routes/suche/baende/body.gohtml index 38f6d66..08c2e1c 100644 --- a/views/routes/suche/baende/body.gohtml +++ b/views/routes/suche/baende/body.gohtml @@ -290,7 +290,7 @@
{{- range $_, $hit := $model.result.Hits -}} {{- $series := index $model.result.Series $hit -}} -
+
Reihe {{ $series.Title }}