Mercurial > code > home > repos > gcalendarwatch
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() +}