removal of cards

This commit is contained in:
Florian Baumann 2022-01-04 15:19:53 +01:00
parent c002fbafce
commit e207f4fbd4
4 changed files with 67 additions and 4 deletions

View File

@ -13,6 +13,7 @@ func main() {
Usage: Usage:
serra add <card>... serra add <card>...
serra remove <card>...
serra cards serra cards
serra set <set> serra set <set>
serra sets serra sets
@ -28,6 +29,8 @@ Options:
if args["add"].(bool) { if args["add"].(bool) {
serra.Add(args["<card>"].([]string)) serra.Add(args["<card>"].([]string))
} else if args["remove"].(bool) {
serra.Remove(args["<card>"].([]string))
} else if args["cards"].(bool) { } else if args["cards"].(bool) {
serra.Cards() serra.Cards()
} else if args["sets"].(bool) { } else if args["sets"].(bool) {

View File

@ -1,12 +1,14 @@
package serra package serra
import ( import (
"errors"
"fmt" "fmt"
"strconv"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
) )
func increase_count_of_card(coll *Collection, c *Card) error { func modify_count_of_card(coll *Collection, c *Card, amount int64) error {
// find already existing card // find already existing card
sort := bson.D{{"_id", 1}} sort := bson.D{{"_id", 1}}
@ -20,10 +22,27 @@ func increase_count_of_card(coll *Collection, c *Card) error {
// update card amount // update card amount
update_filter := bson.M{"_id": bson.M{"$eq": c.ID}} update_filter := bson.M{"_id": bson.M{"$eq": c.ID}}
update := bson.M{ update := bson.M{
"$set": bson.M{"serra_count": stored_card.SerraCount + 1}, "$set": bson.M{"serra_count": stored_card.SerraCount + amount},
} }
coll.storage_update(update_filter, update) coll.storage_update(update_filter, update)
LogMessage(fmt.Sprintf("Updating Card \"%s\" amount to %d", stored_card.Name, stored_card.SerraCount+1), "purple") LogMessage(fmt.Sprintf("Updating Card \"%s\" amount to %d", stored_card.Name, stored_card.SerraCount+amount), "purple")
return nil return nil
} }
func find_card_by_setcollectornumber(coll *Collection, setcode string, collectornumber string) (*Card, error) {
sort := bson.D{{"_id", 1}}
c, _ := strconv.ParseInt(collectornumber, 10, 64)
search_filter := bson.D{{"set", setcode}, {"collectornumber", c}}
stored_cards, err := coll.storage_find(search_filter, sort)
if err != nil {
return &Card{}, err
}
if len(stored_cards) < 1 {
return &Card{}, errors.New("Card not found")
}
return &stored_cards[0], nil
}

View File

@ -2,6 +2,7 @@ package serra
import ( import (
"fmt" "fmt"
"strings"
"time" "time"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
@ -34,7 +35,7 @@ func Add(cards []string) {
// If duplicate key, increase count of card // If duplicate key, increase count of card
if mongo.IsDuplicateKeyError(err) { if mongo.IsDuplicateKeyError(err) {
increase_count_of_card(coll, c) modify_count_of_card(coll, c, 1)
continue continue
} }
@ -50,6 +51,35 @@ func Add(cards []string) {
storage_disconnect(client) storage_disconnect(client)
} }
// Remove
func Remove(cards []string) {
LogMessage(fmt.Sprintf("Serra %v\n", version), "green")
client := storage_connect()
coll := &Collection{client.Database("serra").Collection("cards")}
// Loop over different cards
for _, card := range cards {
// Fetch card from scryfall
c, err := find_card_by_setcollectornumber(coll, strings.Split(card, "/")[0], strings.Split(card, "/")[1])
if err != nil {
LogMessage(fmt.Sprintf("%v", err), "red")
continue
}
if c.SerraCount > 1 {
// update
modify_count_of_card(coll, c, -1)
} else {
coll.storage_remove(bson.M{"_id": c.ID})
LogMessage(fmt.Sprintf("\"%s\" (%.2f Eur) removed from the Collection.", c.Name, c.Prices.Eur), "green")
}
// delete
}
storage_disconnect(client)
}
func Cards() { func Cards() {
LogMessage(fmt.Sprintf("Serra %v\n", version), "green") LogMessage(fmt.Sprintf("Serra %v\n", version), "green")

View File

@ -61,6 +61,17 @@ func (coll Collection) storage_find(filter, sort bson.D) ([]Card, error) {
} }
func (coll Collection) storage_remove(filter bson.M) error {
_, err := coll.DeleteOne(context.TODO(), filter)
if err != nil {
log.Fatal(err)
return err
}
return nil
}
func (coll Collection) storage_aggregate(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"}}}]) // db.cards.aggregate([ {$group: { _id: "$setname", sum: { $sum: "$prices.eur"}}}])