diff --git a/database/books.go b/database/books.go index 8229546..5ee69f0 100644 --- a/database/books.go +++ b/database/books.go @@ -16,28 +16,29 @@ const ( ) type Book struct { - Id string - Title string - Author []string - Contributor string - Publisher string - Description string - Subject []string - Date string - Lang []string - Isbn string - Type string - Format string - Source string - Relation string - Coverage string - Rights string - Meta string - FileSize int - Cover bool - Active bool - BadQuality int `bad_quality` - Keywords []string + Id string + Title string + Author []string + Contributor string + Publisher string + Description string + Subject []string + Date string + Lang []string + Isbn string + Type string + Format string + Source string + Relation string + Coverage string + Rights string + Meta string + FileSize int + Cover bool + Active bool + BadQuality int `bad_quality` + BadQualityReporters []string `bad_quality_reporters` + Keywords []string } func indexBooks(coll *mgo.Collection) { @@ -132,8 +133,24 @@ func updateBook(coll *mgo.Collection, id string, data map[string]interface{}) er return coll.Update(bson.M{"id": id}, bson.M{"$set": data}) } -func flagBadQuality(coll *mgo.Collection, id string) error { - return coll.Update(bson.M{"id": id}, bson.M{"$inc": bson.M{"bad_quality": 1}}) +func flagBadQuality(coll *mgo.Collection, id string, user string) error { + b, err := getBookId(coll, id) + if err != nil { + return err + } + + for _, reporter := range b.BadQualityReporters { + if reporter == user { + return nil + } + } + return coll.Update( + bson.M{"id": id}, + bson.M{ + "$inc": bson.M{"bad_quality": 1}, + "$addToSet": bson.M{"bad_quality_reporters": user}, + }, + ) } func activeBook(coll *mgo.Collection, id string) error { diff --git a/database/books_test.go b/database/books_test.go index 7b259cf..227a897 100644 --- a/database/books_test.go +++ b/database/books_test.go @@ -101,9 +101,9 @@ func TestFlag(t *testing.T) { } db.ActiveBook(id3) - db.FlagBadQuality(id) - db.FlagBadQuality(id) - db.FlagBadQuality(id3) + db.FlagBadQuality(id, "1") + db.FlagBadQuality(id, "2") + db.FlagBadQuality(id3, "1") b, _ := db.GetBookId(id) if b.BadQuality != 2 { diff --git a/database/database.go b/database/database.go index 172967e..75a0ae4 100644 --- a/database/database.go +++ b/database/database.go @@ -85,9 +85,9 @@ func (db *DB) UpdateBook(id string, data map[string]interface{}) error { return updateBook(booksColl, id, data) } -func (db *DB) FlagBadQuality(id string) error { +func (db *DB) FlagBadQuality(id string, user string) error { booksColl := db.session.DB(db.name).C(books_coll) - return flagBadQuality(booksColl, id) + return flagBadQuality(booksColl, id, user) } func (db *DB) ActiveBook(id string) error { diff --git a/templates/book.html b/templates/book.html index 71c6037..6fdaed2 100644 --- a/templates/book.html +++ b/templates/book.html @@ -1,6 +1,7 @@ {{template "header.html" .S}} {{$isAdmin := .S.IsAdmin}} +{{$flaggedBadQuality := .FlaggedBadQuality}} {{with .Book}}