refactor storage

This commit is contained in:
Florian Baumann 2022-01-03 11:21:11 +01:00
parent 665b7a6793
commit f408381266
3 changed files with 18 additions and 14 deletions

View File

@ -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

View File

@ -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)

View File

@ -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(