1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-19 21:29:42 +02:00

Search history recording

1. Record all search queries.
2. Replaced typeahead with form style for faster search result fetch/rendering.
This commit is contained in:
McMatts 2018-03-30 20:00:24 +01:00
parent a6828e6b7f
commit b4c4decb3b
4 changed files with 77 additions and 32 deletions

View file

@ -17,6 +17,7 @@ import (
"io/ioutil"
"net/http"
"sort"
"strings"
"github.com/documize/community/core/env"
"github.com/documize/community/core/request"
@ -394,6 +395,8 @@ func (h *Handler) SearchDocuments(w http.ResponseWriter, r *http.Request) {
return
}
options.Keywords = strings.TrimSpace(options.Keywords)
results, err := h.Store.Search.Documents(ctx, options)
if err != nil {
h.Runtime.Log.Error(method, err)
@ -406,16 +409,40 @@ func (h *Handler) SearchDocuments(w http.ResponseWriter, r *http.Request) {
}
// Record user search history
go h.recordSearchActivity(ctx, results)
if len(results) > 0 {
go h.recordSearchActivity(ctx, results, options.Keywords)
} else {
ctx.Transaction, err = h.Runtime.Db.Beginx()
if err != nil {
h.Runtime.Log.Error(method, err)
return
}
err = h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{
LabelID: "",
DocumentID: "",
Metadata: options.Keywords,
SourceType: activity.SourceTypeSearch,
ActivityType: activity.TypeSearched})
if err != nil {
ctx.Transaction.Rollback()
h.Runtime.Log.Error(method, err)
}
ctx.Transaction.Commit()
}
h.Store.Audit.Record(ctx, audit.EventTypeSearch)
response.WriteJSON(w, results)
}
func (h *Handler) recordSearchActivity(ctx domain.RequestContext, q []search.QueryResult) {
// Record search request once per document.
func (h *Handler) recordSearchActivity(ctx domain.RequestContext, q []search.QueryResult, keywords string) {
method := "recordSearchActivity"
var err error
prev := make(map[string]bool)
ctx.Transaction, err = h.Runtime.Db.Beginx()
if err != nil {
@ -424,16 +451,22 @@ func (h *Handler) recordSearchActivity(ctx domain.RequestContext, q []search.Que
}
for i := range q {
err = h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{
LabelID: q[i].SpaceID,
DocumentID: q[i].DocumentID,
SourceType: activity.SourceTypeSearch,
ActivityType: activity.TypeSearched})
if _, isExisting := prev[q[i].DocumentID]; !isExisting {
err = h.Store.Activity.RecordUserActivity(ctx, activity.UserActivity{
LabelID: q[i].SpaceID,
DocumentID: q[i].DocumentID,
Metadata: keywords,
SourceType: activity.SourceTypeSearch,
ActivityType: activity.TypeSearched})
if err != nil {
ctx.Transaction.Rollback()
h.Runtime.Log.Error(method, err)
if err != nil {
ctx.Transaction.Rollback()
h.Runtime.Log.Error(method, err)
}
prev[q[i].DocumentID] = true
}
}
ctx.Transaction.Commit()