Add history of modifications
This commit is contained in:
parent
e732909773
commit
6993fcb9e8
3 changed files with 17 additions and 32 deletions
1
admin.go
1
admin.go
|
@ -99,6 +99,7 @@ func saveHandler(h handler) {
|
||||||
"lang": lang}
|
"lang": lang}
|
||||||
err := h.db.UpdateBook(id, book)
|
err := h.db.UpdateBook(id, book)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("Updating book: ", err)
|
||||||
notFound(h)
|
notFound(h)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
log "github.com/cihub/seelog"
|
log "github.com/cihub/seelog"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"gopkg.in/mgo.v2"
|
"gopkg.in/mgo.v2"
|
||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
|
@ -38,6 +39,11 @@ type Book struct {
|
||||||
BadQualityReporters []string `bad_quality_reporters`
|
BadQualityReporters []string `bad_quality_reporters`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type history struct {
|
||||||
|
Date time.Time
|
||||||
|
Changes bson.M
|
||||||
|
}
|
||||||
|
|
||||||
func indexBooks(coll *mgo.Collection) {
|
func indexBooks(coll *mgo.Collection) {
|
||||||
indexes := []mgo.Index{
|
indexes := []mgo.Index{
|
||||||
{
|
{
|
||||||
|
@ -119,18 +125,22 @@ func deleteBook(coll *mgo.Collection, id string) error {
|
||||||
|
|
||||||
func updateBook(coll *mgo.Collection, id string, data map[string]interface{}) error {
|
func updateBook(coll *mgo.Collection, id string, data map[string]interface{}) error {
|
||||||
var book map[string]interface{}
|
var book map[string]interface{}
|
||||||
|
record := history{time.Now(), bson.M{}}
|
||||||
|
|
||||||
err := coll.Find(bson.M{"id": id}).One(&book)
|
err := coll.Find(bson.M{"id": id}).One(&book)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for k, v := range data {
|
for k, _ := range data {
|
||||||
book[k] = v
|
record.Changes[k] = book[k]
|
||||||
|
if k == "lang" {
|
||||||
|
if lang := metadataLang(data); lang != "" {
|
||||||
|
data["_lang"] = lang
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if lang := metadataLang(book); lang != "" {
|
return coll.Update(bson.M{"id": id}, bson.M{"$set": data, "$push": bson.M{"history": record}})
|
||||||
data["_lang"] = lang
|
|
||||||
}
|
|
||||||
return coll.Update(bson.M{"id": id}, bson.M{"$set": data})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagBadQuality(coll *mgo.Collection, id string, user string) error {
|
func flagBadQuality(coll *mgo.Collection, id string, user string) error {
|
||||||
|
|
|
@ -51,32 +51,6 @@ func TestActiveBook(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateBookKeywords(t *testing.T) {
|
|
||||||
db := Init(test_host, test_coll)
|
|
||||||
defer db.del()
|
|
||||||
|
|
||||||
tAddBook(t, db)
|
|
||||||
books, _, _ := db.GetNewBooks(1, 0)
|
|
||||||
|
|
||||||
db.UpdateBook(books[0].Id, map[string]interface{}{"title": "Some other title"})
|
|
||||||
books, _, _ = db.GetNewBooks(1, 0)
|
|
||||||
keywords := books[0].Keywords
|
|
||||||
|
|
||||||
alice := false
|
|
||||||
bob := false
|
|
||||||
for _, e := range keywords {
|
|
||||||
if e == "alice" {
|
|
||||||
alice = true
|
|
||||||
}
|
|
||||||
if e == "bob" {
|
|
||||||
bob = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !alice || !bob {
|
|
||||||
t.Error("Alce or Bob are not in the keywords:", keywords)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFlag(t *testing.T) {
|
func TestFlag(t *testing.T) {
|
||||||
db := Init(test_host, test_coll)
|
db := Init(test_host, test_coll)
|
||||||
defer db.del()
|
defer db.del()
|
||||||
|
|
Reference in a new issue