Extend search stats to fully populate search menu

Refs: #856
This commit is contained in:
eikek
2021-10-05 13:50:31 +02:00
parent e961a5ac10
commit 813797756c
8 changed files with 167 additions and 8 deletions

View File

@ -0,0 +1,5 @@
package docspell.store.queries
import docspell.common._
final case class IdRefCount(ref: IdRef, count: Int) {}

View File

@ -192,7 +192,21 @@ object QItem {
cats <- searchTagCategorySummary(today)(q)
fields <- searchFieldSummary(today)(q)
folders <- searchFolderSummary(today)(q)
} yield SearchSummary(count, tags, cats, fields, folders)
orgs <- searchCorrOrgSummary(today)(q)
corrPers <- searchCorrPersonSummary(today)(q)
concPers <- searchConcPersonSummary(today)(q)
concEquip <- searchConcEquipSummary(today)(q)
} yield SearchSummary(
count,
tags,
cats,
fields,
folders,
orgs,
corrPers,
concPers,
concEquip
)
def searchTagCategorySummary(
today: LocalDate
@ -251,6 +265,40 @@ object QItem {
.query[Int]
.unique
def searchCorrOrgSummary(today: LocalDate)(q: Query): ConnectionIO[List[IdRefCount]] =
searchIdRefSummary(org.oid, org.name, i.corrOrg, today)(q)
def searchCorrPersonSummary(today: LocalDate)(
q: Query
): ConnectionIO[List[IdRefCount]] =
searchIdRefSummary(pers0.pid, pers0.name, i.corrPerson, today)(q)
def searchConcPersonSummary(today: LocalDate)(
q: Query
): ConnectionIO[List[IdRefCount]] =
searchIdRefSummary(pers1.pid, pers1.name, i.concPerson, today)(q)
def searchConcEquipSummary(today: LocalDate)(
q: Query
): ConnectionIO[List[IdRefCount]] =
searchIdRefSummary(equip.eid, equip.name, i.concEquipment, today)(q)
private def searchIdRefSummary(
idCol: Column[Ident],
nameCol: Column[String],
fkCol: Column[Ident],
today: LocalDate
)(q: Query): ConnectionIO[List[IdRefCount]] =
findItemsBase(q.fix, today, 0).unwrap
.withSelect(select(idCol, nameCol).append(count(idCol).as("num")))
.changeWhere(c =>
c && fkCol.isNotNull && queryCondition(today, q.fix.account.collective, q.cond)
)
.groupBy(idCol, nameCol)
.build
.query[IdRefCount]
.to[List]
def searchFolderSummary(today: LocalDate)(q: Query): ConnectionIO[List[FolderCount]] = {
val fu = RUser.as("fu")
findItemsBase(q.fix, today, 0).unwrap

View File

@ -11,7 +11,11 @@ case class SearchSummary(
tags: List[TagCount],
cats: List[CategoryCount],
fields: List[FieldStats],
folders: List[FolderCount]
folders: List[FolderCount],
corrOrgs: List[IdRefCount],
corrPers: List[IdRefCount],
concPers: List[IdRefCount],
concEquip: List[IdRefCount]
) {
def onlyExisting: SearchSummary =
@ -20,6 +24,10 @@ case class SearchSummary(
tags.filter(_.count > 0),
cats.filter(_.count > 0),
fields.filter(_.count > 0),
folders.filter(_.count > 0)
folders.filter(_.count > 0),
corrOrgs = corrOrgs.filter(_.count > 0),
corrPers = corrPers.filter(_.count > 0),
concPers = concPers.filter(_.count > 0),
concEquip = concEquip.filter(_.count > 0)
)
}