diff calsync/mongoclient/cals_collection.go @ 50:dade5bbd02e3

refactor
author drewp@bigasterisk.com
date Mon, 19 Aug 2024 13:37:05 -0700
parents
children a9b720445bcf
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calsync/mongoclient/cals_collection.go	Mon Aug 19 13:37:05 2024 -0700
@@ -0,0 +1,80 @@
+package mongoclient
+
+import (
+	"log"
+
+	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/mongo/options"
+)
+
+// docs in calsCollection
+type MongoCal struct {
+	Url         string `bson:"_id"` // bigasterisk.com/...
+	GoogleId    string `bson:"googleId"`
+	Summary     string `bson:"summary"`
+	Description string `bson:"description"`
+}
+
+func (c *MongoClient) GetAllCals() ([]MongoCal, error) {
+	cur, err := c.calsCollection.Find(c.ctx, bson.D{})
+	if err != nil {
+		return nil, err
+	}
+	defer cur.Close(c.ctx)
+
+	var cals []MongoCal
+	for cur.Next(c.ctx) {
+		var cal MongoCal
+		if err := cur.Decode(&cal); err != nil {
+			return nil, err
+		}
+		cals = append(cals, cal)
+	}
+	return cals, nil
+}
+
+func (c *MongoClient) GetOneCal(calId string) (MongoCal, error) {
+	res := c.calsCollection.FindOne(c.ctx, bson.M{"_id": calId})
+	var cal MongoCal
+	err := res.Decode(&cal)
+	return cal, err
+}
+
+func (c *MongoClient) UpsertOneCal(cal MongoCal) error {
+	filter := bson.M{"_id": cal.Url}
+	update := bson.M{"$set": cal}
+	_, err := c.calsCollection.UpdateOne(c.ctx, filter, update,
+		options.Update().SetUpsert(true))
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func (c *MongoClient) DeleteCalsNotInSet(urlsToKeep map[string]bool) error {
+	curs, err := c.calsCollection.Find(c.ctx, bson.M{})
+	if err != nil {
+		return err
+	}
+	defer curs.Close(c.ctx)
+
+	for curs.Next(c.ctx) {
+		var doc bson.M
+		err = curs.Decode(&doc)
+		if err != nil {
+			return err
+		}
+		calUrl, ok := doc["_id"].(string)
+		if !ok {
+			continue
+		}
+		if !urlsToKeep[calUrl] {
+			log.Println("  cleaning up", calUrl)
+			_, err = c.calsCollection.DeleteOne(c.ctx, bson.M{"_id": doc["_id"]})
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return curs.Err()
+}