combine multiple post info in DataStore.Info instead of returning first
Previously, only the first one was returned for site-wide requests, and now all returned information will be correctly aggregated, and the PostInfo.URL and PostInfo.ReadOnly parameters will be dropped.
This commit is contained in:
committed by
Umputun
parent
307866f7f5
commit
618c267370
@@ -45,9 +45,9 @@ type Edit struct {
|
||||
|
||||
// PostInfo holds summary for given post url
|
||||
type PostInfo struct {
|
||||
URL string `json:"url"`
|
||||
URL string `json:"url,omitempty"` // can be attached to site-wide comments but won't be set then
|
||||
Count int `json:"count"`
|
||||
ReadOnly bool `json:"read_only,omitempty" bson:"read_only,omitempty"`
|
||||
ReadOnly bool `json:"read_only,omitempty" bson:"read_only,omitempty"` // can be attached to site-wide comments but won't be set then
|
||||
FirstTS time.Time `json:"first_time,omitempty" bson:"first_time,omitempty"`
|
||||
LastTS time.Time `json:"last_time,omitempty" bson:"last_time,omitempty"`
|
||||
}
|
||||
@@ -98,6 +98,7 @@ func (c *Comment) SetDeleted(mode DeleteMode) {
|
||||
c.Text = ""
|
||||
c.Orig = ""
|
||||
c.Score = 0
|
||||
c.Controversy = 0
|
||||
c.Votes = map[string]bool{}
|
||||
c.VotedIPs = make(map[string]VotedIPInfo)
|
||||
c.Edit = nil
|
||||
|
||||
@@ -754,7 +754,23 @@ func (s *DataStore) Info(locator store.Locator, readonlyAge int) (store.PostInfo
|
||||
if len(res) == 0 {
|
||||
return store.PostInfo{}, fmt.Errorf("post %+v not found", locator)
|
||||
}
|
||||
return res[0], nil
|
||||
// URL request
|
||||
if locator.URL != "" {
|
||||
return res[0], nil
|
||||
}
|
||||
// site-wide request which returned multiple store.PostInfo, so that URL and ReadOnly flags don't make sense
|
||||
var info store.PostInfo
|
||||
for _, i := range res {
|
||||
info.Count += i.Count
|
||||
if info.FirstTS.IsZero() || i.FirstTS.Before(info.FirstTS) {
|
||||
info.FirstTS = i.FirstTS
|
||||
}
|
||||
if info.LastTS.IsZero() || i.LastTS.After(info.LastTS) {
|
||||
info.LastTS = i.LastTS
|
||||
}
|
||||
}
|
||||
return info, nil
|
||||
|
||||
}
|
||||
|
||||
// Delete comment by id
|
||||
|
||||
Reference in New Issue
Block a user