diff --git a/readme.md b/readme.md index 06ca5b7..7a409c8 100644 --- a/readme.md +++ b/readme.md @@ -9,7 +9,6 @@ mvp -* refactor cards/set to scryfall.go * refactor storage to have a storage object. * single view for card, with history * docker with local mounted volume and git ignore diff --git a/src/serra/root.go b/src/serra/root.go index 14a5c8d..56b35ad 100644 --- a/src/serra/root.go +++ b/src/serra/root.go @@ -17,7 +17,7 @@ func Add(cards []string) { LogMessage(fmt.Sprintf("Serra %v\n", version), "green") client := storage_connect() - coll := client.Database("serra").Collection("cards") + coll := &Collection{client.Database("serra").Collection("cards")} // Loop over different cards for _, card := range cards { @@ -29,7 +29,7 @@ func Add(cards []string) { } // Write card to mongodb - err = storage_add(coll, c) + err = coll.storage_add(c) if err != nil { LogMessage(fmt.Sprintf("%v", err), "red") continue @@ -45,11 +45,11 @@ func Cards() { LogMessage(fmt.Sprintf("Serra %v\n", version), "green") client := storage_connect() - coll := client.Database("serra").Collection("cards") + coll := &Collection{client.Database("serra").Collection("cards")} sort := bson.D{{"collectornumber", 1}} filter := bson.D{{}} - cards, _ := storage_find(coll, filter, sort) + cards, _ := coll.storage_find(filter, sort) for _, card := range cards { fmt.Printf("%s (%s) %.2f\n", card.Name, card.Set, card.Prices.Eur) @@ -61,7 +61,7 @@ func Sets() { LogMessage(fmt.Sprintf("Serra %v\n", version), "green") client := storage_connect() - coll := client.Database("serra").Collection("cards") + coll := &Collection{client.Database("serra").Collection("cards")} groupStage := bson.D{ {"$group", bson.D{ @@ -72,7 +72,7 @@ func Sets() { }}, } - sets, _ := storage_aggregate(coll, groupStage) + sets, _ := coll.storage_aggregate(groupStage) for _, set := range sets { fmt.Printf("* %s (%.2f Eur)\n", set["_id"], set["sum"]) } @@ -84,11 +84,11 @@ func Update() { LogMessage(fmt.Sprintf("Serra %v\n", version), "green") client := storage_connect() - coll := client.Database("serra").Collection("cards") + coll := &Collection{client.Database("serra").Collection("cards")} sort := bson.D{{"_id", 1}} filter := bson.D{{}} - cards, _ := storage_find(coll, filter, sort) + cards, _ := coll.storage_find(filter, sort) for i, card := range cards { fmt.Printf("Updating (%d/%d): %s (%s)...\n", i+1, len(cards), card.Name, card.SetName) @@ -114,7 +114,7 @@ func Update() { "$push": bson.M{"serra_prices": bson.M{"date": primitive.NewDateTimeFromTime(time.Now()), "value": updated_card.Prices.Eur}}} - storage_update(coll, filter, update) + coll.storage_update(filter, update) } storage_disconnect(client) diff --git a/src/serra/storage.go b/src/serra/storage.go index 8f1b81a..8fcdffd 100644 --- a/src/serra/storage.go +++ b/src/serra/storage.go @@ -12,6 +12,11 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) +// https://siongui.github.io/2017/02/11/go-add-method-function-to-type-in-external-package/ +type Collection struct { + *mongo.Collection +} + func storage_connect() *mongo.Client { uri := os.Getenv("MONGODB_URI") @@ -27,7 +32,7 @@ func storage_connect() *mongo.Client { return client } -func storage_add(coll *mongo.Collection, card *Card) error { +func (coll Collection) storage_add(card *Card) error { card.SerraUpdated = primitive.NewDateTimeFromTime(time.Now()) @@ -39,7 +44,7 @@ func storage_add(coll *mongo.Collection, card *Card) error { } -func storage_find(coll *mongo.Collection, filter, sort bson.D) ([]Card, error) { +func (coll Collection) storage_find(filter, sort bson.D) ([]Card, error) { opts := options.Find().SetSort(sort) cursor, err := coll.Find(context.TODO(), filter, opts) @@ -56,7 +61,7 @@ func storage_find(coll *mongo.Collection, filter, sort bson.D) ([]Card, error) { } -func storage_aggregate(coll *mongo.Collection, groupstage bson.D) ([]primitive.M, error) { +func (coll Collection) storage_aggregate(groupstage bson.D) ([]primitive.M, error) { // db.cards.aggregate([ {$group: { _id: "$setname", sum: { $sum: "$prices.eur"}}}]) opts := options.Aggregate().SetMaxTime(2 * time.Second) @@ -78,7 +83,7 @@ func storage_aggregate(coll *mongo.Collection, groupstage bson.D) ([]primitive.M } -func storage_update(coll *mongo.Collection, filter, update bson.M) error { +func (coll Collection) storage_update(filter, update bson.M) error { // Call the driver's UpdateOne() method and pass filter and update to it _, err := coll.UpdateOne(