From c910f6a2d2254cb348c46bef8aceb3bced8bae43 Mon Sep 17 00:00:00 2001 From: Florian Baumann Date: Mon, 3 Jan 2022 13:00:25 +0100 Subject: [PATCH] duplication detection --- src/serra/helpers.go | 29 +++++++++++++++++++++++++++++ src/serra/root.go | 13 +++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/serra/helpers.go diff --git a/src/serra/helpers.go b/src/serra/helpers.go new file mode 100644 index 0000000..7968a30 --- /dev/null +++ b/src/serra/helpers.go @@ -0,0 +1,29 @@ +package serra + +import ( + "fmt" + + "go.mongodb.org/mongo-driver/bson" +) + +func increase_count_of_card(coll *Collection, c *Card) error { + + // find already existing card + sort := bson.D{{"_id", 1}} + search_filter := bson.D{{"_id", c.ID}} + stored_cards, err := coll.storage_find(search_filter, sort) + if err != nil { + return err + } + stored_card := stored_cards[0] + + // update card amount + update_filter := bson.M{"_id": bson.M{"$eq": c.ID}} + update := bson.M{ + "$set": bson.M{"serra_count": stored_card.SerraCount + 1}, + } + coll.storage_update(update_filter, update) + + LogMessage(fmt.Sprintf("Updating Card \"%s\" amount to %d", stored_card.Name, stored_card.SerraCount), "purple") + return nil +} diff --git a/src/serra/root.go b/src/serra/root.go index 56b35ad..c3a01e8 100644 --- a/src/serra/root.go +++ b/src/serra/root.go @@ -6,6 +6,7 @@ import ( "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" ) const ( @@ -30,15 +31,23 @@ func Add(cards []string) { // Write card to mongodb err = coll.storage_add(c) + + // If duplicate key, increase count of card + if mongo.IsDuplicateKeyError(err) { + increase_count_of_card(coll, c) + continue + } + + // If error, print error and continue if err != nil { LogMessage(fmt.Sprintf("%v", err), "red") continue } - LogMessage(fmt.Sprintf("\"%s\" (%.2f Eur) added to Collection.", c.Name, c.Prices.Eur), "purple") + // Give feedback of successfully added card + LogMessage(fmt.Sprintf("\"%s\" (%.2f Eur) added to Collection.", c.Name, c.Prices.Eur), "green") } storage_disconnect(client) - } func Cards() {